Archives for category: frickelig

Fürs Bloggen brauch ich immer ewig. Vor allem Bilder Aufbereiten frisst dabei unheimlich Zeit. Macht man das mit Gimp oder ähnlichem wird man drüber adelig. Und man macht dabei eigentlich jedes Mal das Selbe: Bild skalieren, schärfen, benennen – und eventuell nochmal ’ne größere Version davon mit dem Selben Spielchen. Jaja, ich könnts auch WordPress machen lassen. Unterwegs mit UMTS kommt es aber eher nicht so gut, 10 MP-Bilder hochzuladen. Der Traffic kostet, mein Volumen beträgt gerade mal 150 MB pro Monat – ich bin halt geizig.

Wenn man eh immer das Selbe macht, könnte das doch auch der Rechner selber machen, oder? Zeit für ein Bash-Script! Das hab ich schon vor fast drei Jahren gedacht und mir einen kleinen Helfer gebastelt und getauft: IMG-Helpr. Das Ding war hemdsärmelig zusammengebappt:

  • Imagemagicks display zeigt eine Vorschau des Bildes,
  • Zenity zeigt grafische Dialoge für die Frage nach dem Namen, der eventuellen Drehung und ob man ne große Version zum Verlinken will und
  • Imagemagicks convert skaliert das Bildchen dann.

Sieht dann so aus (habich montiert, die Dialoge kommen natürlich nacheinander).Sowas zu schreiben ist recht unkompliziert, wenn man das auf dem eigenen Rechner benutzt. Will man so ein Script aber auf Fremde loslassen, muss man um alles herumprogrammieren. Man glaubt nicht, was Anwender sich an Dreistigkeiten ausdenken können! Dateinamen mit Leerzeichen zum Beispiel. Deswegen hab ich das Teil heute mal etwas zivilisiert und forsch Version 0.1 behauptet. Jetzt erstmal viel Spaß mit meinem kleinen Blogger-Helferlein IMG-Helpr. Über so ein paar Detaillösungen schwatze ich später mal in diesem Blog.

(swg)

Wie man deb-Pakete anpasst.

Marias Tablet hat einen toten Akku, ist also derzeit nicht zum Geocachen zu gebrauchen. Muss also der kleine eeePC wieder dafür herhalten. Nun ist geocachen mit FoxtrotGPS und offenem Browser daneben etwas umständlich. Für Android gibt es einige Apps – aber gibts auch was für Linux?

Ja, gibt es: OCM OpenCacheManager. Leider sind die fertigen Pakete nur für Ubuntu gedacht. Da ist eine Abhängigkeit drin, die die Installation unter Debian verhindert, der sog. „ubuntu-system-service“. Dabei handelt es sich um Dbus. Unter Debian heißt das Paket mit DBus auch so: dbus. Ich hab es mir daraufhin einfach gemacht und einfach die Abhängigkeiten im opencachemanager-Paket geändert, sprich die ubuntu-system-service rausgeschmissen.

Im Prinzip geht das so:

  • Man entpackt das deb-Paket,
  • extrahiert die Control-informationen,
  • ändert die Control-Datei und
  • lässt das Paket wieder zusammenbauen.

Anschließend sollte sich das Paket installieren lassen. Bei mir sah das nun folgendermaßen aus:
Erstmal hab ich mir hier das aktuelle OCM-deb-Paket für Ubuntu runtergeladen. In einem Terminal bin ich root geworden, hab ein Verzeichnis zum Entpacken angelegt und hab dahinein das Paket ausgepackt:

root@Sesta:/# cd /root
root@Sesta:/root# mkdir ./ocm
root@Sesta:/root# cp $VONWOAUCHIMMER/opencachemanager_1.0.14-1_all.deb /root/
root@Sesta:/root# dpkg-deb -x ./opencachemanager_1.0.14-1_all.deb ./ocm/
root@Sesta:/root# dpkg-deb -e ./opencachemanager_1.0.14-1_all.deb ./ocm/DEBIAN
root@Sesta:/root# nano ./ocm/DEBIAN/control

Im Editor suchen wir jetzt die Zeile, die mit Depends beginnt:

Depends: libmono-system2.0-cil, libwebkit1.1-cil, libmono-sqlite2.0-cil, gpsbabel, libgtk2.0-cil, libndesk-dbus1.0-cil, libgconf2.0-cil, ubuntu-system-service, libndesk-dbus-glib1.0-cil, librsvg2-common, libmono-system-web2.0-cil, libmono-cairo2.0-cil, libmono-system-web4.0-cil, libmono-system-data4.0-cil

