Be My Guest at DSN 2025
- Posted by Michał ‘mina86’ Nazarewicz on 13th of July 2025
- Share on Bluesky
@inproceedings{Nazarewicz2025guest, title = {Be My Guest: {Welcoming} Interoperability into {IBC}-Incompatible Blockchains}, author = {Michał Nazarewicz and Dhruv D. Jain and Miguel Matos and Blas Rodriguez}, booktitle = {55th Annual IEEE/IFIP International Conference on Dependable Systems and Networks -- Supplemental Volume (DSN-S)}, pages = {160--166}, year = 2025, month = jun, day = {23--26}, address = {Naples, Italy}, doi = {10.1109/DSN-S65789.2025.00057} }

I’m delighted to share my paper I’ve presented at the IEEE/IFIP International Conference on Dependable Systems. ‘Be My Guest: Welcoming Interoperability into IBC-Incompatible Blockchains’ discusses a method for connecting Solana blockchain to the Cosmos ecosystem and by extension wider IBC network. Paper’s abstract is as follows:
The rise of cryptocurrencies has led to the creation of numerous isolated blockchains. A limitation of the space is the absence of seamless interoperability, which has hindered users’ ability to interact across different chains. To tackle this challenge, the Inter-Blockchain Communication (IBC) protocol has emerged as one possible trustless solution. Unfortunately, some blockchains (for example Solana, NEAR and TRON) do not meet IBC’s technical criteria, preventing their integration with the wider IBC ecosystem.
This paper introduces the concept of a guest blockchain which runs on top of an unsupported blockchain and provides all the features necessary for IBC integration. We demonstrate our approach by deploying it on top of Solana which is currently live in the main network and enables IBC-based communication with the Solana blockchain with performance comparable to native IBC-blockchains.
Stop Killing Games
- Posted by Michał ‘mina86’ Nazarewicz on 6th of July 2025
- Share on Bluesky
TL;DR: If you are an EU citizen and care about your consumer rights, sign this European initiative; and in any case, spread the word.
Updated on the 14th to reflect the UK petition reaching its deadline.
The dystopian interpretation of the ‘you’ll own nothing and be happy’ phrase feels increasingly prescient.1 As corporations hide behind lengthy Terms of Service and End User License Agreements,2 the concept of ownership becomes alarmingly ambiguous. This erosion of consumer rights has given rise to the Stop Killing Games (SKG) movement.
Consider this, in 2015 I’ve stumbled upon the Classic Tetris World Championship. Even though I’d never played NES Tetris, I started following the event with interest. I keenly remember watching the historic 2018 final which was a prelude to the next generation of players picking up the game.
In contrast, world of racing games offer an example of fleeting ownership. While generations continue to enjoy NES Tetris, with a 13-year-old famously ‘beating’ the game 34 years after its release,3 Ubisoft’s 2014 game The Crew didn’t even last a decade. In 2024, Ubisoft didn’t just shut down the servers; it began revoking players’ licenses, seemingly doing everything in its power to ensure the game couldn’t be preserved or revived by the community.
A tale of two pull requests: Addendum
- Posted by Michał ‘mina86’ Nazarewicz on 15th of June 2025
- Share on Bluesky
In the previous post, I criticised Rust’s contribution process, where a simple patch languished due to communication hurdles. Rust isn’t unique in struggling with its process. This time, the story is about Python.
Parsing HTML in Python
As its name implies, the html.parser
module provides interfaces for parsing HTML documents. It offers an HTMLParser
base class users can extend to implement their own handling of HTML markup. Of our interest is the unknown_decl
method, which ‘is called when an unrecognised declaration is read by the parser.’ It’s called with an argument containing ‘the entire contents of the declaration inside the <![...]>
markup.’ For example:
from html.parser import HTMLParser class MyParser(HTMLParser): def unknown_decl(self, data: str) -> None: print(data) parser = MyParser() parser.feed('<![if test]>') # Prints out: if test # (unless Python 3.13.4+, see below) parser.feed('<![CDATA[test]]>') # Prints out: CDATA[test
A tale of two pull requests
- Posted by Michał ‘mina86’ Nazarewicz on 8th of June 2025
- Share on Bluesky
In November 2015, rmcgibbo opened Twine Issue #153. Less than two months later, he closed it with no explanation. The motive behind this baffling move might have remained an unsolved Internet mystery if not for one crucial fact: someone asked and rmcgibbo was willing to talk:
thedrow on Dec 31, 2015ContributorWere you able to resolve the issue?rmcgibbo on Dec 31, 2015AuthorNo. I decided I don’t care.
We all had such moments, and this humorous exchange serves as a reminder that certain matters are not worth stressing about. Like Marcus Aurelius once said, ‘choose not to be harmed — and you won’t feel harmed.’ However, instead of discussing philosophy, I want to bring up some of my experiences to make a point about contributions to free software projects.
The two pull requests
Rather than London and Paris, this tale takes place on GitHub and linux-kernel mailing list. The two titular pull requests (PRs) are of my own making and contrast between them help discuss and critique Rust’s development process.
Could this
be null?
- Posted by Michał ‘mina86’ Nazarewicz on 13th of April 2025
- Share on Bluesky
In my previous post, I mentioned an ancient C++ technique of using ((X*)0)->f()
syntax to simulate static methods. It ‘works’ by considering things from a machine code point of view, where a non-virtual method call is the same as a function call with an additional this
argument. In general, a well-behaving obj->method()
call is compiled into method(obj)
. With the assumption this is true, one might construct the following code:
struct Value { int safe_get() { return this ? value : -1; } int value; }; void print(Value *val) { printf("value = %d", val->safe_get()); if (val == nullptr) puts("val is null"); }
Will it work as expected though?
Axiomatic view of undefined behaviour
- Posted by Michał ‘mina86’ Nazarewicz on 6th of April 2025
- Share on Bluesky
Draw an arbitrary triangle with corners A, B and C. (Bear with me; I promise this is a post about undefined behaviour). Draw a line parallel to line BC that goes through point A. On each side of point A, mark points B′ and C′ on the new line such that ∠B′AB, ∠BAC and ∠CAC′ form a straight angle, i.e., ∠B′AB + ∠BAC + ∠CAC′ = 180°.
Observe that line AB intersects two parallel lines: BC and B′C′. Via proposition 29, ∠B′AB = ∠ABC. Similarly, line AC intersects those lines, hence ∠C′AC = ∠ACB. We now get ∠BAC + ∠ABC + ∠ACB = ∠BAC + ∠B′AB + ∠C′AC = 180°. This proves that the sum of interior angles in a triangle is 180°.
Now, take a ball whose circumference is c. Start drawing a straight line of length c/4 on it. Turn 90° and draw another straight line of length c/4. Finally, make another 90° turn in the same direction and draw a straight line closing the loop. You’ve just drawn a triangle whose internal angles sum to over 180°. Something we’ve just proved is impossible‽
There is no secret. Everyone sees what is happening. The geometry of a sphere’s surface is non-Euclidean, so the proof doesn’t work on it. The real question is: what does this have to do with undefined behaviour?
Z archiwów polskich mediów
- Posted by Michał ‘mina86’ Nazarewicz on 1st of April 2025
- Share on Bluesky
@article{Stangret2005, title = {Informatycy najgorzej ubrani}, author = {Michał Stangret}, journal = {Gazeta Praca}, year = 2005, month = nov, day = 25, url = {https://web.archive.org/web/20051218031319/http://praca.gazeta.pl/gazetapraca/1,67728,3032865.html} }

Przeglądając archiwa swoich starych dysków, natknąłem się na niesłychanie ciekawy artykuł z Gazety Praca. Czas zrobił swoje i na stronie Gazety już go niestety nie ma,1 a szkoda aby zniknął po nim ślad. Pozwolę więc sobie go zacytować w całości, aby przetrwał dla potomności:
Informatycy najgorzej ubrani
Michał Stangret, 25-11-2005
Są przepoceni, rzadko myją włosy i noszą flanelowe koszule wciągnięte w spodnie. Komputerowcy zajęli pierwsze miejsce w rankingu najgorzej ubranych zawodów. Dostało się też księgowym, urzędnikom i dziennikarzom.
Is Ctrl+D really like Enter?
- Posted by Michał ‘mina86’ Nazarewicz on 30th of March 2025
- Share on Bluesky
‘Ctrl+D in terminal is like pressing Enter,’ Gynvael claims. A surprising proclamation, but pondering on it one realises that it cannot be discarded out of hand. Indeed, there is a degree of truth to it. However, the statement can create more confusion if it’s made without further explanations which I provide in this article.
To keep things focused, this post assumes terminal in canonical mode. This is what one gets when running bash --noediting
or one of many non-interactive tools which can read data from standard input such as cat
, sed
, sort
etc. Bash, other shells and TUI programs normally run in raw mode and provide their own line editing capabilities.
Short post about Tesla
- Posted by Michał ‘mina86’ Nazarewicz on 23rd of March 2025
- Share on Bluesky
Mark Rober’s video where he fooled Tesla car into hitting fake road has been making rounds on the Internet recently. It questions Musk’s decision to abandon lidars and adds to the troubles Tesla has been facing. But it also hints at a more general issue with automation of complex systems and artificial intelligence.A drawing of a Tesla car with self-driving technology engaged.
‘Klyne and I belong to two different generations,’ testifies Pirx in Lem’s 1971 short story Ananke. ‘When I was getting my wings, servo-mechanisms were more error-prone. Distrust becomes second nature. My guess is… he trusted in them to the end.’ The end being the Ariel spacecraft crashing killing everyone onboard. If Klyne put less trust in ship’s computer, could the catastrophe be averted? We shall never know, mostly because the crash is a fictional story, but with proliferation of so called artificial intelligence, failures directly attributed to it has happened in real world as well:
1 + 2 + 3 + ⋯ = -1/12
- Posted by Michał ‘mina86’ Nazarewicz on 16th of March 2025
- Share on Bluesky
In 2004, Brady Haran published the infamous Astounding: \(1 + 2 + 3 + 4 + 5 + \cdots = -\frac{1}{12}\) video in which Dr Tony Padilla demonstrates how sum of all natural numbers equals minus a twelfth. The video prompted a flurry of objections from viewers rejecting the result. But riddle me this: Would you agree the following equation is true: \[1 + \frac{1}{2} + \frac{1}{4} + \cdots = 2\]
Obviously the equation does not hold. How could it? The thing on the left side of the equal sign is an infinite series. The thing on the right side is a real number. Those are completely different objects therefore they cannot be equal. Anyone saying the two are equal might just as well say \(\mathbb{N} = 🐘\) (and while I grant you that elephants are quite large, they’re not sets of natural numbers).
And yet, people usually agree the infinite sum equals 2. Why is that? They use ‘mathematical trickery’ and redefine the meaning of the equal sign. Indeed, \(1 + \frac{1}{2} + \frac{1}{4} + \cdots\) does not equal 2. Rather, given an infinite series \((a_n)\) where \(a_n = 2^{-n}\), we can define an infinite series \((S_n)\) where \(S_n = \sum_{0}^{n} a_n\) and only now we get: \[\lim_{n\to\infty} S_n = \lim_{n\to\infty} 2 - \frac{1}{2^n} = 2\]
But that’s a different equation than the one I’ve enquired about.