Archiv der Kategorie sysadmin

hübsche Dropbox Links

Weil große Email Anhänge stinken, bietet sich z.B. die Dropbox als Dateiaustauschplatform an.

Einfach die Datei in den (lokalen) Dropbox/Public Ordner verfrachten, syncen lassen und per “Rechte Maustaste -> Copy Public Link” in die Mail kopieren.

Redirect

Nun sind solche Links nicht besonders hübsch (Branding!, Branding!, CI! ruft die Marketingabteilung) und  spätestens wenn man’s abtippen muß oder per Telephon weitersagt wird’s gruslig.

Hat man aber eine eigene Website, lassen sich die Dropbox Links aufhübschen und eine Weiterleitung einrichten, dann wird aus

http://dl.dropbox.com/u/1234567/BigDocument.pdf

z.B.

http://dropbox.mydomain.com/BigDocument.pdf

und schon sind die Brandingfreunde happy.

index.html

Geht es nicht um eine einzelne Datei sondern um mehrere, will man evtl. eine Übersicht in einer index.html haben. So eine Übersicht legt z.B. mein ruby Script htmlizedb an. Das Script will im Terminal in dem Verzeichnis gestartet werden, für das die Übersicht her soll.

Redirect + index.html

Bei Webservern ist allgemein üblich, daß man den Dateinamen index.html im Link weglassen kann. Der Webserver nimmt dann an man meint selbige. Die Dropbox verhält sich aber in dieser Hinsicht nicht wie ein normaler Webserver, sondern will immer den kompletten Dateinamen.

Hat man aber bereits den Redirect Trick in Benutzung, läßt sich die Redirect Steuerdatei (.htaccess) aufbohren, daß der Redirect die index.html Angabe ergänzt:

RewriteEngine on
# dropbox abbreviation:
# http://www.cimitan.com/blog/2008/09/17/htaccess-to-redirect-on-dropboxs-public-folder/#
# last path component has no dot -> redirect to index.html
RewriteRule ^(.+/)?([^./]+)/?$	http://dl.dropbox.com/u/1234567/$1$2/index.html	[last,qsappend]
# everything else: redirect as is
RewriteRule ^(.+)$	http://dl.dropbox.com/u/1234567/$1	[last,qsappend]

violá, nun wird von

http://dropbox.mydomain.com/FolderWithBigFiles

automatisch auf den Dropbox Link

http://dl.dropbox.com/u/1234567/FolderWithBigFiles/index.html

weitergeleitet.

Toll, nicht?

Tags: , , , , , , ,

Radiomitschnitt per Rezept

Seit längerem schneide ich mir interessante Sendungen aus dem (Internet-)Radio mit, vor allem Hörspiele auf B2.

Bisher mußte dazu immer mein alter (Linux-)Rechner laufen und den Mitschnitt mußte ich händisch starten – wie unbequem. Oder man ist unterwegs und verpaßt den Mitschnitt. Wie ärgerlich.

Doch das ist ab jetzt vorbei, denn ab sofort schneidet mein vServer (läuft ja eh ständig) mit!

