Verzeichnisse durchgehen

Heute mal ein kleiner Exkurs in die Welt des Betriebssystems. Wir haben vielleicht einmal den Bedarf, von einem bestimmten Einstiegspunkt rekursiv alle Dateien durch zugehen und dabei nur bestimmte Dateien zu bearbeiten. Das ist mit Python recht einfach. Als Besonderheit sei die Aufgabe gestellt, dass wir mit einer großen Anzahl an Dateien (Treffer oder nicht) rechnen müssen.

Grundsätzlich sehe ich zwei Möglichkeiten:

  1. Zunächst alle Verzeichnisse und Dateien durchgehen, die passenden ermitteln und diese mit ihrem kompletten Pfad in einer Liste sammeln. Die Liste wird dann im zweiten Schritt mit einem simplen „for datei in dateiliste“ durchgegangen und die eigentliche Tätigkeit ausgeführt.
  2. Während des „Durchgehens“ wird immer dann, wenn eine passende Datei gefunden wurde, sofort die entsprechende Aktion durchgeführt.

Sicher wird man zunächst die erste Lösung favorisieren. Die strenge Trennung von Suche und Ausführung hat ohne Zweifel einen gewissen Charme. Getreu dem Motto „separation of concerns“ würden wir hierbei zwei auch unabhängig voneinander nutzbare Programmteile erhalten. Wenn es sich jedoch um sehr viele Dateien handelt, könnte es aus Benutzersicht etwas besser aussehen, wenn so früh wie möglich mit den Aktionen begonnen wird. Dass das in Python kein Widerspruch zu dem gewünschten Konzept ist, will ich an diesem Beispiel zeigen.

Verzeichnisse durchgehen weiterlesen

Inspirationen

Ich finde das spannend, wie manchmal Dinge parallel passieren, von denen man nur durch Zufall etwas mitbekommt. Wer dabei wen inspiriert hat, ist oft nicht mehr festzustellen, und manchmal mag es auch wirklich so sein, dass zwei Leute unabhängig voneinander auf die gleiche Idee kommen.

Als ich im Weihnachtsurlaub 2015/16 den PyDay aus der Taufe gehoben habe, dachte ich nur, das sei eine gute Idee. Ich wollte mir selbst ein wenig meinen Lernprozess vor Augen führen und dabei nicht nur Dinge notieren, die ich später mal wieder gebrauchen könnte, sondern auch anderen helfen. Inzwischen gibt es eine ganze Reihe von Lesern und auch zwei regelmäßige Retweeter. Vielen Dank an alle, die das interessant finden, was ich schreibe!

Inspirationen gratis

Jetzt kommt der Joker. Mein Kollege Alexander Müller macht es genau so, nur dass er über C# und Microsoft Visual Studio bloggt. Zum Beispiel der letzte Artikel über Debug-Ausgaben, ohne den Code ändern zu müssen. Er ist also ein Sharpie, während ich inzwischen überaus interessierter Pythonist und Eclipsianer bin. Wir beide sind Freelancer (wie man die Selbständigen heutzutage nennt) und daher in gewissem Maße darauf angewiesen, dass man uns und unsere Kompetenz im Netz findet. Dennoch sind wir Kollegen, die keine Konkurrenten sind. Ich habe keinerlei Motivation, mich mit C# auseinanderzusetzen, nachdem ich nun Python kennen und lieben gelernt habe :-)

Fröhliches Klicken, lieber Leser, und viel Erfolg, Herr Kollege!

PyDay: Unittests

In dem Artikel Unit-Tests habe ich vor längerem bereits etwas Grundlegendes dazu geschrieben. Auch das Thema Test-Driven Development wurde dort bereits erwähnt. Damals ging es speziell um ein Unittest-Framework für Microsoft Access, aber das generelle Konzept der Unittests ist natürlich nicht darauf beschränkt.

Wie man sich denken kann, steht auch für die hier besprochene Python-Entwicklungsumgebung ein Unit-Test-Framework zur Verfügung. Es gibt sogar mehrere davon, aber für unsere Zwecke reicht es zunächst, sich nur mit einem zu beschäftigen, PyUnit.
PyDay: Unittests weiterlesen

