Archiv ‘Linux’

Sonntag, 15. März 2009

Batch convert color images for OCR

Vor langer, langer Zeit war ich in der Schweizerischen Nationalbibliothek und habe dort mit meiner Digitalkamera Seiten aus alten Büchern photographiert. Obwohl ich dies ohne Blitz tat, herrschte im Lesesaal alsbald helle Aufregung – denn ich hatte soeben gegen die Benutzungsordnung verstossen. Glücklicherweise musste ich die Bilddaten aber nicht von der Speicherkarte löschen, wurde aber freundlich und bestimmt gemahnt, das nie wieder zu tun …

Mittlerweile habe ich endlich Zeit gefunden, die Bilddaten zu sortieren und zu beschriften. Dummerweise war der Foto-Termin bereits derart lange her, dass ich schlicht vergessen hatte, aus welchem Buch ich digitale Kopien gemacht hatte. Mittlerweile ist es mir wieder in den Sinn gekommen:

main.bib

hauser1925

Geschichte der Hagelversicherung in der Schweiz
P. Hauser
 
 
 
(1925)

Doch gut, was bringen mir die Photographien, wenn ich diese nicht in einem schicken PDF-Dokument zusammenfasse und die Texterkennung darüber laufen lasse? Genau: Nichts.

Deshalb hiess es, die je ca. 3MB wiegenden farbenfrohen JPEGs in monochrome Bitmaps umzuwandeln. Nach einigem Googlen war ich mit Hilfe des ausführlichen Artikels ImageMagick v6 Examples — Color Quantization and Dithering im Stande, folgendes Shell-Script zu schreiben, welches mit ImageMagick die gewünschte Batch-Conversion durchführt:

#!/bin/sh

for i in *.jpg;
do
        echo "Converting $i"
        convert "$i" +dither -colors 2 -colorspace gray -normalize "$i-mono.gif"
        echo "Conversion finished"
done

exit 0

Anschliessend öffnete ich den Adobe Acrobat 7, wählte File > Create PDF… > From Multiple Files…, wählte die GIF-Dateien aus und liess mir ein PDF daraus erstellen.

Tags: , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Montag, 23. Februar 2009

Mit Cacti SNMP-fähige Netzwerkdrucker abfragen

Auf der Arbeit verwende ich cacti nicht nur, um Kennwerte von Linux-, Mac OS X- und Windows-Servern abzufragen und zu speichern (Prozessorauslastung, Festplattenplatz etc.), sondern frage damit auch SNMP-fähige Drucker ab.

Meistens handelt es sich dabei um netzwerkfähige HP (Color) Laserjets, doch auch Drucker anderer Hersteller liefern per SNMP die drei grundlegenden Parameter Page Count und Page Output. Wenn man Glück hat, kann per SNMP sogar der Tonerstand graphisch ausgewertet werden.

Die dafür nötigen Templates habe ich aus verschiedenen Quellen zusammengestibitzt und veröffentliche diese in diesem Blog-Artikel als ZIP-Datei:

cacti-snmp-printer-templates.zip

Die Templates importiert man über die cacti-Administrationsoberfläche unter dem Menupunkt Import Templates. Anschliessend erfasst man die Hosts und weist diesen die Templates dann manuell zu, oder baut sich ein Host Template bestehend aus den drei Templates zusammen.

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Freitag, 20. Februar 2009

Pseudo-Arrays in MS-DOS Batch-Dateien

Natürlich gibt es so etwas auch in der Microsoft-Welt, ist aber bedeutend hässlicher als bei bash & Co:

FOR /F "tokens=1,2,3,4 delims=|" %%G IN ("eins|zwei|drei|vier") DO @echo Werte: %%G %%H %%I %%K

Wer die Werte nicht aus einem String, sondern aus einer Datei auslesen möchte, passt den Befehl leicht an:

FOR /F "tokens=1 delims=;" %%G IN (datei.txt) DO @echo Wert: %%G

Via: FOR /F

Tags: , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 5. Januar 2009

snmpd 5.4 unter Debian geschwätzig machen

Obwohl ich hier bereits in verschiedensten Artikeln lusche Sicherheitsvorkehrungen angeprangert habe, halte ich es bei SNMP genau so: Hauptsache offen wie ein Scheuenentor. Das Protokoll ist derart kompliziert, dass ich beim Debugging nicht Zeit verlieren möchte.

