emacs –daemon mit launchd und KeepAlive

Problem

Wer den Emacs unter OSX als daemon starten will, kann das mittels launchd-Skript machen.

Das Verfahren wird schon an verschiedenen Stellen beschrieben.

Problematisch wird es nur, wenn im launchd-Skript “KeepAlive” benutzt wird, da der Emacs einen Fork macht, was launchd nicht mag – siehe Emacs-Bugeintrag.

Lösung

Als Workaround habe ich mir einen emacsdaemon.sh -Wrapper geschrieben:

$HOME/Library/Scripts/emacsdaemon.sh

#/bin/sh

EMACS_DIR=/usr/local/Cellar/emacs/HEAD/
EMACS=${EMACS_DIR}/bin/emacs
EMACSCLIENT=${EMACS_DIR}/bin/emacsclient

getPid(){
 PID=$($EMACSCLIENT -e '(emacs-pid)' 2> /dev/null)
 echo $PID
}
anywait(){
 for pid in "$@"; do
 while kill -0 "$pid"; do
 sleep 5
 done
 done
}

DAEMON_PID=$(getPid)

on_complete() {
 echo $(date +%R)' Ended.' >> "$LOG"
 kill -9 $DAEMON_PID
 exit
}

trap 'on_complete 2> /dev/null' SIGTERM SIGINT SIGHUP EXIT

case $1 in 
 status)
    if [ -z "$DAEMON_PID" ]; then 
       echo "Emacs-Daemon NOT RUNNING"
    else
       echo "Emacs-Daemon running PID:$DAEMON_PID"
    fi
 ;;
 stop)
    kill -9 $DAEMON_PID
    exit 0
 ;;
 launchd)
    test -z "$DAEMON_PID" && {
        $EMACS -daemon
        sleep 1
    }
    DAEMON_PID=$(getPid)
    test -z "$DAEMON_PID" && {
       echo "not running -> exit"
       sleep 2
       exit 1
    }
    anywait $DAEMON_PID
 ;;
 wait)
    anywait $DAEMON_PID
 ;;
esac

EMACS_DIR sollte evtl angepasst werden

$HOME/Library/LaunchAgents/gnu.emacs.daemon.plist

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
 <key>Label</key>
 <string>gnu.emacs.daemon</string>
 <key>ProgramArguments</key>
 <array>
 <string>~/Library/Scripts/emacsdaemon.sh</string>
 <string>launchd</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
 <key>KeepAlive</key>
 <true/>
 <key>EnableGlobbing</key>
 <true/> 
 <key>ServiceDescription</key>
 <string>Gnu Emacs Daemon</string>
 </dict>
 </plist>

Einsatz

Einfach einmal per launchctl laden und der Emacs ist nach jeden Login als daemon gestartet.

$ launchctl load $HOME/Library/LaunchAgents/gnu.emacs.daemon.plist
$ ps ax | grep -i emacs
52370   ??  S      0:00.08 sh /Users/xxx/Library/Scripts/emacsdaemon.sh launchd
52382   ??  Ss     0:03.18 /usr/local/Cellar/emacs/HEAD/Emacs.app/Contents/MacOS/Emacs -nw --daemon=^J3,4^J

 

VTech Storio2 (aka Innotab2) – Filme konvertieren

Meine Tochter hat dieses Spielzeug zu Weihnachten bekommen. Wer sich für die Specs interessiert kann ja hier ein Review lesen.

Es gibt einen Store in dem man etliche Sachen kaufen kann, u.a. auch Kinderserien. Da man diese Serien ja auch schon meisten mit dem SAT/Kabel-Receiver aufgenommen hat, wäre es schön diese auf einfache Weise auf den Storio2 zu bekommen

Tools

Für den Konvertiervorgang benötigt man folgendes:

  1. ffmpeg – das sollte bei den meisten Linuxdistributionen dabei sein, für den Mac kann man MacPorts oder diese Anleitung benutzen.
    Für Windows-Nutzer gibt es ffmpeg prinzipiell auch, nur mein Shellscript (Punkt 2) wird nicht ganz so leicht funktionieren
  2. Meine Skripte, die ich mit der Zeit für das Storio2 sammeln werde. Zur Zeit beschränkt sich das noch auf das Video-Konvertieren
    Konkrekt ist das: https://github.com/boecko/vtech-innotab2-scripts/blob/master/video/video2storio.sh (TEXT-Version)

Vorgehen / Ablauf

Die fettgedruckten Zeichen sind Eingaben:

