Publications

`derive_builder`: usage and limitations

Basics The builder pattern is a well known coding pattern. It helps with object construction by having a dedicated structure to help build the other. It is usually used when many arguments are required to build one. The example codes are written in Rust, but the concepts behind these can…

How to read your bank-account on a public blockchain?

One of the ways public blockchains are touted is that they can replace your bank account. The idea is that you don’t need a central system anymore, but can open any number of accounts, as needed. However, as there is no central place, it is sometimes difficult to know how…

Fun with microcontrollers

Today it’s something about actual hardware, not just software. For Christmas I took a long LED-strip and hooked it up to an Arduino One to create some animations. But not having WiFi was a bit of a shame, because this meant you couldn’t control it from a smartphone. So I…

hyperfine, benchmarks for CLIs

Some years ago, I was thinking that by directly look at code difference, I could estimate how faster it would run. I would reflect about complexity or how a given loop will be waay faster by precomputing some values. And of course, it is never that simple. Cache locality, threads…

OmniLedger email signup and recovery

We’re currently using OmniLedger for logging in to our Matrix-chat and to the c4dt.org website as users. This is explained in more details here: CAS-login for OmniLedger Account management in OmniLedger C4DT partner login Matrix on Mobile There were two elements missing: Automatic signup — in the current signup process,…

Reusable CLI integration tests

On my path of moving lab’s code to more human friendly program, I usually write some CLIs, to ease configuration and deployment. When developing the client, I want to test it, and see how complex it is to use it. The best language to express that is a shell as…

Awesome Privacy — A curated list of privacy-preserving apps

Many popular cloud applications collect enormous amounts of information on their users. [...] Raising awareness of the issue, and providing ways to reduce it, is a worthy goal.

Functional shell scripting

I’m quite a huge fan of functional programming, since I learnt about it some years ago. I was doing imperative programming for years and was quite used to it. But learning a new way to conceptualize programs was a real pleasure. Now that I’m deep into it, I want to…

SASE or VPN?

Today I Learnt (TIL): SASE [sæsɪ]- so what is it, how does it compare to a VPN, and should I use Tor? I heard about it from Ria at C4DT, who told me SASE is the new VPN.It might be better than VPN and will solve all the world’s problems.…

Choosing a Web Framework

At the C4DT Factory, one of our tasks is to develop demonstrators for research projects. The goal is to provide a quick introduction to a project, and allow visitors to interact and get a feel for the technology.

cheat, examples for CLIs

CLIs are very powerful, from the tip of fingers, you can quickly make the computer do anything you want. No need to wave your mouse around, hoping to find the right sub-sub-sub-menu where the feature you want is implemented. But it comes at a cost: for each command, you need…

Vitalik’s answers to the big questions

I found this nice twitter thread from Vitalik Buterin, the inventor of the Ethereum blockchain: Doing a random twitter experiment just on this day. Only the 268 people I follow can reply to this tweet. Feel free to ask things and I'll talk about anything crypto or non-crypto related. —…

libsodium’ encrypted stream in Rust

NaCl is one of the most used cryptography library around, and it is understandable: it is easy to use (it hides the crypto-magic used), portable (via the libsodium fork), and available in many languages. It is used by one of the project we are helping, drop, written in Rust, which…

Why Blockchain is Not Yet Working – 2021

This Monday I presented the following article. It discusses blockchains shortcomings. Even if it has been written in 2018, it is still very up-to-date… What follows here is a very opinionated piece. As such it reflects the journey I did in blockchains over the past 6 years. And I’m sure…

immutable.js, concurrent-safe data structures

Concurrent programming is one the oldest and hardest issues in the Computer Science Book. For years, we have been using locks, big threads sharing the minimum, using optimistic reasoning for “how data will be updated”. And we are still stuck with the same issues of some part of the code…

Zoom it out

We’ve been looking at the very nice https://gather.town and played around with it. Instead of having a fixed view of all participants, you can walk around and ‘meet’ different persons in gather.town. You can edit the space your liking. It looks very much like a very old-school Zelda: What I…

Ansible: powerful automation made easy

The management of IT infrastructure is a constantly evolving topic. A very interesting concept that emerged in the last decades is the idea of infrastructure as code: instead of configuring servers in an artisanal fashion, the process is formalized into definition files, which are then automatically “executed”. There are multiple…

Prettier, a uncompromising code formatter

Code formatting is the most known instance of bikeshedding: everyone has a different opinion on it and nobody is willing to compromise. Do you remember the hours-long discussions on using tabs versus spaces? Where to add empty lines? Alignment of fields? For some years now, many languages provide their own…

Go compiler optimizations for structs

This article looks into the optimizations of the golang compiler with regard to different usage of structs. It answers the following questions: Does it avoid unnecessary structure copies? Does it inline where necessary? To answer theses questions, I wrote a small example and decompiled it to see how well it…

Failing OmniLedger login

Connection Failures There are some common reasons why the OmniLedger login can fail. So far we have seen the following ones: Corporate firewalls Private browser settings If you have a corporate firewall that blocks access to non-standard ports, the only thing you can do is to remove the VPN. This…

Maturity Evaluations

The C4DT/Factory works to bring EPFL’s great ideas to our partners. We do so by working on the existing code created in the labs. Because most of the code written in the labs has the goal to create graphs in a paper, it is not directly usable in another project.…

TLDR for “Managing Technical Quality”

Some notes from https://lethain.com/managing-technical-quality/ – most of the comments are copy/pasted, so ‘I’ is the author… In italic some more C4DT-specific notes. Technical quality is a long-term game. There’s no such thing as winning, only learning and earning the chance to keep playing. Do the quick stuff first! Hot Spots…

Recover data on ByzCoin

How to get data back on ByzCoin OK, now it happened – I lost my addressbook on ByzCoin. As we’re using the Partner-login internally, I have a list of all accounts I created on the blockchain. Currently it’s not encrypted using Calypso yet, work in progress. So my account on…

Coding Guidelines @ EPFL

There are a variety of coding guidelines at EPFL. Some focus on a lab’s preferred language and their specific tools, some are more on project handling and general git usage. Most are a mix of the above. Sadly, theses guidelines aren’t scrupulously followed, aren’t usually automatically checked and some are…