Auf Servern, die ich mit cacti überwachen möchte, installiere ich normalerweise folgende snmpd.conf:

sysLocation Raum 1
sysContact Mario Aeby 
#
rocommunity public 192.168.0.1
#rocommunity public 192.168.0.0/24
#
includeAllDisks
#
proc
load

Auf einem Debian-System mit snmpd 5.4.1~dfsg-12 wollte obige Konfiguration aber nicht und spuckte drei Fehlermeldungen aus (zu finden in /var/log/daemon.log):

Jan  5 16:26:42 snmpd[13111]: /etc/snmp/snmpd.conf: line 7: Error: Blank line following includeAllDisks token.
Jan  5 16:26:42 snmpd[13111]: /etc/snmp/snmpd.conf: line 9: Error: Blank line following proc token.
Jan  5 16:26:42 snmpd[13111]: /etc/snmp/snmpd.conf: line 10: Error: Blank line following load token.

Die für snmpd 5.4 überarbeitete Version der Konfiguration sah deshalb folgendermassen aus:

sysLocation Raum 1
sysContact Mario Aeby 
#
rocommunity public 192.168.0.1
#rocommunity public 192.168.0.0/24
#
includeAllDisks 10%
#
load 1

Doch damit war nicht genug – snmpwalk wollte partout nur bei einem Testlauf von localhost Werte liefern.

Ein Blick in die Prozessliste machte schliesslich das Übel rasch erkennbar:

13491 ?        S      0:01 /usr/sbin/snmpd -Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1

127.0.0.1 wies snmpd an, nur auf dem lo-Interface zu lauschen.

Ich öffnete snmpds Ohren, indem ich die Datei /etc/default/snmpd anpasste und dort die Zeichenkette 127.0.0.1 entfernte.

(Falls jemand eine schönere Umgehungsmöglichkeit kennt, soll er diese als Kommentar posten. Danke!)

Tags:
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 11. Dezember 2008

Perl 5 sucks!

Heute gerade erlebt:

For example, to install a module from the CPAN, you must first answer several questions to configure the CPAN client. Then, you download a package, which runs a small program, which generates a Makefile, which configures, builds, tests, and installs the module — if everything went correctly.

Quelle: Five Features Perl 5 Needs Now – O’Reilly Broadcast

Ich wollte mir App::Ack installieren. Zuerst versuchte ich es als normaler User, was aber (wohl wegen den Berechtigungen) nicht geklappt hat. Der Fragekatalog wurde durchgespult, viele Module heruntergeladen und irgendwo unter den vorbeiflimmernden Zeilen gab es dann irgendwann einmal eine Fehlermeldung, die ich natürlich übersehen habe.

Die Installation via sudo klappte leider auch nicht viel besser – vorerst jedenfalls. Auch hier lief irgendein Test schief und Ack wurde nicht installiert. Zwar war anhand der Fehlermeldung erkennbar, dass etwas schief gelaufen war – wie das Problem zu beheben sei, erfuhr ich aber nicht. Es ist dem Zufall zuzuschreiben, dass ich im Anschluss einige als „optional“ bezeichnete Test-Pakete installieren liess – und plötzlich war ack unter /usr/bin/ vorhanden. Heureka.

Was Perl braucht? Ein apt-get install ack – fertig. Obwohl ich Perl nicht gut genug kenne, denke ich, dass CPAN das Spiegelbild seiner Benutzer und seiner Programmierer ist: Umständlich, kompliziert, technikbesessen. Und somit für Endbenutzer wie mich nicht geeignet.

Tags: ,
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 22. November 2008

wget, find und Bash ausgereizt

Um eine lokale Kopie der auf Terrific messages on girls’ T-shirt geposteten Photos zu erstellen, musste zwei Hürden übersprungen werden:

wget

$ wget --page-requisites "http://35mm.instantfundas.com/2008/11/terrific-messages-on-girls-t-shirt.html"

holte nur diejenigen Dateien, die auf dem lokalen Server abgelegt waren. Da die Photos bei ggpht.com gehostet wurden, kamen sie beim ersten Versuch nicht mit. Abhilfe schaffte folgender Befehl:

$ wget --span-hosts --page-requisites "http://35mm.instantfundas.com/2008/11/terrific-messages-on-girls-t-shirt.html"

find

Da ich vergessen hatte, wget mit der Option -nd („no directories“) aufzurufen, waren die Bilder nun über unzählige Ordner verstreut. Hier half find:

