Windows aktualisiert automatisch Verknüpfungen

Hallo Welt,

hier mal ein kleines Windows Mysterium: Ich habe einige Projekte in einer Dropbox, um Ordnung zu schaffen gibt es an mehreren Stellen Verknüpfungen auf bestimmte Ordner. Da Windows in Verknüpfungen keine relativen Pfade erlaubt, habe ich eine Umgebungsvariable %Projekte% eingeführt, die auf den entsprechenden Pfad in der Dropbox verweist, damit auf jedem Rechner mit Zugriff auf die Dropbox die Verknüpfungen funktionieren. Jetzt kam das Problem auf, dass viele der Verknüpfungen automatisch aktualisiert werden und zwar mit dem absoluten Pfad statt dem „getricksten relativen“ Pfad mit der Umgebungsvariable. Nicht auf jedem Rechner ist die Dropbox unter C:\Dropbox zu erreichen, dies ist also ein durchaus nerviges Problemchen. Nach einiger Recherche kann ich nun aber sagen: Das Mysterium der wandelnden Verknüpfungen ist gelöst!^^
Windows überwacht die Ziele von Verknüpfungen (afaik nur in einem NTFS Dateisystem, keine Garantie auf diese Aussage) und sobald sich das Ziel ändert, wird die Verknüpfung entsprechend angepasst. D. h. wenn das Ziel ein Ordner ist, dann wird die Verknüpfung aktualisiert, sobald der Zielordner umbenannt oder verschoben wird und danach das nächste Mal die Verknüpfung benutzt wird. Windows trackt dabei die Zielordner über deren GUID in der Dateitabelle. Das Setzen der Verknüpfungen auf Schreibgeschützt verhindert das Aktualisieren durch Windows.

Umstellung auf WordPress

Nachdem ich jetzt lange Zeit alles manuell gemacht habe, habe ich jetzt doch auf WordPress umgestellt, zuerst nur, um es einfach mal auszuprobieren, es gefällt mir allerdings recht gut, so dass ich erst einmal dabei bleiben werde. Alles, was WordPress kann, kann ich auch (und habe ich zu großen Teilen schon selbst gemacht), aber es ist doch recht komfortabel … wenn man es denn endlich mal eingerichtet hat, die Theme-Auswahl fällt recht schwer, aber auch technisch läuft es noch nicht so wie ich will, denn die Umstellung auf meine Domain will einfach nicht richtig funktionieren, da muss ich wohl noch die Ordnerstruktur anpassen, aber das mache ich später, wenn ich die Zeit dazu habe. Alle alten Artikel sind jetzt auch hier zu finden und da es jetzt einfacher, vor allem aber schneller geht, werde ich vielleicht auch etwas öfter schreiben.

Google Update Setup funktioniert nicht mehr

Mit dieser Fehlermeldung nerven mich derzeit alle Produkte von Google, wenn ich versuche sie zu installieren, heißt, ich kann kein Google Produkt installieren.

Google Update Setup funktioniert nicht mehr

Google Update Setup funktioniert nicht mehr

Für manche ein Segen, ich aber möchte gerne Earth und Drive haben, also auf an die Fehlersuche.

Nach einigem Googeln stellt sich heraus, dass derzeit (1. Mai 2012) nichts zu diesem Problem zu finden ist. Es gibt viele Anleitungen zum Deinstallieren des Google Update Service, allerdings hilft das nicht, wenn der Service nicht funktioniert. Denn zum Installieren von Google Produkten braucht man entweder diesen Service, oder die komplette Installationsdatei, diese aber wird über den Google Update Service heruntergeladen.

Demnach gibt es zwei Lösungsansätze:

  1. Service reparieren
  2. Installationsdatei nutzen

Um den Service zu reparieren, habe ich ihn komplett aus dem System entfernt und danach neu installiert. Um ihn zu entfernen, reicht es, eine der zuhauf zu findenden Anleitungen zu nutzen. Neu installiert wird der Service ganz einfach durch die Installation eines Google Produkts (in meinem Falle Earth und Drive).

