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.
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!
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).
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.
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!
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.
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.
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.
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!
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.
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.
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).
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.
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.