Quick Fix

Der „Quick Fix“ ist eine schöne Funktion in Eclipse PyDev, die uns hilft, bereits vom Compiler erkannte Fehler schnell zu beheben. Dazu gehen wir mit dem Cursor auf den rot unterkringelten Fehler und drücken Strg+1. Das dann aufgehende Kontextmenü bietet uns in der Regel mehrere mögliche Lösungen für unser Problem an, z.B. „Create class“ oder „Create method“.

Wähle das passende durch einen Doppelklick aus und das Problem ist schon fast gelöst.

 

quickfix

Widersprüchliche Meldungen vom System

Es gibt ja immer wieder Beispiele, die sehr gut zeigen, wie man es nicht machen sollte. Hoffentlich lernen wir daraus.

Meldungen in einem Meldungsfenster (engl. „message box“) sollten klar und deutlich zum Ausdruck bringen, worum es geht:

  • was gerade passiert
  • was das Problem ist
  • (möglicherweise) was dazu geführt hat
  • was der Benutzer tun kann

Widersprüchliche Meldungen vom System weiterlesen

PyDay: Programm starten

Python 3 (Johannes Ernesti und Peter Kaiser)
Python 3 (Johannes Ernesti und Peter Kaiser)
In unserer PyDay-Reihe haben wir schon erfahren, wie man in Eclipse ein Python-Projekt anlegt und mit ersten Schritten zu einem lauffähigen Programm gelangt. Wir wollen aber nicht nur programmieren, sondern das Programm auch ausführen. In diesem Artikel soll es um die Frage gehen, wie unser Programm auf der Kommandozeile oder in Eclipse selbst starten können.

PyDay: Programm starten weiterlesen

Der Agile Monday Kassel wird 2! Ein Grund zum Feiern!

Wenn ich bedenke, dass wir damals mit drei Leuten im Bistro am Bahnhof Wilhelmshöhe gesessen und mit Lean Coffee den Abend gestaltet haben, dann sind wir in diesen zwei Jahren weit gekommen.

Mehr als ein Jahr ist vergangen, seit ich meinen 1-jährigen Rückblick hier veröffentlichte. Aufgrund des realen Gründungsdatums 30.10.2013 ist der Agile Monday Kassel inzwischen sogar schon etwas älter. Ein kleines Jubiläum wollen wir trotzdem am kommenden Treffen feiern. Das wird dann turnusmäßig am 1. Februar 2016 sein. Ort und Zeit werden rechtzeitig über die Xing-Gruppe bekanntgegeben.

Auch dieses Jahr brachte uns eine Menge spannender Themen ein, und so wird es hoffentlich auch in Zukunft weiter gehen. Einen inhaltlichen Rückblick gibt Patrick dieser Tage auf Agile-Monday.de.

Weitere Hintergrundinformationen gibt es auf http://www.agile-monday.de/kassel/.

Über Freitags-Releases

Freitag ist ein guter Zeitpunkt, um Software auszuliefern. Das ist ein schöner Wochenabschluss, ein deutliches Zeichen, dass man etwas geschafft hat. Dann kann man beruhigt in’s Wochenende gehen. Noch besser ist allerdings der letzte Tag vor dem Urlaub.

Wer das behauptet, den sollte man ernsthaft fragen: Und wovon träumst du nachts? Wir alle (zumindest die Entwickler unter uns) haben wohl schon einmal erlebt, dass eine Software nicht genau das getan hat, was wir beabsichtigten. Nur einmal? Mal ehrlich, das kommt doch sicher häufiger vor, oder? Warum ausgerechnet sollte es also an diesem Freitag plötzlich perfekt laufen? Haben wir etwas am Verfahren geändert? Über Freitags-Releases weiterlesen

PyDay: Erste Schritte (3)

