Projects

Some public projects I did outside of work, just to keep track.

🔑 Radicale-Docker, Docker image for Radicale calendar and contact server + security 🔐 + addons 🚀

docker-radicale is a Docker image for Radicale, a simple Calendar and Contacts server, featuring:

  • a non-root user,
  • a read-only filesystem,
  • reduced privileges,
  • multi-architecture support,
  • and some convenience features after all!

Initially, I started self-hosting services on a virtual server (running OpenBSD, yay!).
Then I switched to my own hardware, and I wanted to run Radicale in a Docker container, with security in mind.

This project taught me a lot about OpenSource and “the cost of contribution”.
Contributions are welcome, but they also push the project to support features I don’t use, which makes me question the maintenance months later. 🤔

👓 Recognize tools with Deep Learning

The goal of this project is to recognize tools in images using Deep Learning.
The dataset contains images of tools like hammers, screwdrivers, and pliers.
The model is trained using a Convolutional Neural Network (CNN) with FastAI.

The project was created for the Fast.AI “Practical Deep Learning For Coders” course.

See the demo in action at AI.tomsquest.com.

🍅 Fynodoro, the Pomodoro Widget

Fynodoro is a timer widget designed to stay on your screen all the time.
It takes up a tiny bit of screen space and can be set to nearly transparent.
When you need to focus, you can start a Pomodoro timer with a single click. A notification will remind you when the time is up.

I use it daily to get in the flow, to monitor dedicated time, and during pair-programming sessions to switch the keyboard.

Tips: place it on the side of your screen, nearly transparent, without window decoration, and always on top.

📚 MediathequeRoubaix.py: functional programming with Modern Python

Applying functional programming principles, while sharpening my Python skills, I set out to develop a simple yet useful CLI tool.

However, typing can get tricky when MyPy and functional programming clash! 😅
And it becomes even more fun when everything turns into an IO of Task of Either of Option. 😜

⚡ Q.js: Quick-and-dirty debugging for tired JS programmers

Ever wanted to replace console.log but not in your already cluttered output? Q.js is there.

Throw a bunch of q(var1, var2), and the output can be displayed in a dedicated terminal with tail -f /tmp/q.

⌨️ My dotfiles

Config files for zsh, vim and many more. Heavily commented.

I invested a lot of time to find, pick, and tweak Zsh and Vim.
Nowadays, I don’t use Vim much, but my Zsh config is still my daily driver.
Still love my prompt (it has a handy separator line, minimal info).

🔤 Lucene stemmers in Javascript

Stem words like in Lucene in JavaScript.

This is a port of some Lucene stemmers to quickly prototype outside of Elasticsearch.
It was amusing to see that the stemmers, like the French one, have some issues, but they solve 90% of the cases with just a few lines of code.

q.plugin.zsh

ZSH plugin for the Q debug tool

auto-configure-typematrix-in-xorg

Configure your Typematrix keyboard automatically in Xorg (simpler that Udev)

better-autocompletes-with-fuzzy-matching

Code sample for the article: Better autocompletes with Fuzzy Matching

bouyguessms

Go binary + library for the unofficial Bouygues Telecom SMS Api (5 SMS/day)

datability

Drop primary keys, foreign keys, not nulls to let you test insert only the data that matters.

doc

Doc is a typed, recursive structure. It is a disguised, convenient Map of <String, List>.

go-reddit

📧 Receive an email of the Top posts of configured Reddit’’s subs

go-playlist-creator

🎶 Create a playlist in each folder containing music

gotify

📱 JavaScript client for Gotify, a simple server for sending and receiving messages

intellij-master-presentation

🏆 Championship on Jetbrains Intellij editor: keyboard shortcuts, editor, settings…

logback-servlet

Servlet for Logback to configure log levels at runtime

marklogic-docker

Simplest possible Dockerfile for Marklogic

marklogic-fluent-client

Fluent Java client for Marklogic

myyoutube

💻 Extract information about viewed YouTube videos and channels

notabene

📔 Your note-taking tool

nvm-auto-use.zsh

ZSH plugin to call nvm use automatically whenever you enter a directory that contains an .nvmrc file with a string telling nvm which node to use

nvm-init.zsh

Zsh plugin which initiates NVM

presentation-lombok

Quick intro to Lombok, its usages and its shortcomings.

raise-or-spawn

raise-or-spawn brings the specified window on front, or start a new instance of the program

remarkable

⚡ Deploy fast to Marklogic

sinatra-html5boilerplate

Simple Sinatra application using Html5-boilerplate

spring-boot-notifier

🔊 Notification of builds for Spring Boot

workflower

🌻 A simple Workflow system (pre-prototype)

🎮 56K Counter-strike clan

56K was our Counter-Strike clan. We were playing on 56K modems, and we were proud of it! Bad pings, dropped packets, and we still managed to win some games.

The website contained a very popular list of hiding places, ballistics of all weapons and their rank per accuracy/power, but also my keybindings and config for the game.

I made the website in pure HTML using <table> for layout! Yes, I didn’t know div existed. 😅