RSSAmplifier

Blog

My little software warehouse

Recent content on My little software warehouse

fedepaol.github.ioRSS feed ↗64 posts

Latest posts

How I use AI in 2026

It’s funny Link to heading I had a draft post sitting in my local repo for a while, where I was about to scream about how AI is overestimated. Well, that post aged pretty badly. I never published it, and looking back at the notes I’m glad I didn’t. So what I’m going to write today will only be about my current workflow and how I actually use AI in my daily work — no hype,…

Enabling EVPN termination with Podman pods as systemd units

Quick Recap Link to heading This is a follow up to my lengthy EVPN series. In my last post I demonstrated how I managed to have EVPN termination inside Kubernetes nodes, hosting FRR inside a regular network-namespaced pod interacting with the host via BGP through veth pairs.
Overcoming the limitations Link to heading I also described how running inside a pod is limiting this architecture and…

Running EVPN termination inside a kubernetes pod

Following up Link to heading As I wrote in my last post, one thing I have been experimenting with is to run EVPN termination inside a Kubernetes node. I demonstrated how to achieve it by running a container on the host as per the following image:
This clearly brings some deployment and lifecycle challenges that include:
running the container and keeping it running updating it configuring…

Extending the Kubernetes (host) network with EVPN tunnels (and FRR)

Running on Kubernetes Link to heading The ultimate goal of my ramblings about FRR and EVPN (previous posts here, here) was to extend Kubernetes node networks with EVPN, in such a way that is both dynamic and configurable in a cloud native manner.
Additionally, I wanted to setup an environment that was easy to extend and configure so I could validate all the possible variations of the…

Fixing ARP suppression in Linux L2EVPN with eBPF

Making ARP suppression work with pure L2 EVPN with Linux and FRR Link to heading In my previous post, I described the issues of making ARP suppression work with an L2 only EVPN topology, with Linux and FRR.
Here I am going to describe how a small process running on each leaf can fix the problem.
The problem Link to heading Here I’ll quickly summarize the problem. Given a topology…

Some notes about ARP suppression in L2EVPN using FRR and Linux VXLans

EVPN - ARP suppression and Type 2 networks with IP Link to heading This post started as a section of my previous post about L2 tunnels with EVPN and VXLans, but this particular topic kept me so busy that is probably worth a section of its own.
The topology this post is referring to is still the same:
┌─────────┐ │ │ SPINE │ 64612 │ │ │ └────┬────┘ │ │ ┌───────┴────────┐ │ │ ┌────┴────┐…

L2EVPN using FRR and Linux VXLans

EVPN - L2 tunnels Link to heading This is a follow up of the previous post about L3 tunnels with EVPN and VXLans.
I started with L3 because, as much as counter intuitive it was (since VXLan is about tunneling L2 links), it felt more similar to what I am used to with BGP.
In my evpn lab github repository I added a new entry where I set up a L2 only topology using FRR and Containerlab.

L3EVPN using FRR and Linux VXLans

Tinkering with EVPN Link to heading EVPN and VXLan tunnels (and how FRR gets along with those) are something I wanted to explore, so I thought it’d make sense to document my journey as a serie of blogposts (which can also serve as a help to my memory).
The result of this first rambling is available on my github repository.
The topology Link to heading The first attempt is to have a…

Creating release notes for your GitHub Project

TL;DR Link to heading The kubernetes release notes generator is really nice. I managed to use it without Prow with MetalLB, by setting a proper pull request template and a Github Action workflow that adds the proper label and validates the PR body.
Finally, a glue bash script wraps the call to the release notes generator.
A bit of context Link to heading Since I started maintaining MetalLB…

eBPF journey by examples: hijacking SSL with eBPF with eCapture

ECapture Link to heading Uprobes (user probes) and uretprobes are a way to attach an eBPF program to a user space application, specifically to the entry or exit point of a given function. By doing so, the program is able to get notified whenever a given function is called, and with which arguments. This information is often used to notify the user space side of the eBPF program, that handles it to…

eBPF journey by examples: perf events with Pyroscope

Pyroscope Link to heading After diving into security with Falco and networking with XDP, I wanted to explore a profiling application that leverages eBPF.
Grafana Pyroscope is an open source continuous profiling platform. It supports various backends, including Go’s pprof, python via py-spy and many other languages. But the reason why I am writing this post is because it supports also an…

XDP ate my packets, and how I debugged it

