Archive for Juni 2008

h1

Pythons Macht und Einfachheit

Juni 30, 2008

Heute bin ich im Openbook „Python“ von Galileo Computing (das ich übgrigens sehr empfehlen kann!) auf eine interessante Methode gestoßen in Python Listen zu erstellen. Diese Methode nennt sich List Comprehensions und dient dazu effizient mehrere Listen zu einer neuen Liste zu kombinieren. In diesem Kapitel bin ich auf folgendes Beispiel gestoßen:

>>> lst1 = [„A“,“B“,“C“]
>>> lst2 = [„D“,“E“,“F“]

>>>[(a,b) for a in lst1 for b in lst2]
[(‚A‘, ‚D‘), (‚A‘, ‚E‘), (‚A‘, ‚F‘), (‚B‘,’D‘), (‚B‘, ‚E‘), (‚B‘, ‚F‘), (‚C‘,’D‘), (‚C‘, ‚E‘), (‚C‘, ‚F‘)]

Dabei wird aus lst1 und lst2 eine neue Liste erstellt, die alle Kombinationen mit 2 Buchstaben aus beiden Listen enthält. Dabei fiel mir sofort auf, was man damit noch alles anstellen kann:

lst = „a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9“.split(‚,‘)
comb = [(a,b,c,d,e,f,g,h) for a in lst for b in lst for c in lst for d in lst for e in lst for f in lst for g in lst for h in lst]

Diese 2 Zeilen Python-Code erstellen alle 6-stelligen Ascii-Kombinationen. Wenn man den Code noch ein bisschen ausbaut und perfektioniert, hat man ein Programm, welches theoretisch alle Ascii-Kombinationen erstellt. Natürlich nur solange wie der Speicher das zulässt. Wenn man jetzt noch von jedem dieser Kombinationen den md5-hash erzeugt und in einer Datenbank speichert, hat man sich eine Möglichkeit geschaffen von einem md5-hash auf das Ascii-Passwort zu kommen. Allerdings hätte auch das seine Tücken, denn ein md5-hash verkörpert ja nicht nur ein Passwort sondern unendlich viele.

Allerdings geht es mir nicht darum zu zeigen, wie man einen md5-hash „knackt“, sondern ich will mit diesem Beispiel aufzeigen, wie mächtig Python ist.

h1

Screenshot vom 3D-Würfel

Juni 30, 2008

Wenn man vom 3D-Desktop-Würfel von Compiz-Fusion ein Screenshot erstellen möchte, kommt man mit der Druck-Taste auf der Tastatur nicht weit. Dazu bedarf es eines Befehls mit dem Namen scrot, der auch den Würfel „fotografieren“ kann. Tippt man folgendes in ein Terminal ein:

thomas@jane:~$ sleep 5; scrot screen.jpg

wartet das Terminal 5 Sekunden, bevor ein screenshot geschossen wird und unter dem Namen screen.jpg gespeichert wird. sleep wird ausgeführt, damit man noch Zeit hat, in die richtige Position zu „würfeln“. Das gleiche erreicht man, wenn man scrot den Parameter -d und eine Zahl übergibt:

scrot -d 5 screen.jpg

scrot kennt noch eine Menge weiterer Parameter, die man sich mit

scrot -h

oder

man scrot

genauer anschauen kann. Das könnte dann beispielsweise so aussehen:

3D Desktop Würfel Compiz Fusion

h1

Inspiron 1525 mit Ubuntu – Audiofehler

Juni 29, 2008

Bei meinem, schon in vorigen Artikeln erwähntem, neuem Inspiron 1525 mit Ubuntu hatte ich ein Problem mit dem Sound. Ich konnte die Lautstärke nicht ordentlich regeln. Meine Soundkarte:

thomas@jane:~$ cat /proc/asound/cards
0 [Intel ]: HDA-Intel – HDA Intel
HDA Intel at 0xfe9fc000 irq 19


und der benutzte Treiber war zum Zeitpunkt Conexant HSF (OSS Mixer) der scheinbar die Probleme bereitete. Ein kurzer Blick ins wiki von ubuntuusers zeigte, dass es einen eigenen Eintrag für die Installation von einem passendem Treiber für HDA – Soundkarten gibt, da es wohl öfters Probleme mit diesem Soundkartentyp gibt.

Ich befolgte also die Anleitung und jetzt funktioniert der Sound ohne Probleme.

An dieser Stelle ein dickes Dankeschön an ubuntuusers.de 😀

h1

Python XML verarbeiten

Juni 29, 2008

Python kennt verschiedene Module zum verarbeiten von XML Dokumenten:

-sax

-xml.dom.minidom

-Beautifulsoup

Sax ist sehr komplex und ebenso kompliziert, Beautifulsoup ist vor allem um normale HTML Dateien zu verarbeiten, besonders für APIs dagegen ist xml.dom.minidom geeignet, da es sich durch seine Einfachheit auszeichnet.

import urllib2
import xml.dom.minidom

#  Lade eine Seite als XML Objekt

def getXml(url):
url = url.replace(‚ ‚,’%20‘)
return xml.dom.minidom.parseString(urllib2.urlopen(url).read())

# Lade Seite

