Januar 17, 2010
Mein neues Spielzeug, der WD TV Live, kann Thumbnails (Vorschau-Bilder) zu einer Video-Datei anzeigen, wenn im selben Ordner eine jpg-Datei (am besten mit 120×180 Pixeln) mit dem selben Namen wie das Video liegt. Zur Datei video.mkv wird also z.B. video.jpg angezeigt.
Ich hab mir also ein Shell-Script besorgt, dass aus den Videos automatisch die Bilder generiert. Ich hab mich da für Sekunde 45 entschieden, weil bei einigen Filmen ganz am Anfang ja erstmal nutzlose Trailer der beteiligten Unternehmen laufen… Weil es vor a120llem bei 720p- oder 1080p-Videos ne Weile dauern kann, bis da ein einzelnes Bild generiert ist, hab ich dann (weil ich nicht so lang warten wollte ;) heute ein Shell-Script geschrieben, das vier Dateien auf einmal abarbeitet (ich hab nen Quad-Core). Das Script sollte man auch ohne allzu großen Aufwand anpassen können, dass es andere Aufgaben mit mehr oder weniger gleichzeitigen Jobs parallel abarbeitet (bald vielleicht auch meine Log-Files…).
Vorraussetzungen: ffmpeg, imagemagick
#!/bin/bash
#set -x
# file types:
TYPES='.+\.(mkv|avi|mpg|mpeg|mov|wmv|mp4|flv)$'
# make thumbnail at second ## of the movie
OFFSET=45
# number of parallel processes
WORKERS=4
NL='
'
queue_put() {
queue_name=$1
value=$2
if [ -n "${!queue_name}" ]; then
queue_val="${!queue_name}"
eval "$queue_name=\"$queue_val$NL$value\""
#read $queue_name <<< "$queue_val$NL$value"
else
read $queue_name <<< "$value"
fi
}
queue_pop() {
queue_name=$1
var=$2
queue="${!queue_name}"
if [ -n "$queue" ]; then
index=$(expr index "$queue" "$NL")
read $var <<< "${queue%%$NL*}"
if [ $index -eq 0 ]; then
read $queue_name <<< ''
else
eval "$queue_name=\"${queue#*$NL}\""
# read $queue_name <<< "${queue#*$NL}"
fi
fi
}
echo "searching for missing thumbnails..."
allfiles=$(find . -regextype posix-extended -iregex "$TYPES" -exec /bin/bash -c "file=\"{}\"; exit \$(test ! -f \"\${file%.*}.jpg\")" \; -printf '%p\n')
dir=$(mktemp -d)
work() {
echo "worker $workerid is starting up..."
sleep .25
pipe="$dir/job$workerid"
while [ -p "$pipe" ]; do
echo READY > "$pipe"
read file < "$pipe"
if [ "$file" = "DONE" ]; then
echo "worker $workerid is shutting down."
exit 0
fi
thumb=${file%.*}.jpg
echo
echo
echo
echo "worker $workerid processing $file..."
ffmpeg -itsoffset -$OFFSET -i "$file" -vcodec mjpeg -vframes 1 -an -f rawvideo -y -v -1 "$thumb"
mogrify -resize 120x180 "$thumb"
done
return 0
}
masterpid=$$
workerid=0
workers=( )
while [ $workerid -lt $WORKERS ]; do
mkfifo "$dir/job$workerid"
work &
workers[$workerid]=$!
let workerid++
done
sleep 3
while [ -n "$allfiles" ]; do
workerid=0
while [ -n "$allfiles" -a $workerid -lt $WORKERS ]; do
pipe="$dir/job$workerid"
if [ -p $pipe ]; then
response=$(cat < $pipe)
if [ "$response" = "READY" ]; then
queue_pop allfiles file
echo $file > "$pipe"
fi
fi
let workerid++
done
sleep .25
done
workerid=0
while [ $workerid -lt $WORKERS ]; do
cat "$dir/job$workerid" > /dev/null
echo DONE > "$dir/job$workerid"
wait ${workers[$workerid]}
let workerid++
done
rm -rf "$dir"
Übrigens: Ordnern kann man mit einem folder.jpg ein Bild zuordnen.
Juni 22, 2009
hier gibt es ein Video eines Gecko-Browsers, der in mehrere Prozesse aufgeteilt ist. Das alles ist noch in einer sehr frühen Phase und es wird noch eine ganze Weile bis zum Release einer Firefox-Version, die für Tabs und Plugins extra Prozesse verwendet, dauern. Ein erster Schritt ist aber getan.
Februar 20, 2009
ich brauche ein Icon für den Button zum Ändern des Schlüsselworts in Organize Search Engines. Bisher habe ich dazu das Eigenschaften-Icon missbraucht, der wird jetzt aber für die Eigenschaften gebraucht.