Und so geht’s:

  1. Ein Script auf dem vServer, das den Mitschnitt startet und beendet:
    #!/bin/sh
     
    # id3v2 scheint Bilder nicht zu mögen:
    # - http://ubuntuforums.org/showthread.php?t=1353213
    # - readonly: http://id3v2.cvs.sourceforge.net/viewvc/id3v2/id3v2/id3v2.cpp?revision=1.17&view=markup#l_610
    # - http://www.id3.org/id3v2.4.0-frames Kapitel4.14.
    # erfolglos: id3v2 --APIC "0\0image/jpeg\03hello\0`cat moby_dick.jpg`" $file
     
    if [ $# -lt 3 ]; then
    	echo "rip audio streams to a local file."
    	echo " "
    	echo "Usage:"
    	echo " "
    	echo "  $0 stream marker duration id3v2_tags"
    	echo "    stream     typically a URL, see 'man streamripper'"
    	echo "    marker     filename prefix"
    	echo "    seconds    how long will we dump"
    	echo "    id3v2_tags optional, tag the download with id3v2"
    	echo " "
    	echo "Example:"
    	echo "  $0 http://gffstream.ic.llnwd.net/stream/gffstream_w11a bayern2 3660"
    	echo " "
    	exit 1
    fi
     
    src=$1 ; shift
    basename=$1 ; shift
    seconds=$1 ; shift
     
    dst=$basename-`date --iso-8601=seconds`
     
    echo "dumping $seconds (sec) from $src to $dst ..."
     
    streamripper $src -u Mozilla -i -a $dst -l $seconds
    rm $dst.cue
     
    if [ $# -gt 0 ] ; then
    	id3v2 "$@" $dst.mp3
    fi
     
    chmod a+r $dst.*
     
    echo done.
  2. Ein Cronjob für jeden Mitschnitt:
    PATH=/bin:/usr/bin 
    HOME=/home/USERNAME
     
    # Recorder
     
    rec_cmd=/home/USERNAME/bin/stream-rip
    rec_dir=/home/USERNAME/pub/recorder
     
    ON3=http://gffstream.ic.llnwd.net/stream/gffstream_w9a
    BAYERN1=http://gffstream.ic.llnwd.net/stream/gffstream_w10a
    BAYERN2=http://gffstream.ic.llnwd.net/stream/gffstream_w11a
    M945=http://stream.m945.mwn.de:80/m945-hq.mp3
     
    # B2 Krimihörspiel
    29 20 * * 3 $rec_cmd $BAYERN2 $rec_dir/b2-krimi 3660 -A "B2 Krimi"

Tags: , , , , , ,

Upgrade to Snow Leopard

  1. Mac OS X 10.6 Snow Leopard (partition 25G, HFS+ Journaled, Upper/Lower)
  2. Mac OS X 10.5 Leopard (partition 25G, HFS+ Journaled, Upper/Lower)
  3. partition userspace 100G, HFS+ Journaled, Upper/Lower
    $ cat /etc/fstab
    # mount partition "userspace" as /Users
    UUID=D016E3FD-E322-3006-A8F5-D2348C6A5B7B	/Users	hfs	rw,auto
  4. create user “mig”
  5. TimeMachine restore Users + Settings
  6. delete user “mig”
  7. manually copy user “Shared”
  8. iPhone SDK 3.1.2 + XCode 3.2.1
  9. modgenerator 1.5 plus trick
    $ ln -s /Developer/usr/bin/momc /Developer/Library/Xcode/Plug-ins/XDCoreDataModel.xdplugin/Contents/Resources/momc
  10. git 1.6.5.2, manually add to .bash_profile:
    export PATH=$PATH:/usr/local/git/bin
  11. Macports / http://trac.macports.org/wiki/Migration
    $ sudo port selfupdate
    $ sudo port install bcpp pwgen wget lftp fortune optipng graphviz ragel imagemagick
    $ sudo port clean --all installed
    $ sudo port -f uninstall inactive
  12. graphviz-2.25.20091129.0545.pkg
  13. Textwrangler 3.0 (2538)
  14. Gimp 2.6.7
  15. NeoOffice 3.0.1
  16. Evernote 1.5.2 (62233)
  17. TrueCrypt 6.3a
  18. Dropbox v0.6.570
  19. Skype 2.8.0.722
  20. Firefox 3.5,5
  21. Miro Video Player 2.5.3 (775f9134)
  22. wxMaxima-0.8.3 & Maxima-5.19.2.dmg
  23. Twain SANE Scanner Support

Remaining issues:

  1. SenTestingKit error highlighting not working.

Tags: , , , , , , , , ,

Was belegt eigentlich wieviel Plattenplatz?

sagt einem JDiskReport (z.B. per Java Webstart) recht schön zum Durchklicken:

Tags: , ,

Email Sicherheit II – neue Zertifikate

Nachdem Thawte die Lust verloren hat kostenlose Email Zertifikate auszugeben, bin ich eben zu CAcert gewechselt. Schien mir sogar noch einfacher als damals bei Thawte.

Ein kleiner Wermutstropfen ist, daß CAcert Zertifikate (leider) noch selten von Haus aus als vertrauenswürdig eingestuft werden.

P.S.: Thunderbird zickt ein wenig wegen den Root-Zertifikate von CAcert, aber folgt man der Anleitung von CAcert ist das auch fix vom Tisch.

Tags: , , , ,

T-Mobile Rechnungen auspacken und umbenennen

über T-Mobile RechnungOnline kann man sich die Rechnung als gpg-verschlüsselten Anhang per Mail schicken lassen – incl. Einzelverbindungsnachweis. Und obwohl’s nur 1x im Monat kommt, ist das Auspacken und Umbenennen in sinnvolle Dateinamen eine lästige Routinearbeit.

Also – automatisieren. Das folgende Ruby-Script erledigt das, nachdem der Rechnungsanhang in einen der Ordner “Downloads” oder “Desktop” gelegt wurde:

#!/usr/bin/ruby
 
dst="#{ENV['HOME']}/Documents/tmobile"
 
# 1. pull together all pgp crypted find Rechnung_15.10.2009.zip.pgp in Desktop, Downloads, local dir
["#{ENV['HOME']}/Downloads", "#{ENV['HOME']}/Desktop", dst].each do |dir|
  Dir.foreach(dir) do |file|
    m = /Rechnung_(\d{2})\.(\d{2})\.(\d{4})\.zip(\.pgp|\.gpg)?/.match file
    if m
      s = system "mv #{dir}/#{file} #{dst}/#{m[3]}-#{m[2]}-#{m[1]}-bill.zip#{m[4]}"
      s = system "gpg #{dst}/#{m[3]}-#{m[2]}-#{m[1]}-bill.zip#{m[4]}" if m[4]
      system "rm #{dst}/#{m[3]}-#{m[2]}-#{m[1]}-bill.zip#{m[4]}" if s && m[4]
      s = system "unzip #{dst}/#{m[3]}-#{m[2]}-#{m[1]}-bill.zip"
      system "rm #{dst}/#{m[3]}-#{m[2]}-#{m[1]}-bill.zip" if s
      puts "de-crypted & unpacked #{dst}/#{m[3]}-#{m[2]}-#{m[1]}-bill.zip"
    end
  end
end
 
# 2. rename unpacked files accordingly
Dir.foreach(dst) do |file|
  m = /^Rechnung_(\d{4})_(\d{2})_(.+)$/.match file
  system "mv #{dst}/#{file} #{dst}/#{m[1]}-#{m[2]}-bill-#{m[3]}" if m
  m = /^Einzelverbindungsnachweis_(\d{4})_(\d{2})_(.+)$/.match file
  system "mv #{dst}/#{file} #{dst}/#{m[1]}-#{m[2]}-evn--#{m[3]}" if m
  m = /^Rechnung_(\d{5,20})_(\d{2})_(\d{4})(.+)$/.match file
  system "mv #{dst}/#{file} #{dst}/#{m[3]}-#{m[2]}-bill-#{m[1]}#{m[4]}" if m
  m = /^Einzelverbindungsnachweis_(\d{5,20})_(\d{2})_(\d{4})(.+)$/.match file
  system "mv #{dst}/#{file} #{dst}/#{m[3]}-#{m[2]}-evn--#{m[1]}#{m[4]}" if m
end

Tags: , , ,

Ist das zensursula?

Seit heute ca. 15:30 sind die Root-Nameserver für mich (T-Online Kunde) nicht mehr erreichbar:

$ nslookup google.com - j.root-servers.net
Server:		j.root-servers.net
Address:	192.58.128.30#53

Non-authoritative answer:
*** Can't find google.com: No answer

Ist das die Vorbereitung der China Wochen bei T-Online & Co.? Bei Gelegenheit mal ausprobieren: eigene bind Nameserver Instanz.

[Update]: Am rosa Riesen scheint’s nicht zu liegen – das Problem liegt wohl in Layer 8.

$ nslookup google.com - resolver1.opendns.com
Server:		resolver1.opendns.com
Address:	208.67.222.222#53

Non-authoritative answer:
Name:	google.com
Address: 74.125.67.100
Name:	google.com
Address: 74.125.45.100
Name:	google.com
Address: 74.125.53.100

In Zukunft also nicht mehr mit den Root-Nameservern, sondern einem vom CCC empfohlenen.

Tags: , , ,

Sane Batch Scan Workaround

Obwohl scanimage aus dem SANE Werkzeugkasten in der (aktuellen?) OS X Version

$ scanimage --version
scanimage (sane-backends) 1.0.21cvs; backend version 1.0.21

(installiert nach http://blog.mro.name/2008/12/scanner-mustek-1200-cu-unter-mac-os-x-105/) beim Versuch per “batch” mehrere Seiten zu scannen jeweils nach Seite 1 aus der Kurve fliegt:

$ scanimage --batch-start=45 --batch-count=16 --batch --batch-prompt \
--format=pnm --mode Color --resolution 300
...
Scanning page 46
scanimage: sane_start: Invalid argument

und das auch ein bekanntes Problem zu sein scheint, gibt’s einen Workaround per selbstgebautem Shell-Script:

#!/bin/sh
# http://blog.mro.name/2009/07/sane-batch-scan-workaroun/
pre=scan-`date "+%Y-%m-%dT%H:%M"`
echo "To create a pdf, call after scanning the pages:"
echo "    convert $pre*.png -despeckle -density 100x100 -compress JPEG -quality 50 -page a4 $pre.pdf"
for ((i=0;i < 100;i++))
do
	echo "Place document no. $i on the scanner."
	echo "Press &lt;RETURN&gt; to continue, &lt;q&gt; + &lt;RETURN&gt; to quit."
	echo \\a
	read key
	if [[ $key == "q" || $key == "Q" ]] ; then
		break
	fi
	dst=$pre-page$(printf %03d $i)
	scanimage --mode Gray --resolution 300 --buffer-size=1024 --progress > $dst.pnm
	# background conversion:
	(convert $dst.pnm -level 15,85% -density 300x300 -type grayscale \
		-resample 100x100 $dst.png && rm $dst.pnm) &
done
ls -l $pre*

é voilá.

Um das ganze dann noch in ein PDF moderater Größe zu verwandeln genügt (ImageMagick z.B. via darwinport vorausgesetzt):

$ time convert *.png -despeckle -density 100x100 \
-compress JPEG -quality 75 -page a4 out.pdf
 
real	3m39.867s
user	2m55.069s
sys	0m9.628s

.

Tags: , , , , , ,

ruby: parse Apache Serverlogs

Yields a hashmap for every line:

require 'date'
 
class Apache
  def self.each_request(src=$stdin)
    ip_pat=/(?:[0-9]+\.){3}[0-9]+/
    date_pat=/\[[^\]]+\]/
    req_pat=/"([A-Z]+)\s([^\s]+)\s([^\s]+)"/
    ref_pat=/"([^"]+)"/
    date_fmt = '[%d/%b/%Y:%H:%M:%S %Z]'
    apache_pat = Regexp.new( "(#{ip_pat})\s([^\s]+)\s([^\s]+)\s" < <
      "(#{date_pat})\s#{req_pat}\s([0-9]+)\s(-|[0-9]+)\s#{ref_pat}\s#{ref_pat}")
    src.each_line do |l|
      m = apache_pat.match l
      if m
        r = { :ip => m[1],
          :uid => m[2],
          :auth => m[3],
          :date => DateTime.strptime(m[4],date_fmt),
          :method => m[5],
          :url => m[6],
          :http => m[7],
          :status => m[8],
          :bytes => m[9],
          :referrer => m[10],
          :agent => m[11] }
        yield r
       else
        $stderr.puts "Unparseable line: '#{l}'"
      end
    end
  end
end

maybe there are faster ways, but it’s quite convenient this way.

Tags: , , , ,

Seltsamer Internet-Teilausfall

Momentan gibt’s bei mir (via T-DSL / München) Probleme bei transatlantischen Zugriffen:

.com: nix - .de: ok

.com: nix - .de: ok

Hat da wohl ein BKA Prakti falsch geklickt? Naja, immerhin keine Stop Seite vom antipornographischen Schutzwall.

Nachtrag: Jetzt (14:51) geht’s wieder.

Tags: , , ,