I think I have finally figured out how to filter out spam almost completely with my contact form. Since I use BunnyCDN for MailyGo instead of Cloudflare, as I do for my websites, the number of spam submissions increased first (since BunnyCDN doesnāt block bots), despite using a honeypot. But now I have implemented a blacklist function with āforbiddenā words (which contains the words ācasinoā and āgamblingā by default) and havenāt received any spam since. Sometimes the solution to a complex problem can be so simple.
š¬ Micro
This section is for short notes, thoughts or IndieWeb interactions.
Although I would have enough things to do for my studying, I took some time today to do some programming on my Micropub endpoint. I can now use other git hosting than Gitea and can add alternative text to images. Here is a little test:

š¼ļøĀ View
Today I took the chance, as long as it is still possible to leave the house, and used the good weather to run a little. Only 4.5 km and not very fast, because my fitness is on a pretty low level at the moment. But I realized how important this exercise is, especially at a time when you only leave the house to go grocery shopping. Running in particular is an uncritical way to do sports. You can do it alone and you can keep enough distance from other people. And one advantage: it can be really challenging.
I admit it is the first time I am writing code that is almost 100% covered by unit tests. But itās such a good feeling to have small, concise methods whose functionality you can rely on. Even before I have a running application, I know that what is already written will work. And unit testing with Go is really fun.
Nice thing: Because of Corona and because there are no presence lectures at my university at the moment, they have installed a Rocket.Chat instance. And this although there are a lot of deficits concerning digitalisation.
There are Corona news all the time. Kindergartens and schools in Lower Saxony are closed until the second half of April. Also, presence lectures at universities no longer take place. That means no lectures for me but studying from home.
In addition to better hygiene (wash your hands!), this is probably a good way to contain the spread of the disease and not overburden the health system. However, panic also seems to be spreading:

š¼ļøĀ View
One way to start the day well: a croissant for breakfast. š„

š¼ļøĀ View
No, my implementation (itās still a WIP) doesnāt support sending āUpdate"s and āDelete"s yet. Itās one thing that bothers me about ActivityPub. Webmention is so much simpler in that regard. There also seems to be no way of forcing Mastodon to refetch an activity object other than sending an āUpdateā or āDeleteā activity.
Just a small note: I deleted my Microblog.pub instance. I liked this piece of software and itās a nice single-user alternative to Mastodon, but I donāt need a Fediverse instance anymore. My new fediverse strategy is to use my normal blog to post stuff (you can follow me via @en@jlelse.blog and @de@jlelse.blog) and Miniflux to follow people (Mastodon offers RSS user feeds).
If you reply to posts or mention my user handle in a public post on Mastodon, I will receive a notification and your reply will appear in the āInteractionā section under the post. If you interact with a post on your website and donāt automatically send Webmentions, you can also submit the URL in the form below each post.
By removing Microblog.pub from my server it also reduces the need for resources a lot. Python as well as MongoDB donāt seem to be that resource friendly. I currently use the cheapest VPS option from Hetzner and for the few remaining things hosted there (my website, my blog and some Go tools etc.), itās more than enough.
I use BunnyCDN as storage for my Micropub media endpoint, where I upload all the photos and other media files I publish on my blog. When I upload a new photo the media endpoint first uploads the original file with the name of itās SHA-256 hash value (so when I upload the same file multiple times, it doesnāt create multiple files). When I upload an image (JPEG or PNG) it also gets optimized and resized to a maximum width of 2000 pixels using the Tinify API (and then uploaded to BunnyCDN too), doing that significantly reduces the file size of the images displayed on my blog.
It would be probably awesome to also serve different formats based on the Accept HTTP header (WebP for browsers that support it) or different sizes, but I decided I want to hold my perfectionism (and the complexity) in check and settle for using just one optimized file version in the original file format. If at some point all browsers support WebP, I might consider using only WebP files, but until then it still takes time.
At the moment I donāt backup the files from BunnyCDN (I trust that they - or I - donāt accidentally delete them), but I could probably setup a cron job to regularly copy new files via FTP from their storage to another storage.