#!/usr/bin/env bash
default_rules=(
's/[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/<REDACTED_IP>/g'
's/\b[a-zA-Z0-9._-]\+\.[a-zA-Z]\{2,\}\b/<REDACTED_DOMAIN>/g'
's/\b[A-Za-z0-9+\/=]\{20,\}\b/<REDACTED_TOKEN>/g'
's/\(password=\)\S\+/\1<REDACTED_PASS>/g'
)
rules=()
while [[ $1 =~ ^s/ ]]; do
rules+=("$1")
shift
done
[[ ${#rules[@]} -eq 0 ]] && rules=("${default_rules[@]}")
sed_expr=()
for r in "${rules[@]}"; do
sed_expr+=( -e "$r" )
done
# If files are passed, process them to stdout.
# If none, read from stdin to stdout.
if [[ $# -gt 0 ]]; then
sed "${sed_expr[@]}" "$@"
else
sed "${sed_expr[@]}"
fi
Feel free to reuse, copy, extend, contact me to give feedback! 💚
💌 The best way to get in touch is via my email morgan at zoemp dot be. You can also follow me on the Fediverse / Mastodon at @sansguidon@mamot.fr. I speak (a lot) French, English and a bit of Dutch.
I reply to all recruiters for a long time. This became a chore over time, so I've developed a userscript that is loaded on every LinkedIn conversation, and calls Mistral AI to generate a reply in my preferred style. With every conversation I open, I hit this button and it will reply adequately, with respect to the history of the conversation, my priorities of the moment, the language of the conversation, the tone, etc.
It is then up to me to post the proposed answer as-is or to discard/edit the proposal
Dropbox storage optimization
As a parent, I developed the habit of archiving digital souvenirs of our kid’s life. Those pics and videos accumulate. As someone very organized, I like to avoid duplicates and also save the correct metadata (EXIF) in our pics and videos, which proves to be challenging with older pics from WhatsApp groups.
I wanted also to ensure that every time I get pictures and videos shared via WhatsApp family groups, I collect them in our Dropbox. This is done via Syncthing-Fork (Android client) and syncthing servers running on my Cloudron and my Macbook Pro. Syncthing monitors all folders that can contain videos or pictures. This helps effortlessly move all my pics/videos
Moves all new pics/videos from Android-monitored folders to Dropbox. As those folders are kept in sync via Syncthing, if I move a pic/video out of the monitored Syncthing folder to Dropbox, it removes the pics/videos from all locations monitored by Syncthing on my Android, so it helps organizing things on Dropbox while also making room on my Android device. Syncthing is set up manually, but it’s easy to manage.
Detect all pics/videos which do not contain a face, this is done using YOLOv5 by Ultralytics. The script was generated via LLM.
Compress/convert pictures and videos using https://ffmpeg.org/ which is installed locally, this achieves saving hundred GBs of data thus can reduce the bandwidth and resources needed for downloading, syncing, displaying such files. On top of this, I require less amount of storage, thus I can keep cheaper Dropbox subscription for longer. LLM generated most of the scripts needed for the task.
Newsletters summaries
As explained in a previous blog (https://morgan.zoemp.be/indieblog/), I'm keeping track of all new blog posts listed in https://indieblog.page/. I first cooked a daily RSS for it, using LLMs. This proved useful but as the list of RSS feeds grows over time, I came to realize I needed to better filter the list, or to limit the output. I don't want the filter to be too random, I want it to be based on my taste, so I created another RSS feed which is a LLM-aided summary of the first RSS feed.
Correcting or translating text
I asked an LLM to review this blog post. The instructions were simple: don't mess with my style, just flag the important fixes. I also asked for a permalink suggestion — one single English word, ideally fun or Gilfoyle-approved. The result is what you’re reading now. This very paragraph was, in fact, fully translated from a French original 🙂 .
What else?
I’ve shown a few cases where LLMs save me time or help improve my productivity. There are many more I haven’t covered, where I use LLMs to generate reusable scripts. Once a working solution is cooked, the LLM is out of the picture — most of the time. When a script needs to depend on AI to work, I mostly use Mistral: cheaper than OpenAI, and I don’t have to sacrifice my soul (or card) to use it. Automatic replies and content summaries are cases where interactive AI calls make sense. Still, I prefer to limit such usage — it makes my productivity overly dependent on fragile APIs and unpredictable outputs.
AI Agent: a cheap junior employee who has root access to your system and production and will fake competency and waste your money. Have fun.
All-in-one calendar/messenger/file sharing app: oh, look, they generously manage your most sensitive data with good intent and cheap costs: your security and privacy is not a problem it seems. Run away even if it's free.
Anti-AI: someone using AI but bitter about it officially.
Application logs: something you stare at while thinking about the sense of your life.
Backups: something everyone is supposed to do but never does. Tip: you can have world-class data backups for free, feed them to some LLM prompt or share them in private LinkedIn messages or in private GitHub repo, they will likely leak later in some hack or some LLM output.
Bugs: something that occurs to you because you didn't RTFM.
CDN: a disaster waiting to happen.
CI/CD pipeline: a glorified shell script that compiles your code, usually wrapped in YAML or in Groovy or a messy mix of both. Nobody cares it until it breaks. If you are a developer, blame any pipeline failure onto the CI/CD tooling pretend your code works on your machine.
Coding: some ancien art you go back to after wasting 4 days debugging AI-generated code.
Contabo: cheap plastic VPS.
Cloud: a big garage with computers, related to random outages and expensive certifications.
CloudFlare: a tool to protect robots from humans trying to use internet.
DevOps person: someone debugging your code and your production environment.
Docker: a packager for your bloated app and your dependency hell.
DuckDuckGo: a private search engine hosted by big tech and using big tech search results and funded by big tech. Yeah very private.
Ecosia: a green washing search engine.
Git: a simple version control tool to make your life miserable.
Google search: a search engine for ads.
Hetzner: cheap VPS for your piracystuff self hosted business applications.
Home hosted: piracy stuff or very sensitive stuff running on a Raspberry with zero backup. Do not mixup with Self hosted.
JavaScript: sugar for the web.
Kubernetes: because Docker wasn't complicated enough, this is a glorified infinite loop that restarts your bloated apps when they crash, and they will. It's also good to have on a resume.
LLM: a tool for text generation you can use to save you from developing skills. Some people call it general AGI. Ok, AGI, go win the lottery for me.
Newsletter: legal spam nobody reads.
Passkeys: a tool to prevent humans from using a tool on multiple devices.
QR Codes: links that force you to be glued to your phone and run a crappy app to avoid talking to human beings. It's the modern way to ordering anything. If you want I can generate infinite QR Codes for only 10$ per month.
Quantum: a marketing term to make any bullshit sound more legit. Oh, there is it, a quantum LLM.
Reboot: something you do when you are too lazy to RTFM.
RTFM: reading the manual is something you never do unless to prove someone else wrong or when it's time to understand the programming language you are using for ten years.
Self hosted: some barely secured docker containerized app running in some cloud like Hetzner. What is "self" about it? You decide. Maybe the fact it's installed by some human following a recipe. Impressive.
Spotify: a scam acting like a glorified Winamp clone that randomly removes content from your favorite playlists, rob you and artists.
Substack / Bearblog / Dev.to and other blog platforms: a recycle bin for your ideas.
Seedboxes: A place for exchanging free Linux distributions,.NOTHING ELSE of course.
the Onion, Le Gorafi: satire websites that compete with D. Trump for the most stupid headlines.
URL shorteners: a good legal way to ease phishing attempts. It's also a tool used to hide mostly useless sometimes good links behind magic ephemeral links. You remember that good site? Was it blb.lb/8378hdkf? Or goo.gl/hdk792? Who knew it would be such a terrible idea. Oh, did you see this new quantum URL shortener?
VPN: a glorified proxy.
Web scraping: a way to fix the lack of APIs. Also a lazy yet professional way to CTRL+C / CTRL+V content from websites.
I have learned one good lesson from tasting someone's else food, it's never salty enough and I always miss the good drink pairing or something else is missing. And I'll feel bad for making any critique or special request.
I have a similar feeling about apps, tools and platforms I don't maintain. Sure i can help fixing them with requests that will likely be forgotten in their backlog. Or I can pick an alternative product which will unfortunately lack features from the former or will have their own ux issues, bugs, weirdness...
In the end I'll flavor ones that focus on simplicity and which provide good documentation and support for data import/export and customizations through their API or through plugins and scripting.
Miniflux, Shaarli, Obsidian, Dropbox, Cloudron....are those kinds of apps and platforms I use that do a thing well yet I have customized to my taste, e.g of such personalizations:
Dropbox is automatically organized based on custom rules, all orchestrated through cron jobs.
Bookmarks in Shaarli are tagged automatically thanks to a plugin I've made available in my shaarli_plugins Git repository.
My apps hosted in Cloudron are restarted automatically on schedule if they stop responding, thanks to some cron jobs and Cloudron's API.
Music I download on-the-go from my mobile phone through Seeker (Soulseek client) is synced automatically to my storage and visible in my Navidrome and Subsonic clients; so I do not need Spotify. It is also orchestrated via cron jobs, using rsync and syncthing.
Notes I take on my Obsidian at work and at home are synced automatically thanks to Syncthing an Git on my personal Gitea server.
highlight links I've already bookmarked in Shaarli.
add one-click buttons Add to Shaarli / Follow in Miniflux next to each link mentioned in those articles depending if it's some RSS feed or a random link I might want to bookmark in Shaarli.
Email attachments related to our financial activity are archived in our Dropbox and renamed automatically based on their content, using OCR. The whole thing simplifies communication with our accountant and their software.
My monthly invoices are generated automatically from InvoiceNinja and I'm looking at a solution using only Python.
I keep building more, I'm working on my own tools to supplement or replace InvoiceNinja, Shaarli, Wallabag, Obsidian and Miniflux. The fewer apps I rely on, the more focused I become.
Relying on my own recipes, scheduling things though cron jobs and building my own platform saves me costs, improve my computer experience and make me more efficient about problem solving.
It also likely make me a bit lazier and annoying.
You can be more efficient too, and I can help if you like!
💌 The best way to get in touch is via my email morgan at zoemp dot be. You can also follow me on the Fediverse / Mastodon at @sansguidon@mamot.fr. I speak (a lot) French, English and a bit of Dutch.