doc = getXml(‚http://example.com/test.xml‘)

titles = doc.getElementsByTagName(‚title‘)

# Auf Inhalt eines bestimmten Elements zugreifen

myContent = doc.getElementById(‚content‘).childNodes[0].data

#Auf alle Inhalte einer Liste von Tags zugreifen

divs = doc.getElementsByTagName(‚div‘)

divContents = [div.childNode[0].data for div in divs]

h1

Compiz: „Desktop Effects could not be enabled“

Juni 29, 2008

Beim Versuch Compiz-Fusion auf meinem neuen Dell Inspiron 1525 mit Ubuntu zu starten, bekam ich immer die Fehlernachricht:

Desktop Effects could not be enabled

Mit ein wenig Recherche fand ich heraus, dass es einige Graphikkarten auf der Blacklist von Compiz gibt unter anderem auch meine:

thomas@jane:~$ lspci | grep „Display“
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)

Also musste ich nur meine Graphikkarte von der Blacklist in der Datei /usr/bin/compiz nehmen:

# blacklist based on the pci ids
# See http://wiki.compiz-fusion.org/Hardware/Blacklist for details
T=“ 1002:5954 1002:5854 1002:5955″ # ati rs480
T=“$T 1002:4153″ # ATI Rv350
T=“$T 8086:2982 8086:2992 8086:29a2 8086:2a02 8086:2a12″ # intel 965
T=“$T 8086:2972″ # i965 (x3000)

T=“$T 1002:3152 1002:3150 1002:5462 1002:5653 “ # ati X300 X600,X600 X700
BLACKLIST_PCIIDS=“$T“
unset T

nach der Änderung:

# blacklist based on the pci ids
# See http://wiki.compiz-fusion.org/Hardware/Blacklist for details
T=“ 1002:5954 1002:5854 1002:5955″ # ati rs480
T=“$T 1002:4153″ # ATI Rv350
#T=“$T 8086:2982 8086:2992 8086:29a2 8086:2a02 8086:2a12″ # intel 965
#T=“$T 8086:2972″ # i965 (x3000)

T=“$T 1002:3152 1002:3150 1002:5462 1002:5653 “ # ati X300 X600,X600 X700
BLACKLIST_PCIIDS=“$T“
unset T

h1

VirtualBox unter Ubuntu 7.10

Juni 28, 2008

Beim Versuch VirtualBox unter Ubuntu 7.10 per apt-get zu installieren bin ich auf einen seltsamen Fehler gestoßen. Der Befehl

thomas@jane:~$ sudo apt-get install virtualbox-ose

spuckte folgendes aus:


Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut
Reading state information… Fertig
Die folgenden zusätzlichen Pakete werden installiert:
virtualbox-ose-modules-2.6.22-14-generic
Die folgenden NEUEN Pakete werden installiert:
virtualbox-ose virtualbox-ose-modules-2.6.22-14-generic
0 aktualisiert, 2 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen noch 0B von 6012kB Archiven geholt werden.
Nach dem Auspacken werden 19,3MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren [J/n]? j
Wähle vormals abgewähltes Paket virtualbox-ose-modules-2.6.22-14-generic.
(Lese Datenbank … 152605 Dateien und Verzeichnisse sind derzeit installiert.)
Entpacke virtualbox-ose-modules-2.6.22-14-generic (aus …/virtualbox-ose-modules-2.6.22-14-generic_6_i386.deb) …
Wähle vormals abgewähltes Paket virtualbox-ose.
Entpacke virtualbox-ose (aus …/virtualbox-ose_1.5.0-dfsg2-1ubuntu3_i386.deb) …
Richte virtualbox-ose-modules-2.6.22-14-generic ein (6) …
* Starting VirtualBox kernel module vboxdrv

FATAL: Module vboxdrv not found.

* Modprobe vboxdrv failed. Please use ‚dmesg‘ to find out why.

Richte virtualbox-ose ein (1.5.0-dfsg2-1ubuntu3) …

Auf diese Ausgabe hin fiel mir auf, dass vor kurzem ein Kernel-Update statt gefunden hat, ein kurzer Befehl bestätigte meine Vermutung.

thomas@jane:~$ echo virtualbox-ose-modules-`uname -r`
virtualbox-ose-modules-2.6.22-15-generic

virtualbox-ose-modules-2.6.22-14-generic passt nicht zu meiner Kernelversion. Der Versuch das passende Paket per

sudo apt-get install virtualbox-ose-modules-2.6.22-15-generic

zu installieren sagte, dass kein Installationskandidat für dieses Paket vorhanden sei. Mit ein wenig Recherche fand ich jedoch eine Lösung, bei der man die aktuelle Version direkt von virtualbox.org läd und selber kompiliert.

Hier die komplette Anleitung zur manuellen Installation.

h1

.htaccess wird ignoriert

Juni 28, 2008

Heute hatte ich ein Problem, bei dem in der .htaccess u.a. die Zeile:

php_value include_path „.:./app:./lib:/usr/share/php“

völlig ignoriert wurde.

Behoben habe ich das Problem, indem ich in der Datei /etc/apache2/httpd.conf den Eintrag

AllowOverride None

zu

AllowOverride All

geändert habe, was bewirkt das Umgebungsvariablen und Einstellungen von der .htaccess verändert werden können.