Posts Tagged ‘Entwicklung’

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

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2011

Mehrere private SSH-Schlüssel auf einem Rechner?

Kein Problem! Man benutze hierzu einfach Einträge in der Datei ~/.ssh/config à la:

Host github github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa_git

Quelle: Best way to use multiple ssh private keys on one client

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2011

Kurzanleitung git

Vor einigen Wochen habe ich einen Account auf Github eröffnet und teile dort nützliche und weniger nützliche Programmierwürfe aus meiner Hand.

Da ich meine PHP-Entwicklungen mit Subversion verwalte und Git deshalb äusserst selten verwende, habe ich mir folgende Kurzanleitung von der Web-Site kopiert, damit ich ein Projekt im Nu eingecheckt habe.

Zuerst erstellt man sich unter Create a New Repository ein neues Repository. Anschliessend führt man lokal folgende Befehle aus:

mkdir arbeitsjournal
cd arbeitsjournal
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:emeidi/arbeitsjournal.git
git push -u origin master

Für alles weiterführende sei beispielsweise auf eines der vielen Git-Cheatsheets verwiesen.

Tags: ,
Labels: Web

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