$ video2storio.sh BIBI_BLOCKSBERG.ts bibi_blocksberg1.avi \
       -ss 620 -t 1513
  • BIBI_BLOCKSBERG.ts ist das Aufnahmefile des Receivers – ein sogenannter MPEG-TS-Stream
  • bibi_blocksberg1.avi ist das zu erstellende File, dass auf die SD-Karte oder internen Speicher des Storio soll
  • -ss 620 bedeutet, dass der eigentliche Serie erst bei 10min 20sec der Aufnahme anfängt
  • -t 1513 bedeutet, dass das Konvertieren nach 25min 13sec stoppen soll

Ausgabe

Hier gibt es eine Rückfrage des Skriptes zu dem Format des Ausgansmaterial. Je nach dem wird der Film auf die korrekte Größe für das Storio2 konvertiert

Format des Ausgangsmaterials? 
1 -> 16:9 (Sendung ist in 16:9 ausgestrahlt worden)
2 -> 4:3 (Sendung ist in 4:3 ausgestrahlt worden)
3 -> 16:9 im letterbox (Sendung in 4:3 aber Bild ist eigentlich 16:9)
1
==========
ACHTUNG:
Um die Länge und Start anzugeben noch die Optionen -ss und -t übergeben
Benjamin Benjamin : 25min -> 1500
Heidi : 24min -> 1440
z.B.: Benjamin Blümchen ab 25 Sekunden ganz zu konvertieren (25min)
=> -ss 25 -t 1500
==========
Aktueller Befehl:
ffmpeg -i "BIBI_BLOCKSBERG.ts" -vcodec mpeg4 -vtag XVID -q:v 3 -s 483x272 -aspect 1.7777777777 -acodec libmp3lame -y -ab 64k -ss 620 -t 1513 "bibi_blocksberg1.avi"
Weitermachen?
<RETURN>
ffmpeg version 1.1 Copyright (c) 2000-2013 the FFmpeg developers
...
Input #0, mpegts, from 'BIBI_BLOCKSBERG.ts':
  Duration: 00:35:59.76, start: 50559.492322, bitrate: 2530 kb/s
    Stream #0:0[0x20](deu): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
    Stream #0:1[0xff]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 480x576 [SAR 8:5 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:2[0x100](deu): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 192 kb/s (clean effects)
Output #0, avi, to 'bibi_blocksberg1.avi':
  Metadata:
    ISFT            : Lavf54.59.106
    Stream #0:0: Video: mpeg4 (XVID / 0x44495658), yuv420p, 483x272 [SAR 1:1 DAR 483:272], q=2-31, 200 kb/s, 25 tbn, 25 tbc
    Stream #0:1(deu): Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16p, 64 kb/s (clean effects)
Stream mapping:
  Stream #0:1 -> #0:0 (mpeg2video -> mpeg4)
  Stream #0:2 -> #0:1 (mp2 -> libmp3lame)
Press [q] to stop, [?] for help
frame= 8485 fps= 31 q=3.0 size=   47402kB time=00:05:39.40 bitrate=1144.1kbits/s

 

Lion-Macs in der Active Directory – Homes auf netatalk-Server

Nehmen wir mal an, dass man einige Macs in die Active Directory integrieren will.
Das ist ja eigentlich straightforward, da es von Apple genug Anleitungen dazu gibt, wie man dabei vorzugehen hat.

Komplizierter wird es dabei schon, wenn man man abweichende HOME-Verzeichnisse für  Mac (AFP)-Clients haben will, während die Windows-Clients die Standard-Homes auf dem Windows-Server nutzen.

Das Home-Verzeichnis der Mac-Clients liegt dabei auf einem Unix/Linux/FreeBSD-Server

Im Prinzip sind es 3 Schritte die man dafür durchführen muss. Schritt 1 und 2 lasse ich erstmal mangels Zeit weg (werden aber benötigt), Schritt 3 ist der interessante.

Schritt 1: Intergration in die AD

-> Server Admin 10.6 Help: Konfigurieren des Zugriffs auf eine Active Directory-Domain

Schritt 2: Single Sign On/GSSAPI mit Netatalk

<to be filled> Stichworte: samba, net ads keytab, uams_gss.so, kinit

Schritt 3: Den Client zum richtigen Home bringen

Dieser Schritt ist ein wenig knifflig rauszufinden.

Die Apple-Dokumentation geht von ein und dem selben Home-Verzeichnis aus, das in der ADS unter homeDirectory steht.

Die Einstellung “Zu verwendendes Netzwerkprotokoll” aus der Apple-Doku steuert im Prinzip nur den Automounter des Unix-Subsystems, d.h:


# Protokoll AFP
/usr/libexec/od_user_homes joe
-> afp://;AUTH=NO%20USER%20AUTHENT@/UserShares/joe
# Protokoll SMB
/usr/libexec/od_user_homes joe
-> smb:///UserShares/joe

Das ganze wird über die Datei /etc/auto_home gesteuert:

#
# Automounter map for /home
#
+auto_home # Use directory service
#
# Get /home records synthesized from user records
#
+/usr/libexec/od_user_homes

Wie man sieht, wird das od_user_homes-Skript hier aufgerufen.


...
#+/usr/libexec/od_user_homes
+/usr/local/libexec/od_user_homes_linux

Den Aufruf ersetzen wir durch ein eigenes Skript

#!/bin/sh

/usr/libexec/od_user_homes $1 | grep -q $1 && {
echo "afp://;AUTH=NO%20USER%20AUTHENT@linuxserver.domain/$1"
}

Dies liefert die Linux-netatalk-Variante zurück, wenn der Original-Aufruf etwas zurückliefert. Im Prinzip kann hier alles stehen. Auch eine Snow-Leopard-Variante ist möglich, da dort od_user_homes gar nicht vorhanden.

Fazit

Wenn alle Schritte funktionieren hat man Mac-Clients mit automatisch zugewiesenen Home-Verzeichnissen auf einen Netatalk-Server.

ARD/ZDF Euro2012-Streams mit VLC multiplexen

EURO2012-Multiplexer (sinnvoll in Büros)

Man braucht:

  • OSX/Linux/whatever
  • aktueller VLC (am besten mit cvlc-Kommandozeilenclient)

Folgendes Script (vlcproxy.sh)


#!/bin/bash

case $(uname -s) in
Darwin)
VLC_BINARY=”/Applications/VLC.app/Contents/MacOS/VLC”
;;
*)
VLC_BINARY=$(which vlc)
;;
esac

VLC=”${VLC_BINARY} –intf=rc –sout-ffmpeg-strict=-2″

CHANNELS=””
case $1 in
ard|ARD)
PLAYLIST=http://metafiles.gl-systemhaus.de/wdr/ARD/ARD_Event2_geo.m3u8 #original aus iOS-App von Squid-Log
PLAYLIST=http://wdr_ios_fsev_geo-i.akamaihd.net/hls/live/201764/1/playlist1x.m3u8
$VLC $PLAYLIST –sout ‘#standard{mux=ts,dst=:8181,access=http}’
;;
zdf|ZDF)
;;
*)
echo “USAGE: $0 ard oder $0 zdf”
;;
esac

Danach auf dem Client die URL im VLC öffnen
http://SERVERIP:8181

Amazon: Mein Kindle aufräumen

Wer schon mal versucht hat seine persönlichen Dokumente in der “Mein Kindle”-Seite bei Amazon aufzuräumen, kennt das Problem.

Nach jedem Löschen eines der zahlreichen Dokumente (z.B. von calibre erstellte News-Ebooks) lädt sich die Seite neu und man muss wieder warten, bis der nächste Löschendialog aufgemacht werden kann.

Doch es gibt eine einfache Lösung.

Voraussetzung

Man benötigt einen Browser mit einer Javascript-Konsole. D.h. das kann der Safari, Chrome  (dort heisst es Fehlerkonsole) oder der Firefox (mit Firebug) sein.
Update: Man kann sich einfach ein Bookmarklet bauen. Siehe unten.

Vorgehen

  1. Auf die Mein Kindle-Seite gehen
  2. Persönliche Dokumente anklicken
  3. Javascript-Konsole öffnen
  4. folgendes eingeben
    window.location.reload = function() { console.log("HAHA kein reload"); };

Jetzt kann man die Dokumente löschen, ohne das die Seite jedesmal neugeladen wird. Anstatt des Neuladens wird in der besagten Javascript-Konsole der Text “HAHA kein reload” erscheinen.

Update

Das ganze geht natürlich auch als Bookmarklet.

Amazon Reload-Blocken in die Bookmarkleiste ziehen und auf der Seite einmal anklicken

Obi-Wan Kenobi Is Dead, Vader Says – via Galactic Empire Times

War ja nur eine Frage der Zeit, bis es den nächsten Badboy erwischt.

Obi-Wan Kenobi Is Dead, Vader Says – Galactic Empire Times.

Heute ist übrigens ein Glückstag unseres geliebten Lords. Er muss für Luke keinen Unterhalt mehr bezahlen:

Der Postillon: Vaterschaftstest bei Britt: Luke Skywalker doch nicht Darth Vaders Sohn

Ob das noch was hilft, da sein “Sohn” die Jedi-Ausbildung schon hinter sich hat, sei dahingestellt.