In der Tat kann die Shell einen an den Rande des Wahnsinns treiben, wenn etwas auf der Konsole funktioniert aber als Script-Datei nicht funktioniert. Bei Linux hat sich als Standard-Shell ”bash” durchgesetzt. Diese hat einige nützliche Erweiterungen. Das kann aber mit anderen Shell-Varianten zu Problemen führen. Aus dem Grunde sollte bei der Wahl der Syntax auf möglichste Kompatibilität geachtet werden.
Ein kleines Beispiel:
Befehl | Eingabe | Ausgabe |
read a ; echo $a | IFS=$’\t\n’ | IFS= ’tn’ |
read a ; echo "$a" | IFS=$’\t\n’ | IFS=$’tn’ |
read -r a ; echo "$a" | IFS=$’\t\n’ | IFS=$’\t\n’ |
Und noch ein Beispiel mit einer längeren ’*.tex’ Datei, bei der schön zu sehen ist, dass die Sortierung an der richtigen Stelle sein sollte:
Befehl | Ausgabe |
for i in $(cat "$1") ; do echo "$i" ; done | wc | 9729 8150 55132 |
for i in $(cat "$1" | sort ) ; do echo "$i" ; done | wc | 9736 8150 55139 |
for i in $(cat "$1" | sort | sort -u) ; do echo "$i" ; done | wc | 9456 7925 53348 |
for i in $(cat "$1" | sort | sort -u) ; do echo "$i" ; done | sort | sort -u | wc | 2288 2286 19763 |
for i in $(cat "$1") ; do echo "$i" ; done | sort | sort -u | wc | 2288 2286 19763 |
Das Aufrufen eines Shell-Skripts kann auf verschiedene Weise erfolgen:
Das funktioniert nur, wenn das Dateiattribut auf ausführbar gesetzt ist. Dies kann mit “ls -l” überprüft werden.
In dem Falle funktioniert das nicht und mit “chmod” kann das geändert werden.
Mit dieser radikalen Methode ist die Datei nun für jeden lesbar, schreibbar und ausführbar. Zu erkennen ist dies am x an der entsprechenden Stelle.
Bei mit “mount” eingehängten Medien kann es auch sein, dass diese nicht ausführbar gemacht werden können. Der Grund kann sein die optionale Maskierung ein setzen der Attribute für die Ausführbarkeit verhindert.
Auch eine Option, wie “nosuid” kann daran Schuld sein, dass es so nicht funktioniert. Auch hier gibt es Abhilfe. Einfach das Skript aufrufen mit vorangestelltem “sh” oder “bash”. Es gibt hier auch noch weitere Möglichkeiten, als diese zwei verschiedenen Shells.
In der ersten Zeile eines Skriptes sollte stehen, für welchen Typ von Shell das Skript geschrieben wurde. Dies erfolgt durch folgende erste Zeile im Skript:
Die Shell sollte die erste Zeile auswerten und die richtige Shell auswählen. Bei dem Aufruf mit “./” sollte diese Zeile eigentlich immer ausgewertet werden. Es gibt aber auch Distributionen die verwenden anscheinend trotzdem immer die bash oder wählen die bash nachdem sie in dem Skript bestimmte Schlüsselsequenzen oder Befehle gefunden haben. Das kann Auswirkungen auf ganz einfache Befehle, wie ’let a=$b+1’ und ’echo -e’ haben. Statt ’let a=$b’ sollte aus Kompatibilitätsgründen besser ’a=$(($b+1))’ verwendet werden.
Aus solchen Gründen funktionierte bei mir ein Shellskript auf der Konsole einwandfrei, aber nur nicht als aufgerufene Skriptdatei auf einem anderen Rechner mit einer anderen Linuxversion. Solche Probleme können einen Skriptprogrammierer an den Rand der Verzweiflung bringen. Daher rührt auch die Überschrift dieses Abschnittes.
Nach einigen hin- und herkopieren bei der Erstellung eines Scriptes funktionierte dieses nicht mehr. Die gespeicherten Strings in den Variablen waren fehlerhaft.
Ein Aufruf des Scriptes mit “bash -x scriptname.sh” brachte die Klärung, dass am Zeilende noch ein Trennzeichen \r auftauchte. Im folgenden Listing ist das sichtbar.
Die Ursache ist, dass in der DOS-Welt der Zeilenumbruch mittels “cariage return” und “line feed” (Hex: 0D 0A) erfolgt, aber in der Unix-Welt nur mit einem “line feed” (Hex: 0A).
Behoben werden kann das mittels des Werkzeugs “dos2unix”. Bei mir waren dabei noch mehrere dieser Sequenzen hintereinander, so dass ich den Vorgang dreifach ausführen musste.
Tips und praktische Shellskripte veröffentlicht helfen nicht nur anderen, ab und zu braucht man sie auch selber und ist froh wenn diese im Internet zu finden sind.
Suchen von mehrfachen Dateien per Minishellskript:
find -type f -printf %s"\t"%TY%Tm%Td_ %TH%TM"\t" -exec md5sum ’{}’ \; | sort -k 3 | uniq -D -f 2 -w 32
Und wenn diese in einer Datei *.ls sind mit mplayer abspielen:
IFS=$’\t\n’ ; read b ; a=0; for i in $(cat *.ls | sort -k 4 | awk ’{print $4}’ | grep ".mpg|.mpeg|.avi|.wmv|.mov|.flv" ); do let a=$a+1; echo $a " " $i ; if [ "$a" -gt "$b" ] ; then mplayer -fs $i ; echo $a " " $i ; fi ; done
Herunterladen von Bildern etc. mit wget:
for j in $(seq 1 8) ; do for i in $(seq 1 4) ; do for k in pics0{1, 2, 3 }; do wget -c -r -l 1 --limit-rate=400k --read-timeout=15 -w 2 --random-wait --restrict-file-names=windows -A mpg,wmv,avi,dvx,div,mpeg,jpg,jpeg,JPG --directory-prefix="/media/USBDISK/my_ pics_ or_ movies/" http://homepage.de/pics/$j/$j/$k.jpg ; done ; done ; done
Abspielen mit mplayer und suchen mit find (hier Dateien >600kB, überspringe .jpg):
IFS=$’\t\n’ ; echo "how many days ago?" ;read bb ; echo "how many files to skip?" ; read b ; a=0; for i in $(find /media/USBDISK/myvideos -type f -mtime -$bb -size +600k | sort | grep -v "jpg$"); do let a=$a+1; echo $a " " $i ; if [ "$a" -gt "$b" ] ; then mplayer -fs $i ; echo $a " " $i ; read -t 1 -n 1 dd; fi ; done
Mit mehreren "q" einen break erzwingen um z.B. zu beenden auf langsamen Rechnern zu ermöglichen:
textttIFS=$’\t\n’ ; echo "how many days ago?" ;read bb ; echo "how many files to skip?" ; read b ; a=0; for i in $(find /media/{disk,folder}*/{name1,name2}* -type f -mtime -$bb -size +600k | sort ); do let a=$a+1; echo $a " " $i ; if [ "$a" -gt "$b" ] ; then mplayer -fs $i ; echo $a " " $i ; read -t 1 -n 1 dd; if [ "$dd" = "q" ] ; then read dd ; fi ; fi ; done
Abspielen Internetradio mit mplayer und Equalizer auf bestimmtes alsa device (z.B. USB-Soundkarte):
mplayer -af equalizer=5:3:1:0:0:0:0:-1:-2:-3 -af volume=0 -ao alsa:device=hw=0 -playlist http://radiolink/internet-64/*.asx
curl "http://www.uni-leipzig.de/cgi-bin/date/index.htm" | grep -v "<" | awk ’{print $4}’
Eine andere Methode und Adresse um die Atomzeit zu holen:
netcat time.nist.gov 13
Und gleichzeitig noch die Zeit übernehmen:
sudo date -s $(curl "http://www.uni-leipzig.de/cgi-bin/date/index.htm" | grep -v "<" | awk ’{print $4}’)
Sehr praktisch für die Bearbeitung ist ’texmaker’. Allerdings ist auf einem Netbook mit 1024x600 der sichtbare Bereich doch etwas klein. Gut ist die Hilfe für das Setzen von einigen Befehlen. Bei \begin wird auch gleich \end auch gesetzt. Damit die deutschen Umlaute im Editorfile richtig umgesetzt werden, ist in den Eigenschaften ISO-8859-1 auszuwählen. In der unteren Leiste wird dies auch angezeigt. Damit für die Vorschau auch die aktuellen Änderungen übernommen werden muß vor dem Compilerlauf speichern gedrückt werden. Das Inhaltsverzeichnis benötigt zwei Compilerläufe, bis es tatsächlich aktualisiert ist.
Noch mehr an Funktionen bietet ’kile’. Der sichtbare Bereich auf einem Netbook ist nicht kleiner als bei ’texmaker’. Was ’texmaker’ besser macht ist die Anzeige von Fehlern beim Latex-Durchlauf, die stärkeren Fehler hervorgehoben sortiert werden. Bei ’kile’ sind die Einstellungen der Eigenschaften bei 1024x600 nicht möglich, da der untere Bereich nicht erreicht wird. Hier muss mittels ”xrandr” der Bildschirm virtuell vergrößert werden.
Wenn Anführungszeichen im Text gesetzt werden sollen, so sind bei Verwendung des package german die Syntax zu ergänzen. Statt "weiter ist "{}weiter zu verwenden.
Ersetzungsskript um Befehle in den Text zu übernehmen. Es versagt auf der Konsole beim Backslash (\), wenn die Option ’read -r’ nicht möglich wäre. Somit wäre hier manuell \textbackslash einzutragen. Bei dem Script sind nicht alle Zeichenersetzungen erhalten. Es entstand bei der Erstellung des Dokuments für die Unterstützung der Umwandlung von Code auf der Konsolenshell.
IFS=$’\n’ ; read -r a ; for i in $(seq 1 $(echo $a |wc -c)) ; do b=$(echo $a |cut -c $i) ; c=‘case "$b" in ’"’) echo ’"{}’ ;; ’{’) echo ’\{’ ;; ’}’) echo ’\}’ ;; ’$’) echo ’\”$’ ;; ’\’) echo ’\textbackslash ’ ;; ’|’) echo ’\textbar ’ ;; ’_ ’) echo ’\_ ’ ;; ’ ’) echo \ {} ;; ’%’) echo ’\%’ ;; *) echo "$b" ;; esac ‘ ; echo -n "$c" ; done ; echo
Das gleiche Script für die Erstellung von \texttt. Es versagt auf der Konsole beim Backslash (\) und somit an der Stelle wo bei IFS \n \t stehen sollte, wenn die Option ’read -r’ nicht möglich wäre. Somit wäre hier manuell \char ’ \\’ einzutragen, welches nicht funktioniert aber mit ’$\backslash$’ klappt es.
IFS=$’\n’ ; read -r a ; echo -n ’\texttt{’; for i in $(seq 1 $(echo $a | wc -c)) ; do b=$(echo $a | cut -c $i) ; c=‘case "$b" in ’"’) echo ’"{}’ ;; ’{’) echo ’\{’ ;; ’}’) echo ’\}’ ;; ’$’) echo ’\’’$’ ;; ’\’) echo ’$’’\backslash’’$’ ;; ’|’) echo ’|’ ;; ’_ ’) echo ’\_ ’ ;; ’ ’) echo \ {} ;; ’%’) echo ’\%’ ;; *) echo "$b" ;; esac ‘ ; echo -n "$c" ; done ; echo ’}’
Für die Umwandlung von HTML in Latex gibt es verschiedene Möglichkeiten. Die erste Methode ist die Umwandlung von HTML mittels Anwendungen und deren Erweiterungen.
Die zweite Methode sind Anwendungen auf JAVA oder PERL Basis.
http://html2latex.sourceforge.net/doc/html2latex-man.html REQUIRES: If your html2latex is not working correctly, this may be because you do not have many of the needed packages. html2latex requires HTML::TreeBuilder perhaps LWP::Simple and URI. If you do not have either of these, try typing perl -MCPAN -e shell at the command line. This will bring up a shell for CPAN (The Comprehensive Perl Archive Network). Then, as root try typing install HTML::TreeBuilder. Should work like magic.
perl -MCPAN -e shell # Mit diesem Befehl wird ’perl’ mit allem notwendigen konfiguriert. Hierzu ist eine Internetverbindung notwendig. Bei einigen Installationen von Linux sollte diese auch ablaufen, aber wenn kein Internet am Anfang vorhanden ist, wird dieses nicht automatisch nachgeholt. Das kann Ursache für ein sehr seltenes abweichendes Verhalten auf der Shell bei komplizierten Scripten sein.
http://htmltolatex.sourceforge.net/# download Dieses Programm arbeitet auf der Basis von JAVA. Es wird mindestens JAVA 1.5 benötigt. Auf der Konsole kann mit jave -version dies geprüft werden. Meistens ist bei Linux eine OpenJDK Java Version installiert. Es gibt Anwendungen, die benötigen jedoch JAVA von SUN. Wenn dieses installiert wird, gibt es bei Ubuntu noch eine Anleitung (Skript) um jeweils umzustellen. Auf meinem alten defekten Rechner hatte ich das durchgeführt und wird hier ergänzt, wenn ich es wieder machen sollte.
Eine Seite die viele Informationen über verschiedene Konvertierungen enthält. http://www.tug.org/utilities/texconv/pctotex.html
apt-get install latex2rtf # Bei mir scheitert das Werkzeug bereits bei diesem Dokument, das nicht mal Bilder enthält.
Das Dokument wurde auf einer Konsole mit Latex begonnen und nun soll es auch in HTML umgewandelt werden. Im Internet gibt es dazu verschiedene Werkzeuge mit verschiedenen Entwicklungszuständen und Funktionen. Mehrere Konverter wurden ausprobiert mit unterschiedlichen Ergebnissen.
Bei mir scheitert das Werkzeug bereits bei diesem Dokument, das nicht mal Bilder enthält. Abgebrochen wird beim Latex-Beispiel eines Mini-Dokuments in einer “lstlisting”-Umgebung.
Da der direkte Weg von Latex nicht funktionierte, könnte es über die “dvi” oder “pdf” Ausgabe vielleicht klappen. Der erste Versuch war aus diesen per “copy and paste” den Text nach OpenOffice zu holen.
Das Ergebnis war ein Text aus vielen Müllzeichen an den Stellen der deutschen Umlaut und einige Liguatoren. Ein Test mit einer aus OpenOffice heraus erzeugten pdf-Datei war im Vergleich hierzu ohne diese Fehler. Bei der Kopie gehen die Textformatierungen (Größe, Stärke, usw.) verloren.
Leider ist es immer das gleiche Müllzeichen, so dass keine externe Konvertierung mittels Skripte möglich ist. Die Anwendungen pdftotext und pdftohtml haben hier auch das Probleme. Verschiedene Optionen mit latin1, utf8 usw. haben nicht geholfen.
Eine Untersuchung des kryptischen Ergebnisses in pdf mit einem Text/Hex-Viewer hilft zwar nicht weiter, aber wenn das Ergebnis mit einem pdftohtml Konverter (probiert mit auch mit pdftohtml -c -enc Latin1 und UTF-8) verglichen wird, ergibt sich:
Somit läuft hier etwas im Detail ganz anders ab. Der Unterschied liegt also im dvi-file und dem Weg von dvi nach pdf. Somit wäre mit sed (N wird benötigt um die nächste Zeile mit einzubeziehen) auf der html-Ausgabe eine etwas arg umständliche Korrektur vielleicht möglich.
Die Browser können dies leider alle nicht richtig wiedergeben, wie auch OpenOffice es auch nicht richtig einlesen kann.
Aus dem Freenode chatroom #latex wurde empfohlen:
Soweit leider ein mäßger Teilerfolg, wenn aus einer pdf kopiert wurde.
Half auch nicht weiter. Wenn ich das eintrage, dann gibt es viele Fehlermeldungen. Mache ich die Änderungen Rückgängig geht “latex texdatei.tex” hartnäckig nicht mehr. Erst wenn Dateien, wie “texdatei.toc” gelöscht worden sind, geht es erst wieder mit “latex texdatei.tex” zu übersetzen.
Latex verwendet bei der Zeichendarstellung Erweiterungen und auch Workarounds für Sonderzeichen, Liguaturen und Landeszeichensätze. Es gbt demnach Varianten in pdf, wobei jede Umsetzung nur die eine oder andere Variante jeweil realisiert hat. Im pdf-Ausdruck werden die hier verwendeteten unterschiedlichen Varianten in “okular” und “xpdf” richtig angezeigt. Also läuft das ganze über 4 Schnittstellen der Umsetzung.
Das Probem ist eingekreist. Es betrifft nur nicht-englische Sprachen. Daher gibt es einen Blog, das pdf (z.B. mit convert) in ein Bild umzuwandeln, das mit einer ocr-Anwendung (für Schrifterkennung von einem Scan, im pdf erzeugten Bild natürlich traumhafte 100% Bildqualität vorfindet) in Text umzuwandeln. In einem Kapitel zur Schrifterkennung zeigte sich, dass diese auch oft nicht reibungslos funktionierte.
Somit wurde ein weiterer Konverter installiert um die Konvertierung zu testen.
Die Konvertierung mit htlatex aus dem Paket tex4ht erzeugt ein brauchbares HTML Gesamtdokument. Firefox/Iceweasel zeigt die Seite richtig an, aber Konqueror ist unvollständig bei der Wiedergabe der Konsolenlistings in der Umgebung “lstlisting”. Im Firefox ist erkennbar, dass in der Umgebung die langen Zeilen der Konsolenlistings nicht umgebrochen werden. Das Inhaltsverzeichnis ist verlinkt auf die Positionen im Text.
Das ist ein weiterer Konverter, der installiert wurde um die Konvertierung zu testen.
Diese Anwendung funktionierte nicht mit dem Testdokument. In dem Textdokument wurden bereits zu viel verwendet, das hyperlatex nicht verarbeiten kann. Es wird bereits im Bereich des ersten Absatztes abgebrochen. Für die Verwendung von hyperlatex ist es notwendig das Paket im Dokumentenkopf aufzunehmen und nur unterstütze Anweisungs-/Befehlssyntax im Dokument zu verwenden. Wenn nicht unterstütze Befehle verwendet werden, dann gibt es die Möglichkeit abhängige Bedingungen im Dokument zu setzen. Für gewöhnliche Nutzer ist dies nicht unbedingt zu empfehlen.
Das ist ein weiterer Konverter, der installiert wurde um die Konvertierung zu testen.
Die Konvertierung mit “hevea” erzeugt ein brauchbares HTML Gesamtdokument. Firefox/Iceweasel zeigt die Seite richtig an. Im Firefox ist erkennbar dass in der Umgebung die langen Zeilen der Konsolenlistings nicht umgebrochen werden. Das Inhaltsverzeichnis fehlt. Das Stichwortverzeichnis ist verlinkt auf die Positionen im Text.
Die Weiterverarbeitung mit “hevea” erzeugt ein brauchbares HTML Dokument, das auf mehrere Seiten aufgeteilt ist. Firefox/Iceweasel zeigt die Seite richtig an. Im Firefox ist erkennbar dass in der Umgebung die langen Zeilen der Konsolenlistings nicht umgebrochen werden. Das Inhaltsverzeichnis ist nun vorhanden und ist verlinkt auf die Positionen im Text. Es wird im Inhaltsverzeichnis noch ein Eintrag “Contents” angelegt, der ins leere führt. Das Inhaltsverzeichnis enthält nicht die Kapitelnummerierung. Das Stichwortverzeichnis ist verlinkt auf die Positionen im Text.
Mit der Option “-fix” wird ein Inhaltsverzeichnis unter dem Eintrag “Contents” angelegt, der nun nicht mehr ins leere führt. Das Inhaltsverzeichnis enthält auch die Kapitelnummerierung.
Zum Gebrauch für den nicht zu sehr spezialisierten Anwender kann htlatex (Paket tex4ht) und hevea mit hacha (Paket hevea) für die Konvertierung von Latex nach HTML empfohlen werden. Das Paket hevea wird von mir favourisiert, wegen der Möglichkeit das Dokument in mehrere verteilte HTML-Seiten aufzuteilen und der Verlinkung aus den Verzeichnissen.
Die Umwandlung der Latex-Ausgabedateien in pdf funktioniert auf verschiedenen Wegen recht ordentlich. Bei pdf-Dokumenten gibt es ebenfalls eine Verlinkung zwischen den Verzeichnissen und den betreffenden Textstellen. Damit dies auch mit den aus Latex erzeugten Dokumenten funktioniert ist das Paket “hyperref” im Kopf einzubinden.
Bei diesem Dokumentenversuch klappte allerdings bei dem Beispiel nicht die Farbgebungen, da die Farbe den ganzen Text verdeckte. Eine erzeugte PDF-Datei (nur mit Textinhalten) hatte ohne die Verlinkungen 450 kB und mit den Verlinkungen 740 kB.
Zum Scannen unter Linux wird voraussichtlich wirklich Zeit benötigt, da die Daten meistens nur langsam übertragen werden. In einigen Foren wird daher öfters geraten einen Windows-Treiber aus einem anderen Land zu verwenden. Bei Linux gilt das gleiche und daher werden die Daten in der Regel mit einer Geschwindigkeit von bis zu maximal nur 1 MBit/s nur übertragen. Aus dem Grunde sollte vor einem Scan die Auflösung und ob farbig, graustufig oder nur schwarz-weis festgelegt werden, bevor mit dem Scannen begonnen wird.
Einige Drucker bieten auch einen Anschluss für eine SD-Karte. Wer öfters viel und schnell scannen will, sollte auch diese Möglichkeit in Betracht ziehen. Ein Abfotografieren mit einer Digitalkamera wäre eine weitere Möglichkeit.
Praktisch auf der Konsole ist, dass dem Scan auch gleich der Name für die Datei mitgegeben werden kann. Allerdings kann es auch leicht passieren, dass die vorherige Datei überschrieben wird, wenn nicht aufgepaßt wird.
Bei scanadf mit höheren Auflösungen gibt es oft Probleme und es kommt zu einem Abbruch, da die Wartezeit überschritten wird. Das passiert vor allem, wenn der Scanner einen genügend großen Buffer hat, um mehrere Sekunden nach Leseende noch die restlichen Daten zu senden. Manchmal hilft hier aber auch ein Neustart des Scanners/Multifunktionsdruckers weiter.
Wenn mehrer Geräte verfügbar sind, dann muss dieses als Option mit angegeben werden. Bei mir war die Option nicht notwendig, das Gerät anzugeben.
Die Auflösung ist entscheidend für die Qualität des Dokumentes. Soll ein Dokument nur zu Belegzwecken eingescannt werden und ist die Schrift nicht zu klein (nicht kleiner als 3 bis 4mm) dann reichen 100dpi Auflösung. Das Schriftbild ist allerdings nicht scharf, aber noch lesbar. Die Rohdatei hat ca. 3MB und als JPG (Qualität 50%) wird diese kleiner 100kB. Bei 150dpi Auflösung wird die Rohdate ca. 7MB groß und die JPG (Qualität 50%) hat ca. 100-200 kB. Die Lesbarkeit ist in dem Falle besser. Das Schriftbild ist zwar noch nicht scharf bei Schriften mit etwa 3-4mm aber schon deutlich besser. Die gebräuchliche Auflösung für gute Fax-Qualität beträgt 204dpi.
Ein Blatt A4 hat bei einer Größenangabe von 215x300mm (bewußt etwas größer gewählt, da die Vorlage immer mit etwas Spiel ungenau liegt) bei 100dpi ungefähr 816x1180 Bildpunkte und bei 150dpi ungefähr 1232x2099 Bildpunkte. Daraus läßt sich ersehen, dass das Abfotografieren mit einer Digitalkamera von mindestens 4-5 Megapixel durchaus konkurenzfähig sein kann.
Wer Scheine einscannt oder abfotografiert, sollte immer daran denken, dass dazwischen eine Transparentfolie mit gut sichbarer Schrift “unechtes Muster” oder “Kaufladen Spielzeug” liegt, die natürlich auch gut und auffällig auf der Ablichtung erkennbar sein muss.
Für die Bildumwandlung auf der Konsole sind vor allem die Anwendungen aus dem Paket “imagemagick” zu empfehlen. Eine praktische Routine zum Umbenennen von Scans mit der Anwendung “convert” aus dem Paket ist im folgenden aufgeführt.
Die Beispiele zeigen, welche Komprimierung der Dateien erreichbar sind. GIF ist bei Farbe und Graustufen wenig geeignet, da hier nur wenige Farbstufen (meistens zu wenige) erzeugt werden. Bei schwarz/weis sind GIF und PNG verlustfreie Komprimierungen. Die Komprimierung JPG ist hier am schlechtesten, da hier durch die Kachelberechung fiktive Grauwerte hinzukommen. Bei Verwendung geeigneter Optionen sind bei farbigen Bildern JPG und PNG ungefähr gleichwertig. PNG ist ein freieres Format und sollte daher bevorzugt werden.
Bei genauer Ansicht der Pixelwerte fällt auf, dass diese in der Länge in der Tabelle etwas größer sind als bei A4 angegeben. Die Ursache ist, dass hier mit dem Blatteinzug gescannt wurde und das amerikanische Format “letter” einbezogen wird. Bei der weiteren Verarbeitung hat dies allerdings auch nicht gestört.
Installiert für die Texterkennung wurden einige verschiedene Pakete. Die Texterkennung von einer Testdatei (einer ps to png,pnm,tiff gewandelt) hatte viele Schwierigkeiten bei der Erkennung.
Die Beispieldateien wurden nicht eingescannt, sondern aus einer in pdf konvertierten Seite (Seite 44) dieses Dokumentes erzeugt. Zur Erzeugung wurden folgende Befehle verwendet:
Das Programm “tesseract” benötigt einige Vorkonfigurationen. Die man-Pages geben etwas Informationen. Es dauert, bis der Befehl “ocroscript” in den Verweisen gefunden wird. Somit ist das Programm für die ersten Versuche nicht so geeignet.
Die Anwendung “ocrad” ist für den Anfänger mehr bedienerfreundlich. Bei der Erkennung des Beispiels mit 150 dpi versagt die Erkennung kläglich. Bei genauer Durchsicht zeige sich, dass die Überschrift in größeren Buchstaben erkannt wurde.
Die nächste größere Auflösung von 300dpi brachte ein deutlich besseres Ergebnis und es wurden die meisten Buchstaben erkannt. Noch größere Auflösungen zeigten keine wesentlichen Verbesserungen. Schwierigkeiten gibt es vor allem bei der Erkennung vom “ß” und den Liguatoren (ff, fi, ft).
Bei tesseract gibt es die Anwendung ocroscript. Die Ausgabe erfolgt Standardmäßig als HTML.
Bei der Erkennung des Beispiels mit 150 dpi versagt “ocroscript” bei der Erkennung meistens. Bei genauer Durchsicht zeigte sich, dass die Überschrift in größeren Buchstaben erkannt wurde. Die nächste größere Auflösung von 300dpi brachte ein deutlich besseres Ergebnis und es wurden die meisten Buchstaben erkannt. Die Zahl der Buchstabenfehler bei 300dpi war größer als mit ocrad. Die Überschrift mit 300dpi war fehlerhafter als mit 150dpi. Noch größere Auflösungen zeigten keine Verbesserungen, eher Verschlechterungen war der Eindruck. Schwierigkeiten gibt es vor allem bei der Erkennung im Bereich der “ß”, den Liguatoren (ff, fi, ft) und sonstigen Sonderbuchstaben. Der Versuch mit 1200dpi benötigte zu viel Resourcen (Prozessor 75% Memory und 1,6GB Swap) und wurde daher nach 20 Minuten abgebrochen.
Eine Virtualisierung ist eine Möglichkeit identische Rechner mit identischer Software auf verschiedenen Rechnern sogar mit unterschiedlichen Betriebssystemen laufen zu lassen. Von der Entwicklungsgeschichte betrachtet, fing diese Entwicklung vorwiegend mit Emulatoren an. Hierbei wurde eine Anwendung geschrieben, die jeden Rechenschritt eines Prozessors und der Peripherie exakt nachbildet. Bei der Emulation wurden daher viele Maschinenzyklen auf dem Rechner benötigt um einen Maschinenzyklus eines anderen Prozessors nachzubilden.
Wenn aber auf dem Gastgeberrechner (engl.: host) die gleiche Prozessorarchitektur vorhanden ist, wie emuliert werden soll, gibt es Wege dies zu beschleunigen. Um das Prinzip zu verstehen ist es notwendig zu wissen, dass die Anwendungen und auch die Betriebssysteme in der Regel in einer höheren Programmiersprache geschrieben werden (z.B. C, C++) und letztendlich durch einen Compiler in ablauffähigen Maschinencode (Binaries) umgesetzt werden. Innerhalb des Maschinencodes sind durchaus Befehlsbytesequenzen enthalten, die unkritisch auch auf dem Prozessor direkt ausgeführt werden könnten.
Durch Optimierung der Erzeugung des Maschinencodes durch den Compiler auf möglichst viele Sequenzen, die bei einer Emulation direkt auf dem Prozessor ausgeführt werden können, ist eine erhebliche Beschleunigung einer Emulation notwendig. Bei Verwendung einer anderen Prozessorarchitektur ist eine solche Optimierung leider nur sehr eingeschränkt möglich und bleibt daher in der Geschwindigkeit immer zurück. Aus dem Grunde hat Apple bei seinen Rechnern im Jahre 2005 begonnen von der PowerPC-Prozessorfamilie (Motorola 68er Reihe) auf die Intel-Prozessorfamilie umzusteigen. Auf einem Apple ibook G4 (1GB RAM, ca. max 1500 MHz, PowerPC) benötigte Ubuntu 6er Version für Intel-Rechner statt einer Minute zehn Minuten zum Hochfahren, auf Grund der Emulation ohne Beschleunigung mit qemu für PowerPC.
Nach meiner Ansicht ist die PowerPC-Architektur eigentlich besser als die Intel-Architektur. Auf der anderen Seite gab es bei der Intel-Architektur von Anfang an die Aufwärtskompatibilität. Aus dem Grunde funktioniert heute noch DOS auf vielen Rechnern. Es gibt immer wieder Experten die eine Aufwärtskompatibilität für Überflüssig halten, aber wer will jedesmal mit einem neuen Rechner auch die gesamte Software neu beschaffen und diese jeweils an eine neue Hardware anpassen.
Der Programmierer sieht von den erwähnten Zusammenhängen in der Regel nichts und es ist auch nicht notwendig das zu wissen, es sei denn er programmiere Compiler oder erstelle Assemblercode. Auf Grund vieler weitere Methoden zur Beschleunigung ist der Begriff Emulation nicht mehr ganz passend. Es wird daher allgemein besser der Begriff Virtualisierung verwendet.
Es gibt auf dem Markt mehrere Virtualisierungen für verschiedene Betriebssysteme. Für den Privatanwender bieten viele kommerzielle Hersteller freie Versionen an.
Bis auf die letzte Virtualisierungsanwendung gibt es diese als Freeware sowohl für Linux wie auch für Windows. Es gibt auch Versionen für Apple Macintosh PowerPC von einzelnen Anbietern, aber meist nicht als Freeware bzw. werden diese meist nur noch für die Intel-Rechner von Apple gepflegt.
Der Linux-Anfänger ist eigentlich gut beraten, wenn er auf seinem Rechner mit einem anderen Betriebssystem Linux in einer Virtualisierung ausprobiert. Die virtuelle Umgebung ist dafür eine ideale Spielwiese. Es gibt auch fertige Linux auf einem Live-USB-Stick, die unter Windows laufen. Diese basieren meistens auf qemu.
Die Pakete “qemu” und “virtualbox” gibt es bei Debian unter “apt-get” zur Installation.
Für die Installation von virtualbox muß nach der Meldung die apt-get Download-Quellenliste erweitert werden. Für den Anfänger ist das wieder eine Herausforderung.
Es wird also zunächst qemu installiert. Bei apt-get wurden auf der Konsole auch noch einige Hinweise zu weiteren Paketempfehlungen angezeigt. Oft sind diese Angaben eine wertvolle Hilfe bei der Suche nach Problemlösungen. Es ist daher oft sinnvoll mit “copy&paste” solche Texte aufzuheben.
Für den Arbeitsspeicher RAM des virtuellen Rechner wird natürlich RAM des Gastgeberrechners benötigt. Damit das System durch Swappen nicht zu sehr ausgebremst wird, sollte darauf geachtet werden. Auf dem Gastgeberrechner sollten nicht viele Anwendungen während der Virtualisierung parallel laufen, wenn dieser viel vom Arbeitsspeicher zugewiesen wurde.
Auf einem Netbook mit 1GB RAM mit aktuelles Linux aus dem Jahre 2009 sollten nicht weniger als 512 MB RAM für den Gastrechner verbleiben. Es in dem Falle für eine virtuelle Umgebung maximal bis zu 512 MByte als RAM zugewiesen werden. Wer mehr benötigt, sollte als Gastbetriebssystem ein Linux für Resourcenschwache Rechner verwenden. Für Windows XP und Windows 7 gelten ähnliche Grenzen.
Nach der Installation sollte vor einem ersten Aufrufversuch, immer erst die “man-page” aufgerufen und durchgesehen werden.
Ein erster Versuch funktioniert nicht, da der virtuelle Rechner noch ein BIOS benötigt. Ein Fehler aus 2004 gibt es wieder im Debian, war die erste Vermutung, dass das Verzeichnis mit den BIOS nicht gefunden wird. Diese ist hier unter “/usr/share/qemu/” zu finden.
Und nun ein Versuch mit einer weiteren Anleitung zu Qemu (siehe Literaturverzeichnis L13).
Zuerst ist eine virtuelle Festplatte zu erzeugen. Für die Versuche wird ein eigenes Verzeichnis angelegt. In dem Verzeichnis wird eine virtuelle Festplatte angelegt, die zunächst noch leer ist. Als Distro für die virtuelle Umgebung wird eine Mini-Distro, hier Puppy-Linux heruntergeladen.
Und nun funktioniert es immer noch nicht. Bei der Forschung nach der Ursache stellt sich heraus, dass die bios in dem Verzeichnis als Links angelegt sind und ins Leere gehen. In mc steht vor dem Namen ein ! und mit ls werden diese schwarz angezeigt.
Nun ist es schon besser, aber nun fehlt noch das BIOS einer Standardgrafikkarte. Also wieder suchen und nachladen ist angesagt. In den Hinweisen bei der Ausgabe auf der Konsole mit apt-get standen glücklicherweise die Namen der Pakete. Ohne diese Hilfe wäre die Suche sicher länger gewesen.
Puppy bootet zwar aber bleibt im Startpunkt “Updating...network-drivers-list” hängen. Nach einem Reboot wurde es noch einmal versucht. In dem Falle wird nicht ein kleines Fenster aufgemacht, sondern qemu im Vollbildmodus gestartet. Mit str+alt+f1 kann eine der Basiskonsolen erreicht werden. Zurück in X11 auf alt+f7 ist der Bildschirm von qemu verschwunden, aber mit top geprüft, ist der Prozess noch am laufen. Mit str+alt+f8 wird der Bildschirm von qemu erreicht. Mit str+alt+f7 wird wieder X11 mit der Konsole erreicht. Im Konsolenfenster, in dem qemu gestartet wurde, kann mit str+c qemu beendet werden. Im folgenden Verlauf zeigte sich später dieses störende Verhalten nicht mehr auf einer “user”-Konsole.
Die Bedienung der Tastatur bringt nur vollkommen andere Zeichen auf den Bildschirm. Die Ergänzung von “-k de” bringt die notwendige Abhilfe, aber es läuft noch nicht. Allerdings sind bei Tastaturbelegung einige Zeichen z.B. “=” nicht erreichbar. DSL kommt mit seiner grafischen Oberfläche hoch, aber mit der Maus kann diese nicht bedient werden.
Als nächstes wird eine 4er Version DSL (DamnSmallLinux) heruntergeladen. Diese startet auch nicht. Es ist für das Booten die Option “lowram” am DSL Bootbildschirm einzugeben. Der Grund ist, dass bei qemu der Standardwert für RAM 128 MB ist. Mit den vorherigen Fehlermeldungen ist kaum auf die Lösung zu kommen.
Nun noch eine Versuch von Puppy-Linux mit 256 MB RAM.
Nach dem vielen herumprobieren, fand ich per Zufall nur heraus, dass ich vorher mit “xrandr –output LVDS –panning 1024x800” wieder erreichen kann, dass ein eigenes Fenster in der aktuellen graphischen Umgebung geöffnet wird. Von einer “root”-Konsole gibt es die gleichen Probleme, aber diese lassen sich mit “xrandr” nicht in den Griff bekommen. Nachdem ich das durchgeführt habe, ging es plötzlich. Allerdings ist die Anzeige etwas zu groß für das Netbook.
Der Rechner wird nochmal gebootet. Auch ohne xrandr wird als “user” ein eigenes Fenster geöffnet für die Virtualisierung. Gleiches gilt für den “root” über “sudo”. Das Eröffnen einer neuen und weiteren X11 Session findet weiterehin bei Start auf einer echten “root”-Konsole statt. Hier funktioniert qemu nur bedingt mit den Problemen bei der Tastatur und mit der Maus. Somit funktioniert nun die Virtualisierung mit qemu von einer “user”-Konsole. Das störende Verhalten war anscheinend durch öfteres hartes Abbrechen von qemu mit “kill” statt “ctrl-c” im der Konsole entstanden.
Bei der Emulation ist das Hochfahren von DSL erträglich. Das Surfen in DSL über den Gastrechnerzugang funktionierte auf Anhieb. Beim Start von DSL ist zu berücksichtigen, dass in der Virtualisierung bei der Eingabe der Kerneloptionen über die US-Tastaturbelegung eingegeben wird. Es erfolgen einige Abfragen beim Start von DSL. Ich habe “xvesa”, 640x480, 16-Bit-Farbtiefe, keine usbmouse, sondern ps2-mouse ausgewählt. Mit diesen Einstellungen sollte DSL “out of the box” funktionieren.
Aber Puppy Linux benötigt wirklich eine lange Zeit zum Booten. An der Stelle “Updating...network-drivers-list” endet diesmal nicht der Bootvorgang, aber es dauert mehrere Minuten bis der nächste Schritt erreicht wird.
Folgende Schritte sind notwendig um ein Windows in eine virtuelle Umgebung zu installieren.
Folgende Schritte sind notwendig um ein Linux in eine virtuelle Umgebung zu installieren.
Eine bekannte Software für die Virtualisierung ist vmware. Es gibt kostenlose Versionen des vwware-player und vmware-server. Im folgenden Mitschrieb wurde vmware-player heruntergeladen. Für das Herunterladen muss bei vmware registriert werden. Es werden etwas viele Angaben benötigt, z.B. Firmenangabe. Für die rein private Nutzung hilft hier ein Bindestrich oder die Verwendung eines Firmennamens “none”.
Für die erste Beschäftigung mit Linux und für den ersten Installationsversuch ist die Verwendung einer virtuellen Umgebung sehr zu empfehlen.
Nach der Installation und ersten erzeugten virtuellen Umgebung wurde ein Verzeichnis angelegt in dem sich die Konfigurations-, HD-Image-, und Log-Dateien befinden. Da die virtuellen Festplattendateien viel Platz benötigen und die Log-Dateien bei häufiger Nutzung auch zunehmen, kann hierbei schnell die der Speicherplatz dieser Partition aufgebraucht sein. Es empfiehlt sich ein Auslagern auf eine ander Partitionen und diese unter dem Verzeichnis einzuhängen.
Die Verwendung von VMWARE auf einem Netbook ist zwar möglich, aber auf Grund der minimalen Fenstergröße von 1024x768 (Breite kann noch verändert werden, aber nicht die Tiefe/Höhe) wird diese Nutzung eher mehr eine Qual. Nur mittels xrandr (ab Version 1.3 und panning) kann vmware-player mit einem Betriebssystem bei 640x480 Auflösung verwendet werden. Es gibt allerdings einige Anwendungen, die bei 640x480 nicht mehr oder nur eingeschränkt verwendbar sind.
Vermutlich ist die Mindestfenstergröße von vmware-player unter Windows ähnlich und somit kann diese nur mit einem externen Monitor mit mindestens 1024x768 sinnvoll verwendet werden. Besser wird dies nur, wenn vmware in seinem virtuellen Fenster als Feature “panning mit gefangener Maus” einführen würde.
Die Anwendung “wine” stellt keine Emulation oder Virtualisierung dar. Es wurde bei wine die Windows-Umgebung für die Anwendungen nachprogrammiert. Somit können Windows-Programme ohne das Betriebssystem Windows gestartet und auch installiert werden. Einige Anwendungen, für die es unter Linux kein Pendant gibt, können so unter Linux zum Laufen gebracht werden. Es wird keine Windows-Lizenz benötigt, wie es mittels Dualboot, Virtualiserung oder Emulation erforderlich wäre.
Oftmals ist es jetzt bereits möglich einige Windows-Programme zu starten. Bei meiner Installation war als Standard Win XP voreingestellt. Wenn Programme von einer Partition mit installiertem Windows gestartet werden sollen, darf diese mit mount nur als read-only eingehängt sein. Es besteht sonst die Gefahr, dass auf dieser einige Konfigurationen verändert werden und Programme nicht mehr laufen. Manchmal ist es notwendig diese ein zweites Mal zu starten.
Nach diesem kleinen Versuch, sollte auf jeden Fall die Konfiguration aufgerufen werden und dort die einzelnen Reiter durchgegangen werden. Bei mir waren die meisten Werte bereits gesetzt. Nur bei Audio fehlten noch die Werte. Allerdings werden beim Anklicken von Test ein Vorschlag erstellt, der übernommen wurde.
Im Unterverzeichnis “ /.wine” befinden sich alle Dateien für die künstliche Windows-Umgebung. Mit folgendem kleinen Listing kann eine Übersicht über alle Dateien inklusive md5-Summen gespeichert werden.
Für die weitere Verwendung von wine mit Programmen und Installationen ist es gegebenenfalls sinnvoll ein eigenes Verzeichnis anzulegen und von dort aus die Installation von Programmen zu starten. Ansonsten sollte in entsprechendes Unterverzeichnis bei wine installiert werden.
In ein unten angegebenes Verzeichnis wurde erfolgreich von den PortableApps die Anwendung xnview installiert und gestartet.
Viele Anwendungen, die mit den Standardfunktionen (api, dll, vxd) von Windows auskommen, können mit wine verwendet werden.
Die Dateimanager mc (Midnight Commander) und Konqueror haben bereits alles Notwendige für den ftp-Zugang dabei. Beim Konqueror erfolgt der Aufruf durch die Eingabe des unten angegenen Beispiels in der Link-Adressleiste. Beim mc wird statt eines Dateipfades hintern cd das Gleiche eingegeben. Fehlt eine der notwendigen Angaben so erscheint beim Konqueror ein entsprechenden Eingabefenster (Login-Fenster).
Die beiden ftp-clients sind einfach zu bedienen und die Installation eines weiteren ftp-clients ist eigentlich nicht mehr notwendig.
Aus der Welt der Mathematik gibt es die fraktalen Figuren, die interessant zum Ansehen sind. In der Open-Source-Welt gibt es auch hier einige nette kleine Programme mit denen diese Figuren auf dem Bildschirm darstellbar sind und sich auch als Bild abspeichern lassen.
Mit dem Programm fraqtive lassen sich einfach schöne fraktale Mandelbrot-Bilder und fraktale Julia-Bilder erzeugen. Das Programm xaos erstellt Mandelbrot-Bilder mit komfortablen Zoomen in dem Bild.
Bei der Konvertierung ist nicht nur der gewählte Codec entscheidend, sondern auch die gewählte Auflösung und Bitrate. Bei 1920x1080, 24bit, 30 Frames/s und CD-Audio hätte unkomprimiert dies folgende Datenraten:
Eine kleine handliche Videocamera für HDTV mit H264 Komprimierung erreicht auf Grund der Rechenleistung nicht die maximal mögliche Komprimierung. Immerhin etwa 2-2,5 Mbyte/s (d.h. auf ca 1/70) ermittelte ich bei einer Kamera. Mit einer 4GB SD-Karte reicht das für 25 Minuten Aufzeichnung.