Elektrine
EN
Log in Register
Paige Chat Timeline Communities Gallery Videos Email DNS VPN Uptime Kairo
Remote

João Costa

@JD557@blog.joaocosta.eu
  • Open on blog.joaocosta.eu

Portuguese software engineer at Kevel.

My instance is running on a small server so please #nobot

0 Followers
0 Following
13 Posts
Web:

https://www.joaocosta.eu/

GitHub:

https://github.com/JD557

Twitter:

https://twitter.com/JD557

Itch.io:

https://jd557.itch.io

Posts

Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Apr 19, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

Finally got everything ready to order my first PCB! 🔥

Took me a while to design everything and generate the files in the correct format, find the parts that I want... but I'm finally at the final ordering step.

I know I'll probably mess up something, but I can just keep trying and learn from my failures. At €1.70 a piece (or 5 pieces, the minimum order amount), I can just keep ordering them until I get it right. 😜

And by ordering an assembled PCB, I can make sure that any issues that arise are part of my design and not my shitty soldering skills. 🙂

Assembly cost: €76.89

Actually, scratch that... I'm going to have to think this through 😬

0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Apr 05, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

I've been getting quite frustrated with YouTube lately... It keeps enabling auto-dubbing, including in videos where that doesn't make sense (e.g. videos about phonetics).

I understand that this is a cultural thing and some people prefer dubs over subs, but I just can't stand it.

I know that realistically I won't stop using YouTube, but I want to give peertube another shot.

So, I've been wondering... what are some cool #peertube channels to follow?

0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Apr 04, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

After watching a Youtube video on Stella Deus for the PS2, I decided to give the game a try, as I did have some memories about playing it when I was younger (when I had time to play RPGs).

The review did mention that the beginning of the game was a bit rough, with some mechanics that were not properly explained... and damn they were right, this games just throws you at the wolves from the get go!

Not in a "this game is super hard" way, more in a overwhelming way. As in, you finish your first/second mission and you are hit with:

  • A shop with new equipment that you can (and probably should) already buy
  • A bunch of sub-quests, where some quests let you recruit new characters
  • An item fusion system
  • A way to spend points to learn new skills
  • A way to use the same points to increase stats
  • A dungeon to grind
  • A first boss with a passive ability to inflict "fear" when you get near him (your character can't attack for N turns)

I keep having moments like "Are you telling my that I could have (recruited a healer/used a better weapon/had better stats/learn immunity to fear/...)? That would have made that battle so much easier!" 🤯

This game could have used a slightly larger intro chapter to gradually introduce the game mechanics 😅

And yes, I know there's a Tutorial in the main menu that you can read, but I still felt overwhelmed.

0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Apr 03, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

I just noticed that I can actually compile my Chip-8/SuperChip runner to JS with Scala-JS:

https://joaocosta.eu/Demos/Chip8/?program=games/chipcross.ch8

Some games might look a bit janky - that's intended, as I'm keeping the clock speed at around 1kHz. But that can be increased with a query parameter: e.g. &clockSpeed=5000

To play the games:

  • ChipCross: Move the cursor with WASD, select with E.
  • RPS: Just use z, x and c to pick "Rock", "Paper" or "Scissors"
  • Rush Hour: Move the cursor with WASD, select with Z. Keep Z pressed and move to drag objects.
joaocosta.eu

Chip 8 Demo

0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Mar 28, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

Weekly update on the Chip-8 system:

Added SuperChip support with configurable quirks (original Chip8, Legacy and Modern). This was not that hard and it unlocks a bunch of cooler games.

Unfortunately, since the screen is tiny, some games (like Chipcross) are effectively unplayable. 😬

To cope with all those games, I also added pagination to the game menu, so now I can have 4 pages of 5 games, each with a custom title (like "SuperChip games").

I also toyed around with some AoT compilation logic. I'm hoping that this would reduce power draw (I don't have any easy way to measure it,though... but I had a power meter lying somewhere... I need to find it).

Some games seem to write instructions to memory at runtime (not sure why), so I might need something like an instruction cache that gets invalidated (effectively a JIT).

Also moved the application to a systemd unit to get it to boot a bit earlier. Not perfect, but good enough for now.

On the hardware side, I started designing a 3d printed case and designing the circuit (maybe to print on a PCB). I'm a complete noob at this, so it will probably fail spectacularly. 😅

0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Mar 23, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu
Replying to @The_Universality@mastodon.novotnykrystof.com
@The_Universality@mastodon.novotnykrystof.com @thibaultmol@en.osm.town @EUCommission@ec.social-network.europa.eu But isn't that contradicted by the next paragraph? Furthermore, recognising the importance for cybersecurity of many products with digital elements qualifying as free and open-source software that are published, but not made available on the market within the meaning of the CRA, the novel legal category of open-source software stewards is introduced. These are legal persons who provide support on a sustained basis for the development of such products which are intended for commercial activities, and who play a main role in ensuring their viability, and are subject to a light-touch and tailor-made regulatory regime. So if you have a big non-commercial project (I assume something like curl), you might still fall under the CRA, it's just that you won't be fined.
0
1
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Mar 23, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu
Replying to @thibaultmol@en.osm.town
@thibaultmol@en.osm.town @EUCommission@ec.social-network.europa.eu also curious about this... From the announcement, I see: [...] free and open-source software that are published, but not made available on the market [...], the novel legal category of open-source software stewards is introduced. These are legal persons who provide support on a sustained basis for the development of such products [...], and are subject to a light-touch and tailor-made regulatory regime. So, I believe that if a volunteer project is big enough, the maintainers become "open-source stewards" Open-source software stewards are subject to the obligations laid down in Article 24, notably [list of obligations] And it appears that there are some obligations for volunteers... BUT: In accordance with Article 64(10), open-source software stewards are not subject to administrative fines for infringements of the CRA. So... Volunteers have obligations, but there are no consequences? Not sure what to take of this, but I hope the EU doesn't punish volunteers just because their projects became too successful.
0
1
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Mar 21, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

