PyCharm nun auch in kostenloser Community Edition verfügbar

Das Unternehmen JetBrains, das zahlreiche professionelle Entwicklungsumgebungen anbietet (und auf dessen IntelliJ auch das neue AndroidStudio basiert), bietet ab sofort auch seine auf Python ausgerichtete IDE »PyCharm« in einer kostenlosen, dafür aber um einige Funktionen gekürzten »Community Edition« (CE) an. Die Software benötigt ein installiertes Java 6 oder höher und läuft unter Windows, Linux und MacOS.

Einen Vergleich zwischen abgespeckter »Community Edition« und »Professional Edition« gibt es hier, alle weiteren Informationen hier.

Was den Funktionsumfang angeht, kann eine kleine Entwicklungsumgebung wie das kürzlich hier vorgestellte NinjaIDE natürlich nicht mit PyCharm mithalten – insofern mag das neue Angebot für viele Python-Entwickler durchaus sehr interessant sein.

PyCharm unter MacOS
PyCharm unter MacOS

In eigener Sache: neues tumblr-Blog zu User Interfaces

Gute User Interfaces zu erstellen, ist nicht immer einfach (und danken tut es einem auch niemand) – und dementsprechend existieren endlos viele schlechte Benutzeroberflächen. Auf einem neuen tumblr-Blog sammele ich abschreckende Beispiele. Einerseits zur Belustigung, andererseits in der Hoffnung, dass sich Entwickler die gezeigten Gräuel zu Herzen nehmen und es selbst besser machen.

Über Besucher, kritisches Feedback und Hinweise auf weitere Negativbeispiele bin ich dankbar.

stupidui.tumblr.com

Howto: Dokumentation mit Markdown schreiben in Netbeans

Wer direkt in seiner Entwicklungsumgebung auch Dokumentationen und Readmes bearbeitet, wird sich schnell Wege überlegen, um Überschriften, Aufzählungen und Sonstiges hervorzuheben bzw. zu formatierten. Mit Markdown gibt es ein weit verbreitetes und sehr einfaches System, das sich dafür hervorragend eignet. Leider bietet Netbeans von Haus aus keine besondere Unterstützung für dieses Format.

Der Entwickler Florian Reiss hat sich dieses Problems angenommen und bietet ein entsprechendes Netbeans-Plugin auf github an.

Wer sich mit git auskennt, kann also das Projekt klonen und am besten in der eigenen Netbeans-Installation übersetzen und anschließend das erstellte Paket installieren. Alle anderen klicken auf der Github-Seite am besten auf Download ZIP, entpacken das heruntergeladene Archiv und installieren das Plugin, das sich im Unterverzeichnis nbm befindet und flow-netbeans-markdown.nbm heißt. Dazu öffnet man den Plugin-Manager (Tools / Plugins), wechselt auf den Reiter Downloaded, klickt auf Add Plugins…, wählt die oben genannte NBM-Datei aus und klickt anschließend auf Install. Nach einem Neustart ist das Plugin aktiv.

Über den Plugin-Manager kann das heruntergeladene Modul installiert werden
Über den Plugin-Manager kann das heruntergeladene Modul installiert werden

Das Plugin bietet nicht nur Syntax-Highlighting für die Markdown-Syntax, sondern kann auch direkt HTML-Dateien erzeugen und unterstützt zahlreiche Erweiterungen zur Standard-Markdown-Syntax. In den Plugin-Einstellungen (Preferences / Miscellaneous / Markdown) lassen sich die Extensions einschalten und ein Grundgerüst editieren, das bei der HTML-Generierung verwendet wird. Hier ist es etwa möglich, CSS zu notieren oder eine CSS-Datei (die allerdings dann jeweils von Hand zu kopieren ist) zu referenzieren.

In den Markdown-Einstellungen kann das HTML-Template bearbeitet werden
In den Markdown-Einstellungen kann das HTML-Template bearbeitet werden

Die Syntax von Markdown ist recht simpel und ist darauf ausgelegt, dass auch die Plain-Text-Version eines Dokumentes noch gut gelesen werden kann. Einfache Basis-Elemente sind Überschriften, Zitatblöcke und Listen:

Eine ausführliche Beschreibung von Markdown findet man hier, eine Beschreibung der Erweiterungen hier. Mit Hilfe von pandoc ist es sogar möglich, Markdown-Dateien nach ePub, PDF, LaTeX und andere Formate zu konvertieren.

Über das Kontextmenü einer MD-Datei kann eine HTML-Version generiert werden
Über das Kontextmenü einer MD-Datei kann eine HTML-Version generiert werden