Mal schauen, ob das mit dem Lazy Web auch hier funktioniert…
Februar 15, 2009
Ein weiteres altes SEO-Feature, das bald Einzug in Organize Search Engines erhält: das Umsortieren der Suchmaschinen direkt im Auswahlmenü per Drag & Drop.

Dass das letzte noch fehlende Feature (das mir einfällt), das Kontextmenü der Suchmaschinen im Drop-Down, noch kommt, bezweifle ich. Der Engine-Manager ist imho sehr viel bequemer, als es so ein je Kontextmenü sein könnte.
Update 17.02.: Der Backport vom 3.1-Branch auf Firefox 3 hat erstaunlicherweise auch eine kleine Änderung gebraucht :-). Damit ist Version 1.5 fast fertig.
Februar 10, 2009
Ich habe endlich die Lösung gefunden (und eingebaut), das ewige Problem zu lösen, dass nach dem Anpassen der Toolbars nichts mehr funktioniert: die Methoden der Searchbar nicht einfach durch eigene ersetzen, sondern ein eigenes XBL-Binding schreiben, dass das Standard-Binding erweitert (extend).
Damit löst sich das Problem mit dem Anpassen einfach in Luft auf, weil immer wenn die Suchleiste neu initialisiert wird, mein Code genauso neu aufgerufen wird. Das Binding hat mir dann außerdem auch erlaubt, einigen Kompatibilitäts-Code für Thinger (mehrere Suchleisten, leider nur bis Fx 2) rauszuschmeißen, weil mein Code ganz von selbst mitgeladen wird.
So im Nachhinein ist das sowieso die viel sauberere Lösung, aber das hat damals halt mit einer einzigen ersetzten Methode angefangen und ist dann immer mehr geworden…
(Nein, ich erwarte nicht, dass das ein Leser hier versteht, oder dass es ihn interessiert. Aber ich wollte es mal loswerden.)
Februar 1, 2009

Search-Plugins ohne Gefummel in den xml-Dateien bearbeiten.
Januar 31, 2009
Da ich weiß, dass darauf mindestens eine Person gewartet hat, und das schon mehr ist als bei den meisten der (viel zu seltenen) Postings hier, kommt hier jetzt also ohne lange Einleitung meine Facharbeit…
Thema: Numerische Verfahren zur Nullstellenberechnung (mit Computerereinsatz)
Bitte auf keine gefundene Fehler hinweisen, sie ist eh schon abgegeben und so muss ich mir (zumindest bis zur mündlichen Prüfung) keinen unnötigen Kopf drum machen.
PS: Die Quelltexte stehen aus alter Tradition MPL/GPL/LGPL lizenziert. Die Arbeit selbst unter der Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.
Oktober 12, 2008
Ich bräuchte ein paar Links zu (legalen!) Seiten, auf denen Adblock Plus nichts ausrichten kann, weil Popups z.B. erst bei einem Klick geöffnet werden und das entsprechende Script direkt in der Seite steht, oder ein (nicht nachgeladenes) Anti-Adblock-Script in die Seite eingebunden ist. (Oder aus sonst einem anderen Grund, außer dass die Adresse eines Skripts/Bildes/Objekts zu unregelmäßig ist.)
(Ja, es geht um das hier.)
Juli 6, 2008
ich bin die nächste Woche nicht zu Hause. Weil hier ständig neuer Kommentar-Spam eintrudelt, sind Kommentare (und Track-/Pingbacks) bis ich wieder da bin gesperrt.
System of a Down – War?