Tag 279/2016: Reguläre Ausdrücke, PCRE

Reguläre Ausdrücke sind Quell eleganter Lösungen und zerraufter Haare. Manche lösen gerne Puzzles, andere entziffern gerne in Gruppen angeordnete negative Lookaheads. Ein paar schnelle Links mit knappem und präzisem Das-wichtigste-was-man-wissen-sollte-Gehalt sowie Dokumentationen für Python, PHP & Javascript.

The absolute bare minimum every programmer should know about regular expressions

5 Regular Expressions Every Web Programmer Should Know

Extreme regex foo: what you need to know to become a regular expression pro

Python-Documentation: Regular expression operations und ein Online-Testtool

PHP-Documentation: Regular expressions (Perl-compatible)

Javascript-Documentation: RegExp

nginx benutzt PCRE in location-Blöcken, maps und beim ngx_http_rewrite_module (einfaches Beispiel).

RegExpBuddy, eine von vielen gelobte kostenpflichtige Software zum Testen von regulären Ausdrücken, leider nur unter Windows.

Tag 278/2016: Server-Optimierungs-Fetisch versus Einsatz-Kontext

Eine schreckliche Überschrift, wer hat sich die nur ausgedacht.

Beim Erforschen der Leistungsgrenzen eines VPS, der als Webserver dienen soll, kann man sich unverzagt daran machen, ein paar Kernelparameter zu überprüfen, z.B. net.core.somaxconn,  tcp_max_syn_backlog oder die Anzahl maximal geöffneter Dateien zu erhöhen (ulimits, /etc/security/limits.conf).

Aber nicht immer muss es das Ziel sein, dass das Ding abertausende von TCP-Verbindungen zulässt, welche die eigentliche Anwendung (lies: Webserver) dann eh nicht in der gleichen Anzahl bedienen kann.

Wenn beispielsweise der VPS Teil eines Clusters ist, dem ein Loadbalancer vorgesetzt ist, kann es schlauer sein, die Anzahl maximaler Verbindungen bewusst zu reduzieren (kleineres listen-backlog) und damit die Leistung des Loadbalancers zu optimieren. Wenn die Verbindungen abgelehnt werden und nicht in einer Warteschlange landen, kann der Loadbalancer schneller eine weniger ausgelastete Maschine finden.

Tag 276/2016: Security Engineering

Leseempfehlung: Security Engineering. A Guide to Building Dependable Distributed Systems. Ein wichtiges und lesenswertes Buch für alle, die sich mit Sicherheit in verteilten Systemen beschäftigen bzw. beschäftigen wollen. Ein richtiger Augenöffner für die oftmals subtilen Schwachstellen der vermeintlich wasserfesten Protokolle und Techniken, die man im Alltag einsetzt. Zahlreiche historische Referenzen (z.B. zu Schlüsselkarten, Autoschließsystemen, Bankensicherheit) machen klar, dass die aktuell als sicher geltenden Verfahrensweisen diejenigen sind, die in 10, 20 oder 30 Jahren in Lehrbüchern als überholt oder gescheitert diskutiert werden.

Die Kapitel der 1. und 2. Ausgabe sind online frei verfügbar; die verlinkte Seite hat auch Links zum Kauf der gedruckten Version.

Sagt Wikipedia: Security engineering is a specialized field of engineering that focuses on the security aspects in the design of systems that need to be able to deal robustly with possible sources of disruption, ranging from natural disasters to malicious acts.

Tag 272/2016: Never change a running system

Auch:

  • if it ain’t broke, don’t fix it
  • leave well enough alone

Never change a running system gehört zu den großen Weisheiten des systemadministrativen Berufswesens. Aber je nachdem, in welchem Zustand man sich gerade befindet, bzw., passiert es dann eben doch, dass man das laufende System verändert.

Und schon pustet man ein Kundenprojekt, das sich gerade in einer wichtigen Phase befindet, für eine halbe Stunde aus dem Internet. Ein trivialer Mausklick bringt Bugs und schlechte Kommunikation des Providers zum Vorschein, aber tröstlich ist es natürlich trotzdem nicht.

Notiz an mich: Vielleicht den Spruch mit Henna-Farben auf den Unterarm notieren.

Tag 270/2016: Links für 12 Wochen Urlaub

