Normal bewege ich mich nur in der Linux-Shell, in den letzten Wochen habe ich aber ein paar Synchronisation- und Backup-Scripts unter MS-Windows angelegt.

Aus meiner Sicht  hat sich mit der Powershell einiges möglich, was ich mit Windows nicht für möglich hielt.

Verwirrend fand ich die neuen Möglichkeiten die in der „Aufgabenplanung“ integriert wurden. Nach der ersten Eingewöhnung funktionierte aber alles wie erwartet.

Robocopy

Das Tool eignet sich hervorragend zwei Verzeichnisse miteinander abzugleichen. Es werden dabei nur unterschiedliche Dateien aktualisiert. Mit eigener Option können auch Dateien die im Quellverzeichnis nicht mehr enthalten sind aus dem Zielverzeichnis entfernt werden.

Das Tool hat eine eingebaute Hilfe, die die Möglichkeiten gut beschreibt. Auf Wikipedia findet sich dazu ebenfalls eine Beschreibung.

WinRAR

WinRAR ist ebenfalls kein Tool was eine eigene Beschreibung benötigt. Die Möglichkeit es aus der Commandline zu verwenden, wird jedoch nicht sehr oft verwendet. Dabei bietet es hier alle Funktionen die aus der Ansicht gewohnt sind.

Hier ein kleines Beispiel mit dem aus einem Verzeichnis mit allen Unterverzeichnissen ein RAR-File erstellt wird. Dem File wird das aktuelle Datum angefügt.

For /f “tokens=1-3 delims=. ” %%a in (‘date /t’) do (set date=%%c%%b%%a)

echo %date%
call C:\Programme\WinRAR\rar a -m5 -r E:\RARBackup\backup_%date%.rar  E:\Backup\*.*

Parameter Erklärung

  • a  Fügt Dateien zu einem Archiv hinzu
  • -m5  Gibt den Komprimierungsgrad an 1 min .. 5 max
  • -r Alle Files in den Unterverzeichnissen werden ebenfalls berücksichtigt.
  • Erste Datei ist die Zieldatei
  • Zweiter Pfad ist das Quellverzeichnis

Wird die Rar.exe ohne Parameter aufgerufen werden alle Optionen ausgegeben.

Warum Commandline?

Commandline und Batch haben den Vorteil, dass die Befehle beliebig miteinander kombiniert werden können. Im Batch-File kann die Abfolge fix definiert und immer wieder ausgeführt werden. Mit der „Aufgabenplanung“ können diese dann zu beliebigen Zeiten ausgeführt werden.  Dieses Verhalten eignet sich besonders für die Erstellung von individuellen Sicherungen.

Man muss dafür kein SW/Computerspezialist sein

Was man eigentlich erreichen möchte, sollte man jedoch schon wissen. Eine Übersicht von möglichen Scripts findet sich im ScriptCenter.

Carpe Diem.

Schon seit einiger Zeit beschäftige ich mich mit der Erstellung von Backups von meinen Ubuntu-PC auf ein NAS.

Als Backup-SW wählte ich SBackup und RSync mit Grsync-GUI.Diese zwei Arten sind für mich notwendig, da ich ein Backup ohne Mediendateien auf NAS mache. Die Mediendateien werden unkomprimiert übertragen, um von anderen PC’s darauf zugreifen zu können.

SBackup

War schnell eingerichtet und kann mit FTP-Laufwerken umgehen. Leider ist nirgends ersichtlich ob ein Backup ausgeführt wird oder wurde. Die Kontrolle kann nur direkt am NAS durchgeführt werden. Bisher gab es noch keine Probleme, einen richtiger Test mit Wiederherstellung habe ich aber jedoch nicht gemacht.

GRsync

Durch die Oberfläche kann eingestellt werden welche Quelle in welches Ziel kopiert werden soll. Leider kann als Ziel nicht direkt ein  FTP-Server verwendet werden.

Als Umweg kann mit dem Programm „curlftpfs“ ein Pfad, auf einem FTP-Server, als Ordner gemounted werden. Folgende Schritte sind notwendig damit „curlftpfs“ funktioniert:

  • Installieren von Paket mit atp-get

    sudo atp-get install curlftpfs

  • Benutzer in Gruppe „fuse” einfügen.
  • Auf /etc/fuse.conf Leserechte vergeben

    sudo chmod a+r /etc/fuse.conf

  • einen Ordner anlegen in den FTP gemounted werden soll. In diesem Verzeichnis sollten Lese- und Schreibrechte für den Benutzer vergeben werden.

