Subscribe to Personal Log via RSS

Taxonomies

I started this blog over a year ago, and I mentioned in the first post that it was a work in progress. There was at least something that was likely I wanted to do, but I thought it was not important: make the posts’ tags visible.

Which is basically making Hugo render special pages listing posts with a specific tag. Although at the end, the motivation to add the functionality goes beyond the usual functionality of a weblog.

This site was a personal website before I added my personal log, and I implemented it with Hugo moving from my old Django managed website. I had a good amount of content I wanted to sort and classify, even if some of that content was very old –circa 2002–. I wanted to present all that information initially, and perhaps decide later if I wanted to get rid of some of it.

So I thought I could use tags, and that worked well to make the main index pages linked in the menu on the top of the pages. However, is not ideal because I ended with one large archive with basically anything I couldn’t put in any of the other sections.

I could just use those tags to navigate blog posts, but considering that everything is already tagged, I have decided to expose tags in all pages, hoping that it would improve navigation.

Now you can click on the tag names in any post –under the post title; this post is tagged blog–, and any other page that has tags will show them at the bottom after the last updated information. For example all ZX Spectrum tagged pages.

I’m not sure how much is this going to improve things as it is still mostly disconnected pages, only that now they are indexed by tag. The more I think about it, the more this should look like a wiki, where you can see incoming links and recently updated pages as well, but that’s probably something to explore at a different time.

The wiki movement is close to being dead

I have accidentally spent some time recently reading wikis, and I ended in the WikiRevival page on Community Wiki:

Wiki movement is close to being dead. We all know that. One can only imagine how this wiki used to be years ago. Lively, pulsating. Something like that.

The page was last edited on 2021-08-23, so it is kind of fresh –sometimes is hard to know, you may read something that feels like it could have been written today, and it is 10 years old–.

As I understand it, the wiki movement refers to public wikis as a way of collaboration and as tool for building communities. And I wish I could say the rumours of its dead have been greatly exaggerated, but my anecdotal experience seems to confirm that public wikis aren’t at least as alive as they used to be.

In a way, we could say the same about blogs. Or more recently, forums. And before that mailing lists. And before that Usenet news groups. And depending on your age I guess we could go even further back.

I can hear you ask: what about the Wikipedia?

The page has more:

But what’s not dead? Atlassion (sic) Confluence (a proprietary product), WikimediaFoundation and wikis on wikifarms like Fandom (used to be Wikia) that describe modern media. Even wikis on services like GitHub or GitLab are not widely used.

So the Wikipedia is not what I think they meant with the movement.

Then it goes further and questions what features are required for a wiki engine to be successful today –e.g. mobile upport–, and what are the unresolved wiki issues. Obviously all this could be completely wrong, but it is an interesting read, and it ends with some optimism or at least hope that, with some small changes, wikis could be back to be.

I have always been fascinated by wikis. Or, should I say, the wiki movement that I didn’t experience. Not even back in early 2000s when I was active in my local Linux User Group, and it was standard to have a wiki. It had write permission restricted to the LUG members –that didn’t write much–. Sadly, it looks like we didn’t understand what was all about.

WIP: Micro Programming Language

I have always been very interested in compilers/interpreters and operating system development. Back in Uni, those were my favourite topics, together with programming –of course–.

In the late 90s and early 2000s I had a lot of side projects working on both, although I never got too far in any of them –at some point I wrote an interpreter using flex/bison that could qualify as programming language, but back in DOS days, the source got lost on a broken diskette–, and I conceded that I would never get anywhere and focused on other things.

But the itch comes every now and then.

The last time I released something was my JTC –names are hard!–, and I took the toy part seriously because it is certainly useless. But it was fun, even if I had the feeling PLY was doing most of the work for me.

For the last few weeks I’ve been re-reading the very excellent Crafting Interpreters, and because I’m refreshing my Go, I started implementing an interpreter using that language. And I’m having a lot of fun!

def fib(n number, acc1 number, acc2 number) number {
    if n == 0 {
        return acc1;
    } else {
        if n == 1 {
            return acc2;
        } else {
            return fib(n - 1, acc2, acc1 + acc2);
        }
    }
}

println("fib 90: ", fib(90, 0, 1));
// output:
//   fib 90: 2880067194370816120
// in 0.002429 secs thanks to the tail-call optimization

At this point I think I have fully understood the tree-walk interpreter part of the book, and I’m finishing what could be a small statically-typed programming language.

Although it is still a toy, I’m proud of the features:

  • Statically typed, types are checked when parsing the code.
  • Variables, constants and functions.
  • Conditionals and loops (with break and continue).
  • Lexical scopes.
  • Functions are higher-order, support closures, and recursive tail-call optimization.

