Jan
26
2011
0

[update] Python OptionParser: invalid integer value

Nachdem ich mich gewundert habe, warum bei mir jeweils zwei Kanäle meiner Daten (Kanal 08 und 09) nicht berechnet worden sind, habe ich die Jobs per Hand gestartet und stieß auf folgendes Phänomen:

Man nehme folgende minimal.py:


#!/usr/bin/python
# -*- coding: utf8 -*-
# minimal example by H.Dickten 2011

from optparse import OptionParser
parser = OptionParser()

parser.add_option("-c", "--channel1", type = int, dest="ch1",default = -1,
help = "channel 1")
parser.add_option("-C", "--channel2", type = int, dest="ch2",default = -1,
help = "channel 2")

(options, args) = parser.parse_args()
parser.destroy()
print "Channel1 = %d, Channel2 = %d. EXIT.\n" % (options.ch1, options.ch2)

und führe folgende test.sh aus:

#!/bin/bash
for i in 6 06 7 07 8 08 9 09 10
do
echo "i = $i"; python minimal.py -c 1 -C $i
done

Phänomen:
Wie man sieht werden alle Zahlen (mit und ohne vorstehenden Nullen) wunderbar als int geparsed. Nur die Zahl 08 und 09 werden nicht als 8 und 9 erkannt.

Abhilfe:
Man lässt die Zahlen als string parsen und castet diese später auf int via:

options.ch1 = int(options.ch1)

Gestestet mit Python 2.6.6 (debian squeeze) und Python 2.6.5 (Windows 7)

Update:
Python interpretiert “08″ als Oktalzahl (Quelle: docs.python.org). Demnach werden Hex- und Binärzahlen mit dem Präfix “0x” bzw. “0b” gekennzeichnet; Oktalzahlen jedoch nur mit der Ziffer “0″ anstelle der eindeutigen Kette “0o”. Dies sollte geändert werden ist wohl in Python 3 geändert worden, damit Zahlen nicht falsch interpretiert werden können (z.B. 072 (dezimal) != 072 (oktal) = 0o72 = 58 (dezimal)).

Nov
09
2010
0

Neues von der .zshrc Front

Vorhin habe ich eine kleine Funktion zum konvertieren von beliebig kodierter Textdateien in die UTF-8-Kodierung geschrieben. Einfach folgende Zeilen in die .zshrc übernehmen:


# Funktion zum konvertieren nach utf-8
conv2utf8() {
if [[ $OSTYPE == linux-gnu ]]; then
ENCIN=`file $@ -i | awk '{print $3}' | sed 's/charset=//g'`
else
ENCIN=`file $@ -I | awk '{print $3}' | sed 's/charset=//g'`
fi

ENCOUT='utf-8'
SUFFIXIN=${@##*.}
PREFIXIN=${@%.*}

OUT=$PREFIXIN"_utf8."$SUFFIXIN

print "Konvertiere $@ von $ENCIN nach $ENCOUT ..."
iconv -f $ENCIN -t $ENCOUT $@ > $OUT
}

Gebrauch: conv2utf8 Textdatei.txt.
Das Resultat ist anschließend in Textdatei_utf8.txt zu finden.

Viel Spaß damit!

Okt
12
2010
1

[HowTo] vpnc per skript via zsh starten

Als Alternative zum relativ dreckig programmierten Cisco VPN Client bietet sich unter Linux stets das Paket vpnc an. Dieses lässt sich unter Linux via

sudo aptitude install vpnc

mit einem Einzeiler installieren. sudo vpnc wird entweder interaktiv gestartet, wobei Gateway, Benutzername usw. abgefragt werden, oder aber per Konfigurationsdatei (/etc/vpnc/default.conf).

Der Inhalt einer solchen Datei sollte folgendermaßen aussehen:

IPSec gateway GATEWAY_IP
IPSec ID GROUP_ID
IpSec secret GROUP_PASSWORD
Xauth username USERNAME
Xauth password PASSWORD

Die Wörter in Versalien müssen natürlich durch die eigenen Einstellungen ersetzt werden. Der Nachteil dieser Methode liegt eindeutig darin, dass das Passwort im Klartext in der Konfigurationsdatei stehen muss.

Abhilfe schafft die “magische” z-shell, über die ich gerade ein schönes Buch lese:

Zunächst legt man eine Skript-Vorlage unter /etc/vpnc/vorlage.conf ab, in der alle Variablen bis auf das Passwort ersetzt worden sind. Das Passwort lässt sich bequem per stream editor sed ersetzen. Die Ausgabe von sed (mit dem ersetzten Passwort) kann man mit Hilfe der z-shell in eine temporäre Datei abgelegt werden, auf die vpnc zugreifen kann, und direkt nach Ausführen des Befehls wieder gelöscht wird:

#!/bin/zsh

PASS=`kdialog --password "Bitte VPN-Passwort eingeben!" 2>/dev/null`
sudo vpnc =(sed "s/PASSWORD/$PASS/g" /etc/vpnc/vorlage.conf)

Möchte man zudem, dass vpnc ohne Passwort als sudo ausgeführt werden kann, so bietet der Befehl sudo visudo Abhilfe. Das Ganze sollte dann so aussehen:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
Defaults env_reset

# Cmnd alias specification
Cmnd_Alias VPNC = /usr/sbin/vpnc, /usr/sbin/vpnc-connect, /usr/sbin/vpnc-disconnect

# User privilege specification
root ALL=(ALL) ALL
hensing ALL= ALL

hensing ALL=NOPASSWD: VPNC

Editor beenden und freuen. Viel Spaß damit!

Aug
17
2010
1

Howto: Kontakte (Mac) inkl. Geburtstagen mit Google synchronisieren

Nachdem ich mir nun ein Android-Telefon zugelegt habe und vermehrt die Synchronisationsmöglichkeit zwischen dem Mac-Adressbuch und Google nutze, ist mir aufgefallen, dass die Geburtstage nicht mit Google synchronisiert werden.

Die Synchronisation erfolgte dabei direkt über das Adressbuch on Mac OS 10.6:

Synchronisation von Kontakten mit Google

In den Einstellungen vom Adressbuch einfach “Mit Google synchronisieren” auswählen und die Zugangsdaten eintragen. Danach synchronisiert der Mac (wann und wie auch immer) die Kontakte mit Google. Zuvor hat natürlich jeder ein aktuelles Backup seiner Kontakte erstellt … :-)

Möchte man nun auch Geburtstage in seinen Kontakten hinterlegt haben, so importiert man einfach seine zuvor als vCard gesicherten Kontakte zusätzlich noch einmal bei Google via:

Kontakte -> Importieren -> vCard auswählen -> Upload.

Google erkennt (zumindest bei mir) die doppelten Einträge und fügt lediglich die fehlenden Daten ein. Danach sind alle Geburtstage in den Kontakten hinterlegt und können über den Kalender (sofern der Geburtstagskalender abonniert ist) eingesehen werden.

Written by Hensing in: Android,frickeln,Mac,pfiffig! | Schlagwörter: , , , , , , , , ,

Powered by WordPress | Aeros Theme | TheBuckmaker.com | Original background by Dino Abatzidis | modified by H.Dickten