Debugging XDP Link to heading This is a side post from my “learning eBPF from popular projects” initiative. Here I am going to describe the issues I had while trying to replicate locally an XDP based loadbalancer (see my previous post).
It doesn’t work! Link to heading I strongly believe that the only thing that takes little to be done is something that already works and does…

eBPF journey by examples: L4 load balancing with XDP and Katran

Katran Link to heading This is my second post about digging into popular eBPF projects. You can see the first post about Falco and tracepoints here.
This time I am looking at katran, an xdp based loadbalancer opensourced by Meta.
A loadbalancer works in a very simple way: it translates network packets directed towards a single virtual IP (VIP) toward a serie of endpoints (reals, in…

Managing Kubernetes Resources with Controller Runtime's Field Manager

The problem with mutated fields Link to heading Having kubernetes resources that do not sync is a common problem when dealing with a continuos delivery system such as ArgoCD and external components that change those resources.
What happens is:
the CD system applies a change based on some configuration the change is overridden by some controller the CD system sees a difference between the…

eBPF journey by examples: eBPF tracepoints with Falco

Learning from existing projects Link to heading This is the first post of my journey into learning eBPF by samples. My idea here is to dig into how popular projects use eBPF to solve various problems, in order to benefit from real implementations and leverage existing scenarios rather than simple tutorials.
I will proceed as follows:
I will dig into the source code of each project I am…

EBPF TC filters for egress traffic

Network filters with EBPF and TC Link to heading EBPF has been on my radar for a while, and given my involvement with MetalLB, starting from a network hook felt natural.
So, I started with a very simple idea in mind: writing a hook that drives the egress traffic to a different next hop, based on some criteria. This comes from a real problem that a few MetalLB users raised: we have an…

Mixing cluster scoped resources and namespaced resources with kubebuilder and controller runtime

Out of the box Link to heading If we look at the kubebuilder tutorial, it’s possible to define a namespace (or a set of namespaces, when using MultiNamespacedCacheBuilder) for our controller to listen on.
If we don’t set the namespace, our controller is meant to be cluster scoped and will listen (and need priviledges) to the resources in all the namespaces.
The problem Link to…

Writing a Kubernetes Controller: part 2

This is the second part of my “writing a kubernetes controller” blogpost.
Here, I will explain how to put what was explained int the first part in go code.
Setting the informer and the workqueue Link to heading This is the first step, where you listen for events and send them to the consumers via the workqueue:
kubeInformerFactory :=…

Writing a Kubernetes Controller: part 1

Even when knowing Go, writing a Kubernetes controller is intimidating.
In this post, I’ll introduce the Kubernetes operating model, how objects are mapped and what are the tools provided by the go-client framework to write bullet proof controllers. In a following post I will explain how to put all the pieces together and how to define and consume custom types.
I will describe the…

How and why to contribute to Open Source

Today I am writing about contributing to open source, an argoment that I particularly care about.
Contributing to opensource is giving something to get something back Link to heading You give away your time and your expertise and you’ll eventually get something back.
Approaching an open source project may be daunting at first Link to heading We find a lot of reasons for that:
We…

GoLab 2019

Intro Link to heading In this post I’ll try to write about my experience at GoLab 2019.
As per the 2018 edition, I had the honor to give a talk during the Italian Go conference GoLab. There are many reasons why I loved the conference:
The organization was flawless. The people from Develer have been organizing conferences for a long time and it’s pretty clear they know how to do…

A concurrency experiment

There are some scenarios where the order matters Link to heading Let’s say that you have an api that can receive “actions” to be performed on a given endpoint.
Think about you buying something on Amazon and then changing your mind and revoking your order. You don’t want those two actions to be swapped, otherwise the cancellation will be refused (the order you want to…

About me

Senior Principal Software Engineer at Red Hat, I work remotely (from Pisa, Italy) as a member of the Telco 5G networking team. As part of my job I contributed new features to a variety of projects in the kubernetes ecosystem, such as the container networking plugins, the SR-IOV operator, OPA gatekeeper, OVN-Kubernetes, more recently MetalLB (and many others).
Before that, I was working for…

Fast messaging with nats and go part 2

This is the second of a follow up serie of the talk Fast messaging with Nats and Go I gave at golab 2018. The first part can be found here
What can we do with nats? Link to heading Pub sub Link to heading As you can probably guess, given that Nats is a pure pub / sub system, we can easily implement pub / sub.
Please remember that a nats publisher does not assume the audience.

Fast messaging with nats and go

This is the first of follow up serie of the talk Fast messaging with Nats and Go I gave at golab 2018.
The slides of the talk can be found here: Link to heading What is Nats Link to heading Nats is a messaging system hosted under the CNCF umbrella, which is an open source software foundation dedicated to making cloud native computing universal and sustainable. It’s my place-to-go while…

A new chapter

It’s been a while Link to heading It’s more than a year since my last blogpost which incidentally (or not) it happened right a month before the birth of my second child. In the past year I lost a lot of sleep, and now I am kind of getting back to normality (which means new side gigs :-)).
My interests moved from Android and mobile in general to Go and distributed systems, which is…

Android okhttp and websockets

Websockets Link to heading Rest http calls are the most common interaction between Android apps and remote servers. However, there are some scenarios where the interaction is better handled via a persistent connection: think about a chat, or a multiplayer game where data flows in both directions and the server needs to push data to the clients and to be aware of which client are…

Android mvp testing

MVP is Model View Presenter Link to heading .. which is a pattern that is very popular among Android developers nowdays.
I don’t intend to write (yet) another guide about MVP in Android, because others have done a better job, for example:
Antonio Leiva’s introduction to MVP Hannes Dorfmann’s introduction to Mosby Fernando Cejas’ post on clean architecture A lot have…

How to a timer

Ok, I must confess Link to heading the title is built to draw people’s attention, because you know, nowdays everything is done in a reactive fashion. RxJava is superhelpful, but if we forget the ecosystem our apps are running into, we risk to forget the proper way to implement certain tasks in Android.
Why do we need a whole post about timers? Link to heading Recently, I had to implement…

Happines is relative

Using relative layout is bad Link to heading .. or at least they say so. The truth is, it is relatively easy to build complex layouts using RelativeLayouts, but this ease of use comes with a cost: in order to provide that kind of flexibility, RelativeLayout does two measurement passes.
There are a lot of talks and posts explaining that if you have nested relative layouts, you’ll end up…

Cached rest requests with rxjava

Disclaimer: Link to heading In this post I am trying to cover a proper approach to a common problem. I am still in the process of wrapping my head around RxJava so what I write here might not be the best way to solve the problem.
Cached requests with RxJava Link to heading Lately I’ve been trying to develop a rest backed app using RxJava. I must admit that once you get in the proper…

Testing rxjava observables subscriptions

Testing RxJava Link to heading While catching up with the latest Android novelties I could not ignore RxJava, which seems to grow in popularity between android developers.
If you just heard about it, and you want to get your feet wet, I really recommend Dan Lew’s Grokking with RxJava series as a starting point.
RxJava is asynchronous by nature, so unit testing it might seem a…

Mocking with robolectric and dagger 2

Why robolectric Link to heading I’ve been a fan of robolectric since the old days, since when Android Studio was not an option and few developers embraced IntelliJ. I left it a bit behind after the introduction of Android Studio, since its support was far from optimal.
Things have changed, and after listening Corey Latislaw advocating its usage during this fragmented podcast episode I…

Its been a while

.. since my last blogpost. Link to heading I’ve done a few things in the meanwhile, I wrote a game with LibGdx, I tinkered with various frameworks, but on top of all these things I’ve been taking care of my one (and a half) year old daughter.
I do certainly have less time to devote to side projects, but I still like to learn new things and Android is exciting from that point of…

Dragging with viewdraghelper

While working on my last side gig, a patch to Firefox for Android to allow the urlbar to be dragged in order to show content hidden behind the main view, I had to deal with ViewDragHelper and understand how it works.
The final result (please note that the patch is still under review) is something like this:
It caused me more than one headache, and for this reason I am writing this post…

Migrating from blogger to octopress done

It feels a bit like this but when I had to write a new blogpost and had to embed some code snippets into my blogger hosted blog, I got so pissed of that I chose to migrate my existing blog to a github hosted instance of octopress.
Jason Jarrett made a pretty nice tutorial about the whole process here. However, I had to change a couple of things and I thought those might be helpful to anybody…

Generating preloaded sqlite data

Preloading data in Sqlite is a common problem during android development.
The most common solutions are:
hardcode the insert statements and execute them (possibly inside a transaction) the first time the db is openedplace the data inside a csv file, load it the first time the db gets opened, parse the rows and populate the dbprepare a pre-built sqlite file, ship it along with your app and…

Rest interaction in Android

In last December ('13) I was asked to submit a talk proposal for the first Italian Droidcon, which I did. It got accepted, so in Febraury I gave my first public speech speaking of '(O)Authenticated Rest Interaction in Android' in front of real people. This post is meant to be a follow up with the information that can't be found in the slides
I hoped to sum all the talk up in a post, but it got…

Contributing to Firefox for Android

In the past two / three years I have been (mostly) developing Android code, even before it was cool(tm), as a way to do something different from what I do during my day time job.
I wrote some apps, a couple of libraries, and some 80% finished projects I really hope I will finish some day.
Recently I thought that joining some big android related open source project could have been…

PostMan (RingsTwice) Reloaded - Android rest and oauth make easy(er)

Android and Rest
My PostManLib android library had a quite troubled genesis. Some infos can be found in this old post , but bear in mind that I only kept the skeleton of what I wrote at that time (which, by the way, was inspired by this talk).
The api was (to be kind) a bit clunky, and I recently chose to rewrite / finish it. Apart from its clunkyness, one thing was missing:

DroidAlone - reloaded

Whenever I speak with another android developer, the occasional chat goes to 'what did you develop?' question.
Last time it happened at droidcon uk, and for the first time I felt something wasn't completely right when I showed my DroidAlone app.
DroidAlone is a useful app (so they say) that comes into play whenever you forget your phone at home. With a simple sms protected by a password…

Android Content Providers Generator

During the refactoring of my two years old app DroidAlone, I decided to try to access to the storage through a ContentProvider.
Even if the official documentation warns that there is no need to use content providers if your app does not want to export it's data against other apps, there are a bunch of advantages in using a content provider in your app.
The main and more obvious advantage…

DroidconUk 2012

Here I am, back again from my third DroidconUk experience.
I can still remember explaining to my non tech friends what Android was the evening of the 1st droidcon, and since then it became a sort of ritual, a couple of days when I can take some rest from my day time job and take part to the community of some of the best android developers coming from all over the Europe.

Gridlayout support library with maven

EDIT 17/10/2012:
Gridlayout support is now working natively with maven android deployer. I strongly suggest to use it instead of my method.
---------------------------
Gridlayout has been introduced since api level 14, and is being suggested layout as a more efficient alternative over nested linear layouts and relative layout.
It has also been recently added as part of the android…

Intellij, Robolectric and Android

I have been curious about intellij since droicon uk 2011, where I noticed that some of the speakers were using IntelliJ instead of eclipse.
A post from Richard Hyndman, who is a developer advocate from Google, was the final straw that pushed me to download IntelliJ and give it a try.
The first thing an eclipse user will notice in intellij is how slick and fast compares to the behemoth…

Tcp connections in Android

Or how to keep your app connected and stop worrying. 
Disclaimer:
This is not another place where you can find java code snippet to open a socket and read and write to some server.
If you need that, go back to your favorite search engine and look for another result. But be careful: while looking for 'inspiration' I found a lot of examples where the connection was held inside the UI…

PostmanLib - Android and Rest Web Services

Edit 2013-03-10: I've performed a substancial refactoring of postmanlib, and the details can be found in this new post
With the development of MyDearSanta app, I needed to fetch and put some data to a rest service developed using django python framework with a simple set of json based rest apis.
The development of the interaction between android and the rest web service was a bit messy…

Pastimer - Android Kitchen Timer (Released)

Pastimer, my barcode based kitchen timer is now on the market.
The basic idea is to scan the barcode on the box to set the time.
The url to download it from the market is
https://market.android.com/details?id=com.whiterabbit.pastimer
or this for the lite version
https://market.android.com/details?id=com.whiterabbit.pastimer.lite
The description of the product can be found…

MyDearSanta

This time, while PastTimer has not been released yet, I started an experiment with an old friend. We wanted not just to release another standalone app, but interact in some way with a backend.
The result is www.mydearsanta.info , a web based Christmas list, which comes together with and Android app https://market.android.com/details?id=com.smokingbytes.santas and an Iphone app (currently under…

A new app - Android Kitchen Timer

Pastimer is my 4th app. It's a simple (but nice) Android Kitchen Timer based on barcode scanning.
I learned some things during my journey of android development, but this time I wanted to focus on user interface and ease of use.
As always, it starts as a simple idea, the you start putting some code in it, it's 'almost' working, and the difference between almost working and finished, is…