All with some test coverage, and a design that I hope will allow me to write also a compiler targeting the Z80 –initially, and I’m not sure how some of the current features will look like; e.g. closures–.

What I’m missing at this point is arrays, structures and some types –e.g. for now there’s an int64 that I call number, but I need types for 8 and 16 bit numeric values and conversions between them–.

The idea is that by making the language small with some restrictions, it should be easier to generate Z80 code. Also, by making a interpreter first, I can learn and it will be useful as well to write tests on the interpreter to validate the code that then will be compiled and run on a Z80 CPU.

I was waiting to have something to release before talking about it, but I thought: why not?

Considering my limited time, and that I’m in the middle of some professional changes –I may talk about it later on–, this means other projects are on hold. Which doesn’t mean abandoned, but there’s always some risk of that!

Aioe.org public news server

I was talking about Gemini here some time ago, and the official website. As part of the “official” resources there was a mailing list to discuss the protocol, make announcements, meet other users, trolling, and things like that; but something happened to it –there are some comments of being dead and not coming back–.

Some people immediately recovered a copy of the archive and put it online, and even there were some attempts of adding a “public inbox” to replace the mailing list, but it doesn’t look like they went too far.

And then seems like things moved to comp.infosystems.gemini –I don’t know the full story, looks like the newsgroup was already available–.

Of course that the Usenet newsgroups still exist and they are used –even if is not as much as in its golden days–, and you need access to an NNTP server to read and post messages.

Those services used to be provided by your Internet service provider when you got Internet access, and Google has a gateway via a web interface via Google Groups –that’s a Wikipedia link because Google requires account–. Anyway, I’m not going to do a history lesson here.

So, how do I access the Gemini group?

Turns out it is easier than it used to be, thanks to this public news server:

Aioe.org hosts a public news server, a USENET site that is intentionally kept open for all IP addresses without requiring any kind of authentication both for reading and for posting. In order to avoid mass abuses, every IP address is authorized to post no more than 40 messages per day.

So basically I added a newsgroup account to Thunderbird and it 2 minutes I was checking the groups available, which is all of them.

What a time-travel experience! You don’t get all the archives, but it was fun checking that the es.comp.os.linux.* groups were still there – “ecol” is a big Spanish community of Linux enthusiasts that wasn’t that different of today’s tildeverse, established on 1996–.

The Gemini group is active, but like Gemini itself, things are slow-moving and it doesn’t have a lot of traffic. I have spent some time checking groups, and there are some that look active, but to me it feels more like the echoes from the past, like the “ecol” groups.

I'm on Mastodon

So there has been a lot of stir on Twitter after Elon Musk made an offer to acquire Twitter and take it private, and then he said he would fight censorship and protect free speech –in reference to Twitter’s moderation policies–.

Musk is a very divisive character, to put it mildly. So obviously, some users are unhappy with the situation and decided to move to Mastodon, which is an open source software for federated micro-blogging.

I’m not one of those, suddenly unhappy, because I could say honestly that I am always unhappy. I used identi.ca back in 2008, as it better aligned with my personal philosophy regarding software and freedom, but also because back then Twitter was a dumpster fire technically speaking –does anybody remember the fail whale?–.

The good thing about all this is that I decided to try Mastodon again. I tried it by the time I started this blog, but at that point I decided I didn’t want a replacement for Twitter. It was more that I didn’t want Twitter, or micro-blogging at all. So I went back to blogging and reduced my use of Twitter, acknowledging that it was still useful to promote my games.

Are things different now? Perhaps not that much, but I see Mastodon like a gateway to a community aspect that gets diluted on Twitter with big brands, outrage and news, all trying to get your attention and into the doom-scrolling that I’ve been avoiding since I reduced my Twitter usage.

Yes, the user interface is different. Some bits are still not there –the official Android app can’t take pictures, only upload them!–, and the federation makes other parts awkward –can’t see a user’s followers because they are on a different instance, or following a user from other instance if you are in your instance is one click but much more complicated if it happens in their instance–. But all that is fine, because it is open source, an that’s something Twitter can’t compete with.

I know that most of the angry people leaving Twitter don’t care about the same things I do. I don’t expect that the average user will suddenly understand why open source is good; those are the ones that complain about the user interface being different, and it is likely they won’t stay around. I have the feeling that it is always the same: rants and moans –on Twitter!–, for things to always stay the same.

Anyway, let’s see how this goes for me.

