RSSAmplifier

Blog

VulpineCitrus - Blog

Personal blog of a compsci student interested in networking, programming, and bicycles.

vulpinecitrus.infoRSS feed ↗36 posts

Latest posts

The Day I Logged 1 In Every 2000 Public IPv4: Visualizing The AI Scraper DDoS

i don’t think i need to explain to you, dear reader, why web massive web scraping is a pain in the ass . This is not going to be a post as researched or informational as that first one. i’ve been fighting web scrapers as much as i could for almost two years now, and the battle is getting tough. Some tools, like Iocaine (thanks Algernon for the work you put into it) help a lot by at least sparing…

Diving into Radio Listening: POCSAG, Alphapage, and how i taught myself some GNURadio

Pagers used to be all the rage in the late 80s, 90s and early 2000s. You could carry around a little battery-powered trinket that could ring and give you a little text message. How neat! Then, mobile telephones became easier and easier to carry around, then smartphones became a thing, and pagers died. Pagers worked and still work via radio signals. A lot of different radio standards for pagers…

A Completely Innocuous Blog Post about vPMU in QEMU

Hey! If like me, you spend a lot of time debugging the Linux kernel, especially with the goal of modifying the performance of user programs, you may often find yourself in the silly position where you need to run perf inside of a virtual machine (typically run using qemu ) in order to obtain hardware performance counters. In x86(_64) CPUs, the component responsible for providing you these pieces…

Guarding My Git Forge Against AI Scrapers

In August 2024, one of my roommates and partners messaged the apartment group chat, saying she noticed the internet was slow again at our place, and my forgejo was unable to render any page in under 15 seconds. i investigated, thinking it would be a trivial little problem to solve. Soon enough, however, i would uncover hundreds of thousands of queries a day from thousands of individual IPs,…

Deploying my Zola Blog Automatically

i feel like it’s obligatory, at some point, on any blog that talks about tech, to have a post that goes “oh here’s how i deploy it by the way”. Now is my turn, i guess? But this isn’t simply ‘how i deploy’, and more of “how i perfected my deployment to go from 11 minutes of CI to about one and a half, and what i learned in the process”. In the end, i guess, this is more of a post about CI/CD. If…

Diving into Radio Listening: Portable Mobile Radio 446

Usage of the radio spectrum is very tightly regulated. Regular, unlicensed people are allowed only so little of the RF spectrum in emission. In the 90s, the European Union came together to allocate a small 200 kHz band for license-free use with the narrow FM mode (FM mode and 12.5 kHz bandwidth). The name of the norm that would be used on it is Portable Mobile Radio 446, or PMR 446, for short.…

Enabling bias-tee on RTL-SDR dongles through GnuRadio's OsmoSDR Source

Too Long, Won't Read Add rtl,bias=1 in the device arguments. Both options are needed. i like my Low-Noise Amplifier . It helps my dingy little antenna and RTL-SDR dongle pick up signals that otherwise would be very much out of reach. That little amplifier is plugged on the transmission line as close as possible to the antenna, and powered through bias-tee . A bias-tee (or bias-t) is a little…

What if any process could handle SIGKILL?

i was recently having a discussion online about different perspectives on signals. It led to a question me and someone else asked simultaneously: what if you could ignore or handle the absolute, unstoppable order from the kernel to be killed or stopped? # Signals Signals in POSIX are a form of IPC that allows userland processes (and the kernel) to send each other simple indications of actions to…

Radio Listening: Airplanes

