Archive for the ‘Programmierung’ Category.

Folien für den „LaTeX & Python“ Vortrag, FrOSCon 2013

Hier die Folien zu meinem „LaTeX & Python“ Vortrag, gehalten auf der FrOSCon 2013.

LaTeX_and_Python (PDF)

English Remark: These slides are in German only. If you have any issues understanding them, drop me a line. Over the course of the next months I’ll probably update them, so you may come back for updates.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Excel-Kommentare per Funktion auslesen

Ich erhalte manchmal Excel-Dateien, in deren Zell-Kommentaren oft unzählige, nicht unwichtige Anmerkungen stehen.

Mit der folgenden benutzer-definierten Funktion lassen sich diese Kommentare auslesen.

Function GetComment(commentcell) As String
    On Error Resume Next
    GetComment = commentcell.Comment.Text
End Function

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Organisier Dein Leben mit Emacs Org-Mode Teil 2

This entry is part 2 of 3 in the series Emacs Org Mode

Hier Teil 2 zum Emacs Org mode.

Überschriften werden standardmäßig mit einem oder mehreren führenden * markiert:

* Ich bin eine Section-Überschrift
** Ich bin eine Subsection-Überschrift
*** Ich bin eine Subsubsection-Überschrift

Mittels TAB lassen sich einzelne Abschnitte ausblenden, dies wird durch drei Punkte angezeigt. Mit Shift-LEFT bzw. Shift-RIGHT schaltet man durch die einzelnen Aufgaben-Status: TODO => DONE => kein Status