Das fett markierte löschen wir und speichern die Datei. Jetzt brauchen wir nur noch das Paket zusammenzubauen und zu installieren.
root@Sesta:/root# dpkg-deb -b ./ocm opencachemanager_1.0.14-1_all_debian.deb
dpkg-deb: Paket »opencachemanager« wird in »opencachemanager_1.0.14-1_all_debian.deb« gebaut.
root@Sesta:/root# dpkg -i ./opencachemanager_1.0.14-1_all_debian.deb
Vormals nicht ausgewähltes Paket opencachemanager wird gewählt.
(Lese Datenbank … 161432 Dateien und Verzeichnisse sind derzeit installiert.)
Entpacken von opencachemanager (aus …/opencachemanager_1.0.14-1_all_debian.deb) …
dpkg: Abhängigkeitsprobleme verhindern Konfiguration von opencachemanager:
opencachemanager hängt ab von libwebkit1.1-cil; aber:
Paket libwebkit1.1-cil ist nicht installiert.
opencachemanager hängt ab von libgtk2.0-cil; aber:
Paket libgtk2.0-cil ist nicht installiert.
opencachemanager hängt ab von libndesk-dbus1.0-cil; aber:
Paket libndesk-dbus1.0-cil ist nicht installiert.
opencachemanager hängt ab von libgconf2.0-cil; aber:
Paket libgconf2.0-cil ist nicht installiert.
opencachemanager hängt ab von libndesk-dbus-glib1.0-cil; aber:
Paket libndesk-dbus-glib1.0-cil ist nicht installiert.
opencachemanager hängt ab von libmono-system-web2.0-cil; aber:
Paket libmono-system-web2.0-cil ist nicht installiert.
opencachemanager hängt ab von libmono-cairo2.0-cil; aber:
Paket libmono-cairo2.0-cil ist nicht installiert.
opencachemanager hängt ab von libmono-system-web4.0-cil; aber:
Paket libmono-system-web4.0-cil ist nicht installiert.
opencachemanager hängt ab von libmono-system-data4.0-cil;
dpkg: Fehler beim Bearbeiten von opencachemanager (–install):
Abhängigkeitsprobleme – verbleibt unkonfiguriert
Trigger für desktop-file-utils werden verarbeitet …
Trigger für gnome-menus werden verarbeitet …
Trigger für mime-support werden verarbeitet …
Trigger für shared-mime-info werden verarbeitet …
Fehler traten auf beim Bearbeiten von:
opencachemanager

Offenbar fehlt noch bissel was. Es lässt sich einfach erzwingen, dass das Fehlende installiert wird:
root@Sesta:/root# apt-get install -f
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen…. Fertig
Abhängigkeiten werden korrigiert … Fertig
Die folgenden zusätzlichen Pakete werden installiert:
libgconf2.0-cil libgtk2.0-cil libmono-cairo2.0-cil libmono-cairo4.0-cil libmono-data-tds4.0-cil libmono-messaging2.0-cil libmono-sharpzip2.84-cil libmono-sqlite4.0-cil libmono-system-core4.0-cil libmono-system-data-linq2.0-cil libmono-system-data4.0-cil
libmono-system-enterpriseservices4.0-cil libmono-system-messaging2.0-cil libmono-system-transactions4.0-cil libmono-system-web-applicationservices4.0-cil libmono-system-web-services4.0-cil libmono-system-web2.0-cil libmono-system-web4.0-cil libmono-wcf3.0-cil
libmono-web4.0-cil libmono2.0-cil libndesk-dbus-glib1.0-cil libndesk-dbus1.0-cil libwebkit1.1-cil
Vorgeschlagene Pakete:
monodoc-gtk2.0-manual libmono-winforms2.0-cil monodoc-webkit-manual
Die folgenden NEUEN Pakete werden installiert:
libgconf2.0-cil libgtk2.0-cil libmono-cairo2.0-cil libmono-cairo4.0-cil libmono-data-tds4.0-cil libmono-messaging2.0-cil libmono-sharpzip2.84-cil libmono-sqlite4.0-cil libmono-system-core4.0-cil libmono-system-data-linq2.0-cil libmono-system-data4.0-cil
libmono-system-enterpriseservices4.0-cil libmono-system-messaging2.0-cil libmono-system-transactions4.0-cil libmono-system-web-applicationservices4.0-cil libmono-system-web-services4.0-cil libmono-system-web2.0-cil libmono-system-web4.0-cil libmono-wcf3.0-cil
libmono-web4.0-cil libmono2.0-cil libndesk-dbus-glib1.0-cil libndesk-dbus1.0-cil libwebkit1.1-cil
0 aktualisiert, 24 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
1 nicht vollständig installiert oder entfernt.
Es müssen noch 4.302 kB von 5.308 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 16,3 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]