Kleiner Tipp noch zum Schluss: Im Gegensatz zu Programmcode ist es natürlich empfehlenswert, bei Markdown-Dateien den Zeilenumbruch im Editor einzuschalten. Das geht von Haus aus in Netbeans nur global, was auf Dauer zu umständlich ist. Auch hier schafft ein Plugin Abhilfe: Toggle Line Wrap heißt es und kann direkt über den Plugin-Manager installiert werden. Es richtet rechts unten in der Statusleiste eine kleine Schaltfläche ein, mit der der Umbruch (nur) für die aktuelle Datei umgeschaltet werden kann.

Howto: Einrichtung eines PHP-Projektes mit Subversion und FTP-Synchronisation in Netbeans

Ein PHP-Projekt in Netbeans einzurichten ist nicht sonderlich schwer; man braucht lediglich ein Projektverzeichnis anzugeben und kann loslegen. Ein wenig komplizierter wird es, wenn das Netbeans-Projekt sich in bestimmte Workflows einbinden muss, etwa dann, wenn im Team entwickelt wird (Stichwort Versionsverwaltung) oder der Code mit einem entfernten Server abgeglichen werden soll. Glücklicherweise bietet Netbeans einige Hilfsmittel, die dem Entwickler das Leben leichter machen.

Dieser Artikel zeigt die exemplarische Einrichtung eines PHP-Projektes in Netbeans, das folgende Voraussetzungen erfüllt:

  • Das Projekt wird lokal abgelegt und ist von hier aus auch lauffähig, weil eine lokale Web-Server-Umgebung vorhanden ist
  • Der Quellcode befindet sich unter Subversion-Verwaltung, was in diesem Szenario das gemeinsame Arbeiten mit mehreren Entwicklern (mit jeweils eigener lokaler Arbeitskopie) ermöglicht
  • Der lauffähige Code wird per FTP mit der produktiven Web-Server-Umgebung abgeglichen; der Abgleich erfolgt manuell (auf Wunsch können Änderungen auch automatisch übertragen werden)

Die lokale Umgebung wird also für die Entwicklung und das Testen genutzt. Änderungen werden in die Quellcode-Verwaltung übertragen. Zum Abschluss einer Teil-Entwicklung wird der aktuelle Projektstand mit dem produktiven Web-Server abgeglichen. Dieses Setup eignet sich sowohl für kleinere Teams (größere würden sicherlich den Upload auf das Produktivsystem reglementieren) als auch den einzelnen Entwickler, der an einer Website arbeitet.

Wir gehen davon aus, dass zunächst ein leeres Subversion-Repository vorhanden ist, also auch noch die üblichen Verzeichnisse tags, branches und trunk angelegt werden müssen. In Netbeans muss gegebenenfalls noch das Subversion-Plugin über den integrierten Plugin-Manager installiert werden, sofern das noch nicht geschehen ist.

Zunächst legen wir in Netbeans über den Menüpunkt Datei / Neues Projekt ein neues Projekt an und wählen als Vorlage PHP Application. Im nächsten Schritt vergeben wir einen passenden Projektnamen, wählen das lokale Webserver-Wurzelverzeichnis aus, wählen die gewünschte PHP-Version und Zeichenkodierung.

Grundlegende PHP-Projekteinstellungen
Grundlegende PHP-Projekteinstellungen

Der folgende Dialog ist ein wenig komplizierter. Unter Run As wählen wir den Punkt Remote Website (FTP, SFTP) aus, da wir mit einem entfernten Server abgleichen möchten, obwohl ja bereits das lokale Projekt (in der eigenen Server-Umgebung) lauffähig ist. Als Project URL geben wir nun aber nicht die Einstiegsadresse auf dem Produktivsystem an, sondern die Adresse des lokalen Web-Servers, also etwa »http://localhost/« – wer sich mit seiner Hosts-Datei auskennt, kann natürlich auch (wie im Beispiel dargestellt) einen klangvolleren Namen hierfür vergeben.

Laufzeiteinstellungen
Laufzeiteinstellungen

Nun müssen wir eine Remote Connection einrichten: Hierfür klicken wir auf Manage und dann Add. Wir vergeben einen Namen für die einzurichtende Verbindung und wählen den Verbindungstyp; je nach Server FTP oder das abgesicherte SFTP. Nach Klick auf OK bearbeiten wir die Verbindungseinstellungen: Dazu gehören der Host-Name des FTP-Servers sowie Benutzername und Kennwort und das Initial Directory, das für die Datei-Übertragungen das Startverzeichnis darstellt. Die Datei- und Verzeichnisstruktur des PHP-Projektes wird 1:1 in dieses Verzeichnis auf dem FTP-Server übertragen, es ist also wichtig, dass hier der passende Pfad eingetragen wird. Die Einstellungen für Timeout und Keep-Alive können in aller Regel auf den Standardwerten bleiben. Mit Test Connection kann überprüft werden, ob die FTP-Einstellungen funktionieren.

