Archiv ‘IT’

Mittwoch, 31. August 2011

Word HTML-Säuberer wordoff.py lokal ausführbar machen

Kürzlich stand ich auf der Arbeit vor der schmerzlichen Vorgabe, ein dutzendes Seiten umfassendes Word-Dokumenten nach Excel zu kopieren (das Dokument enthielt unzählige Tabellen im immer gleichen Aufbau). Anstelle jede Zelle mühsam einzeln nach Excel zu kopieren – was meine gesamte bisherige Ausbildung in Frage gestellt hätte – entschied ich mich dafür, das Word-Dokument als HTML abzuspeichern, den HTML-Code anzupassen und danach in Word zu importieren.

Bekanntermassen ist der von Word produzierte HTML-Code ungefähr so das schrecklichste, was ein Web-Entwickler jemals zu Gesicht bekommen wird. Zum Glück gibt es Web-Dienste wie WordOff, welche über ein Web-Form Word-HTML entgegennehmen, säubern und zum Download anbieten.

Da das Word-Dokument in meinem Falle aber die Bemerkung „Strictly Confidential“ enthielt, empfand ich dies dann doch eher als gewagter Stunt, der mir im schlimmsten Falle den Job hätte kosten können.

Ich entschied mich deshalb, den Python-Code für das Projekt von git herunterzuladen, anzupassen und danach lokal über das HTML-File laufen zu lassen.

Folgende Anpassung war in wordoff.py nötig:

...
def superClean(str):
    clean = stripAttributes(str)
    cleaner = stripSpans(clean)
    cleaner = stripDivs(cleaner)
    #cleaner = xenophobia(cleaner)
    cleaner = stripEmptyElements(cleaner)
    cleaner = stripEmptyElements(cleaner)
    cleaner = stripEmptyElements(cleaner)
    cleaner = reduceLineBreaks(cleaner)
    return cleaner

# Changes added by Mario Aeby, eMeidi.com
# Allows to execute the script locally on a command line
def main():
	file = open("word-to-excel.htm");
	str = file.read()
	
	print superClean(str)
	
if __name__ == "__main__":
    main()

Dies erlaubt, das Script folgendermassen auf der Kommandozeile aufzurufen (die Quelldatei muss derzeit leider in den Sourceode hardkodiert werden):

$ ./wordoff.py > word-to-excel-clean.html

Nicht schlecht. Wer weiss, vielleicht lässt der Entwickler diese Anpassung ja auch ins Projekt einfliessen, damit man es künftig sowohl unter dem Django-Framework als auch lokal in einer Shell ausführen kann.

Tags: , , , ,
Labels: IT, Web

1 Kommentar | neuen Kommentar verfassen

Sonntag, 24. Juli 2011

Was Lehrer nicht lehren können

Even the best teachers cannot usually describe what they are doing. Procedural knowledge is largely subconscious.

Quelle: Knowing ‚How‘ – (37signals)

Tags: , ,
Labels: IT

1 Kommentar | neuen Kommentar verfassen

Freitag, 22. Juli 2011

Wo EndNote X4 den Volumenlizenzschlüssel ablegt

Da mein (Noch-)Arbeitgeber etwas gar langsam mit der Bereitstellung aktualisierter Softwarepakete ist, wird auf unseren Mac-Clients derzeit nur EndNote X4 14.0.0 installiert.

Im Netz ist zwar 14.0.2 verfügbar, doch kopiert man den EndNote X4-Ordner aus dem .dmg-Disk-Image in den Applikationsordner, wird der von der Universität in den 14.0.0-Installer integrierte Lizenzschlüssel überschrieben.

Abhilfe schafft man, indem man folgende Datei sichert und nach dem Überschreiben des Ordners zurückspielt:

./EndNote X4/EndNote X4.app/Contents/Resources/.license.txt

Tags: , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 28. Mai 2011

Objekte zwischen Datenbank und Programmlogik

I’ve seen the blank stare with eyes glazed when I asked a developer why they wrote 3 nested loops to find a specific value of the child of the child of a mapped ORM entity instead of just writing a specific query for it. Or why they retrieved and iterated over all 5 million items to set the same value of of the same field instead of writing an update statement.

Quelle: ORM’s hidden cost « n0tw0rthy

Das erinnerte mich spontan an folgenden Post des Entwicklers hinter NetNewsWire, dem RSS-Feedreaders meiner Wahl unter Mac OS X (unter iOS ist es klar Reeder):

On switching away from Core Data

Aus Performance-Gründen verzichtete er auf das Core Data-Framework und sprach die SQLite-Datenbank für folgende Aufgaben lieber direkt an:

  • Unzählige Nachrichten als gelesen markieren
  • Unzählige Nachrichten löschen
  • Ersetzen bestehender Nachrichten (mittels einer externen ID)
  • Überprüfung bestehender Nachrichten (mittels einer externen ID)