One of the trickiest things about a federated service, like in the case of XMPP –aka Jabber–, is that you need to choose an instance. I have an account on the SDF instance. I decided to go there for two reasons: I got a shell account with them –and also in ctrl-c.club; which is a story for a different post!–, and they started hosting StatusNet (aka identi.ca) back in 2010 before moving to Mastodon in 2017; so looks like they are trustworthy and likely to stick around for a while.

In case you want to connect on Mastodon, you can find me at: @reidrac@mastodon.sdf.org –yes, it is me: in the about there’s a link back to my about me page in this blog; careful with that: be sure the person you follow is who you think it is!–.

Playing Pokémon Ruby

After we quit playing Breath of Fire IV, we went back to Lenna’s Inception –which is an interesting game, written in Scala! we are in the final-ish boss, will talk about it soon–. But is not ideal to play with the kids, because they still don’t have the skills for such an action game –some bosses took me a good number of attempts–.

So we were looking for a new RPG to play, and because we have watched a few seasons of Pokémon on Amazon Prime, it seemed a good franchise to try. One of the first seasons we watched was “Pokémon: Advanced” –first aired on Japan 20 years ago–, and that season is apparently paired with Pokémon Ruby on the Game Boy Advance.

The graphics are super-cute, the GBA is easy to emulate –I have a GBA, but I don’t have this game, and the screen isn’t great by today’s standards–, and the kids are very familiar with the Pokémon of that series, so on a lazy Saturday morning, we decided to give it a go.

Recharging

Recharging Pokémon after a battle

I don’t know how far we will get, but we are around 10 hours into the game –after a few short sessions–, with two gym badges, and a good set of Pokémon over level 15. Which is definitely more than I was expecting!

I’m not going to make a full review of the game here, but I’m surprised how deep the mechanics are. It is all simple on the surface: you can walk in tall grass to find Pokémon, battle other trainers, and move from town to town fighting the gym leaders to get badges; but that simplicity is perfect to pickup and play. There are some quests, but looking on your inventory you get clues on what to do next. And all very family friendly –you don’t kill Pokémon, they faint–.

Battling

Each Pokémon has its own strategy

And the combat is what I’m finding the most interesting. I have listened to some podcasts talking about the game, and most refer to it as “rock-paper-scissors” mechanics, but that is probably simplifying too much.

Yes, there is a lot of that. For example: a water Pokémon with water moves is strong against a fire Pokémon. Early on things aren’t too fun because the low level Pokémon have only two moves, but when you start to have move options and you need an strategy to win a battle where your opponent is stronger than you, it is clear that the mechanics are deeper than that.

Is not only fun finding those strategies, it is also very satisfying when you make a difficult battle easy by combining some moves in a way it wasn’t obvious when you first met that opponent.

So far I think we have barely scratched the surface –the main story is about 35 hours–, and it is possible we will get bored, but so far we are enjoying it. And I’m learning a lot of game design!

The IndieWeb

According to the IndieWeb website:

The IndieWeb is a people-focused alternative to the “corporate web”.

Which doesn’t explain too much, only that this is against big corporations providing the platforms where we do the social web of web 2.0.

Thankfully, they provide a list of three points:

  • Your content is yours.
  • You are better connected.
  • You are in control.

And I thought initially “OK, so the IndieWeb is what we used to call the web”, but that’s not exactly true. What I knew as the web initially depended on someone hosting your content, in the likes of GeoCities, Angelfire or Xoom –that are the ones I knew most back in the day, all of them free–.

Initially I thought the IndieWeb places us perhaps a bit later than that, when hosting started to be cheaper, and reading the getting started page, in order to join the community you need your own personal domain, a place to host your content, and setting your own home page and other “indieweb essentials”.

Which is more or less that I did in 2002 when I got the usebox.net domain, trying to establish a stable presence on the Internet for myself and a small group of friends. It was not only about a website, email was also important –although that may be out of scope for Indie Web I guess; hopefully doesn’t mean they are happy with Google owning their email, for example–.

But that was a misunderstanding, because the IndieWeb is not about self-hosting –although is not excluded–.

“A place to host your content” could mean Blogger or WordPress.com, which I don’t know how it goes with “your content is yours”, but it makes sense if you want to move away from the corporate web. The message really is: don’t get your content to Facebook, instead own your blog with your own domain.

There is a lot more to explore, like for example webmentions. Although I suspect a lot of these things may not be easy now that this blog is a static site!

A patch for a 14 years old project

So today I received a heart-warming email that ticks all the boxes for me:

  • First of all, they thank me for publishing the software on the Internet under the GPL license.
  • The author is user of one of my projects.
  • They are happy, bogom and the bogofilter are useful for us, I used it more than 10 years (sic).
  • And they are sending me a patch!