In den ersten beiden Folgen (1, 2) dieser Artikelserie haben wir die Grundlagen gelegt: Das Projekt ist eingerichtet, steht unter Quellcodeverwaltung und es existiert bereits ein rudimentäres Modul. Dieses Modul wollen wir nun um eine Standardschnittstelle für die Kommandozeile erweitern.

Hauptfunktion mit Rückgabewert

Hilfreich (weil übersichtlicher) ist es, die Kernfunktionalität eines Programmes in einer zentralen Funktion zu halten. Daher legen wir zunächst eine Funktion an, die nun gerne „main“ heißen darf (Zeile 3). Diese bekommt einen Doc-String (Zeilen 4-6) und definiert einen Rückgabewert (Zeile 7).

Damit der Rückgabewert letztlich auch die Kommandozeile erreicht, muss er mit einem speziellen Befehl an das Betriebssystem zurückgegeben werden. Diesen Befehl importieren wir aus der Bibliothek „sys“ (Zeilen 1 und 10).

Die Zeile 9 bleibt unverändert erhalten. Sie sorgt dafür, dass überhaupt etwas ausgeführt wird, denn die Funktion „main“ würde ohne deren Hilfe nichts tun können. Python setzt den internen Namen __main__ (ja, mit zwei Unterstrichen davor und danach) automatisch für das von dem Interpreter gestartete Hauptmodul ein.

import sys
 
def main():
    '''
    Hauptprogramm der Kaffeemaschine
    '''
    return 0
 
if __name__ == '__main__':
    sys.exit(main())

Hashwert: b496906

PyDay: Erste Schritte (3) weiterlesen

Niels Pfläging: Organisation für Komplexität

Niels Pfläging: Organisation für Komplexität
Niels Pfläging: Organisation für Komplexität (Affiliate-Link)
Komplexität ist schwer zu verstehen. Unsere Arbeitswelt ist komplex, denn menschliche Interaktionen sind schwer vorhersagbar. Unser althergebrachtes Verständnis der Arbeitswelt stammt noch aus einer Zeit, als das Industriezeitalter gerade angebrochen war. Damals hielt man es für eine Tatsache, dass die Arbeitswelt zum großen Teil aus ungebildeten, unkreativen und faulen Arbeitern bestand, denen einige wenige gebildete, intelligente und kreative Führungskräfte sagen mussten, was getan werden sollte. Diese sogenannte „Theorie X“, wie sie Douglas McGregor beschrieben hat, hält sich in der Tat auch heute noch und scheint in vielen Köpfen unveränderlich verankert zu sein. Und das, obwohl McGregor bereits 1960 mit „Theorie Y“ einen realistischeren Gegenpart favorisiert hatte.

Doch dies ist nur der Einstieg in eine faszinierende Sammlung von Wissen aus Niels Pflägings Buch „Organisation für Komplexität“ (s. Bild). Ein wichtiger Punkt ist dabei die eingangs zitierte Aussage von Kurt Lewin, „man kann ein System nur verstehen, wenn man versucht, es zu verändern“. Und gerade das ist in einem komplexen System schwierig. Ein solches System reagiert kaum vorhersagbar auf Eingriffe, was landläufig mit dem Begriff „Butterfly-Effekt“ oder „kleine Ursache, große Wirkung“ beschrieben wird. Komplexität bedeutet dabei nicht kompliziert! Ein kompliziertes System kann beherrscht werden, auch wenn es schwierig sein mag. Ist ein System komplex, muss jede Veränderung auf ihre tatsächliche Wirkung hin überwacht werden. Erreicht man nicht das gewünschte Ergebnis, muss man etwas anderes tun. Ein wesentlicher Bestandteil dessen, was „agil“ genannt wird.

Dieses Buch ist, wie Pfläging selbst schreibt, „ein Manifest für ein neues, zeitgemäßes Führungsverständnis und für die radikale Veränderung im Unternehmen“. Es motiviert zum Umdenken, und das ist gut so. Denn „der Kopf ist rund, damit das Denken die Richtung wechseln kann“ (Francis Picabia, 1879 – 1953).

%d Bloggern gefällt das: