RSSAmplifier

Blog

nobe4

Recent content on nobe4

nobe4.frRSS feed ↗45 posts

Latest posts

Shipping dotfiles with Nix

I manage a remote headless machine (brahms) with colmena . During deployment, I quickly hit a problem: my dotfiles live in a git repo on my workstation. Brahms has no copy of it, and I didn’t want to add a git clone as part of my setup. The solution turned out to be a one-line change in my Nix config. ln.nix primer After exploring several wrong approaches , I ended up using the…

NixOS on an Intel macBook

I had a MacBook Pro sitting unused. An Intel, with an Apple T2 security chip. I thought with NixOS on it, it might actually be useful again. Here’s how that journey went. The wrong ISO My first attempt went like this: Download a standard NixOS 26.05 minimal ISO Write it to USB pv nixos-*.iso > /dev/sdX Plug it in Hold Option on startup, pick the USB drive Get greeted by

LLM and credits

As I’ve been blogging more, I’ve received the same comment many times: It sounds like you’re writing it yourself, not with an LLM. Yes, and thank you, I guess? Even if I did, I would not mention it. In my work and in OSS communities, LLMs are everywhere. It is a popular way for people to write their code, tickets, and documents. Commit histories are full of Co-authored-by: LLM .…

Speeding Up My Shell

I spend all my time in a terminal. So much so that I have a custom macOS launcher ( sling ) written around my terminal emulator, instead of using Alfred, Raycast, or others. I always notice when something feels sticky. Even a couple milliseconds can interrupt the flow. Recently, new sessions felt slow to start, and opening a terminal repeatedly felt terrible . This post walks through how I…

Devenv as a Config Syncer

I keep a golangci-lint config that I share across my Go projects. Sync’ing it around gets old fast: I have to remember which repos use it and update them all. Devenv already manages my dev shells. Turns out it can also fetch and install config files automatically. The idea pkgs.fetchurl downloads a file at build time and pins it by hash. Devenv tasks can run before the shell starts. Combine…

Slow git push from a worktree

I started using worktrees as part of my setup , and have been enjoying what it has to offer. However, a git push from a worktree burned ~30 seconds of local CPU before sending a single byte. Which was not expected. As per usual, the following debug led up to a bunch of fun learnings. Symptom I immediately started running my command with some extra debug setup: GIT_TRACE_PACKET = 1 GIT_TRACE = 2…

Custom Kitty Tab Titles

