Took a quick break from InterIm development to work on Minart.
Finally got transparencies to work, and the performance doesn't seem that bad. I can get multiple moving particles on the screen with no problems.
To be honest, I picked this up now because I spent way too much time searching for bitmap fonts without transparency for my InterIm demos. That's a thing of the past now.
This weekend I was playing around with InterIm to try out some new features (asRefs macro) and some old ones that were not really tested (custom render ops), so I decided to build a drum machine!
The API could still use some improvements, but this is getting to an almost usable state.
Font: Spleen by Frederic Cambus (https://github.com/fcambus/spleen) Drum Samples: Free Pipe Pack by Goldbaby (https://www.goldbaby.co.nz/freestuff.html)
Junta-te ao esforço de arquivamento do #sapovideos!
Depois de mais de uma década como a principal plataforma de vídeos em Portugal, o Sapo Vídeos vai eliminar o seu arquivo a 17 de setembro. Trata-se da perda irremediável de um espólio cultural, mas é possível evitarmos esse destino.
O @hugopeixoto tomou a dianteira e criou um kit para se poder participar no esforço de download do que ainda está up. Se tiveres um par de terabytes disponível por aí, precisamos da tua ajuda!
Entretanto estamos a procurar soluções para alojar o arquivo de forma mais permanente. Se tiveres alguma pista, somos todos ouvidos.
A Scala port of @karpathy's llama2.c: https://github.com/jrudolph/llama2.scala Even without optimizations performance is surprisingly acceptable (-6%, single-threaded on GraalVM)
I was really inspired by an article Tyler Hobbs wrote about flow fields, so I translated it into Scala and wrote https://chris-kipp.io/blog/an-intro-to-flow-fields-in-scala. l learned a ton in the process, and am really enjoying playing around with these concepts. This will also be the topic of my talk this week at Scala in the City in London.
Just released InterIm, an immediate mode GUI library in pure Scala: https://github.com/JD557/interim
Published to JVM/JS/Native and backend agnostic: You give it the current input state and it returns a set of basic operations for you to render.
You can play around with an online example in https://joaocosta.eu/Demos/InterIm/
Today I was playing a bit with immediate mode GUIs, trying to port the code from https://solhsa.com/imgui/.
This actually worked pretty well and, while still pretty imperative, I was able to hide some of the ugly mutable code with Scala 3 context functions.
For fun, I also made sure that the code received a structure with inputs and returned a sequence of operations that need to be interpreted. That way it is completely backend agnostic (like microui).
Maybe I'll clean it up a bit (at least to add text support) and open source it.
OK, I finally took the time to version control all custom changes that I have in this instance: https://github.com/JD557/microblog.pub
I needed to do this anyway to comply with AGPL. I'm posting this note just in case someone comes looking for the link - I should probably add the link to the footer, but that's something for the future.
Our new video! We take you on a journey through a small game world and showcase the non-Euclidean transformations of its third dimension.
Full video on YouTube: https://youtu.be/Rhjv_PazzZE #noneuclidean #mathart #mathviz #NoneuclideanGeometry #rogueviz
Out Scala Space is on mastodon! Follow to get all the newest info about the initiatives we are involved in. Only technical toots! @scala_space
Thanks to Scala Native, #scala is in the same pool as Go, Zig and other very fast languages in this little benchmark for cold-start performance.
I contributed adding Scala to this nice benchmark 🙂
https://github.com/niklas-heer/speed-comparison
The incredible folks at Game Dev Lisbon have put together a magazine compiling #gamedev studios, events, universities and the various organisations/communities from the portuguese games industry! It's an amazing effort showing how diverse the industry in #portugal is becoming! 🇵🇹
Catalogue with just the studios: https://bit.ly/GDL01Catalog
Version with everything on it: https://bit.ly/GDL01Full
And of course, if you want to know more about the Game Dev Lisbon folks, check https://gamedevlisbon.com! ✨
It's been a while since I entered a gamejam and I won't be able to make it to the next #LudumDare, so I decided to enter MiniJam 130 with another game in #Scala.
The themes are "Lunar" and "10 Seconds", so I went for the least original idea: A lunar lander clone with a 10 second time limit.
As usual, you can play it on itch.io and check the source code on GitHub.
There are quite a few performance issues (don't try it on Firefox) and I found quite some bugs in Minart during the development. However, it's going to take me a while to fix them, so that will have to wait for a post-jam version.
One of the reasons I like to enter jams once in a while is to find bugs/problems in Minart. On that regard, this was clearly a success.
Debugging some audio problems recently.
How it started:
Fucking Firefox always giving me performance problems, I bet they messed up the WebAudio implementation.
How it's going:
How the hell were Chrome, JVM and SDL still playing audio with my stack-exploding accidentally-quadratic code?
#TIL about the QOA audio format, which seems to be pretty recent - 2 months old, based on the announcement blog post.
It's a simple audio format for lossy audio compression (in the same way that QOI is a simple lossless image format).
This couldn't come in a better time, as I was looking for simple compressed audio formats (and if it's just like QOI, it's going to be great for sure ).
Can't wait to take it for a spin.
Just took some time to setup Airflow and convert some old cronjob into a DAG.
This is way overkill for my needs (it was mostly to play a bit with Airflow), but I find it pretty interesting on how the whole tool/paradigm kind of guides you into having a easily debuggable job:
- Since everything is a DAG, it feels a bit off to have just a single task, so you break your work in small tasks.
- But now you need to pass data between tasks, and the simplest way to do that is by having intermediate snapshots.
- And since you need to pick a name for the snapshots, it's quite intuitive to just add a timestamp, so you go for the nicely provided
ds
variable, which is the logical run date of the job (reproducible when you rerun the jobs, this is no "datetime.now()").
So now my old hacky shell script to notify me of free Steam games is now a fully reproducible pipeline with monitoring, logging and data snapshots.
Maybe now I'll find out why the script stopped working a while ago
Today I was playing around with sprite stacks, which is something I wanted to do for a while.
It's so cool how easy it is to get something that looks "kind of 3D". Just make a quick model in MagicaVoxel, export to a sprite sheet and draw the sprites in order with some displacement depending on the camera position.
Even putting shadows on the ground is not that hard. It's kind of the same thing, but with a displacement based on height (instead of camera position).
Not sure if I'll do anything else with it, but it was fun.
After 6 months working on it, I finally released Minart 0.5.0-RC1, now with sound support.
This new version also drops #Scala 2.11 support, which was a pain to maintain.
I've been testing it with my previous #LudumDare entries and it seems to work pretty well. Once I've ported everything and am sure there are no obvious bugs I'll release the final version (and maybe write a blog post about it).
In the meantime, and unrelated to audio, this new version also comes with a bunch of performance improvements, so I can finally release Twotm8-native, an example GUI application in Scala Native. Check it out!
Proposals to drop Scala 2.11 support (on main branch, at least) from scala-xml and scala-parser-combinators: https://github.com/scala/scala-xml/issues/646, https://github.com/scala/scala-parser-combinators/pull/504
So many cool news in Scala recently:
Scala 3.2.2 was just released and this time I'm in the contributor list . I wonder if a CSS change to scaladoc is enough for me to add "Compiler Engineer" to my CV
.
Scala Native 0.4.10 and Scala JS 1.13.0 were also released recently, finally dropping 2.11 support.
Having both projects doing this at the same time is awesome! No weird cross-building problems for those who want to update (I was a bit scared that some libraries would rather drop Scala Native instead of 2.11) and it's a nice incentive for libraries to finally remove 2.11 support for good!
A timeline for reference:
- 2.11.0 was released on Apr 17, 2014.
- 2.12.0 was released on Nov 3, 2016 (6 years ago!).
- 2.11.12 (the last 2.11 version) was released on Nov 9, 2017 (5 years ago).
- Spark added 2.12 support on 2.4.0, which was released in Oct 29, 2018.
- Scala native added 2.12 support in 0.4.0, released in Jan 19, 2021.
So it seems more than enough time for most applications to upgrade.