Another update on the #Scala Native Chip-8 System.

Added a game selection menu, fixed some bugs and moved everything to a Pi Zero 2W. I'm also now launching the application on boot.

I think this is in a pretty cool state and is probably as far as I'm going for now. There are a few things that I would like to do, but my motivation is waning.

One would be to improve the boot times. Ideally I would use something like a unikernel, but that's a can of worms that I don't want to open. Maybe I can get a quick win just by disabling some services on boot? Or maybe there are lighter alternatives to Rasbpian OS Lite?

The other thing is to 3d print a case for this to make a "portable console". That sounds like a fun project, but the fact that my keypad cables come in a bus out of the bottom makes the whole design a bit harder...

Let's see, this was a pretty fun project so far. 🙂

And since today is Saturday, I guess this deserves a #ScreenshotSaturday

Your browser does not support the video tag.
0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Mar 18, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

OK, so thinking a bit more about the I2C framerate issues, I just noticed that there's a simple fix.

So, there are basically only 2 ways to draw things in Chip-8:

  • Clear the screen
  • Draw a sprite (8x15 max) with a XOR

So, for performance reasons, most games avoid clearing the screen - as that would force you to redraw all the sprites. If you need to move a sprite, you XOR it at the current position and draw it again at the new position.

I could use the draw instructions to skip the frame buffer and draw directly to the screen, but with the time that each draw operation would take, this would cause some annoying artifacts (you would see the sprite disappearing and appearing instead of moving).

BUT this also has the side effect that the screen buffer generally doesn't change a lot between frames. So if I keep track of the previous frame buffer, I can compute the area of the screen that changed and render just that.

This has some obvious edge cases (if only the screen corners are updated, I need to redraw everything). But this seems to be mostly a non-issue in practice.

Your browser does not support the video tag.
0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Mar 17, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

I was pulling my hair out trying to understand why my Chip-8 emulator was passing all the tests, emulating all games perfectly EXCEPT space invaders: Shooting down one ship killed 2 of them.

Tried to Google for someone with the same issue, nothing.

Went to the emudev Discord to try to ask about it, turns out someone asked exactly the same question 2 weeks ago. Kind of bizarre seeing someone posting a video with the same bug so close in time. 😄

Turns out that space invaders is not made for CHIP-8, it's made for SUPER-CHIP Legacy (1.1). 😐

0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Mar 15, 2026
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu

OK, I just finished writing a Chip-8 implementation in Scala and connected a 4x4 keypad to my Raspberry, so now I can actually play games there!

I did hit an annoying issue here, though... The fact that:

  • The screen refresh logic is slow (I think this is a limitation if I2C)
  • Chip8 doesn't have any kind of VSync

Means that I need to simulate the CPU at a high-ish clock rate (10KHz) so that I don't spend a bunch of time drawing intermediate states. I think this might cause issue in some games (In my local simulator, 1KHz seems to be the soft spot for most games).

As an aside, this is the second time that I give Chip8 a try (I gave a talk about that in 2016: https://joaocosta.eu/Talks/Chip8/#/)

Turns out I was making things way too complex back then by trying to be smart... This time I went "Ints everywhere and immutability goes brrrr" and it was super easy to implement. 😂

0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Nov 18, 2025
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu
Replying to @Gargron__dup_1@mastodon.social
@Gargron@mastodon.social Thank you so much for your work. Even though I don't use Mastodon directly, its positive impact growing the Fediverse is undeniable. ❤️
0
0
0
0
Open post
JD557
João Costa @JD557@blog.joaocosta.eu · Jul 04, 2023
João Costa
@JD557@blog.joaocosta.eu

Portuguese software engineer at Kevel. My instance is running on a small server so please #nobot

blog.joaocosta.eu
Replying to @rolle@mementomori.social
@rolle@mementomori.social to share an opposite view, I personally don't like self-boosts, especially when you when they are used to promote yourself/a project you are working on (it kind of feels like a repetitive ad). Having said that, I understand that some users like them and I think the ideal solution is not to have a "you should/shouldn't self-boost" etiquette rule, but instead clients should provide a "hide self-boost" option. Mastodon already has a "hide boosts" option, so that doesn't seem too farfetched to me.
0
2
0
0

Remote instance

blog.joaocosta.eu
Open on original server

Media

313k7r1n3
Elektrine

Tor hidden service

elekhj7afj4qnrr4yd3bkzslsyo5jgfxw3orgjkhlcxifueodybyiiad.onion

Platform

  • Email
  • Chat
  • Timeline
  • Communities
  • VPN
  • DNS

Company

  • About
  • Contact
  • FAQ

Legal

  • Terms of Service
  • Privacy Policy
  • Warrant Canary
  • Lite (no JS)
  • VPN Policy
  • Source code

Support

  • support@elektrine.com
  • Report Security Issue
Mail client setup IMAP mail.elektrine.com:993 POP3 mail.elektrine.com:995 SMTP mail.elektrine.com:465
© 2026 Elektrine. All rights reserved. Server: 07:32:53 UTC