Zum Abschluss mit dem Befehl

curlftpfs user:password@ip/path /media/nas

den FTP-Ordner einbinden.

Der Befehl

fusermount -u /media/nas

trennt die Verbindung wieder. Für beide Befehle sollten keine SuperUserrechte notwendig sein. Weitere Quellen hierfür finden sich auf der Ubuntuuser-Wiki Seite.

Carpe Diem.

Seit kurzen bin ich Besitzer eines IPods. Mit dem Kauf dieses Gerätes sind gleichzeitig neue Anforderungen für meinen Medienbibliothek entstanden. Bilder, Musiktitel und Filme gehören Verwaltet und mitunter auch bearbeitet.

Hier möchte ich zuerst auf die Bearbeitung von Audiofiles eingehen. Im normalen Umgang mit Musik-Files und Podcasts kommt man sehr selten in die Verlegenheit, eine Änderung durchführen zu wollen.

Erst wenn man Audiofiles besitzt die gleichzeitig mehrere Musiktitel enthalten oder von Podcasts nur kleine Ausschnitte behalten möchte, stellt sich die Frage nach einem geeigneten Werkzeug.

Für mich fiel die Wahl auf Audacity welches unter Windows und Linux ohne Probleme funktioniert. Dieses Programm stellt Basisfunktionen wie kopieren, ausschneiden, einfügen, löschen und trennen zur Verfügung.  Eine vollständige Liste der Funktionen findet sich unter AudacityWiki.

Links:

  • Für Windows wird das File lame_enc.dll benötigt
  • Lame mit Ubuntu installieren
sudo aptitude install lame

Mit den Comamndline-Tools habe ich nicht immer nur Freude, auch wenn alle Optionen in der Hilfe ersichtlich sind, kommt es doch oft auf die Reihenfolge und ein paar Feinheiten an, die ich gerne vergesse. Deshalb gibt es hier ein paar Beispiele zu den oben genannten Tools.

Grep

Der Befehl dient zum durchsuchen von Dateien nach einem Text. Für die Suchpattern kann normaler Textvergleich und Regular Expressions verwendet werden.

Die von mir am häufigsten verwendeten Opdionen sind:

  • -r recursiv
  • –exclude-dir=
  • –include-dir=
  • -i ignoreCase
  • -e Suchtext (Regular Expression)
  • -f Filematch
  • -n mit Zeilennummer

Eine Beispielzeile zum Durchsuchen aller .cs und .aspx Dateien, mit Schreiben in eine Datei.

grep -r –exclude-dir=.svn –include=’*.{cs,aspx}’ -i -n -e ‘suchtext’ ./ > search.txt

Die Zeichen ‘./’ stehen für den aktuellen Pfad und werden hier als Startpfad verwendet. Wenn es keine Unterverzeichnisse gibt,

kann auch ‘* ‘ für alle Dateien verwendet werden.

Suchen von Wort in Textfile:

grep ‘error’ error.log

Find

Dient zum Finden von Dateien und ist ein optimaler Partner von Grep. Hier finden sich auch sehr viele gute Beispiele am Ende der Man-Page.

Das von mir am meisten verwendete Kombination ist:

find . -iname “*Suchtext*”

Falls dann noch Feinheiten abgestimmt werde sollen, kann auch mittels grep ein weiterer Filter eingerichtet werden.

find . -iname “*Suchtext*” | grep filter

Find und Grep kann mit hilfe von Cygwin auch unter Windows verwendet werden.

LogParser Windows

Dieser passt hier nicht ganz hinein, da es sich hier um keinen Unix/Linux Shell Befehl handelt sondern von Microsoft kommt.

Hier ist  im Download ein Handbuch mit einer sehr genauen Beschreibung enthalten.

Der LogParser kann Text-Files mit SQL-Abfragen durchsuchen. Das ist zwar nicht immer leichter als mit grep, dafür kann aber gezielt auf eine Spalte im Ausgabefile abgefragt werden.

Felder definieren