Bogom is a milter, which is a type of plugin for some MTAs –originally Sendmail, but later Postfix at least added support–, that is used to filter email.

My milter was an way of using bogofilter, a bayesian filter –yes, all this is about filtering– that can be used to filter spam. When I wrote the milter there were a few ways of using bogofilter with Sendmail, but all of them were filtering email after it was delivered. Bogom was able to filter and give a response to the MTA trying to deliver the email, so the sender knew that the email was rejected. I thought it was neat.

You didn’t have to use it to reject spam, because it could just add a header with the result of the classification, but that was the main idea. It had a few limitations, like only supporting a database for the whole system, but looks like by being simple, it has been functional for 14 years after I stopped working on it.

In fact, I have checked, and it still exist in the FreeBSD ports under mail/milter-bogom; and it doesn’t include any patches, so it is being used as I released it last time in 2008. Amazing!

The patch adds a flag to select the logging facility. Bogom uses daemon, and the idea is that you can use syslog to redirect the logs to any file you want, so the patch is not really that useful; but on the other hand, why not?

The only problem is that making a new release of a 14 years old unmaintained project would require testing of something that, honestly, I haven’t used for quite some time –not 14 years, but almost–. So we will see.

For now, this email has made my day!

An E/N blog

So I was having a chat with my friend Oscar when he mentioned an old post on his blog linking to one of my posts in my old Spanish blog, that doesn’t exist any more. That led us to discuss broken links, and how things have changed in the blogosphere.

I took down my old blog last year after 18 years online, because I thought it was irrelevant and its old archive was kind of holding me back to write other things. So long story short, I started this blog and that’s where we are now. Besides there were some technical reasons for the change, because the old blog was running on an old and somewhat unmaintained stack –all my fault: a hand crafted blogging engine built on top of Tornado, with Python 2, and using Redis as storage; don’t ask me why!–.

Anyway, Oscar has also moved from his hand crafted blog engine (with Django, if I’m not mistaken), to an static site generator. But he has decided to port his old posts to the new blog, despite being a considerable amount of work.

It is an interesting problem, but we both concluded that, in reality, nobody cares about what we write or not in our blogs. And perhaps it is a thought for a different post, considering if anybody ever cared about our blogs –even if we had a different perception back in 2003 when we started writing–.

That conversation reminded me of this quote from E/N:

The website’s content means everything to the publisher, but it could mean nothing to the rest of the world.

Which basically sums up what is this blog, and perhaps any personal blog.

I write about things that I find interesting, useful, or are important to me. That might be useful to anyone visiting the blog, but is not essential!

Changing hosts

Recently I upgraded my VPS to Debian Buster, that is not the latest version, but it’s OK as long as is long time support and it still has support time. It doesn’t take long –around 30 minutes–, but there are some tricky bits to it because between releases the software I use will change and I may need to adjust my configuration files –some of them come from my first install around 2010!–. That’s the main reason why I don’t do these upgrades ASAP.

I thought everything was good, until I noticed some weird behaviour, and turns out I had missed some kernel oops after the upgrade of one of them: iptables wasn’t working. That hosting provider injects a kernel they control, and it looks like there was a mismatch between it and my new Debian system. So I opened a support ticket, because the kernel is from 2019 and it looks like it was pinned, so I thought I was not getting newer versions.

I know how things work on this hosting provider because I worked there for 6 years, and I wrote a big chunk of the code moving their cloud. I know it is changing a field in the admin console, and that takes less than 30 seconds.

Unfortunately my ex-employer was acquired by a larger hosting company, they let go all the dev team, and no further changes are planned for the old platform; and that explains why my server was running an old kernel. Although I understand the policy, I don’t think it is a good one. If that kernel doesn’t work with Buster, I’m sure other customers are experiencing other problems.

There is a path to migrate the services to a current platform, and it will be forced to everyone at some point; but it is unclear when I can migrate my server. Not sure why is that, but it is possible is not a fully automated process.

Anyway, as an ex-employee, my server was completely free, so I think it is fair to move to some other provider and leave them alone. I’m very happy and grateful for having that free service, I wouldn’t mind paying for it –after all, I know we built a good platform–; but I’m not sure about this new hosting company.

Yesterday I finally migrated all the services I had left on that box, and I’m ready to switch it off. And it is a bit sad. In a way it is my last ties with a company I enjoyed working for, and doesn’t exist any more. And that includes all the code I worked on during those 6 years.

That’s OK. Software becomes legacy eventually, and it gets replaced. It is a cycle.