I changed my Kitty tab bar to show a better context: owner/repo:branch process for git repos; ~/d/n/dirname process (shortened path) otherwise. For simplicity, it updates only when something changes (cd, command start, prompt). OSC Escape Sequences ANSI escape sequences are sequences starting with ESC ( \e ), ending with BEL ( \a ) that control terminal behavior. They include: CSI (Control…

When Go user.Lookup fails

A Docker base image bump turned into a multi-day debug of Go’s os/user package, NSS, SSSD, LDAP and GLIBC ABI. Here is what happened and what I learned. Throughout this post, alice is an admin account with a hardcoded entry in /etc/passwd , and bob is a regular user who only exists in the central LDAP directory. All details of /bin/client are fictitious for the purpose of this post. How it…

Shallow clone lies

A GitHub CI script at work checks who last edited a config file. If the author isn’t the expected one, the build fails. Good guardrail, until it started lying. The script reported the wrong author: someone who never touched the file. The check failed, even though the right person had made the last edit. The setup The CI workflow uses actions/checkout with the default settings, then checks…

Deutsche Telekom Fiber with a MikroTik Router

I switched to Deutsche Telekom Glasfaser (FTTH) and wanted to keep my MikroTik router. No FritzBox, no rented hardware, just my own box talking to the ONT. It took a couple of hours to get it working, and the journey involved a fair amount of trial and error. Here’s what I tried, what failed, and what finally worked. The setup Router : MikroTik hAP ac ONT : Deutsche Telekom Modem 2 fiber…

Nix RPi Bootstrapping

I can never remember how to set up a Raspberry Pi. Every time I flash an SD card, I end up searching for the same wifi configuration, the same SSH setup, the same boot options. During my recent exploration of Nix, this felt like an immediate candidate for improvement: the whole configuration lives in code, and rebuilding is one command. This post covers getting NixOS onto an RPi from scratch, and…

Nix bin alias

In one of my previous post , I explored how to use ln to link files across a NixOS system. The two initial needs were to link configuration files, and create a binary alias. I tend to install gojq and use it as jq , it makes more sense to me to have a consistent experience between the CLI and library. I have not yet suffered from this choice, despite my intense jq usage. In this post, we’ll…

Nix-Darwin shell override

All code snippets are simplified for clarity. Moving aliases to Nix I recently decided to move my shell aliases, and ZSH options to Nix. There are predefined Nix options for this, all under programs.zsh and programs.bash . And since I use the same aliases for zsh and bash , here’s the configuration I came to: packages/shell/aliases.nix { lib , pkgs , ... }: { 'ls' = 'ls --color=auto' ; 'll'…

When ln is not idempotent

TL;DR: ln -T I was refactoring more my Nix config, and specifically replacing my link farm with nix as described in my previous post . When I noticed that links were being created in the wrong places. I would run ln more than once and would get links in random locations: $ ln -vfs ' $DOTFILE_FOLDER /nvim/' ' $HOME /.config/nvim' '/home/nobe4/.config/nvim' -> '/home/nobe4/dev/nobe4/dotfiles/nvim' $…

Nix ln, the wrong ways

TL;DR : don’t do this, everyone suggests using home-manager , or a non-Nix solution. In the exploration of porting my configuration to Nix, the next step was to manage all the links. This article shows a couple of wrong ways to do it, they are still good learning paths, hence this writing. Unless otherwise specified, all code examples are simplified for clarity. Current configuration…

Nix packaging

I have been using Nix for a couple of month, from a purely consumer perspective. In all tools that I wanted to master, producing is a great teaching tool, sometimes more than consuming . In that effect, I wanted to see how I could install bat , without using the predefined package. The plan Download the source code This is achieved with fetchFromGitHub . Compile the rust binary This is achieved…

Great Flag Unification

If there’s something I like, it’s simplicity. If there’s something that’s not simple, it’s the flags of the world. In this post I try to redesign flags in a simplified way, using only 4 basic shapes: rectangles, circles, half-circles, and triangles. Each flag operates on a 12 ×12 grid, which works surprisingly well for most flags. The idea is to create a simpler, more…

Typing Accents

Typing accents requires a whole lot of processing that seems counter-intuitive at first glance. For a user, “tapping the key é” and “seeing é on the screen” is so common, that one rarely tries to understand what is going on. I am by no mean an expert in this domain, but I learned a lot and wants to share my understanding. Note : whenever possible, simplified views of…

Keyboard

This keyboard layout is the latest and smallest iteration in my keyboard journey. I’ve managed to fit everything into 34 keys, while removing anything superfluous. Letting the classical QWERTY layout go in favor of one that made sense to me really helped shaping a more personal and simple layout. See the code at https://github.com/nobe4/keyboards/blob/main/ferris/keymap.c Glossary [ ] :…

nobe4

What’s a nobe4 ? That’s the alias I have used for as long as I could. I like the tabula rasa reference, that it can mean that I try to live with no preconception and with an open mind. It’s pronounced: no before ˈnoʊ bɪˈfɔr

Stars

Being idealistic is hard for me to brush off. I overly enjoy perfection and the feeling of having created something just right . Having guidelines, or rules matters only if consistently applied. Code fits greatly to this via linter, type checkers, formatters, etc. For other things, I find it useful to have guiding principles, less as strong rules and more as unreachable states . Aiming, if never…

A*ism

Agnosticism and Atheism are often used interchangeably. However they mean different things, and ought to be used precisely. Atheism: absence of belief Implicit Atheism absence of belief without conscious rejection Explicit Atheism: absence of belief with conscious rejection Negative Atheism: absence of belief without assertion of absence Positive Atheism: absence of belief with possibility of…

Determinism

If causality has gaps It means that some effects are not the products of what came before. They emerged outside of the physical laws, in a non-physical space. Gaps are not unexplainability : electricity was not explained a thousand year ago. Moreover, future research could explain phenomena we don’t yet understand. Gaps are not unpredictability : the weather is unpredictable because of its…

Code organization

Here’s a pattern I use to organize all my development work. ~/dev/ { owner } / { repo } This makes understanding where a repository is much easier than having a flat structure. It becomes easy to switch context using a function like z : #!/usr/bin/env bash cd ' $( fd . ' ${ HOME } /dev' \ --type d \ --color never \ --max-depth 2 \ | fzf --select-1 --query ' ${ * } ' ) ' || exit E.g. $ z…

Lazy Lazy Loading

In this blog post, I showcase how I maintain my cat website . Past I used to maintain a piece of code that roughly did the following: content = '<body>' for picture in ls ( './pictures' ): content += picture content += '</body>' Which generated an HTML file I could then deploy: < body > < img src = 'pictures/0.jpeg' /> < img src = 'pictures/1.jpeg' /> < img src = 'pictures/2.jpeg' /> ... </ body >…

Pure Data Sequencer

In this post I&rsquo;d like to present a patch I made for Pure Data, namely a sequencer. Pure What? Pure Data (Pd) is a visual programming language developed by Miller Puckette in the 1990s for creating interactive computer music and multimedia works. - Wikipedia Coming from a text-based programming experience, it&rsquo;s a connect box with lines type of programming game. Although I am relatively…

Cube

This blog post presents the little toy I made while exploring the HTML5&rsquo;s canvas and a cube&rsquo;s visualisation with changing perspectives. You can see the result here: Cube . Preparing the canvas and brushes Let start with the canvas wrapper, the non-cube side of the project. After getting the canvas and its context, we set fixed sizes for various elements of the page: const canvas =…

LAMP CTF4

Source: https://www.vulnhub.com/entry/lampsecurity-ctf4,83/ This LAMP challenge is most likely to be focused around casual Linux-Apache-MySQL-PHP vulnerabilities. Let&rsquo;s check the robots.txt file first: User-agent: * Disallow: /mail/ Disallow: /restricted/ Disallow: /conf/ Disallow: /sql/ Disallow: /admin/ /mail/ Looks like a webmail service, we can&rsquo;t login for now, moving on.…

Shellcode for/by a Newbie

I wrote this blog post with a simple goal in mind: I never took the time to understand fully how a shellcode worked. I know about it, I know that it works, but I don&rsquo;t know how . So I made myself write this in order to finally grasp its logic. Ready? Let&rsquo;s dig in! For this article I&rsquo;m using a Ubuntu Trusty 32bits (with Vagrant ). The wrapper In order to execute a shellcode,…

Vim As An Anti-Keylogger

OK, this is a fictional title made just to sound cool, a more accurate title would be: How debugging a Vim plugin made me discover a keylogger Once upon a shell&hellip; Quick note about fugitive . I&rsquo;m using this Vim plugin a lot , it&rsquo;s one of the few I couldn&rsquo;t live without. I highly recommend it! You can commit, show the status, add, revert, blame, directly from Vim It&rsquo;s a…

/dev/random: Relativity

Writeup by npny and nobe4 . nmap reveals the following open ports: 21 , 22 , 80 . The HTTP does not reveal anything special, static HTML . On the ports 21 and 22 the default/basic username don&rsquo;t work. We can see the FTP on port 21 is an old ftpd version with the mod_sql activated. From various links we understand that there is a SQL injection on this plugin that allow a user to login without…

/dev/random: Pipe

Writeup by npny and nobe4 . Firstly, we run nmap against the website, to discover that (among others), the ports 80 and 22 are open. SSH doesn&rsquo;t yield any results, and we try, without luck, a possible exploit against the used version. HTTP is a lot more interesting: An HTTP password is asked when trying to access the main page. After a few random try on the different HTTP verbs we try to…

Golfed Dragon's Curve

Little dragon&rsquo;s curve. I got bored on a rainy Sunday and I thought I would try to mix mathematic and JavaScript. I love fractals and I saw neat golfed examples of what you can do with the canvas (e.g. this 128 bytes dragon&rsquo;s curve ), so I tried to create a simple dragon&rsquo;s curve generation visualisation. My attempt displays splittings of the initial segment as it gradually turns…

Vim Gitignore view

Introduction One workflow I came across a lot during my programing days is the following: git status vi .gitignore # [Edition ...] git status vi .gitignore # [Edition ...] git status git commit I don&rsquo;t usually create the best gitignore pattern on the first time, so I need to test multiple times for correctness. Wait, that seems to be a lot of repetition ! Let&rsquo;s create a vim plugin !

Vim Syntax Generator

When you feel like knowing all this syntax stuff, perhaps write a blog post ;) - VanLaser I may not know everything about the syntax mechanisms in Vim, but at least I&rsquo;ll share what I understood building a syntax file generator. TL;DR How I created a syntax file generator for displaying StackExchange API values. I have some data: { 'has_more' : true , 'items' : [ { 'answer_count' : 1 ,…

208 Energy

Scroll all the way down ! For the release of the new Peugeot 208, we developed at Cogit Studio a single scrolling webpage to beautifully present the car. Feel the energy (website down)

308 Experience

Scroll all the way down ! For the release of the new Peugeot 308, we developed at Cogit Studio a single scrolling webpage to beautifully present the car. Live the Experience (website down)

The Ad Filter

The Ad Filter is a Chrome and Firefox extension that only shows the &ldquo;best&rdquo; ads. This work was done with Cogit Studio and D&AD . D&AD and BETC&rsquo;s new Ad Filter The most hypocritical ad blocker ever replaces ‘bad’ clips with award winning ones D&AD’s &lsquo;bad ad&rsquo; blocker a timely reminder of the importance of online creativity Why D&AD is wrong to create its ad blocker

About

I am nobe4, a french developer, constant learner, and music listener. I am seeking enlightenment through coding and music making .

CV

Experience GitHub 2023 Sep - Present Berlin, DE Senior Security Engineer 2021 May - 2023 Sep Berlin, DE Security Engineer TBD, still breaking things over there N26 2019 Sep - 2021 April Berlin, DE Security Engineer 2018 May - 2019 Sep Berlin, DE Junior Security Engineer Joined the original security team. Did all things security: education, auditing, pentest, incident response, built and managed a…

Disclaimer

The views and opinions expressed on this site are solely my own and do not represent those of any past, current, or future employer.

N-Back

X-Back Count Seen Not seen

Pairs

Value count Letter count

Plants

Terms Growing season: Spring + Summer All plants want lukewarm water are potentially toxic to pets TODO research repotting research prunning

Privacy policy

This privacy policy covers how data is collected and processed on nobe4.fr. Data collected GoatCounter is used to perform analytics without collecting personal information. It is configured to collect the following information: Visited page address Referrer User-Agent Screen size Country and Region Language This is processed to understand site usage. GoatCounter doesn&rsquo;t use cookies. See…