Ein beherztes [Enter] erledigt unsere Probleme. Aufräumen sollte man im /root-Verzeichnis noch:
root@Sesta:/root# rm -r ./ocm

OCM sollte sich im Desktop-Anwendungs-Menü bei „Sonstige“ finden. Viel Spaß damit!

(swg)

Es war eine Schnappsidee, ein bisschen aus einer Laune heraus geboren: Ein Kinder-Einkaufswagen für Alina. Hinten im Hof hat sie immer versucht ihr Puky Wutsch am Lenker herumzuschieben. Das Ding fährt dann aber überall hin, nur nicht dahin, wo sie will – und das gibt Tränen. Klar hätte es auch ein Puppenwagen sein können. Eine Puppe oder einen Teddy kann man in einen Einkaufswagen genauso setzen und es passt noch Ball, Sandspielzeug und dergleichen Krempel rein. Also: Einkaufswagen ist cooler.

Im Baumarkt hab ich alles gefunden, was ich brauch: Zwei Platten 6 mm starkes Buche-Sperrholz auf 60 cm x 40 cm zugesägt, zwei 25er Rundstäbe á 1 m ebenfalls in Buche, eine rechteckige Leiste 9x20mm 240 cm lang und vier Rollen (zwei fest, zwei gelenkt). Als Gitter nehm‘ ich 12er Nagerdraht, davon hab ich noch einen Rest vom Mausheimbau.

So sieht der Plan erstmal aus:

Die beiden 6 mm-Platten hab ich miteinander verschraubt und zusammen ausgesägt, das spart Arbeit.

Die Oberfräse im Bild brauch ich gleich noch: Innen hab ich für die Seitengitter Absätze gefräst, damit der Nagerdraht nirgends spitz überstehen kann.

Am Fahrgestell sind aus Resten (Vater baut gerade aus Buche-Leimholz seine Wohnzimmermöbel) dicke Leisten verklebt – da werden die Rollen drunter geschraubt. Quer gibt es noch zwei Leisten, damit das Fahrwerk nicht auseinander geigt. Wie bei einem richtigen Einkaufskorb soll unten auch was reingelegt werden können, da kommt auch ein Gitter rein. Damit das keine scharfen Kanten hat, sind in die Querleisten Nuten gefräst, in denen das Gitter endet.

Für die Coolness des Einkaufswagen verjüngt der sich natürlich nach vorn, wie ein echter. Von 31 cm hinten auf 26 cm vorn. Der Winkel beträgt ca. 2°. Messen und rechnen kann man viel, das geht eh schief – hier im wahrsten Sinne des Wortes. Die hintere Querleiste des Fahrwerks habe ich noch ca. gemessen – ca. 30 cm – und eingeklebt. Alle anderen Leisten habe ich dann ungefähr aber etwas zu lang angezeichnet. Anschließend habe ich mit der Tischkreissäge so lange etwas „abgehaucht“, bis sie passten.

Die Gitter des Korbs oben enden aus dem selben Grund in Nuten, wie das im Boden, die Querleisten hier sind aber aus dem Rundstab. Den einen Meterstab hab ich direkt komplett mit der Kreissäge geschlitzt. Damit das nicht krumm und schief endet, habe ich vorn und hinten rechteckige Sperrholzreste angeschraubt, als Orientierung auf dem Sägetisch.

Beim Verleimen zeigte sich dann, dass der Holzkaltleim allein auf den kleinen Stirnflächen der Querleisten die Karre wohl nicht zusammenhält. Die Rückwand des Wagens wird deswegen nicht aus Drahtgitter, sondern einer Platte 8 mm starkem Buche-Sperrholz – also nochmal in den Baumarkt. Zusätzlich habe ich alle für die Stabilität wichtigen Leisten mit 3×20 mm Torx verschraubt.

Wozu brauch ich die 9×20 Bucheleisten? Die sind an den Seitenwänden angeklebt, dort werden später die Gitter festgetackert.

In Holz kann ich das Ding nicht lassen, da muss Farbe drauf, rote Beize ist super.

Wasserfest muss es auch werden. Arbeitsplattenöl scheint hier die einzige Möglichkeit zu sein, damit sich Alina nicht vergiftet, wenn sie doch mal am Wagen lutscht. Etwas ärgerlich ist das wegen der langen Zwischentrocknungszeiten (16-24 Stunden) und der noch viel längeren Endtrockenphase (7-10 Tage!!). Da muss meine Schnecke wohl warten.

