Subscribe to Personal Log via RSS and find other blogs to read in my blogroll.

Gemini protocol

What is the Gemini protocol?

Gemini is a new, collaboratively designed internet protocol, which explores the space inbetween gopher and the web, striving to address (perceived) limitations of one while avoiding the (undeniable) pitfalls of the other.

In my opinion, the Wikipedia page is more informative (if a bit technical):

The Gemini protocol is an application layer protocol for distributed hypertext information systems that provides access to simple, primarily textual documents in Gemini space. This is done with contemporary technologies such as TLS, thereby improving privacy and user agency relative to the Web. The protocol is being designed collaboratively and is not currently being standardized as an internet standard.

According to that wiki page, the project is quite new, even for Internet standards, as it was introduced in June 2019.

Last week I was looking for a project to tinker with fs2 streams, so I thought that may be writing a simple Gemini server could be perfect.

That didn’t go well, and I ended frustrated and rage-quiting fs2, but that’s a story for a different post. So I thought, what about Akka Streams? It is a completely different beast, but the docs are better and there is no need to deal with the tagless-final pattern, so I found the API quite pleasant to use.

After a couple of days of coding, I’m getting close to beta quality, and I have learnt a lot in the process.

It was inevitable that I went down the Gemini rabbit hole, and I tried some clients:

  • Lagrange: probably the more flashy client, although the SDL rendering makes it feel like a weird desktop app.
  • Amfora: a console client. Considering that Gemini is text-only, this one is excellent.
  • Ariane: this one for Android. It is probably not as polished as the other two, but is nice to have Gemini in your phone I guess. (Edit 2022-05-17: this client is no more).

What I found in Gemini really surprised me.

It feels like an early Internet, as in a smaller place, with reminiscences of webrings from the 90s. There is less noise and more focused content. I’ve found forums, personal pages, and blogs.

The use of RSS is widespread and looks like is one of the main ways to discover content via aggregators (although there are at least two search engines). Some hosts provide mirrors and proxies to the world wide web, as a simplified version of the same content.

And because the name of the project comes from the second U.S. crewed spaceflight program, it all has its own flavour: pages are capsules, blogs are gemlogs (or glogs), and there is a CAPCOM (from capsule communicator) and a Spacewalk (both aggregators).

I tried one of the clients and, without thinking about it, I ended spending a good time reading random blogs. I mean, glogs.

I plan to continue with my server and, probably, release it at some point when I think it is production ready. And, who knows? I may put some content on the Geminispace.

This week in gamedev #2

It looks like it’s Thursday again, and that means gamedev update!

I spent probably too much time to get this blog and the website in order. Mostly getting the light/dark themes to behave, some CSS here and there, and after torturing a bit my Hugo templates, I think it is “perfect™” now.

And there was some time for gamedev as well, of course.

Brick Rick: Graveyard Shift

I finished the music, and posted a WIP of it. The music is not exactly like that any more, that’s the WIP spirit right there.

There was more testing. My good friend Antxiko is doing a great job and found some behaviour that had to be improved in the pause code, and that’s done. We will keep testing a bit more, although at this point I feel like playing the game just for fun because this is “release candidate” quality already.

The cover artist provided a first draft, and I love it. I’m looking forward to have something final so I can show it.

I’ve been told that it wasn’t intentional, but to me the cover art feels a bit less cartoony than the Amstrad CPC cover. The sprites look less chibi on the speccy, and I changed the style slightly, so it could be that or just a happy accident.

I had a chat with the other artist that is going to work on the loading screen, to double check what is needed. At the end it will be better if he has something that is as final as possible as it will be in the inlay (including the lettering of the title).

I’m not really in control of the times, but I suspect we could be 2 or 3 weeks away from the release. Watch this space!

Better Windows support in ubox MSX libs

~mk~, user of MSX Resource Center, has been trying to make the ubox MSX libs compile on Windows.

After some back and forth –I don’t have a Windows system to test the changes–, it looks like he managed to compile the libraries, the tools and the example game. Great success!