Ist an dieser Stelle der Fehler behoben, viel Spaß mit dem Google Produkt, für mich hieß es allerdings immer noch: Google Update Setup funktioniert nicht mehr. Es muss wohl noch eine andere Fehlerquelle geben, die ich aber nicht gefunden habe.

 

Kommen wir zu Möglichkeit zwei, das Nutzen der Installationsdateien. Klingt ganz einfach, aber wie soll man da ran kommen? Für Google Earth gibt es in den Hilfethemen einen Link dazu, allerdings nicht immer einen aktuellen, für Google Drive ist leider nichts zu finden.

Nach einigem Herumprobieren habe ich herausgefunden, dass der Update Service zumindest im abgesicherten Modus funktioniert, dort allerdings endet es dann beim nicht gestarteten Windows Installationsservice, der sich auch nicht manuell starten lässt (liegt am abgesicherten Modus).

Aber: die Installationsdateien wurden heruntergeladen 🙂

Nach kurzer Suche habe ich sie im Ordner C:Program Files (x86)GoogleUpdateDownload{74AF07D8-FB8F-4D51-8AC7-927721D56EBB}�.0.0.0 (Google Earth) und C:Program Files (x86)GoogleUpdateDownload{3C122445-AECE-4309-90B7-85A6AEF42AC0}�.0.0.0 (Google Drive) gefunden.

Die Ordner mit den geschweiften Klammern mögen auf anderen Systemen anders heißen, einfach den Google/Update/Download Ordner durchforsten.

Nach einem Neustart im normalen Betrieb lassen sich die beiden Programme ganz normal installieren.

 

Möglicherweise können die Dateien auch in temporären Ordnern landen, wenn sie nicht im oben angegebenen Pfad sind, einfach mal Windows/Temp und andere temporäre Ordner durchsuchen. Wer nicht weiß, wo der standard Temp Ordner ist, kann dies herausfinden, indem er echo %TEMP% oder echo %TMP% in die Eingabeaufforderung eintippt.

Fortschritt von LaTex Projekten anschaulich machen