Den Sitzmechanismus hab ich mir auch erst hinterher überlegt – besonders die Scharniere für die Sitzfläche und die Lehne unten waren von mir nicht ganz zuende gedacht. Zum Schluss hab ich es simpel gelöst, mit Einschraub-Ösen. Ich fahr gern in den Baumarkt. Und oft. Die Lehne hat unten auf beiden Seiten Ösen, im Wagen sind als Gegenstück ebenfalls zwei Ösen eingeschraubt.Die Sitzfläche hat ebenfalls zwei Ösen, zwei Schrauben halten sie in der Rückwand. Jetzt „klappt“ das.

Nun stinkt trocknet das Teil im Arbeitszimmer vor sich hin.Aber sieht voll cool aus. Jetzt muss nur noch das Kind drauf abfahren.

Hier nochmal eine endgültige Material-Liste:
Zwei Platten 6 mm Buche-Sperrholz 60×40 cm,
eine Platte 8 mm Buche-Sperrholz 31×25 cm,
ein Brett Leimholz Buche – bzw. Reste davon fürs Fahrwerk,
zwei Rundstäbe d20 mm Buche á 1m,
eine Leiste Buche 9×20 mm,
Holzschrauben mit Senkkopf 3×20 mm,
Nagerdraht 12er Maschenweite,
sechs Ösen 6×16 verzinkt,
zwei Senkkopfschrauben M5x16 und selbstsichernde Muttern,
vier Rollen (ich hab zwei fest, zwei gelenkt),
Tacker.

(swg)

QR-Codes aus Bildern lesen und den Text anzeigen.

Unter Linux gibt es nicht so viele Möglichkeiten, QR-Codes auszuwerten. Eine Möglichkeit auf der Kommandozeile ist ZBar, leider hat es keine GUI. Was ich will soll per Rechtsklick aus meinem Dateimanager funktionieren und mir anschließend in einem Dialog anzeigen, ob und was zbar gefunden hat.

Endlich mal wieder ein Bash-Script… Ein paar Dinge sind Voraussetzung: Als erstes braucht es ZBar zum Auslesen der QR-Codes. Mit Zenity kann man grafische Dialoge in einem Bash-Script anzeigen. Mehr ist nicht nötig.

Es kann dem Script als Parameter ein oder mehrere Bilder übergeben werden. Eine while-Schleife liest & entfernt die Übergabe-Parameter solange, bis keine mehr da sind. Sollte der ermittelte Code mit http:// beginnen, wird er als Webadresse interpretiert: Der dann folgende Dialog bietet an, ihn im Webbrowser zu öffnen.
#!/bin/bash
# swg, 25.8.2013
#
# Verwendet ZBarImg zum Lesen von QR-Codes aus Bildern.
# der ermittelte Text wird in einem Zenity-Dialog angezeigt, mit einer passenden
# Option zur Verwendung (Webadresse-> im Standard-Browser öffnen
#
# erwartet als Parameter wenigstens eine Bilddatei!
#
if [ ! $# -gt 0 ]; then
echo „Usage: zbarimggtk.sh IMG1.jpg [img2.jpg …]“;
exit;
fi;
while [ $# -gt 0 ] # Solange Parameter da sind…
do
IMG=$1;
if [[ -f $IMG ]]; then # ist der Parameter eine reguläre Datei?
CODE=$(zbarimg -Dq $IMG | sed -e „s/QR-Code://“); # vom zbarimg-Rückgabewert
# „QR-Code:“ vorn abschneiden
if [[ -z $CODE ]]; then
zenity –error –text „Kein QR-Code im Bild $IMG gefunden!“ &
else
if [ $(echo „$CODE“ | grep „http://“) ]; then # wenn Code mit „http://“ beginnt,
# ist es eine Webadresse
zenity –forms –title=“Webdresse in $IMG gefunden“ \
–separator=“,“ \
–text=“Webadresse $CODE öffnen?“;
case $? in
0)
x-www-browser $CODE; # Webadresse im X-Standard-Browser öffnen
;;
1)
# User-Cancel!
;;
-1)
zenity –error –text=“Ein unerwarteter Fehler ist aufgetreten.“;
;;
esac
else # bei einfachem Text nur einen Info-Dialog anzeigen
# (Text ist markier- und kopierbar)
zenity –info –title=“Text gefunden:“ –text=“$CODE“ &
fi;
fi;
else
zenity –error –text=“Bild $IMG nicht gefunden!“ &
fi;
shift; # Vordersten Übergabe-Parameter des Scripts löschen
done

Ich verwende es im Rox-Filer und in Geeqie jeweils im Kontextmenü – ein Rechtsklick aufs Bild und das Script als ausführendes Programm gewählt und ich weiß, was mir der fotografierte QR-Code sagen will…

Hier noch das fertige Script:
Symbol Shellscript zbarimggtk.sh

(swg)

PHP Code Snippets Powered By : XYZScripts.com