Nach einem Jahr der Blog-Abstinenz heute zur Erfrischung mal ein wenig Scala. Nehmen wir an, wir haben die folgende login-Funktion, die REST-assured nutzt, um HTTP-Requests für einen Login zu tätigen. Zurückgegeben wird ein Tupel mit einem Access-Token und wie lange selbiges gültig ist. def...
Im heutigen Blog-Post geht es um Webrahmenwerke. Genauer: es geht darum, wie man auf typsichere Art und Weise Links zu Controllern erzeugt. Typsicher in dem Sinne, dass man Variablen im Routing nur durch Werte des selben Typs ersetzen kann, den der Controller auch tatsächlich erwartet. Übergibt...
Seit heute steht Let's Encrypt als öffentliche
Beta zur Verfügung. Mit Let's Encrypt kann sich jeder einfach und kostenlos
ein X.509-Zertifikat erstellen lassen. Somit gibt es keine Ausrede mehr, nicht
HTTPS zu benutzen. Deswegen versucht dieses Blog auch mit gutem Beispiel voran
zu gehen:
Wie man am Titel bereits leicht erraten kann: heute geht es (zum ersten Mal in diesem Blog?) um Java. Genauer: Wie man heterogene Container in Java umsetzen kann. Zunächst zur Idee: Wir wollen eine Klasse Favorites implementieren, in die man seine Lieblingsobjekte speichern und auch wieder abrufen...
ikanobori hat sich die Mühe gemacht und die Software, die auf bpaste.net läuft, komplett erneuert. Dabei hat er auch lange gewünschte neue Features umgesetzt. Außerdem ist bpaste.net damit gleichzeitig auf neue, leistungsfähigere Hardware umgezogen. Neu ist: Man kann Pastes löschen (via einem...
Das ist Peter[*]. Peter arbeitet beim "Zentrum für Cyber Defence". Das "Zentrum für Cyber Defence" hilft, den deutschen Mittelstand vor Industriespionage zu schützen. Wie er das tut, wird eindrucksvoll in einer (Kurz-)Reportage des br gezeigt: Da der Cyber aber ziemlich groß ist, kann man da...
Nach langer Zeit der Abstinenz, unter anderem ausgelöst durch den Plattentod des Blog-Hosts, habe ich beschlossen mal wieder ein wenig zu bloggen. Wie sich das gehört habe ich also als erstes einmal den kompletten Blog umgebaut. Was hat sich geändert? Das Aussehen! Und mit dem Aussehen auch die...
Wenn man händisch CPython-Erweiterungen mit Hilfe der C-API baut (und nicht etwa Cython oder Ähnliches benutzt), läuft man leider sehr leicht Gefahr, dass man versehentlich Reference Leaks einbaut. Um das Auffinden von Refleaks zu erleichtern, zählt CPython bei einem Debug-Build die Summe aller...
Leo Hutson war so nett und hat (ohne, dass wir danach gefragt hätten)
ein, wie ich finde, sehr gelungenes neues Logo für bpython entworfen:
Vielen Dank dafür. Wir haben natürlich die Homepage und die Dokumentation bereits aktualisiert.
In Python 3 gibt es ein neues Statement nonlocal, das es erlaubt, bei verschachtelten Funktionen in der inneren Funktion einen neuen Wert an einen lokalen Namen der äußeren Funktion zu binden. In Python 2 war es nur möglich, sich auf einen lokalen Namen der äußeren Funktion zu beziehen. Note Der...
In Python 2 kann man dem Tokenizer mittels Kommentaren mitteilen, wie breit ein Tab ist:
# :ts=4
if 1:
if 0:
print 1
print 2 # hard tab here
Führt man den Code aus, wird 2 ausgegeben. Entfernt man den Kommentar, wird nichts ausgegeben.
Bevor man stundenlang nach scheinbar obskuren Fehlern sucht: Einfach
einmal schauen, ob die Software detailiertere Logging-Optionen kennt
und dann den Log aufmerksam lesen.
Einfach
(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
zur Konfiguration hinzufügen, dann werden Dateien mit Shebang
automatisch beim Speichern ausführbar gemacht.
Dazu benutzt man einfach sys.displayhook. bpython und Python führen beim Starten die Datei aus, auf die die Umgebungsvariable PYTHONSTARTUP zeigt. Man kann sich also einfach eine Datei mit folgendem Inhalt anlegen: import __builtin__ import sys def displayhook(value): if value is not...
Häufig findet man Leute, die gerne mathematische Ausdrücke in Python evaluieren wollen. Dabei kommen sie auf die Idee, dass man dazu ja eval() benutzen könnte. Und damit das ganze auch noch sicher ist, übergibt man eigene globals und locals, in den man optimalerweise __builtins__ auf None setzt,...
Wenn man sich wundert, wie man mit gdb lustig Hardwarebreakpoints setzen kann, obwohl x86 eigentlich nur vier unterstützt: Die Manual klärt auf. Since they depend on hardware resources, hardware breakpoints may be limited in number; when the user asks for more, GDB will start trying to set...
CPython unterstützt ja bekanntermaßen keine TCO von sich aus, weshalb es zahlreiche mehr oder weniger schöne Hacks gibt, die das CPython beibringen. Aber einen wirklich beeindruckenden habe ich eben in #python auf Freenode gesehen, geschrieben von habnabit. Und zwar wird der Bytecode geändert,...
Der Code vom erl_eval-Modul von Erlang/OTP, der fun-Ausdrücke implementiert (kann man in lib/stdlib/src/erl_eval.erl finden): %% This is a really ugly hack! F = case length(element(3,hd(Cs))) of 0 -> fun () -> eval_fun(Cs, [], En, Lf, Ef) end; 1 -> fun (A) -> eval_fun(Cs, [A],...
Beg, borrow, steal, buy, fabricate or otherwise obtain a rubber duck (bathtub variety) Place rubber duck on desk and inform it you are just going to go over some code with it, if that's all right. Explain to the duck what you code is supposed to do, and then go into detail and explain things...