Tags: , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. Mai 2011

Ctrl-Alt Tastenkonflikt in vSphere Client, welcher in einer Parallels Virtual Machine läuft

Betätige ich in einer geöffneten vSphere Client-Konsole, welche in einem virtualisierten Windows unter Parallels läuft, die Tastenkombination Ctrl-Alt, verlasse ich nicht etwa das Konsolenfenster, sondern die Parallels-Applikation.

Damit man die vSphere-Konsole mit der gewohnten Tastenkombination schliessen kann, muss die Parallels-Konfiguration angepasst werden:

  1. Parallels Desktop
  2. Einstellungen
  3. Tastatur und Maus
  4. Bei Ctrl-Alt – Eingabegeräte freigeben muss die Tastenkombination mit Klick auf den Bleistift unterhalb der Liste angepasst werden. Ich habe mich für Ctrl-Alt-9 entschieden
  5. OK

Ab sofort kann man die vSphere Client-Konsole verlassen und in Windows zurückkehren, statt dass die Eingaben über Tastatur und Maus gleich auf Mac OS X einwirken.

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 23. Dezember 2010

Automatische Überwachung von Servern mit sensitiven Informationen? Fehlanzeige.

After gaining access to gawkers MySQL database we stumble upon a huge
table containing ~1,500,000 users. After a few days of dumping we
decided that 1.3 million was enough.

Quelle: Hacker News | From the readme: After gaining access to gawkers MySQL database we stumble upo…

Ist ja nicht so, als gäbe es solche Hacks erst seit November 2010 … Wieso zum Teufel setzt jemand, der 1.5 Millionen Benutzerdaten in seiner MySQL-Datenbank rumliegen hat, keine Software ein, die Alarm schlägt, wenn tagelang Daten „abgesaugt“ werden? Eine Schande für die gesamte Web-Entwickler-Zunft.

Tags: , , ,
Labels: IT, Web

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 22. Dezember 2010

.bashrc wird beim Login nicht gelesen/ausgeführt

Da habe ich also all die nützlichen Anweisungen in meine ~/.bashrc eingefügt, damit beim Shellzugriff auf einen Linux-Server einerseits die Listings schön farbig ausgegeben werden, andererseits Nachfragen beim Löschen und Verschieben von Dateien erscheinen und so sicherstellen, dass ich aus Flüchtigkeit keine Dummheiten begehe:

...
export CLICOLOR=1
export LSCOLORS=DxGxcxdxCxegedabagacad
 
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
 
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Doch was ist los? Nach einem Login bleiben die Terminalfarben bei einem Listing eines Verzeichnisses … weiss auf schwarz!

Ein kurzer Test mittels

$ . ~/.bashrc

Quelle: Kurztipp: bash neustarten und .bashrc neu einlesen

zeigt dann aber rasch, dass die Farben wirklich erscheinen — wenn denn .bashrc auch beim Login geladen werden würde.

Ein Vergleich mit einem anderen, ordungsgemäss funktionierenden Debian GNU/Linux zeigt das Problem umgehend auf: Es fehlt die ~/.profile. Nachdem ich diese Datei erstellt und mit folgenden Zeilen gefüllt habe, funktioniert das Farbfernsehen per SSH dann auch ab dem ersten Login:

# ~/.profile: executed by Bourne-compatible login shells.

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

mesg n

Quelle: bashrc not getting read at login

Tags: , ,
Labels: IT, Linux

2 Kommentare | neuen Kommentar verfassen

Montag, 6. Dezember 2010

Debian Etch auf Lenny aktualisieren

Heute hatte ich es mit einer längst vergessen geglaubten Virtuellen Maschine zu tun, auf welcher noch ein Debian GNU/Linux mit einem 2.4er-Kernel installiert war. Im Grunde ging es nur darum, die aktuellsten VMware-Tools auf dieser Kiste zu installieren — doch wie immer zog dies umgehend einen riesigen Rattenschwanz an Debugging und sonstigen Upgrade-Arbeiten mit sich.

Nach etlichem Pröbeln und apt-get-Endlosschleifen hier die Kurzzusammenfassung, wie man Etch auf Lenny bringt:

sources.list

Zuerst einmal muss man Etch auf den letzten verfügbaren Stand aktualisieren. Da die Etch-Pakete von den Mirrors verschwunden sind, muss man alle vorhandenen Zeilen in der Datei /etc/apt/sources.list auskommentieren und folgende Zeilen einfügen:

deb http://archive.debian.org/debian-archive/debian/ etch main
deb-src http://archive.debian.org/debian-archive/debian/ etch main

Quelle: Debian (etch): sources.list

GPG

Natürlich funktioniert das apt-get update auf meiner Installation nicht sauber, weil mir einige PGP-Schlüssel fehlen. Da deren Fingerprint angegeben wird, kann ich diese ganz simpel mit folgendem Befehl mit meinem System bekannt machen:

# gpg --keyserver pgpkeys.mit.edu --recv-key  010908312D230C5F 
# gpg -a --export 010908312D230C5F | apt-key add -

Quelle: [Debian] Apt-get : NO_PUBKEY / GPG error

apt-get upgrade && dist-upgrade

Jetzt folgt das obligate

# apt-get update
# apt-get install apt aptitude
# apt-get upgrade
# apt-get dist-upgrade

um die neuesten Pakete zu installieren. Das System ist nun bereit, um auf einen neuen Kernel gehoben zu werden:

# apt-get install linux-image-2.6.18-6-686

Ist der Kernel installiert und GRUB angepasst (geschieht automatisch), sollte man den Server einmal neu starten (reboot).

sources.list

Frisch zurück im System mit Kernel 2.6, werden die oben hinzugefügten Zeilen nun wieder auskommentiert. Stattdessen fügt man nun folgende Repositories in /etc/apt/sources.list ein:

deb http://mirror.switch.ch/ftp/mirror/debian lenny main
deb-src http://mirror.switch.ch/ftp/mirror/debian lenny main

deb http://security.debian.org/ lenny/updates main

Quelle: Upgrading Debian Etch to Lenny stuck on kernel/libc issue

aptitude

ACHTUNG: Anstelle dieses kritische Kernel-Upgrade nun mit apt-get zu machen, hält man sich lieber an die Anweisungen der Debian-Maintainer und verwendet aptitude. Dieses kann viel besser mit Abhängigkeiten umgehen (Stichwort: libc6, dpkg (mit Breaks) etc.)

# aptitude update
# aptitude upgrade
# aptitude dist-upgrade

Quelle: Howto Upgrade Debian 4 Etch to Debian 5.0 Lenny

Dies bringt alle Pakete auf den neuesten Stand, die für das nun definitive dist-upgrade zwingend sind.

Kernel-Sourcen

Da die Kernel-Sourcen für Kernel 2.6.18 irgendwie nicht verfügbar sind, aktualisiert man kurzerhand auf Kernel 2.6.26:

# apt-get install linux-image-2.6.26-686
# reboot

Damit die VMware-Tools korrekt installiert werden können, lädt man sich nun auch noch die korrespondieren Quellen herunter:

# apt-get install linux-headers-`uname -r`

VMware-Tools

Anschliessend spielt man die VMware-Tools in gewohnter Manier ein. Fertig!

Tags:
Labels: IT, Linux

1 Kommentar | neuen Kommentar verfassen

Mittwoch, 24. November 2010

Wie Projektmanager Agile Entwicklung und Scrum zerstören

The very first Certified Scrum Master course was taught at the Object Mentor offices in Vernon Hills, Illinois. … Frankly, I thought the idea was a bit silly. I didn’t think thousands of people would be lining up to get their certifications. But I had not considered the lure of elitism. It didn’t occur to me that this special training course, coupled to the term Certified Scrum Master, would become a wedge to break the alignment between authority and responsibility.

Who was it who lined up to take the CSM courses? Was it Scrum team members who wanted to help their teams? Was it programmers and testers? Yes, there were certainly some CSMs who came from existing teams. But the vast majority of CSMs have a project management background. In essence they have added CSM to the PMBOK. They have become CSMs so that they have the authority to manage Scrum teams.

This was never the intent. The role of the coach was to act as a gentle reminder of process and discipline. The coach was never supposed to manage the project or the schedule! Indeed, these two roles were supposed to be adversarial!

Quelle: gist: 710960 – What Killed Waterfall Could Kill Agile.- GitHub

Tags: ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 23. November 2010

Neueste Fotos aller Flickr-Kontakte per RSS abonnieren

Vielen Powerusern ist sicherlich seit langer, langer Zeit bekannt, dass man den Photostream eines Flickr-Benutzers problemlos per RSS und anderen Feed-Formaten abonnieren kann. Doch wer will schon diese Streams manuell in seinen Feedreader einfügen?

Deshalb verfügt die Flickr-API über die Möglichkeit, auf einen Rutsch alle neuesten Fotos aller Kontakte in einem einzigen Feed anzupreisen. Die Feed-URL bastelt man sich folgendermassen zusammen:

http://api.flickr.com/services/feeds/photos_friends.gne?user_id={USER_ID}&display_all=1&format=rss2

Dokumentation: Friends‘ feed

{USER_ID} entspricht dabei der eigenen Benutzer-ID.

Tags: , ,
Labels: IT, Web

Keine Kommentare | neuen Kommentar verfassen