After i received the kit i ordered , i fiddled around with software, eventually figuring out i would install SDR++ (though SDR# and sdrangel are also good picks). I sat down, got a feel for the controls, installed a frequency band plan made by a French person, and started listening to the 120MHz-137MHz band, in AM mode. After a little while, spikes appeared. i happen to live not too far to an…

My reading queue as of January 2025

i wanted to write a little something about the books i am currently reading (as of January 2025), both technical and fiction. Don’t expect a thorough review, i generally haven’t made it past half of those. Some titles are in French, of course, because i am afflicted with a rare condition called “being French”. It’s terminal. Look it up online. Take some time to open a tab on Deepl as well.…

Converting raw IQ from `rtl_sdr` to WAV IQ for SDR++

Recently i published the first of a series of posts on radio listening , and while this is not technically part 2 yet, i figured something out that is quite important to my workflow of recording and then processing radio input. i own a RTL SDR Blog V4 dongle , which is based on the RTL2832U chip. The drivers you install come with a set of binaries , including rtl_sdr , which lets you record a band…

Diving into Radio Listening: Introduction

In the late 2000s, when i was a wee child, my parents brought me along to the big yard sale organized in the tiny town my grandparents lived in. One particular time, we came back with a set of electronic gizmos that included a marine radio set. That huge cube of metal, with a deployable 2-meter long antenna 1 , and a big selector to pick between various AM bands labeled with lengths, CB, Maritime…

A 2024 Update on the Rust Foxes Linux Module

First, the context. For those who are not aware, Rust for Linux is a project within the Linux developer community to add kernel support for the Rust programming language with the objective of developing drivers that can sit alongside regular C drivers in tree. The project is still somewhat young, but it’s already reached the significant milestone of a first driver being merged . Two years ago i…

Irregular Reminder: Strip your Kernel Modules on Install

Occasionally, I have to re-install a kernel and its modules. Worse, I have to do it on Ubuntu (for reasons outside my control). I learned to do that on my own mostly through a mixture of old Gentoo tutorials and kernel documentation. And yet, twice already I have done the whole procedure, which, once your configuration is done, and after you’ve enabled kernel debugging 1 , is something akin to:…

Pushing to an Overleaf project through Forgejo

I am a PhD student. Of course, I write papers. For various reasons, my supervisors and I use Overleaf , which is satisfactory in terms of UX and such. However, outside of periods with high editing contention, I would rather work with my usual workflow of editing LaTeX with neovim , which I have customized to compile and lint LaTeX code for me. I find writing lengthy pieces of text more relaxing in…

Conky may be Leaking your RAM on ArchLinux

Some time in the summer this year I started noticing that memory usage would become very high after a while. Specifically, XOrg would start hogging inane amounts of memory. I use an NVidia GTX2070S card on my desktop computer (which uses the x86_64 architecture), so I just lazily think to myself “well NVidia is at it again” and think not of it again. Recently, after becoming irate with XOrg…

Using git with email: a Quick Tutorial

I am mostly writing this as a self memo for how to use git-send-email , and by extension git-format-patch and git-am , to share patches, patchsets, and apply them. Me and my friends like to do these overly elaborate things to share code, what we jokingly call “fossbro roleplaying”, so hopefully it can help them, and you as well! ## “Wait what’s all that about?” These commands let you create…

VulpineCitrus is Changing CMS (Again)

So, it has come to this again, uh? Last year, in 2022, I moved my blog from Hexo, an old CMS tool written in NodeJS, to Grav, a self proclaimed minimalist flat-file CMS. At the time, I had tinkered with Grav a bit, and came to be confident that I could make something cool out of it. For about a year or so, I did. However, as time went on, I realized two (well, three) things about my actual…

Against Real Name Policies

You may be more used to reading things related to technology on this website, and you might be thinking to yourself “well this ain’t it, chief”. You’re wrong. There have been recent discussions in my online circles around the concept of “real-name policies”, which is a requirement within certain projects to provide your actual, real, legal, certified-100%-you name alongside your contribution. More…

The SNCF WiFi API and All of its Funny Things

Recently I had the unfortunate displeasure of having to move my vacation dates because of a certain pandemic that, despite the silence of our health authorities , is still ongoing and impacting people. So instead of taking a crammed bus without ventilation for nine hours, my roommates and I got last minute tickets on the french high-speed railroad train: the Train à Grande Vitesse (High-Speed…

Rust for Linux Basics: Handling Function Pointers

Note : I originally wrote this as a message in the RFL Zulip chat answering a question from someone who asked about ways to handle function points in Rust for Linux, especially in the context of net , where we do it quite often. This blog post is a slightly refined version of that message, where I got carried away and essentially infodumped on the poor fella. I am a silly fox 🦊 Fun fact! A while…

Rust for Linux Basics: Adding Allowed Features

In order to share some of the things I’ve been doing over Rust for Linux , I decided I would start a small series of tiny posts that demystify and detail very simple operations that can be confusing when doing development for RFL. ## Rust Features Rust features go through a lifecycle where they can begin as “unstable”, and then eventually stabilized once Rust maintainers can guarantee that it will…

OpenStreetMap & OAuth2: Do not Neglect x-www-form-urlencoded

A friend and I were out editing for OpenStreetMap , and we wondered how we could tweak an existing open changeset . Because the client we used does not seem to provide that feature, and we are messy gremlins who like to mess around with data to do things (like adding review_requested=yes to a changeset manually). So we defaulted to the next most reasonable thing to use on our phones in the middle…

Merging the NFTables NAT Tables

Recently, a new Debian happened . At this point, I am used to upgrading my machines whenever that happens. I had been hoarding Debian systems here and there since I first installed a Debian Jessie back in the day. Among the thousand of packages being upgraded, there was nftables and iptables . A friend of mine had warned me she had heard about changes done to nftables , though they would likely be…

The Way I Setup My GPG Keys Now

You may find it dirty. I just think it’s neat. Following a recent discussion with friends of mine who have made a habit of exchanging files in chats by encrypting them with GPG (for the fun (yes I have weird friends)) I thought I would make a little tutorial to explain the way that I generate and keep my keys now, because they told me they would be interested in reading that. ## Reasoning The…

VulpineCitrus is Changing CMS

After 3 years of using Hexo as my Content Management System for VulpineCitrus, I have finally decided to adopt a more complex system. I have been looking for decent CMS software for two years, as Hexo had become more of a technical debt than a software I could realistically keep maintaining in shape. Its theme was rewritten by me, and I had received no update to the software since 2019. While it…

Hacking Linux: The TCP Stack and Initial Acknowledgement Number

I like messing things up in networks. Sending weird packets into the wild and seeing what happens is quite funny, especially when something breaks, but, sometimes even, when nothing does. I like hacking in the primary sense of the word: messing around and using stuff that was not intended for that purpose. For a paper I was writing, I had to perform a simple packet analysis of a TCP conversation…

Clippy: Obey the Paperclip

I have been using Rust on and off for the past five years or so, first picking it up around the time release 1.0 dropped. I then seriously learned the language in 2019, and, thanks to coding events such as Advent of Code , found a reason to make (arguably) beautiful code that trained me to make simple data structures work efficiently together to solve problems. Nowadays, I scale my development…

The Weird Debugging Story of How I Wanted to Create a UEFI VM with Libvirt

This post is mostly a story about my new VM server setup. However, it features a fun twist that reminds me how important it is to consider the layers upon layers of added security tools that exist in Linux that could interfere with a normal setup. ## The Context Around a month and a half ago I got this new server in my infrastructure, an old decommissioned Dell Precision T1700 . I was pleasantly…

Advent of Code 2021 - Retrospective

This year, like the last, I participated in Advent of Code , an online event where a new algorithmics puzzle is unlocked every day of december before and on the 25th. For each day, the same puzzle idea yields two small exercises, one typically easier than the other. I chose Rust , like last year, to solve those problems. You can find my repository here . ## A bit of write-up for the days I found…

Unlocking the Intel X520-DA2 SFP+

I have recently had the pleasure to acquire a new piece of equipment for one of the servers that I manage in one of our university clubs. Long story short, we were on the verge of a bottleneck happening in our infrastructure at the network interface of the aforementionned server, and decided to invest in a network card and some fiber optics to boost the link speed from 1Gbps ethernet to 10Gbps…

Starting prometheus node exporter after your interface is up

The monitoring stack in my home network depends on a lot of pieces of software all configured to be up and ready every time I have to reboot the gateway (a 8GiB Raspberry Pi 4). One piece of software who, for a while, did not play nice was Prometheus . (For those just looking for my answer, it’s in the last paragraph). ## The setup Essentially, my statistics front-end is running on the VPS that…

The Services of Vulpine Citrus

I’m coming close to a year of VulpineCitrus being up and running, and over the course of a year it has been a tremendously useful tool for me to deploy so many services that have changed my (and to an extent others’) daily routines. It has also been a great way to learn a lot of technological solutions I had heard of before but never managed to deploy at home. Back in the days when I shared a VPS…

New server. New system. New PostgreSQL database

A few days ago, I launched a website called “Vulpine Citrus”, meant to act as my front end with the rest of the world. Before that, I used to run a lot of my personal services on a server shared with a friend. After I bought my domain name, and VPS, I decided to begin moving my services onto my new server and stop hogging the storage space on that other, shared system. I had, until then,…

The Vulpine Citrus

This is the official launch of Vulpine Citrus, my own personal web site! Whenever I find something interesting to talk about, or want to show a cool thing I’ve learned, it will end up here.

Baby's first BrainF*ck clone : The Moostar Programming Language

A few years ago, my journey into coding led me to the dark alleys of GNU Assembly. I quickly realized that the difficulties of Assembly made it almost impossible for me to use it in my daily coding life. When it takes you three hours to reimplement strlen correctly, and you’re used to processing natural strings of characters, you may begin to feel like this is not the language for you. – Me, two…