Compare commits

...

7 commits

Author SHA1 Message Date
7a52aa296c
post: i played dank tomb
All checks were successful
ci/woodpecker/push/deploy Pipeline was successful
ci/woodpecker/cron/deploy Pipeline was successful
2025-05-05 20:05:21 +02:00
00dc6b83b6
projects: dharma 2025-05-05 19:52:36 +02:00
edda46356e
post: i read leviatan 2025-05-05 19:52:26 +02:00
57ea6fde81
post: i read half a king 2025-05-05 19:51:41 +02:00
4fd47f9ae3
post: dharma 0.1.0 2025-05-05 19:51:25 +02:00
160b0d65f1
post: butterrobot 0.4.0 2025-05-05 19:51:19 +02:00
e5e5dfa72a
fix: pagination template 2025-05-02 20:21:48 +02:00
12 changed files with 137 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View file

@ -0,0 +1,21 @@
+++
title = "Butterrobot 0.4.0"
date = 2025-05-05
tags = ["butterrobot", "golang", "projects", "releases"]
+++
That was fast! From the moment I refactored the code to Golang and started using it some new features arrived that I have been making use.
The last release adds two plugins:
- **Domain blocker**: Allows adding the plugin to a channel and set up a list of domains to block. If a message contains a link to one of those domains, the message is deleted and the user warned.
![Example of domain blocker](domainblocker.gif#center)
- **Remind me**: Allows users to reply a message with `!remindme X` (where `X` is a relative time like `3d`) so the bot can remind the user when that amount of time has happened of the message they replied to.
![Example of remind me](remindme.png)
My initial idea with Butterrobot was to give users a plugin toolkit that allowed for configuration, database and storage, but since now all plugins live in the same codebase those were fairly easy to implement. Some things require a bit of polish (like the plugin configuration UI) but for now, it just works and I'm happy with it.
You can find the latest release for Butterrobot in [it's git repository](https://git.nakama.town/fmartingr/butterrobot)

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

View file

@ -0,0 +1,43 @@
+++
title = "Dharma 0.1.0"
date = 2025-05-05
tags = ["projects", "dharma", "releases", "golang"]
+++
I've created yet another small pet project. **Dharma** is a small CLI utility to check for broken links in web pages. I needed something like this because when I [migrated to Hugo](/blog/2024/08/09/welcome-hugo/) some leftovers where around (images, pages, old post, etc.). I wanted a way to check that easily from the CLI and also to add it as a CI step when a new version of the site is deployed.
This is an example output run over my blog:
```bash
$ dharma --internal-only -d 10 https://fmartingr.com
Scanning website: https://fmartingr.com
Website scan report for: https://fmartingr.com
Scanned at: Mon, 05 May 2025 19:48:41 CEST
Total resources checked: 1691
Success: 1672, Errors: 19
Internal links: 1672 success, 19 errors
External links: 0 success, 0 errors
Errors found:
404 (link) https://fmartingr.com/tags/videogames/splash.jpg [from: https://fmartingr.com/tags/videogames/]
404 (link) https://fmartingr.com/blog/page/5/image.jpg [from: https://fmartingr.com/blog/page/5/]
404 (link) https://fmartingr.com/blog/2016/12/21/new-site/Lektor [from: https://fmartingr.com/blog/2016/12/21/new-site/]
404 (link) https://fmartingr.com/made-with-open-source [from: https://fmartingr.com/blog/2016/12/21/new-site/]
404 (link) https://fmartingr.com/blog/page/6/image.jpg [from: https://fmartingr.com/blog/page/6/]
404 (link) http://fmartingr.com/tags/videogames/splash.jpg [from: http://fmartingr.com/tags/videogames/]
404 (link) https://fmartingr.com/nintendo-switch [from: https://fmartingr.com/blog/2017/01/31/why-i-preordered-the-nintendo-switch/]
404 (link) https://fmartingr.com/blog/page/7/image.jpg [from: https://fmartingr.com/blog/page/7/]
404 (link) https://fmartingr.com/blog/page/7/splash.jpg [from: https://fmartingr.com/blog/page/7/]
404 (link) https://fmartingr.com/blog/page/8/image.jpg [from: https://fmartingr.com/blog/page/8/]
404 (image) https://fmartingr.com/blog/2020/08/02/july/notion-tasks-320.png [from: https://fmartingr.com/blog/2020/08/02/july/]
404 (image) https://fmartingr.com/blog/2020/08/02/july/notion-games-320.png [from: https://fmartingr.com/blog/2020/08/02/july/]
404 (link) https://fmartingr.com/blog/2020/06/02/june/ [from: https://fmartingr.com/blog/2020/08/02/july/]
404 (link) http://fmartingr.com/blog/page/5/image.jpg [from: http://fmartingr.com/blog/page/5/]
404 (link) http://fmartingr.com/blog/2016/12/21/new-site/Lektor [from: http://fmartingr.com/blog/2016/12/21/new-site/]
404 (link) http://fmartingr.com/made-with-open-source [from: http://fmartingr.com/blog/2016/12/21/new-site/]
404 (link) http://fmartingr.com/blog/page/6/image.jpg [from: http://fmartingr.com/blog/page/6/]
404 (link) http://fmartingr.com/blog/page/7/splash.jpg [from: http://fmartingr.com/blog/page/7/]
404 (link) http://fmartingr.com/blog/page/7/image.jpg [from: http://fmartingr.com/blog/page/7/]
```
Dharma 0.1.0 can be found in it's [git repository](https://git.nakama.town/fmartingr/dharma).

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View file

@ -0,0 +1,19 @@
+++
title = "I read Half a King"
date = 2025-05-11
tags = ["books", "I read"]
+++
Half a King carries the checks of a classic adventure novel tracing the heros journey.
![Half a King](cover.jpg?width=320#center)
<!--more-->
Coming from a background of fantasy novels I expected something along the lines of what I usually read —given the comparisons and recommendations— but that wasnt the case. Theres no magic or fantasy here; instead, we follow a crippled protagonist whose fate is to become king. Why do I mention this? Because despite the differences **Half a king kept me hooked from beginning to end**.
Its thrilling —at times so intense it barely lets you breathe— introducing interesting characters whom our protagonist meets along the way. We see how he relates to them and to the world itself, with enemies who become allies and impossible romances, all set against the backdrop of a harsh land where even the simplest misstep can lead you to _deaths door_.
Although its the first book in the trilogy, it can easily be read as a standalone story since the ending ties things up clearly and leaves few loose ends.
Personally, Ill definitely be reading the next one in the trilogy. A must have for fans of adventure novels.

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View file

@ -0,0 +1,26 @@
+++
title = "I played Dank Tomb (PICO-8)"
date = 2025-05-18
tags = ["videogames", "I played"]
+++
> I bought an Anbernic device mainly to play PICO-8 games on it, but after playing two games the screen broke and I had to return it so I still have a nice backlog of PICO-8 games to go through when I sit down and set up my Retroid Pocket.
<figure>
<img src="/blog/2025/05/18/i-played-dank-tomb-pico-8/cover.png" \>
<figcaption>The cartdridge for the game... or to better put it, <a href="https://pico-8.fandom.com/wiki/P8PNGFileFormat" target="_blank">this image <strong>is the actual game!</strong></a></figcaption>
</figure>
<!--more-->
I already knew about Dank Tomb, but little I knew how good this game was and that I was following [his author on the fediverse when I asked for Pico-8](https://fosstodon.org/@krajzeg@mastodon.gamedev.place/113459527815468345) games recommendations. He already made some awesome games, considering the pico-8 limitations.
Dank Tomb is a puzzle-adventure game, and a difficult one at it. Either that or I'm incredibly bad, which could be the case. You get into a tomb split into rooms _ala_ Legend of Zelda where you need to avoid dangers, solve puzzles and try no to fall to your demise. Which is the most annoying point for me in the game: I didn't quite get the hang of the jumping. Some landed perfectly, others I just died... that didn't stop me from continuing playing tho, because I was deep into making it to the end.
Graphics are stunning for a Pico-8 game, soundtrack a bit lacking (but understandable!) and not only that the game has some secrets you need to discover on your own.
Definitely a must on Pico-8.
![My dank tomb run results](https://screenshots.fmartingr.com/Pico-8/Dank%20Tomb/muOS_20241118_2047_0.png)
Yes, I only got two secrets after dying 146 times. Probably I am that bad at it.

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View file

@ -0,0 +1,19 @@
+++
title = "I Read Leviatán"
date = 2025-05-26
tags = ["books", "I read"]
+++
A short series—quick to read, very entertaining—and it keeps you wondering: “So… what happened after that?”
![Leviatan cover](cover.jpg?width=320#center)
<!--more-->
The premise is simple but told through a fascinating narrative device: a spaceship carrying middle and highschool students crashes, and its assumed there are no survivors. Years later, space scavengers stumble upon the wreck and piece together events by reading one of the kids journals they find on board. What really happened? Is everything on the diary true? And, beyond that… what would the reader have done in the same situation? Who —or what— is the real monster here?
The story follows the writers perspective so the space scavengers piece together the events (along with us, the _real readers_) by reading the journal as they investigate the ship and keep uncovering clues. Can't say more without spoiling the story!
I loved it, is one of those series that being short makes it even more enjoyable, and it's capable of telling so much in _a few_ pages. Totally recommended, more so if you like the sci-fi / thriller genres.
The physical edition (in Spain) its excellent, even including fullcolor pages! My only nib is that it doesnt follow a standard format (neither kazenban nor tankōbon) so finding a protective sleeve was a bit of a challenge—but the tradeoff is that the binding doesnt swallow any of the artwork, so Im happy to let that slide.

View file

@ -0,0 +1,8 @@
+++
title = "Dharma"
description = "A CLI tool to detect broken links in websites"
layout = "projects"
repository = "https://git.nakama.town/fmartingr/dharma"
+++
A CLI tool to detect broken links in websites. It can be used to check the status of a website's internal and external links and report any broken links in JSON or friendly format. It not only follows links but also checks for scripts, `url()` and `import()` in CSS files.

View file

@ -20,7 +20,7 @@
{{- if in $validFormats $format }}
{{- if gt $page.Paginator.TotalPages 1 }}
<ul class="pagination pagination-{{ $format }}">
{{- partial (printf "partials/inline/pagination/%s" $format) $page }}
{{- partial (printf "inline/pagination/%s" $format) $page }}
</ul>
{{- end }}
{{- else }}