Wenn man längere Texte mit LaTex schreibt und zu unterschiedlichen Zeitpunkten einen Zwischenstand erzeugt, dann kann es oft wünschenswert sein, diesen Zwischenstand mit einem anderen zu vergleichen.
Um dies zu erreichen kann man das Tool latexdiff benutzen (http://tug.ctan.org/tex-archive/support/latexdiff). Dieses vergleicht zwei LaTex Dateien und erzeugt aus ihnen eine neue LaTex Datei, die die Änderungen kenntlich macht.

Jetzt gibt es aber oft das Szenario, dass das LaTex Projekt nicht in einer einzelnen Datei gepflegt wird, sondern in mehreren Dateien, die mittels include oder input in die Hauptdatei eingebunden werden.
Um solche Projekte dennoch mit latexdiff verarbeiten zu können, müssen sie zuerst in eine einzelne Datei kopiert werden, dafür gibt es ebenfalls ein Tool, nämlich latexpand (http://www.ctan.org/pkg/latexpand).

Das dritte Programm in dieser Reihe ist ein Versionierungssystem, in meinem Fall Subversion.
Um also den Fortschritt zwischen zwei Revisionen des LaTex Projektes in der resultierenden PDF Datei zu veranschaulichen, müssen alle .tex Dateien in ein Dokument kopiert werden (zwei Mal, ein Mal pro Revision), dazu müssen noch zwei unterschiedliche Revisionen ausgecheckt werden, und diese beiden Dokumente dann miteinander verglichen werden, damit das resultierende Dokument erstellt werden kann.
Per Hand ist das sehr viel Arbeit, daher habe ich ein Script geschrieben, dass diese Arbeit auf die Eingabe einer Revisionsnummer reduziert.

Das Script

Um das Script zu nutzen, müssen einige Voraussetzungen erfüllt sein:

  • Linux System
  • LaTex
  • Subversion
  • Zugriff auf alle Dateien der Revisionen
  • Zugriff auf SVN
  • Das Script latexpand.pl von http://www.ctan.org/pkg/latexpand muss im selben Verzeichnis sein wie dieses Script.

Das Script selbst muss nur ein wenig angepasst werden:

  • mainTex – der Name der Hauptdatei im LaTex Projekt
  • newRep – Pfad zum aktuellen Repository (working copy)
  • oldRep – Pfad zum älteren Repository (beliebige Revision, das Script aktualisiert auf die gewünschte Revision)

Achtung! Das Script nutzt Update und Commit von SVN. Damit es funktioniert und die working copy von SVN nicht ändert, sollte das Repository in einem anderen Verzeichnis erneut ausgecheckt werden, dies muss vor der Ausführung des Scripts geschehen, da es ein zweites Verzeichnis voraussetzt. Auch sollte das Script in einem eigenen Verzeichnis ausgeführt werden, um Dateinamenskonflikte zu vermeiden.
Das Script aktualisiert zum Schluß das SVN Repository, fügt die Datei aber nicht hinzu, dies muss einmalig manuell geschehen. Der Name der neuen Datei ist AlterDateiname.diff (also zum Beispiel main.tex.diff).

Eine letzte Hürde gibt es noch, sollte das Paket Hyperref genutzt werden, funktioniert es nicht auf Anhieb, es gibt zwei mögliche Lösungen:
Entweder das Paket Hyperref und alle, die es benutzen, auskommentieren (vor Nutzung des Scripts), oder in der resultierenden .tex.diff Datei die Zeilen

providecommand{DIFadd}[1]{{protectcolor{blue}uwave{#1}}} %DIF PREAMBLE
providecommand{DIFdel}[1]{{protectcolor{red}sout{#1}}} %DIF PREAMBLE

ersetzen durch

providecommand{DIFadd}[1]{{protectcolor{blue}#1}} %DIF PREAMBLE
providecommand{DIFdel}[1]{{protectcolor{red}protectscriptsize{#1}}}

(nach Nutzung des Scripts). Grund ist die Inkompatibilität des latexdiff Scripts mit dem Hyperref Package.

Nutzung des Scripts: ./createLatexSVNDiff.sh rev
Wobei rev die ältere Revisionsnummer ist, zum Beispiel: ./createLatexSVNDiff 42

Code Highlight von http://quickhighlighter.com

  1. #!/bin/bash
  2.  
  3. # This script takes two svn repository revisions and creates two big files,
  4. # both monolithic latex files with all includes and inputs merged into one large file.
  5. # The script then creates one latex file with the differences highlighted.
  6. # Other scripts used are latexdiff (see http://tug.ctan.org/tex-archive/support/latexdiff)
  7. # and latexpand (see http://www.ctan.org/pkg/latexpand).
  8.  
  9. # To accomplish this task, two concurrent repository revisions are needed, one with head revision, one with a custom revision.
  10. # The user executing this script has to have access to the subversion repositories and svn commands.
  11.  
  12. # Usage: createLatexSVNDiff rev
  13. # where ‚rev‘ is the revision number of the older repository, e.g. createLatexSVNDiff 42
  14. # The repositorys used are hardcoded into this file, you have to edit them up to your needs.
  15. # (Together with the name of the main latex file, that includes other.)
  16.  
  17. # Repository variables
  18. mainTex=file.tex
  19. oldRep=/full/path/to/2nd/repo/
  20. newRep=/full/path/to/working/copy/
  21. pathToScript=$(pwd)
  22.  
  23. echo $0 will update $newRep to head revision and $oldRep to revision $1
  24.  
  25. cd $oldRep
  26. svn up -r $1
  27. cd $newRep
  28. svn up
  29.  
  30. echo creating monolithic latex files
  31. cd $oldRep
  32. $pathToScript/latexpand.pl $oldRep$mainTex > old.tex
  33. mv old.tex $pathToScript/old.tex
  34. cd $newRep
  35. $pathToScript/latexpand.pl $newRep$mainTex > new.tex
  36. mv new.tex $pathToScript/new.tex
  37.  
  38. echo creating diff file
  39. cd $pathToScript
  40. latexdiff old.tex new.tex > $mainTex
  41. rm old.tex
  42. rm new.tex
  43.  
  44. echo moving diff file to repository and committing it
  45. mv $mainTex $newRep/$mainTex.diff
  46. cd $newRep
  47. svn ci $mainTex.diff -m "$mainTex.diff updated by $0"

Das Script kann heruntergeladen werden: createLatexSVNDiff.sh

Videos für den Western Digital TV HD Live Media Player kodieren

Diese kleine Wunderkiste spielt schon eine ganze Menge Videos ab, aber bei einigen Codecs bzw. Containern kommt sie dann doch nicht mehr mit, daher habe ich mit ffmpeg ein wenig getestet, wie man Videos am besten kodieren kann, damit sie abspielbar sind.
Falls einer der nachfolgenden Befehle nicht funktioniert, liegt es womöglich an der Version von ffmpeg oder an den (nicht) installierten Codecs. Ich habe ffmpeg nach dieser Anleitung installiert: HOWTO: Install and use the latest FFmpeg and x264


Mein Media Player ist ein WD TV Live HD Media Player (WDBAAP0000NBK aka [Live]) und spielt Formate ab, wie sie auf List of compatible media file types for all WD TV and WD Elements Play Products gelistet sind.
Beim Zielformat habe ich mich für den H.264 Codec in einem AVI Container entschieden, üblicher ist als Container MKV und der WDTV sollte das eigentlich auch abspielen, tut meiner aber nicht, mit AVI klappt es aber.


Zum konvertieren nutze ich folgenden Befehl (der Befehl besteht nur aus einer Zeile):
Befehl: ffmpeg -i file -pass 1 -vcodec libx264 -preset ultrafast -b:v 4096k -f h264 -an -y /dev/null && ffmpeg -i file -pass 2 -vcodec libx264 -preset ultrafast -b:v 4096k -acodec libmp3lame -ab 192k -ac 2 -y file.avi
Erklärungen:
-i file #die Eingabedatei
-pass 1#zur Verbesserung der Qualität wird die Datei im ersten Durchgang analysiert und erst im zweiten Durchgang neu codiert
-vcodec libx264 #der Videocodec für die neue Datei, hier H.265
-preset ultrafast #legt die Geschwindigkeit der Codierung fest, je schneller, desto größer die Datei, aber auch besser die Qualität, weitere mögliche Parameter sind fast und slow
-b:v 4096k #die Bitrate (Qualität), mit der das Video codiert wird, mit diesem Wert kann man ein wenig rumspielen, für mich sind die 4094k ein guter Wert
-f h264 #Festlegung des Codecs auf H.264
-an #die Audiospur ignorieren, da im ersten Schritt nur die Videospur analysiert wird
-y #bestehende Dateien werden ohne Nachfrage überschrieben (kann man weglassen, ohne was am Ergebnis zu ändern, nur muss man das überschreiben bestätigen)
/dev/null #das Video wird im ersten Schritt nur analysiert, deshalb wird die Ausgabe nicht gespeichert (zumindest nicht als Video, eine Logdatei wird erstellt)
&& #der zweite Befehl wird ausgeführt, sobald der erste fertig ist
-pass 2 #der zweite Durchgang, hier wird jetzt die Datei auch ausgegeben
-acodec libmp3lame #als Audiocodec wird mp3 verwendet
-ab 192k #Bitrate für Audio
-ac 2 #2 Audiokanäle (Stereo), mehr Kanäle kann der Media Player nicht ausgeben, dafür braucht man ein extra Gerät
file.avi #die fertig kodierte Datei


Um nicht immer alles abtippen zu müssen, habe ich mir ein Script geschrieben, das als Eingabe den Dateinamen erwartet.

Code Highlight von http://quickhighlighter.com

#!/bin/bash
read -p "file name: " file
ffmpeg -i $file -pass 1 -vcodec libx264 -preset ultrafast -b:v 4096k -f h264 -an -y /dev/null
    && ffmpeg -i $file -pass 2 -vcodec libx264 -preset ultrafast -b:v 4096k -acodec libmp3lame
    -ab 192k -ac 2 -y $file.avi

Das Script kann heruntergeladen werden: convert_video.sh


Noch ein Tipp, wenn auf dem System Tab-Vervollständigung aktiviert ist, kann man sich Schreibarbeit sparen mit:
echo Dateiname | ./convert_video.sh


Das obige Script funktioniert bei den meisten Videodateien, allerdings keine Regel ohne Ausnahme: Ist die Tonspur des Ausgangsvideos mit AAC codiert, so kann der WDTV die resultierende Datei nicht abspielen, trotz Umwandlung des Audiostreams in mp3. Zum Glück kann der WDTV AAC jedoch nativ abspielen, so dass das Script nur leicht geändert werden muss:
Ersetze -acodec libmp3lame -ab 192k -ac 2 durch -acodec copy, dadurch wird die bestehende Audiospur einfach in das neue Video kopiert.

ffmpeg für MP3s und WD TV Live HD Media Player

Der WD TV Live HD Media Player ist ein kleiner schwarzer Kasten (ich nenne ihn gerne Blackbox) von Western Digital, der Medien (Bilder, Musik, Videos) über das Netzwerk oder ein angeschlossenes USB-Medium abspielt.
Bisher hatte ich selten Probleme damit, doch seit ich Videos eher mit höherer Auflösung herunterlade (z. B. bei You Tube oder www.onlinetvrecorder.com) kommt es ab und an vor, dass die Blackbox ein Video nicht abspielen kann, das liegt dann meistens an den verwendeten Codecs für das Video, oder der Kombination aus Codec und Containerformat, z. B. kann meine Blackbox Videos, deren Videospur mit H.264 und Audiospur mit AAC codiert sind, nicht abspielen.
Es sollte theoretisch funktioneren (siehe List of compatible media file types for all WD TV and WD Elements Play Products), tut es aber nicht. Kann vorkommen, nervt aber.


Deshalb habe ich mich mit ffmpeg beschäftigt, eine Toolsammlung für die Konsole, um allerhand Konvertierungen mit allerhand Mediendateien durchzuführen. Geholfen haben mir dabei folgende Webseiten, aus denen die weiter unten stehenden Befehle hervorgegangen sind:

Tonspur aus Flash Video extrahieren

Um die Tonspur aus einem Flash Video (z. B. von You Tube) zu extrahieren und als mp3 zu speichern, gibt es zwei Möglichkeiten.
Erstens, die Audiospur in dem Video ist bereits im mp3 Format, dann muss es einfach nur kopiert werden:

FLV Video mit mp3 Tonspur
Befehl: ffmpeg -i Video.flv -f mp3 -acodec copy Sound.mp3
Erklärungen:
-i Video.flv #Eingabe Video Datei
-f mp3 #Ausgabeformat auf mp3 festlegen
-acodec copy #den Audio Stream kopieren, ohne ihn neu zu enkodieren
Sound.mp3 #Ausgabe mp3 Datei


Zweitens, die Audiospur ist in einem anderen Format, dann muss beim Extrahieren die Tonspur ins mp3 Format kodiert werden:

FLV Video mit anderer Tonspur
Befehl: ffmpeg -i Video.flv -f mp3 -ab xxx -acodec libmp3lame Sound.mp3
Erklärungen:
-ab xxx #Audio Bitrate, am besten auf den gleichen Wert wie bei der Originaltonspur setzen oder niedriger, höher hat keinen Sinn (es funktioniert zwar, aber wo nichts ist, kann auch nichts besser werden)
-acodec libmp3lame #Sound in mp3 umwandeln


Der zweite Befehl funktioniert auch bei Videos, deren Tonspur bereits im mp3 Format ist, aber durch eine erneute Kodierung kann die Qualität vermindert werden und es dauert länger, als das einfache Kopieren.