FTP-Verbindung konfigurieren
FTP-Verbindung konfigurieren

Ist diese Remote Connection eingerichtet, landen wir wieder im Projekt-Assistenten. Dort haben wir noch die Möglichkeit, einen Upload-Pfad einzugeben. Dieser ergibt zusammen mit dem Basis-Pfad aus den FTP-Einstellungen das tatsächliche Projekt-Wurzelverzeichnis auf dem FTP-Server. Zur Kontrolle wird der zusammengesetzte Pfad in diesem Dialogfenster noch einmal ausgegeben.

Unter dem Punkt Upload Files wählen wir Manually aus, denn wir wollen erst am Ende eines Entwicklungsschrittes das gesamte Ergebnis auf das Produktivsystem übertragen und nicht bereits während der Entwicklung einen (möglicherweise aktuell nicht lauffähigen) Zwischenstand. Wenn es besser in den Arbeitsfluss passt, kann auch aus den Einstellungen On Save (beim Speichern einer bzw. bei Änderung einer Datei) oder On Run (beim »Ausführen« des Projektes über den entsprechenden Menüpunkt in der Entwicklungsumgebung) gewählt werden.

Im letzten Schritt des Assistenten können noch PHP-Frameworks ausgewählt werden, die allerdings noch separat installiert und konfiguriert werden müssen. Ob die Frameworks benötigt werden, hängt vom jeweiligen Projekt ab; in unserem Beispiel verwenden wir keines der angebotenen Frameworks und beenden den Assistenten.

Nun haben wir schon einmal ein Projekt eingerichtet, dass sowohl lokal lauffähig ist als auch mit einer Produktivumgebung synchronisiert werden kann. Wir testen das ganze, indem wir eine simple Datei »index.php« anlegen und auf Run klicken – im nächsten Augenblick sollte sich, wenn alles korrekt konfiguriert worden ist, ein Web-Browser öffnen und über den lokalen Web-Server die gerade angelegte Seite darstellen. Sollte das nicht funktionieren, müssen noch einmal die angegebenen Pfade in den Projekteinstellungen überprüft werden.

Nun fehlt noch die Subversion-Einrichtung. Dafür wählen wir im Menü Team / Subversion / Ins Repositorium importieren aus und konfigurieren im folgenden Dialog das Server-Profil. Wir geben hier die Repository-URL sowie unsere Authentifizierungsdaten ein. Je nach Subversion-Server gibt es hier recht unterschiedliche Möglichkeiten – daher kann an dieser Stelle keine allgemeine Anleitung erfolgen. Im nächsten Schritt wird das zu verwendende Unterverzeichnis des Repositoriums ausgewählt. Da wir von einem bisher leeren Repository ausgehen, legen wir ein neues Verzeichnis »trunk« an und wählen dieses als Ziel aus. Anschließend wird der aktuelle Projekt-Stand committed, also in das Repositorium übertragen.

Angabe des zu verwendenden Subversion-Repositoriums
Angabe des zu verwendenden Subversion-Repositoriums

Hiermit ist die Projekteinrichtung abgeschlossen. Änderungen können von nun an sehr bequem über die integrierten Subversion-Funktionen überprüft und auf dem Quellcode-Server übertragen werden. Möchte man etwa sehen, welche Dateien sich geändert haben, reicht es aus, im Projekte-Panel auf einen beliebigen Ordner (es kann auch das gesamte Projekt gewählt werden) zu klicken und Subversion / Änderungen zeigen auszuwählen. Es öffnet sich ein neues Panel, aus dem heraus die wichtigsten Subversion-Aufgaben ausgeführt werden können. Per Doppelklick auf einen Dateieintrag erhält man eine grafische Übersicht der erfolgten Änderungen und eine Historienansicht.

Sollen nun Änderungen per FTP auf das Produktivsystem übertragen werden, kann nun auf einem ähnlichen Weg eine Synchronisation mit dem FTP-Server erfolgen: Wieder wird das Projekt- oder ein bestimmtes Unterverzeichnis ausgewählt und im Kontextmenü Synchronize angeklickt. Bevor Netbeans nun irgendwelche Dateien überschreibt, zeigt es noch eine Zusammenfassung der Schritte an, die es auszuführen gedenkt, so dass es immer noch die Möglichkeit gibt, den Vorgang zu modifizieren oder abzubrechen. Wer mag, kann diese Zusammenfassung auch komplett ausschalten, aber zumindest eine grobe Kontrolle ist in der Regel ratsam. Wer direkt »auf dem FTP-Server« entwickeln möchte, kann in der Run Configuration des Netbeans-Projektes auch auf einen automatischen Upload On Save umschalten. Hierbei wird jede Dateiänderung (die auch etwa durch Subversion-Aktionen bedingt sein kann) direkt übertragen. Ob das für ein Produktivsystem empfehlenswert ist, hängt letzten Endes auch vom Entwicklungsstand und der Größe des Projektes bzw. der Anzahl der Entwickler ab.