Setzt man hinter einer Überschrift ein [/], so zeigt Org Mode die Anzahl der offenen bzw. geschlossenen TODOs der darunterliegenden Levels. (Damit diese Anzeige aktualisiert wird, einfach auf einem Item der unteren Ebene mit TAB mal durchschalten.

Mit [%] erstellt man eine prozentuale Auflistung.

Mit Shift-UP und Shift-DOWN schaltet man zwischen verschiedenen Prioritäten eines Tasks um: keinePriorität => #A => #B => #C

Mit ALT-RETURN lässt sich eine neue Aufgabe auf dem aktuellen Level einfügen.

Mit ALT-LEFT schaltet man das Item der aktuellen Ebene eins hoch, mit ALT-RIGHT ein Level herunter, drückt man dabei gleichzeitig auch die SHIFT Taste, so werden auch Unter-Items angepasst.

Mit ALT-UP und ALT-DOWN verschiebt man einzelne Abschnitte in der Datei hoch oder runter.

emacs-2-1

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Organisier Dein Leben mit Emacs Org-Mode Teil 1

This entry is part 1 of 3 in the series Emacs Org Mode

Seit einiger Zeit beschäftige ich mit wieder mit Emacs, der eierlegenden Wollmilchsau der Editoren.

Mein besonderes Interesse gilt dabei „Org mode“, dem Organisations-Talent.

Mit Org mode lassen sich man vor allem TODO Listen mit Fristen, Zeitstempeln und Notizen verwalten; diese Listen lassen sich dann in verschiedene Formate wie ASCII, HTML, LaTeX exportieren.

In diesem und den folgenden Artikeln werde ich einige der am häufigsten genutzten Funktionen vorstellen.

Installation

Die Installation von Org mode ist einfach. Von orgmode.org das Zip oder tar.gz herunterladen, in ein Verzeichnis entpacken und in der .emacs laden:

Unter Linux habe ich es in einem entsprechenden Unterverzeichnis von home abgelegt

(add-to-list ''load-path "/home/uwe/emacs-repo/org-8.0.6/lisp")

Unter Windows im Emacs Systemverzeichnis:

(add-to-list ''load-path "C:/emacs-24.3/org-8.0.7/lisp")

Für alle Dateien mit der Endung .org wird jetzt standardmäßig der Emacs Org Mode aktiviert.

Es empfiehlt sich, nach der Installation mit ALT-x org-version die Version zu prüfen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Visualizing Graphs mit Graphviz (and LaTeX) – Part I

This entry is part 1 of 2 in the series GraphViz

This is the first article in a series to describe Graphviz, an amazing tool to generate org charts and relationship diagrams, and ways to work with it from LaTeX. (I need to compile a huge set of slides so my intention is to save some time by automating the process)

I knew of its existence for quite a while but never managed to take anough time to get a closer look. Driven by my job however (the setup of a Private Equity fund of funds involves different legal entities) I decided to give it a try.

Graphviz was developed at the famous AT&T labs and released under Eclipse Public License. It consists of a set of binary tools that are able tranform Graphviz’s description language DOT into graphics.

Until further notice I will use dot, one of the binaries, to transform the examples into PNG. There are other converters like neato, which differ from dot in the way they calculate the distances between the nodes, etc.

Working with Graphviz involves defining nodes and edges between them. See the following, non-minimal example. I use a digraph (other types like e.g. graph are available but I didn’t look up the differences so far), define two nodes a and b and and edge between them.

digraph G{
a [label="Node A"];
b [label="Node B"];
a->b[label=" An edge"];
}

Using the command dot -Tpng nameoffile.gv I get the following PNG:

basic.gv

The above example is a bit more sophisticated than the minimal working example:

digraph G{
hello->world;
}

minimal.gv

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Importing events into Google Calendar

Google Calendar is able to import events from CSV files. The format however is a bit different from the locale used here in Germany, so I prepared a Excel sheet. It allows you to enter the dates and then uses Excel’s TEXT() function to build the correct format.

gcal

GCal_20130601

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Checking links with Python in TeX documents

As every year the German documentation for the TeX Live distribution is on my agenda. To check the more than 100 weblinks in the document I wrote a small Python script which does the job fairly well.

import re
import urllib2
 
filehandle = open("texlive-de-new.tex")
text = filehandle.read()
filehandle.close()
 
# regexp from http://www.noah.org/wiki/RegEx_Python
m = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', text)
 
i = 0
for item in m:
        i=i+1
        print i, '\t', item, '\t',
        try:
            response = urllib2.urlopen(item)
        except urllib2.HTTPError, e:
                    print e.code
        except urllib2.URLError, u:
                    print u.args
        print "\n"

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Dateien verschieben mit Powershell

Ausgangssituation: Diverse Unterverzeichnisse mit Dateien, die alle ins darüberliegende Verzeichnis verschoben werden sollen. Mit dem Windows Explorer dauert es Stunden, selbst mit Total Commander dauert es zu lange. Gut, dass ein paar Zeilen Powershell das erledigen:

$path =  "D:\files\"
cd $path
 
$files = gci | ? {$_.PSisContainer -eq $true} 
 
foreach ($i in $files){
	Move-Item $i\*.* $path
}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Buchkritik „Arduino Praxiseinstieg“ von Thomas Brühlmann (2. Auflage)

Vor ein paar Wochen hat mir der mitp Verlag freundlicherweise ein Rezensionsexemplar für die 2. Auflage von Thomas Brühlmanns Buch „Arduino Praxiseinstieg“ zukommen lassen. Nach dem Weihnachtsstress der vergangenen Wochen möchte ich es jetzt gern vorstellen. Gegenüber der 1. Auflage hat sich einiges getan, auf fast 530 Seiten (fast 200 mehr als bei der Erstauflage) stellt der Autor Version 1.0 der Arduino-Umgebung vor. Erfreulich ist, dass trotz des beträchtlichen Seitenzuwachses der Preis nur auf 29,95 Euro gestiegen ist.

Ein Hinweis nebenbei: Version 1.0 heißt im OpenSource-Umfeld nicht, dass es die erste Version ist, die nix taugt. OpenSource Software ist dafür bekannt, Versionsnummern nur sehr zögerlich zu inkrementieren. BibTeX von Leslie Lamport und Oren Patashnik wird seit 1985 entwickelt und ist immer noch nicht in Version 1.0 angekommen…

Zurück zum Thema: Nach der Einleitung und Vorstellung von Software und den verschiedenen Arduino-Boards stellt der Autor im dritten Kapitel die grundlegenden Elektronik-Bauteile wie Widerstand, LED, etc. vor. Hardcore-Elektroniker können dies sicher überspringen, für Fachfremde wie mich ist das aber sicher sinnvoll.

Kapitel 4 behandelt die verschiedenen Ein- und Ausgänge des Arduinos und zeigt, wie man Werte ein- und auslesen kann. Thomas Brühlmann geht dabei auch auf die serielle Schnittstelle und I2C ein (Das erinnert mich dran, mal meine MAX232 Chips ausprobieren zu wollen). Um Sensoren (Licht, Temperatur), Aktoren (Relais, Servos, Motoren) und Anzeigen (LEDs, LC-Displays, etc.) geht es in Kapitel 5. Kapitel 6 zeigt, wie man die gesammelten Daten im EEPROM des Arduinos speichern oder auf eine SD-Karte schreiben kann. Dieses Kapitel geht auch auf Processing, die „Künstler-Programmiersprache“ ein. Dieser Teil ist insbesondere deshalb spannend, weil ich schon seit Monaten mal Processing-Programme mit dem Arduino ansprechen will. Da muss ich mal einen genaueren Blick raufwerfen.

Kapitel 7 stellt einige der vielen Soft- und Hardware-Erweiterungen vor, darunter TinyGPS, Ethernet Lib, LCD, MIDI auf der Software-Seite, Ethernet-, Motorshield und viele andere auf der Hardware-Seite.

Das achte Kapitel zeigt einige Praxisbeispiele wie die Verwendung des Arduino als Webserver (hab ich auch schon gemacht), das Twittern per Arduino und verschiedene andere Web-getriebene Themen. Sehr spannend auf den ersten Blick!

In den restlichen Kapiteln geht es dann um DIY-Boards (DYI = Do-It-Yourself also selbsterstellte Controller-Platinen), die Suche nach Fehlern und nützliche Tools für die Arbeit mit Elektronik (Lötkolben, Oszilloskop, Multimeter); außerdem enthält das Buch noch eine knapp 30-seitige Codereferenz sowie technische Listen der Boards sowie Bezugsquellen.

Fazit: Schönes Buch, das mich reizt, mal wieder die Arduino-Kiste unter dem Tisch hervorzuholen. Für das Jahr 2013 habe ich mir vorgenommen, wieder mehr mit dem Arduino zu machen (IKEA LED Streifen ansteuern, Kameraauslöser bauen, usw.), dabei wird mir das Buch sicher helfen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Programming Post-Commit Hooks for Subversion with Python

I am a regular user of Subversion, all my important TeX files are stored in a SVN repository. SVN has a few builtin hooks, which means at certain events certain scripts are called. The following templates can be found in the hooks subdirectory of the server repository:

  • post-commit.tmpl
  • post-lock.tmpl
  • post-revprop-change.tmpl
  • post-unlock.tmpl
  • pre-commit.tmpl
  • pre-lock.tmpl
  • pre-revprop-change.tmpl
  • pre-unlock.tmpl
  • start-commit.tmpl

It does not matter in what kind of language the scripts are written, Subversion only cares if an executable script (or *.exe file with this name) is present (remove ‚.tmpl‘ at the end of a script to activate it). Today, after reading http://palita.net/2011/08/24/svn-hooks-automatischer-checkout-nach-commits/, I was interested in writing a small Python script which notifies me if a commit has taken place. Based on some e-mail script from http://segfault.in/2010/12/sending-gmail-from-python/ and the argparse tutorial I managed to finish this script in just a few minutes. argparse is needed since Subversion calls the post-commit script with two parameters, the path to the repository and the version of the commit.

One note on the Google password: It is recommended to use application-specific passwords, see http://support.google.com/mail/bin/answer.py?hl=en&answer=1173270 for details.

#!/usr/bin/python
 
import smtplib # part of standard installation
import argparse # not part of standard installation
 
parser = argparse.ArgumentParser()
parser.add_argument("path", help="path to the repository on the server")
parser.add_argument("version", help="version of the commit")
 
args = parser.parse_args()
print args.path
print args.version
 
server = 'smtp.gmail.com'
port = 587
 
sender = '<sender mail address>'
recipient = '<receiver mail address>'
password = "<password>"
subject = 'SVN Commit'
body = 'SVN Commit: '
 
body = body +  args.path + ' ' +  args.version
 
headers = ["From: " + sender,
           "Subject: " + subject,
           "To: " + recipient,
           "MIME-Version: 1.0",
           "Content-Type: text/html"]
headers = "\r\n".join(headers)
 
session = smtplib.SMTP(server, port)
 
session.ehlo()
session.starttls()
session.ehlo
session.login(sender, password)
 
session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
session.quit()

Deutsche Zusammenfassung: Subversion stellt gewisse Einsprungspunkte bereit, zu denen man eigene Skripte ausführen kann. Mit Python lässt sich recht einfach ein Skript schreiben, das einen Nutzer über z.B. ein Commit informiert.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website