$ find . -name *tshirt* -exec mv '{}' '/Users/mario/Desktop/backup/' ';'

for-Schleife mit Bash

Sogleich folgte das nächste Problem: Die Dateinamen der Bilder waren nicht brauchbar: girls-tshirt (3)_thumb[1].jpg?imgmax=800 Mit Doppelklick wurde nicht automatisch Apples Preview geladen. Was nun? Bash hilft:

$ for i in *jpg*; do mv $i $i.jpg; done;

Ein einziges Bild wurde nicht umbenannt, weil es im PNG-Format daherkam. Hier war ich zu faul und benannte es von Hand um …

Tags:
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 19. November 2008

Mit cURL Serien von Dateien herunterladen

Nichts leichter als das:

$ curl "http://www.eMeidi.com/downloads/[1-15].jpg" -o image_#1.jpg

In diesem Fall geht der Downloader davon aus, dass im Ordner downloads auf meinem Server folgende Dateien liegen:

http://www.eMeidi.com/downloads/1.jpg
http://www.eMeidi.com/downloads/2.jpg
http://www.eMeidi.com/downloads/3.jpg
...
http://www.eMeidi.com/downloads/15.jpg

Indem man eine Range angibt (in eckigen Klammern, „von bis“), berechnet cURL diese URLs eigenhändig und versucht diese anschliessend herunterzuladen. Damit die Dateien auf der Festplatte gespeichert werden, muss dies mit dem Schalter -o kundgetan werden. Da eine Range eingesetzt wird, dient #1 als Platzhalter. In unserem Beispiel liegen nach dem Batch-Download folgende Dateien im Verzeichnis:

image_1.jpg
image_2.jpg
image_3.jpg
...
image_15.jpg

Labels: IT, Linux, Web

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 12. November 2008

Ubuntu Terminal wird weiss angezeigt


Ubuntu: Terminal Visibility Troubles
Originally uploaded by emeidi

Nach einem Upgrade meines „Media Center“-PCs (einem hundsnormalen Dell, Desktop-Modell mit Pentium III-CPU) auf Ubuntu 8.04 wurde beim Aufruf des Terminals nur eine weisse Fläche angezeigt (vgl. den Screenshot rechts, den ich einem anderen unglücklichen Ubuntu-Benutzer entliehen habe).

Das Problem konnte schlussendlich gelöst werden, in dem ich der xorg.conf folgenden Befehl beifügte:

Option "AddARGBGLXVisuals" "True"

Via: Problem: no window borders and white terminal with desktop effects.

Tags:
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Freitag, 7. November 2008

Datenbankdump von MySQL 5 nach MySQL 4

Den ursprünglichen Dump stellte ich mit phpMyAdmin her. Leider erlaubt die Web-Applikation nicht, den Charset des Dumps von UTF-8 nach LATIN1 (aka ISO-8859-1) anzupassen.

Deshalb ging es auf die Kommandozeile des Servers:

mysqldump --default-character-set=latin1 --compatible=mysql40 -u {user} -p {db} > dump.sql

Einerseits konnte ich so das Charset des Dumps festlegen (--default-character-set=latin1), andererseits musste ich aber auch auf die Kompatibilität achten (--compatible=mysql40). Leider war es mit letzterem Versprechen nicht wirklich weit her …

Auf Grund eines seit Monaten bestehenden Bugs in MySQL 5 enthielt der mysqldump-Dump Befehle, die MySQL 4.0.x nicht versteht:

SET @saved_cs_client     = @@character_set_client;
SET character_set_client = @saved_cs_client;

… was MySQL 4 folgende Fehlermeldung ausgeben liess:

#1193 - Unknown system variable 'character_set_client'  

Mittels vim (die GUI-Editoren unter Mac OS X mit Syntax-Highlighting kapitulierten vor 4000+ Zeilen) konnte ich den Dump dann doch noch derart zurechtbiegen, dass MySQL 4 die Datei schlussendlich schluckte. Der Befehl dazu lautete:

:g/^SET/d

Via: Vim: Delete every line in the file that does not match a pattern

Dieser vim-Befehl löscht kurzerhand alle Zeilen, die mit SET ... beginnen. Scheint dem Import nicht geschadet zu haben …

Tags:
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 6. November 2008

Russisch Roulette mit Bash

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo "You live"

Quelle: (Useful) Stupid Unix Tricks?

Labels: Funny, Linux

Keine Kommentare | neuen Kommentar verfassen