This weekend I was playing around with defining an animation DSL.
I've wanted to play this for a while after watching @davesmith00000's interview for "Scala for Fun & Profit" and @kubukoz Playdate talk. Everyone's doing DSLs for gamedev!
It's still quite rough, but I think it's useful for things like menu animations. Maybe I'll use something like this in the next GameJam entry to add a bit more juice to the menus.
This example looks like this:
val backgroundAnimation = {
linear(0, 512, 10.0).loop
.map(delta => (delta.toInt, delta.toInt))
.translateWrap
}
val baloonAnimation = {
val rotation =
(linear(-Math.PI / 32, Math.PI / 32, 1.0) >> linear(Math.PI / 32, -Math.PI / 32, 1.0)).rotate
val beat =
(easeOut(1.2, 0.9, 0.5) >> easeIn(0.9, 1.0, 0.1)).scaleXY
(rotation && beat).loop.map(asSurfaceTransform)
}
val textAnimation = {
val rotation =
(easeIn(-Math.PI / 32, Math.PI / 32, 1.0) >> easeIn(Math.PI / 32, -Math.PI / 32, 1.0)).rotate
val beat =
(easeIn(1.3, 0.9, 0.5) >> easeIn(0.8, 1.0, 0.1)).scaleXY
(rotation && beat).loop.map(asSurfaceTransform)
}
All setup to go to Lambda Days 2024 in 2 months!
Due to the available flights, we'll go a few days earlier. Any recommendations for cool things to do/see/eat in Krakow?
On my previous job at Zalando I had multiple co-workers that kept a paper journal.
I tried to keep a digital journal in the past with VimWiki, but was quite unsuccessful at that. It's just too easy for me to paste random stuff there and make the journal a mess.
So, now that I changed jobs (and got a free notebook), I decided to give physical journaling a try.
I've been doing it for about a month and I'm enjoying it a lot. Just the simple act of checking "what I did yesterday" and writing "what I need to do today" (with no copy paste) really helps me focus.
On that note, since I started writing more, I decided to get a slightly better pen (I was using freebie pens). While I was in college I used a lot of Uni-ball Signo pens (usually either 0.5mm or 0.7mm), so I decided to try those again.
I forgot how smooth it feels to write with them, I need to get used to it, but it does feel nice
Entidades sociais – Precisam de computadores?
Acabei de saber da existência do ReBOOT Porto, e aqueceu-me o coração ❤️
Playing around with flow fields again.
Turns out it's easier to have an image dissolving than to draw the flow field. The code for this effect was surprisingly small.
It's a shame that he video compression destroyed the effect, but I think it's good enough to imagine what it looks like.
I've been playing around with the new multithreading features of Scala Native 0.5.0-RC1.
I already checked that I can get my game jam entries working with a dedicated audio thread, so now I wanted to play with something different.
I picked up my gopher client and made it async (nothing special, just wrapped the calls in Future(blocking(...))
and it works like a charm.
My dumb green phosphorus skin was actually pretty helpful to see that it's working .
It's a bit hard to see on the video, but if you look closely you'll see that there's a scan effect sweeping the screen from the top to the bottom, and it keeps running even while the page is loading.
New blog post: Deriving the Elm Architecture
https://purplekingdomgames.com/blog/2024/03/05/deriving-the-elm-architecture
I've been playing around with Scala Native 0.5.0-RC1 this weekend.
Originally I was hyped for the multithreading, but now I want that sweet compilation speed. Some of my projects are compiling in ~1/4 of a time on a full build.
This is going to make debugging performance issues so much better.
This was quite the Heisenbug: https://github.com/JD557/minart/pull/474
Some sound files were corrupted, but only when loaded from the Java resources on a specific application. When I loaded them on unit tests or Scala CLI scripts they would work fine. Even something as simple as loading them from a file (instead of a Java resource) would work .
Turns out sometimes InputStream.read(bytes)
does not read all the bytes (duh, that's why it returns the number of bytes read) and I was not handling that... not sure how I didn't hit this earlier .
Welcome @kubukoz as the next #Scalarconf speaker! 🚀
Foraging into embedded lands - (the path to) writing Playdate games with Scala
Grab your ticket
🛒https://sml.io/tickets
https://share.unison-lang.org/@pchiusano/orderator
is a new functional abstraction, the "orderator", which is a generalization of streams.
Like a stream, it's lazy and chains of operations fuse nicely. Unlike a stream, it also supports skipping ahead using logarithmic search.
This abstraction ends up being sufficient to express a large variety of join algorithms (inner and outer joins, foreign key joins... ), set operations (union, intersection, subtraction), and more.
The most amazing part is that chains of these operations fuse together nicely, yielding performance similar to a hand-rolled monolithic loop, but with highly-readable and modular code.
The @unison library for this worked out great, especially that we get to mix this abstraction with other effects.
cc @mpilquist you might enjoy this!
Here we have the great @davesmith00000 on an interview about game development with Scala.js
A bit of a weird post, but I just got a package in the mail and wanted to give a shout out to DragonBox's customer support.
I messed up a pre-order there (pro-tip: if you are moving countries, don't pre-order stuff to the country you are moving away from ) so I really needed an emergency address change to a different country.
They were not only quick and helpful, but also super nice.
Also, it feels really good to talk straight to a human instead of going through layers of chat bots and FAQs.
10/10 experience.
Not sure if this is a thing on other ActivityPub frontends, but one feature that I really like here (and wish Twitter had something similar) is being able to see my actor inbox as a timeline.
It's pretty much posts from people I follow (including comments) plus comments to their posts. In essence, a timeline with just a bit of serendipity from people I don't know.
It feels like a nice middle point between "new posts of people I know" and "top posts from complete strangers".
Today marks my last day in Berlin.
It was a fun little adventure, but all things must come to an end eventually.
It's never easy to say goodbye, but I can say that I'm excited for what comes next.
Just did a bunch of releases:
- Minart 0.6.0-M2: https://github.com/JD557/minart/releases/tag/v0.6.0-M2
- Interim 0.1.6: https://github.com/JD557/interim/releases/tag/v0.1.6
- Späti 0.1.1: https://github.com/JD557/spaeti/releases/tag/v0.1.1
It runs! Scala Native on the Playdate! #playdatedev #playdate
TIL that you can use Scastie with Scala JS and, if one of the expressions returns an Element
, it is rendered on the worksheet:
Quick example: https://scastie.scala-lang.org/toqnawY0QrKKwMDcHcAf2A
I need to work on the Minart APIs to make this use case a bit more ergonomic, but this looks pretty cool for demos.
I've been seeing a lot of discussions in Portugal regarding https://expresso.pt/sociedade/2024-01-11-Exodo-tem-um-impacto-brutal-30-dos-jovens-nascidos-em-Portugal-vivem-fora-do-pais-6b42d39c (article in PT - 30% of Portuguese aged between 15 and 39 are emigrants)
I was a bit curious about this, but apparently the study was not yet released and the closest thing I could find was https://diasporafordevelopment.eu/interactive-map/, which I'm not sure how up to date it is and doesn't seem to provide any tables.
So I just scrapped the data and generated a markdown table, in case someone is curious about this kind of stuff: https://gist.github.com/JD557/22ee5494ce99af696e1fda5747eef18e
That gist also provides the raw JSON data that I used and a #Scala CLI script to generate a CSV, in case you want to do some further analysis.
Ultraviolet 0.2.0 released
Our #Scala 3 to GLSL transpiler lib is up to date with Scala.js and has received a few minor improvements.
https://github.com/PurpleKingdomGames/ultraviolet/releases/tag/v0.2.0