I released version 1.1.4, once again without testing the changes myself. At least they don’t break anything on Linux, so perhaps this is the release that solves all the problems on Windows (or it only requires minimal tweaks).

And that’s all for this week in gamedev.

Event: Scala Love in the City

This Saturday (Feb 13th) I will be attending (virtually) to Scala Love in the City, a conference for Scala developers.

As you can see, the schedule is very promissing. It all starts at 8:00AM GMT, which is not bad at all!

It’s been a while since the last time I attended a conference, and I mean pre-COVID times, but I usually watch some of the talks when they’re uploaded to YouTube or similar. This time I’ll try to attend in real-time. Even if it is online, I’m sure there will be a difference –I guess you can ask in the Q&A time, and there will be party–.

Personally, I’m interested in any talk that focus on Scala 3, and of course the keynote by Martin Odersky.

Planing a CRPG

Any novice programmer that decides to make a game, usually has an oversized type of project that would like to tackle, specially as first project.

In my case it was an CRPG (Computer Role-Playing Game), and it is funny to see how things change a lot to essentially remain the same. I’ve seen newbies trying to make their first game, and it was a JRPG (Japanese style RPG). Then an MMORPG (Massively Multiplayer Online RPG). At some point, interest shifted to the FPS (First Person Shooter) genre. The White Whale changes, yet remains the same, unreachable.

Now that I’m more experienced and I’ve finished a few games, perhaps is time to make that CRPG; although not even now I’m sure that I’m capable of finishing such a project!

I’ve spent some time deconstructing the genre, and I read “Fundamentals of Role-Playing Game Design” by Ernest Adams, a bit by accident. I can’t remember when I bought the ebook.

Although the book didn’t tell me anything new, strictly speaking, it was a good overview of the genre, and it kind of encouraged me to give the idea another go.

At the end, I think I’m going to focus on the core gameplay, and then expand from there. Instead of having everything I think a CRPG should have, I’ll see how much of a subset is sufficient to recognise the genre.

I’ve settled in a few points:

  • It will be dungeon focused, probably with no over-world or “city” view.
  • As part of the dungeon exploration, there will be object/key/switch puzzles.
  • I’m keen on a rogue-like component, so I don’t have to design the dungeon –and I can have more fun playing it–.
  • There will be inventory, and some sort of management of it.
  • I’d like it to be story heavy, or at least with an interesting story, via scripted scenes and NPC dialogue.

The only part that I’m undecided is the combat. I know the player will walk into a new room and there will be enemies, and there will be a fight.

For now I have this list of possibilities I like:

  • JRPG turn based combat, party based. Limited actions: attack, magic, use item, defend, etc. See Bard’s Tale, FF or Dungeon Quest series.
  • Turn based combat, party based and the environment matters. Same actions as before, but the characters move on a map that can be used strategically. See Ultima or Shinning Force series.
  • Action RPG, with little skill involved. The player bumps into the enemies, and stats kick in. See Ys, and lots of rogue-likes use this mechanic.
  • Skill based action RPG. Which is not really, really an RPG, but I guess you can make stats count. See 8-bit entries in the Zelda series.

Depending on what I choose, the implementation may vary a lot. For example, inventory management is quite different if you manage one single character or a party.

Another constraint is that it must be small, even if that means being less of an CRPG. Mostly because that would increase substantially my chances of finishing it.

I can start working on the points I know for sure I want in the game, and hope that, as I work on them, the rest will reveal itself naturally.

I have some nice Zelda-esque tiles for the MSX, so I may have decided the platform already!

Graveyard Shift music

Brick Rick: Graveyard Shift is getting there!

In this WIP video I’m testing the music, that reminds a bit of my own Night Knight, and perhaps some Ghost and Goblins –which is not a bad thing–. Graveyard Shift will need a ZX Spectrum 128K model, and the music uses the AY-3-8912 audio chip.

Looks like I didn’t do a great job capturing the sound in this video. The emulator was producing stereo (although the ZX Spectrum wasn’t capable of that), but the captured video is mono. Hopefully, the next video will be better.

I’m looking forward to the release!

How do we get back?

Reading Continental drift by Jon Udell:

The web of the late 90s was a cornucopia of wonder, delight, and inspiration. So was the blogosophere (sic) of the early 2000s. I know a lot of us are nostalgic for those eras, and depressed about how things have turned out. The bad is really quite bad, and sometimes I feel like there’s no way forward.

Also recently on HN: Turn to RSS Feeds to Regain Control of the World Wide Web (too often Hacker News comments are even more interesting than the story).

There’s a good summary at the Wikipedia, with some notes on current usage (all negative, btw).

Summing up:

  • RSS is not dead, but is not fashionable (and arguably, it has seen better times).
  • Social media is hostile, and major sites such as Twitter and Facebook have removed (or reduced) their support; some of them never supported it.
  • All major browsers have removed RSS support (IE still supports it out of the box; and Firefox, champion of the Open Web dropped support of RSS in Firefox 64).
  • All the problems it had, are still there (probably for another post).

Although I like Udell post and his optimism because we still have the Internet, and despite how things are going and “we’ll figure it out”, I feel something must change if we want to get back to that cornucopia of wonder, delight, and inspiration (and I want the blogosphere back!).

As bonus: in defense of RSS by Seth Godin, written 10 years ago and updated just recently. Still as relevant now as it was back then, if not more.

This week in gamedev #1

As part of my exit from Twitter, I plan to have some work in progress (WIP) posts and information on what I’m doing in my “gamedev” projects. Or at least, updates mostly related to game development, because I think I may include other development related topics, but gamedev is catchier than plain dev, isn’t it?

This is not Twitter. The format is different and, essentially, even if I make notes as the events happen, I don’t see much value on posting them “as-is” (although people liked that on Twitter).

So instead I’m going to write one post a week with those notes more or less redacted, although I may still post specific WIPs any time when the content is longer than a short Twitter thread.

Looking at my usual week, the updates are likely to be from Thursday to Thursday, but this is not a rule set on stone anyway.

Let’s do this!

Brick Rick: Graveyard Shift

Not a lot has happened on this project. Basically: the game is finished!

Attraction mode

The attraction mode in action

I said back in December last year that it was very likely that the game would be out by the end of January 2021. So, what’s going on?

First of all, I started with the struggle of drawing the loading screen, because it’s not my thing! Then I remembered someone contacted me in April 2019 offering a collaboration to draw the loading screen of a game I was working on back then –a game that was cancelled, by the way–.

At that time I was impressed with the screens that he had produced until that point, but I politely declined because I had that project covered already.

Anyway, the good news is that he will be working on the loading screen of Graveyard Shift; although he asked for some reference art, and I don’t have that. Which makes sense, if I could draw, I would draw the loading screen myself.

The truth is that I didn’t want to think about a physical release at this point, but then my wife suggested (wisely, I must say) that I could commission the cover art and use that as reference for the loading screen. I’m happy to say that I’m working again with the artist that did the cover art of Brick Rick for the Amstrad CPC.

Now that I’m going to have cover art, almost accidentally I have found a publisher that is keen to release the game on cassette in a nice budget-style label. It’s not a closed deal, but I’ll move it forward as soon as I have the cover art.

Looks like things are coming together nicely, but all this takes time.

Meanwhile, testing is going very well. A few bugs were fixed in the first pass –some of them of the embarrassing type–, and I think we already have a version that we could call “release candidate”.

There is still at least one song missing, and I should tackle that before the art is ready. Turns out, the Halloween-ish theme isn’t that easy.

I don’t like that the project has gone a bit cold, but I don’t have a deadline anyway.

The website of the game has been online for a while now.

Drawing on the MSX

After I released my libraries to make MSX games in C, I got the MSX itch again. I guess I had lot of fun putting together the example game in 3 days or so.

I’ve been drawing some tiles, partly looking for inspiration, partly aiming to a game idea that perhaps could work fine (spoiler: with a rogue-like component).

It is still too early to reveal anything, but I’m excited. I may even consider submitting the game to MSXdev'21, although I haven’t been much of fan of game jams in the last few years.

Refactoring my Scala.js and Canvas 2D experiment

I’ve been working on and off on my Scala.js and Canvas 2D experiment for a while now, and I don’t know what to do with it.

A nice side effect of not knowing what to do is that I’ve been reviewing the code again, and after this last refactoring, I think it is starting to look great.

In some parts I have decided that it doesn’t make much sense to go full FP because of the interaction with the Javascript underneath. A bit of Object Oriented Programming (OOP) is just fine.

The idea was to:

  • write some Scala out of my day job
  • make gamedev targeting the web more comfortable by using the same tools I use working with Scala
  • have some fun!
  • may be make a game?

So I’m fine with that (although to be clear: the code was fine already).

And that’s all for this week in gamedev.

Just tell it what you want

I’m reading Functional Programming, Simplified by Alvin Alexander, which is intended to make the process of learning functional programming (FP) in Scala as simple as possible.

It is a bit too soon to recommend the book, and it is a 700+ pages commitment –I’m glad it is simplified–, but I’m happy with what I’ve been reading so far.

In the introductory chapters, where Alexander starts to define what is FP, he includes a quote attributed to experienced FP developers:

In FP we don’t tell the computer how to do things, we just tell it what we want.

The idea behind the quote is that, in imperative programming, the programmer tells the compiler step by step what to do, while in FP you are telling what is what you want to be done, without caring about the actual implementation.

Instead of reproducing the same example from the book, let’s take a look at this short piece of C code:

char *leters = "aababcbcdefba";
int count = 0;

for (int i = 0; i < 13; i++)
    if (leters[i] == 'a')
        count++;

In this example we are counting how many times the character ‘a’ appears on a string. Very straightforward, isn’t it?

Let’s see how we would do this in Scala using FP:

"aababcbcdefba".count(_ == 'a')

Do I really care how count is implemented? No, I don’t; all I want is to know how many times the character ‘a’ appears on that string, and I can trust that function to be correctly implemented.

Although the point Alexander was making was not explicitly about the quote itself, it really resonated with me because I’ve been thinking about something similar in the context of a compiler targeting limited CPUs like the Z80.

One of the common struggles of making games for 8-bit microcomputers using C and the SDCC compiler is that the compiler is not always very efficient generating Z80 code. And thinking about imperative programming, it makes sense that it is hard.

I suspect the real reason for SDCC not being at the same level as other modern compilers is more related to resources and limitations of the target architecture; for example the Z80 has less registers than a modern CPU, and writing an efficient register allocator is a big part of the problem.

Anyway, I was wondering if a compiler that implemented some limited functional programming language would have an easier job if instead of telling it how to do things, we just tell it what we want.

Hello, blog

This is the first post on this blog, exciting!

Really? Are blogs still exciting in 2021? Well, I think they are, even if not as popular as they used to be, specially compared with social media. I’m convinced there are blogs worth reading out there.

I also think there’s value in writing a blog, in my case to document my projects, and as a way to somehow untangle my thoughts when I have something to say.

Which is what I was doing, more or less, on Twitter. Until recently, that I decided to review how I use that social network. With current COVID situation (and working from home), I found that the always on of Twitter was starting to affect my ability to switch off, and it was an easy gateway to procrastination and losing my scarce free time to get things done.

I haven’t decided yet what I’m going to do with my Twitter account, because I have 2400+ followers, and that is very useful when I want to promote one of my games. It’ll be just that I’m not going to be there.

As you may know, I already write in a blog in Spanish that I’ve been writing since 2003 (that’s 18 years already!), but I wanted to do some things differently:

  • I want to have the blog as part of this site.
  • because this site is generated with Hugo, I won’t be using a full featured CMS.
  • write in English, as I was doing on Twitter.

So, what is this going to be about? I suspect it’s going to be similar to what I used to write on Twitter: about my gamedev projects, with some WIP content, about Open Source and technology, perhaps some commentary on news, and likely to have more lengthy writings as well, because this is a blog after all!

The blog is currently a bit work in progress, and I may add more things as I think I need them (like making the posts’ tags visible). But for now, this is a good first post.

Like and subscribe!