http://riemann.io/
Aggregation von Events

http://socket.io/
Bidirektionale ereignisbasierte Echtzeitkommunikation

http://speed.pypy.org/
Eine Implementation von CPython

https://falconframework.org/
Schnelles, minimalistisches Python-Framework

http://openresty.org/download/agentzh-nginx-tutorials-en.html

 

Tag 266/2016: Abkürzung statt Fehlermeldung

Benutzerdaten aus Web-Formularen auf Plausibilität, Korrektheit oder Gültigkeit zu überprüfen, gilt vielen Programmierern als eher langweilige, jedenfalls immer lästige Aufgabe. Zu Unrecht eigentlich, weil selbst auf den ersten Blick einfache Felder wie Geburtsdatum, E-Mail-Adresse oder Postleitzahl immer wieder ihre ganz eigenen, hinterhältigen Herausforderungen haben können, an denen man wachsen kann.

Sowohl was die Art der Eingabe betrifft (einfaches Texteingabefeld versus komplexes Javascript-Widget), clientseitige Validierung, serverseitige Validierung bis hin zur Entscheidung, wie spezifisch man Rückmeldung an den/die Anwender/in geben will (von „Überprüfen Sie Ihre Angabe“ bis „Ihre Angabe enthält ein unerlaubtes Sonderzeichen und ist zu lang“). Manche Dinge ändern sich auch mit der Zeit: Bei E-Mails können neue ungewöhnliche Top-Level-Domains hinzukommen, Internationalisierung muss berücksichtigt werden usw.

Bei Feldern, die im jeweiligen Anwendungsfall zur Änderung vorgesehen sind, wird immer auch geprüft, ob sich überhaupt etwas geändert hat. Kann ich beispielsweise meine E-Mail-Adresse ändern, muss geprüft werden, ob ins Formular überhaupt eine neue Adresse eingetragen wurde. Was tun, wen der/die Anwender/in wieder die gleiche Adresse eintippt?

Diesen Fall ignorieren und nach dem Absenden und der Validierung einfach keine Rückmeldung geben? Stoisch „Bitte geben Sie eine neue E-Mail-Adresse an“ ausgeben oder belehrend/spöttisch „Sie müssen an dieser Stelle schon eine neue E-Mail-Adresse angeben…“? – Aber, was ich in all den Jahren noch nie gesehen habe, ist in so einem Fall einfach sofort die Ausgabe: „Ihr E-Mail wurde soeben erfolgreich geändert!“. Sozusagen mit begleitendem aber unhörbarem Programmiererkichern.

Eine Win-Win-Situation für Programmierer und Anwender: Der eine musste nichts programmieren und der andere ist auch glücklich: „Ich hab meine E-Mail beispiel@example.com erfolgreich auf beispiel@example.com geändert“.

Tag 261/2016: Kinder und Programmieren, hier: Minecraft-PI

Die Lern-Ressourcen-Seite auf raspberrypi.org enthält einen Haufen interessanter und einfach nachvollziehbarer Tutorials.

Unter anderem wird auch in die Python-API für Minecraft-PI eingeführt, z.B. um die Position des Spielers abzufragen, festzulegen oder Steinblöcke zu positionieren. Gerade für Minecraft-PI gibt es noch viele weitere Code-Tutorials, vom „Whac-a-Block“-Spiel über das „Minecraft-Photobooth“.

Hier der Link zu den Raspberry-Lernprojekten auf Github.

Tag 257/2016: Kinder und Programmieren, hier: KidsCanCode-Channel

Programmieren lernen ist für Kinder und Jugendliche heute ziemlich einfach: Die notwendige Hardware ist beispielsweise mit einem Raspberry Pi für wenig Geld zu haben — Tutorials, Kurse & Inspirationsquellen finden sich im Internet ohne Ende.

Hier ein Beispiel aus dem KidsCanCode-Channel auf YouTube – „Zeichnen mit Schildkröten“:

Python bietet sich für erste Programmiererfahrungen an: Auf allen relevanten Betriebssystemen verfügbar bzw. bereits vorhanden, gute Lesbarkeit, eine große Standardbibliothek, viele bekannte Web-Frameworks und Projekte nutzen es, gute Entwicklungsumgebungen stehen zur Verfügung…