Recently, I was playing around with http.zig for recreational programming purposes and was surprised to see a Zig panic when I sent a hand-crafted request: thread 2173676 panic: integer overflow /tmp/http.zig/src/request.zig:859:28: 0x10eed04 in prepareForBody (example_1) const missing = cl - read; ^ /tmp/http.zig …
In my last post , I wrote why reusing nonces with AES-GCM completely breaks it. Coincidentally, Frederik Reiter also wrote about this, but his blog post goes into all the details that I left out. And it's even interactive. Go check it out!
In this blog post, I will demonstrate how a mistake in jetzig’s session implementation could be used to break confidentiality and integrity of session data. A fix has been applied, so it is no longer possible to exploit the attack shown in the following. All code samples in this …
One of the more frustrating experiences is when your project is nicely Nix -ified, and yet your CI/CD workflow is full of "install this, install that" steps. Even worse, the install steps duplicate a lot of information already contained in your Nix files. At YAXI , we wanted to re-use …
What is the best way to simulate some novelty when you haven't blogged for four years? You change your blog's appearance a bit. Having read "Minimal Dark Mode" , I wondered how good the described minimal dark mode would work on my blog. As it turns out: suprisingly well. At least …
Prologue Today's blog post originates from an internal presentation at my workplace and describes the paper Java and Scala’s Type Systems are Unsound by Amin and Tate. Hence the presented ideas are not really my own and all the praise goes to the paper's authors. All mistakes are, of …
I'm trying to keep the current blog post run going (at least compared to the last years) by blogging about random things I observe or learn. Today's post: I found out by coincidence that OpenJDK 9 changed a detail about how regular expressions are matched. The post is not about …
Today's post sketches out how one can make Breakerbox discover Dropwizard service instances inside a k8s cluster. Breakerbox is a dashboard and dynamic configuration tool for Tenacity . If you have never heard of Dropwizard or Tenacity or if you don't use Kubernetes, this post is probably very boring to you …
Introduction Welcome to a first post in English! Today’s post is about how creating a formal specification for (parts of) a system can help find real-world bugs. What initially triggered this post was that I watched Hillel Wayne's Strange Loop talk "Tackling Concurrency Bugs with TLAplus" . Having dealt with …
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 login ( credentials : Credentials ): ( String , Int …
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 man die falsche Anzahl …
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:
Pithos , ein S3-Klon, der Cassandra zur Ablage benutzt, unterstützt aktuell nur Signaturen in V2 . S3 unterstützt inzwischen aber eigentlich nur noch V4 , weswegen der offizielle AmazonS3Client ein paar Probleme bei der Verwendung mit Pithos macht: Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: The request signature we calculated …
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 kann. Damit man …
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 Löschen-Link) Pastes können sich automatisch nach …
Inspiriert vom Idea-GitLab-Integration-Plugin , das ein open file in browser anbietet, habe ich das ganze mal für Emacs gebaut: ( require 'magit ) ( setq git-browser-url-templates ' (( "bitbucket.org" . "https://bitbucket.org/{{repo}}/src/{{branch}}/{{file-name}}#cl-{{lineno}}" ) ( "github.com" . "https://github.com/{{repo}}/blob/{{branch}}/{{file-name}}#L{{lineno}}" ) ( "pwmt.org" .…
Präambel Dieser Artikel ist schon ein paar Jahre alt und war eigentlich nur für den Gebrauch bei meinem damaligen Arbeitgeber gedacht. Damit sich aber endlich mal etwas in diesem Blog tut, habe ich mich entschlossen, ihn dennoch zu veröffentlichen. Note Die Code-Beispiele sind in Python 2-Syntax gehalten. Das Übersetzen nach …
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 leicht den Überblick verlieren …
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 verwendete Blogsoftware …
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 Referenzen: Python 3.4.0a0 (default:9214f8440c44 …
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.
Die Keyfiles dürfen keine abschließende Newlines haben, sonst funktioniert der Login einfach nicht. Erinnert ein wenig an crontab , nur halt doch ganz anders.
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.
Scott Meyers auf die Frage, welche drei Dinge er am wenigsten mag in C++: I'd like to answer this question with "complexity, complexity, complexity!", but naming the same thing three times is cheating. Still, I think that C++'s greatest weakness is complexity. For almost every rule in C++, there …
The file that would normally be displayed here (THE-GNU-PROJECT) has been moved to the emacs23-common-non-dfsg package because its license does not appear to be compatible with the Debian Free Software Guidelines (DFSG). Please see /usr/share/doc/emacs23-common/copyright for more information. Please install THE-GNU-PROJECT from Debian's non-free distribution if …
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 None : __builtin__ . _ = value out = repr ( value …
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, da dann CPythons …
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 software breakpoints. (On …
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, CALL_FUNCTION wird zu JUMP_ABSOLUTE geändert. Nachtrag: Das …
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 ], En …
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 …