Howto: To-Do-Listen in Netbeans

Mit dem Action Items-Panel bietet die Entwicklungsumgebung Netbeans eine einfache, aber effektive Möglichkeit, ausstehende Aufgaben, die im bearbeiteten Quellcode anfallen, zu markieren und mit Notizen zu versehen.

Dazu werden innerhalb des Quelltextes einfach Kommentare mit bestimmten Stichworten eingeleitet, denen jeweils eine kurze Beschreibung des Punktes folgt, etwa so:

// TODO Fehlerbehandlung vervollständigen

Wird nun über den Menüpunkt Window / Action Items das entsprechende Fenster geöffnet, werden die vorhandenen Punkte übersichtlich aufgelistet. Das Fenster bietet am linken Rand relativ umfangreiche Filtermöglichkeiten: so kann nicht nur gewählt werden, ob Einträge aus der aktuell geöffneten Datei, aus dem gesamten Projekt oder allen geöffneten Projekten angezeigt werden sollen, sondern es können auch beliebige Filter definiert werden, die nur bestimmte Stichworte berücksichtigen. Auch die Stichworte, die überhaupt als Action Item interpretiert werden sollen, können vom Anwender selbst definiert werden.

Natürlich stellt diese Art von To-Do-Listen keinen Ersatz für ein Bug-Tracking- oder Ticket-System dar, aber gerade für temporäre Erinnerungen (beispielsweise beim Entwicklen eines Prototypen / Grundgerüstes, das innerhalb weniger Tage mit »Leben« gefüllt werden soll) ist es ein schönes Hilfsmittel.

Das »Action Items«-Panel mit To-Do-Eintrag
Das »Action Items«-Panel mit To-Do-Eintrag

Howto: Lokale Historie unter Netbeans verwenden

In meinen Augen ist es eines der unscheinbarsten, aber ein überaus sinnvolles Feature, das Netbeans von Hause aus mitbringt: die lokale Historie. Mit ihr lassen sich Änderungen an bearbeiteten Dateien auch dann zurückverfolgen, wenn man kein ausgewachsenes System für die Versionsverwaltung einsetzt.

Natürlich sollte man bei jedem wichtigen Projekt (wenn es sich also nicht nur um eine Spielerei handelt) eine solche Versionsverwaltung einsetzen, erst recht dann, wenn man im Team an einem Projekt arbeitet. Aber auch dann kann die lokale Historie immer noch sinnvoll eingesetzt werden, etwa wenn es darum geht, Änderungen »auf dem Weg zum Commit« nachzuvollziehen bzw. in diesem Stadium Änderungen ganz oder teilweise rückgängig zu machen.

Die lokale Historie ist in Netbeans eine Standardfunktion, die nicht extra eingeschaltet werden muss. In der Standardeinstellung werden lokale Änderungen dreißig Tage lang aufbewahrt. Diese Zeitspanne kann geändert werden; wer mag, kann die Funktion auch vollständig deaktivieren. Die Einstellungen werden unter Options / Miscellaneous / Versioning / History vorgenommen.

Ist die lokale Historie aktiv, kann jederzeit für eine geöffnete Datei in die Historien-Ansicht gewechselt werden. Zum Umschalten zwischen Quellcode und zugehöriger Historie befinden sich direkt über dem Dateifenster die Schaltflächen Source und History. Die Historie zeigt eine Liste aller vorhandenen Zwischenstände der Datei mit dem Zeitpunkt der Erstellung. (Wer zusätzlich eine ausgewachsene Versionsverwaltung benutzt, wird feststellen, dass die Historie Dateiversionen aus beiden Systemen auflistet!) Per Klick erhält man eine grafische Übersicht der gemachten Änderungen zur Vorgängerversion oder zur aktuell gespeicherten Version der Datei. Alle Änderungen werden farblich markiert und gegenübergestellt. Es ist nun möglich, mit wenigen Klicks entweder einzelne Unterschiede von einer Version in die andere zu übernehmen oder einen bestimmten Versionsstand vollständig wiederherzustellen.

Das ganze entspricht also im Prinzip dem gleichen, was einem die Revisionshistorie einer »großen« Versionsverwaltung bietet – und das immerhin ohne jeglichen Einrichtungsaufwand.

Lokale Historie mit grafischer Darstellung der Unterschiede
Lokale Historie mit grafischer Darstellung der Unterschiede