Nur weil ein Text-File eine Struktur hat heißt das noch nicht das auch ein Header mit den Spaltennamen vorhanden ist. Diese kann aber leicht manuell in das File eingefügt werden.

Beispiel für Headerdefinition:

#Fields: field1 field2 …

Beispiel für Abfage auf ein W3C File wie es von IIS erzeugt wird.

LogParser “select coun(*) from file.txt where field2 like ‘%errer%’” -i:w3c

Ob eine Verwendung von grep oder LogParser besser ist natülich für jeden selber zu entscheiden.

Links zu ausführlicheren Beschreibungen

Carpe Diem.

Anlässlich des ersten Jahrestages meines Hundes in meiner Familie, kommt hier ein Artikel über meinen Hund.

In dem letzten Jahr ist einiges passiert. Sie hat sich von einem kleinen sehr lebendigen Hundebaby in eine sehr lebendige Hündin verwandelt. Auf den Weg dorthin, hat sie einige Halsbänder, Leinen und Spieleknoten verbraucht, zu unserem Glück aber keine Möbel beschädigt.

Tiefpunkte

Zu Schwierigkeiten in unserer Beziehung kamen wir erst, als ich versuchte meine Vorstellungen, von einem folgsamen Hund, an ihr zu verwirklichen. Der Wunsch meines Hundes jeden Besucher oder Fremden das Gesicht abzuschlecken, stellte sich als große  Anforderung heraus.

Auch ein Interesse an einem Spaziergang, bei dem nicht gelaufen, gespielt oder sonst etwas Besonderes passiert, ist einfach nicht vorhanden. Der Kinderwagen scheint auch immer beim Hund an zu ecken oder ist es doch der Hund der damit einfach nicht klar kommt.

Dadurch hat sich ihr Kontakt mit fremden Personen drastisch minimiert. Sie kann nur eingeschränkt bei Familienspaziergang mitgenommen werden. Selbst bei Besuchen, kann sie nur Menschen mit Hundeerfahrung zugemutet werden.

Trotzdem mit Hund

Mit all den Problemen die sie mit ins Leben gebracht hat, könnte sich schon die Frage stellen, warum wir sie noch haben. Der Grund ist sie hat auch Vorteile!

Sie kann folgende Punkte perfekt:

  • Füße wärmen, wichtig an kalten Tagen.
  • Mit Kindern sehr gut umgehen. Ist auch immer für jedes Abenteuer zu haben.
  • Zeigt einem die Umgebung.
  • Stellt einem jede Person vor, die auch einen Hund hat.
  • Man merkt an wie wenigen Tagen im Jahr ein Dauerregen vorkommt.
  • Sie ist absolut friedlich gegenüber allen Lebewesen, auch wenn man das bei ihrer stürmischen Art nicht sofort glaubt. Ich bin auch keinem böse, wenn er sie nicht streicheln möchte.

Der wichtigste Punkt ist natürlich die Verträglichkeit mit Kindern und die Töchter lieben sie über alles.

Gut für mich ist, dass mit ihren bald 15 Monaten auch schon die ersten ruhigen Seiten an diesem Wirbelwind zum Vorschein kommen.

Carpe diem.

Gleich vorab, der IIS-Server übernimmt einem nicht die Verwaltung von Daten die in mehreren Threads verwendet werden, sondern führt Session abhängige Requests seriell aus.

Aber zuerst einmal wie ich auf das Problem komme und danach welche Möglichkeiten vorhanden sind.

UPDATE

Die Verwendung der Abfrage “Response.IsClientConnected” hat sich als problematisch heraus gestellt. Es scheint als währen Client Benachrichtigungen mittels JS Intervallsfunktion ein besserer Ansatz. Siehe selfhtml

Mein Problem

Der Ausgang war ein Request der eingegebenen Formdaten speichert und mit den neuen Daten ein Bild berechnet. Das Bild ist jedoch für den weiteren Arbeitsfluss nicht entscheidend. Trotzdem musste bis zur Fertigstellung gewartet werden.

Die erste Idee war es, den Request mittels Ajax aufzuteilen, um dem Benutzer sofort, nach Speicherung der Daten, die Kontrolle zurück zu geben. Da viele der Daten nur in der Session vorhanden waren und auch die generierten Daten in der Session landen sollten, wurde im Erstellungshandler die Session benötigt.

Bis hierher besteht noch kein Problem. Zu einem Problem wird es erst, wenn während der Bearbeitung ein weiterer Request geschickt wird. Hier wartet der IIS mit der Bearbeitung, bis die schon laufenden Requests beendet sind. Das ist grundsätzlich auch sinnvoll, in meinem Fall jedoch nicht erwünscht.

Eine andere Problembeschreibungen befindet sich auf stackoverflow.

Lösungsmöglichkeiten

Die Lösung ist stark abhängig von dem wie sich die Anwendung verhalten soll. In meinem Fall beenden alle Requests, den im Hintergrund laufenden Request. Dadurch kann ich die Requestverwaltung im JavaScript belassen und muss nicht ständig den Server mit neuen Requests fragen, ob schon ein Ergebnis besteht.

Für den ersten Fall gibt es hier auch noch ein Codebeispiel, welches den Request abbricht. Als Ajax-Framework wird hier Mootools verwendet.

var RequestHandler = new Request({url:’myWebsite’,link:’cancel’),

var funktionHash = {

startRequest: funktion() {abortAbleRequest.Send();},

abortRequest: funktion(){abortAbleRequest.Send(‘abort=true’);}

}

funktionHash.startRequest();

funktionHash.abortRequest();

Das ‘abort=true’ hat im Grunde keine Bedeutung für den Request, kann aber am Server abgefragt werden, damit Bearbeitung nicht noch einmal gestartet wird. Link ‘cancel’ sagt dem Request das bestehende abgebrochen werden.

if (Request[“abort”] == null ||

!Request[“abort”].Equals(“true”)) {

while(Response.IsClientConnected){

}

}

Über “Response.IsClientConnected” kann geprüft werden, ob der Request noch verwaltet wird.

Diese Lösung hat in meinem Fall ein gutes Ergebnis erzielt. Es handelt sich hier jedoch um Demo-Code und sollte vor einem Einsatz mit einigen Sicherheitsabfragen erweitert werden. Auch kann der Status für den Abbruch oft nicht bis zur eigentlichen Ausführung weitergereicht werden. In diesen Fällen sollte ein eigener Thread gestartet werden, der bei Bedarf abgebrochen werden kann.

Carpe Diem

Die Entscheidung für ein Backup-Medium habe ich schon getroffen.

Die Software fehlt

Jetzt müssen die Daten nur noch übertragen werden. Auf der UbuntuUser Seite gibt es eine Liste von Tools die ich als Ausgangspunkt verwendete.

Ausgewählt habe ich zwei Tools „sbackup“ und „rsync“. SBackup möchte ich verwenden, um eine Sicherung der System- und Benutzerdaten zu erstellen. Rsync soll Daten unkomprimiert zwischen zwei Datenbeständen abgleichen. Notwendig ist das für Bilder, auf die ich von mehreren Computern aus zugreifen möchte.

Getestet habe ich noch keines der Toools. SBackup ist schon installiert, hat jedoch beim Ausführen einer sofortigen Sicherung keine Reaktionen gezeigt. Nach einem Neustart und etwas warten, wurden jedoch Daten auf das NAS übertragen.

Bin gespannt wie sich das noch entwickelt.

Carpe diem.

Vor kurzen habe ich die Funktion „Favoriten“ entdeckt. Damit können Bilder leicht gekennzeichnet und bei der Betrachtungsfunktion als Gruppe angezeigt werden.

Das ist vorallem nützlich, wenn man nur eine eingeschränkte Auswahl, der auf der Speicherkarte enthaltenen Bilder, herzeigen möchte. Diese Vorauswahl wird jedoch von den bekannten Bilderverwaltungen nicht berücksichtigt und es werden immer alle Bilder übertragen.

Übertragen der gekennzeichneten Bilder

Da ich diese Funktion sehr gut finde und auch oft verwende, wollte ich auch die Möglichkeit haben die gekennzeichneten Bilder auf den Computer zu übertragen. Dazu habe ich ein Ruby-Programm geschrieben das genau diese Aufgabe erfüllt. Ruby ist auf dem Desktop zwar keine stark verbreitete Programmiersprache, kann aber sehr leicht installiert werden. Natürlich bin ich auch an der Programmiersprache interessiert, sonst währe eine GUI-Anwendung für den Anwender komfortabler.

Verwendung und Ruby-Version

Das Tool ist über die Konsole, egal ob Windows oder Linux, zu bedienen. Es werden dabei immer nur die Dateien übertragen, die seit der letzten Übertragung neu markiert wurden. Der Zielordner muss dabei nicht gleich bleiben. Die Namen der bereits übertragenen Files werden in einem lokalem File gespeichert und bei jeder Übertragung abgeglichen.

Der Aufruf sieht wie folgt aus.

ruby CopyNewFavImg ../fileAufFotoaparat.txt /destination

Bei mir ist die Ruby-Version 1.9.1 installiert, von den verwendeten Funktionen sollten alle schon in 1.8.x enthalten gewesen sein. Extra prüfen konnte ich das jedoch nicht.

Download

Das Programm könnt ihr unter dem folgenden Link herunter laden.

PanasonicParser

Ich weise ausdrücklich darauf hin, das es sich hier um mein erstes Ruby-Programm handelt und ich keinerlei Garantie für das Verhalten des Programmes übernehme.

Carpe diem.

Wahnsinn bald ist Ubuntu 10.10 verfügbar und ich habe noch nicht einmal alle Neuerungen von 10.04 ausprobiert.
Bei einer Online Fotobestellung ist mir aber doch etwas aufgefallen, was sich wirklich verbessert hat.

Der Flash-Upload hat ohne Probleme funktioniert.

Daraufhin ging ich ans ausprobieren welche Flash-Anwendungen funktionieren. Als Flash-Anwendungen verstehe ich auch Filme im Flash-Format.

Folgendes hat funktioniert:

  • Blog mit eingebetteten Medien
  • YouTube, war bis auf Aussetzer, bei Sprüngen im Verlauf, in Ordnung
  • Flash-Auswahl und Animationen von Spieleseiten, wie TotalWar und Blizzard waren bedienbar
  • Fileupload bei Online-Fotoausarbeitungsanbietern

Als Browser diente FireFox, in der von Ubuntu bereitgestellten Version. Dazu verwendete ich das Adobe-Flash-Plugin, das beim ersten Aufruf einer Flash-Seite vorgeschlagen wurde.

Carpe diem

Seit dem letzten Eintrag konnte ich noch ein paar Details zu ImageMagick und C# herausfinden.

Verarbeitung im Speicher

Ein Standardfall ist die Bearbeitung von Bilddaten im Speicher. Imagemagick ist aber auf die Konvertierung von Dateien spezialisiert. In einem beiliegenden Visual Basic Script ist zwar ein Beispielscript enthalten wie das funktionieren könnte, dieses liefert jedoch keine befriedigenden Ergebnisse. Mit VisualBasic.Net erzeugt der gleiche Code, einen Fehler wegen Sicherheitsverletzung bei der Umwandlung von Rückgabedatentypen.

Geschwindigkeit der Konvertierung von PDF zu JPG

Die Geschwindigkeit, bei der Konvertierung, ist im Vergleich mit der API von PDF-Tools nicht überzeugend.

Der Vergleich ist aber auch sehr streng, da die Lösungen von PDF-Tools auf PDF-Umwandlung spezialisiert ist und ImageMagick für einen allgemeinen Einsatz ausgelegt ist. ImageMagick verwendet das Tool „GhostScript“ zum laden der PDF-Files, wo wahrscheinlich auch die meiste Zeit verbleibt.

Fazit

Für Lösungen in denen PDF-Files nicht ständig für die Anzeige konvertiert werden müssen, sondern nur einmalig beim Import, ist ImageMagick sicherlich ausreichend.

Wird ImageMagick schon in anderen Bereichen für Bildkonvertierung verwendet, macht es natürlich Sinn es  auch für die PDF Umwandlung zu verwenden.

Diese Einschätzung bezieht sich ausschließlich auf .Net und C#, für andere Programmiersprachen muss das Verhalten sicher extra geprüft werden.

Auf die Lizenz von GhostScript sollte bei der Verwendung ebenfalls geachtet werden, da GPL nur für die nicht kommerzielle Nutzung gedacht ist.

© 2012 Digitales Umfeld Suffusion WordPress theme by Sayontan Sinha