text_garden's recent activity

  1. Comment on Do you prefer to 100% games, or to move on to new experiences? in ~games

    text_garden
    Link
    If I've done everything remotely worth my time in an AAA open world game only to end up with 173 collectible trinkets strewn about the landscape in such a way that finding them doesn't present the...

    If I've done everything remotely worth my time in an AAA open world game only to end up with 173 collectible trinkets strewn about the landscape in such a way that finding them doesn't present the slightest modicum of challenge to anything but my patience and tolerance of boredom, I'm probably going to quit the game.

    If on the other hand 100% means doing more of what makes the game fun in the first place, I'm more likely to play it all the way through.

    1 vote
  2. Comment on What programming/technical projects have you been working on? in ~comp

  3. Comment on What programming/technical projects have you been working on? in ~comp

    text_garden
    Link
    I made Snipping music. It's Steve Reich's Clapping Music, but performed by an ASCII crab snipping its claws. I implemented a small DSL, CrabML, for programming the rhythm patterns. As you can see,...

    I made Snipping music. It's Steve Reich's Clapping Music, but performed by an ASCII crab snipping its claws. I implemented a small DSL, CrabML, for programming the rhythm patterns. As you can see, you can write your own crab arrangements this way. The VM minus my stack implementation is only 62 LOC! The compiler is a bit bigger, but not much.

    I've mirrored the entire source code on Github. There are some other WebAssembly experiments inside. I think it might be a nice introduction for a systems programmer to WebAssembly, or for a web developer to systems programming. I only do fun stuff like interacting with a canvas or the audio API.

    4 votes
  4. Comment on Announcing web serial support in Firefox 151 in ~comp

    text_garden
    Link
    On one hand I think this is neat. On the other hand I'm already concerned with the absolutely massive attack surface of a modern web browser. An interesting workaround if you're implementing an...

    On one hand I think this is neat. On the other hand I'm already concerned with the absolutely massive attack surface of a modern web browser.

    An interesting workaround if you're implementing an USB gizmo and already have a use case for widely supported serial transfer to/from the browser is to implement the USB MIDI device class and use SysEx messages. That's already supported by the Web MIDI API, as far as I know in all major browsers.

    3 votes
  5. Comment on Save Point: A game deal roundup for the week of May 24 in ~games

    text_garden
    Link Parent
    I'm glad you told me, because it made me look into it again. Turns out I've neglected to keep my flatpak environment up to date, and both Heroic and the graphics drivers had pending updates after...

    I'm glad you told me, because it made me look into it again. Turns out I've neglected to keep my flatpak environment up to date, and both Heroic and the graphics drivers had pending updates after which it ran perfectly. Thanks!

    From my brief play it seems they really nailed it with this remaster. I'm more than a few levels into it with OpenLara so I'll probably finish TR1 that way, but I'll come back to this for TR2 and replays later.

    2 votes
  6. Comment on Save Point: A game deal roundup for the week of May 24 in ~games

    text_garden
    Link
    Tomb Raider I-III Remastered is free on Epic Store for a few more days. Unfortunately I couldn't get it to run in Linux (using Heroic), but I've been playing through the first game for the first...

    Tomb Raider I-III Remastered is free on Epic Store for a few more days. Unfortunately I couldn't get it to run in Linux (using Heroic), but I've been playing through the first game for the first time using OpenLara. It's like a 3D version of the first Prince of Persia, moresp than the actual 3D Prince of Persia games. It turns out I love it despite never really having bothered with it back in the day.

    4 votes
  7. Comment on List of environmental websites and YouTube channels to watch? in ~enviro

    text_garden
    Link
    I sometimes read Low-tech Magazine, mostly because I'm interested in the "forgotten" technology it covers.

    I sometimes read Low-tech Magazine, mostly because I'm interested in the "forgotten" technology it covers.

    1 vote
  8. Comment on ‘The Mandalorian and Grogu’ reviews mixed: “Boring and lifeless” vs. “best Star Wars in years” in ~movies

    text_garden
    Link Parent
    The Mandalorian is captured by bounty hunters on behalf of a Hutt crimelord and is frozen into a carbonite slab. Generations later, what looks like a Jawa merchant wanders into the Hutt palace....

    The Mandalorian is captured by bounty hunters on behalf of a Hutt crimelord and is frozen into a carbonite slab. Generations later, what looks like a Jawa merchant wanders into the Hutt palace. After a thermal detonator threat scene referencing episode VI, the merchant is able to sneak into the dungeon, where he takes his hood off. It is in fact adult baby Yoda, who has managed to track down his frozen guardian together with a rag-tag gang of scoundrels who only know of the Mandalorian by legend.

    He finds the Mandalorian in a pile of other carbonite slabs and carefully undoes the freezing process before he whispers to the now awake, but weak and blind Mandalorian: "Somehow still alive, the emperor is"

    4 votes
  9. Comment on What games have you been playing, and what's your opinion on them? in ~games

    text_garden
    Link
    Devil Spire Falls is an open world roleplaying sandbox set in a pretty bleak fantasy world. It's obviously inspired by the Elder Scrolls series, and some say King's Field (though I've never played...

    Devil Spire Falls is an open world roleplaying sandbox set in a pretty bleak fantasy world. It's obviously inspired by the Elder Scrolls series, and some say King's Field (though I've never played that). It looks and sounds almost impressively awful, but the sheer breadth of ways you can approach this game has kept me hooked for more than a few hours now. If Daggerfall is your thing you may enjoy this one as well.

    4 votes
  10. Comment on Which covers did it better than (or put a fresh twist on) the original? in ~music

  11. Comment on Is new music dying? Everyone’s flopping. in ~music

    text_garden
    Link Parent
    I used to use Last.fm a lot. These days I mostly go by networks, e.g. bases like "what other bands did this pianist play in?" and then preview stuff on YouTube.

    I used to use Last.fm a lot. These days I mostly go by networks, e.g. bases like "what other bands did this pianist play in?" and then preview stuff on YouTube.

    1 vote
  12. Comment on Interesting material types for fantasy resources/macguffins other than crystals or metals? in ~creative

    text_garden
    Link
    Dune uses the spice melange, a highly addictive drug which among other things enables humans to navigate in outer space without computers and is the source of Paul Atreides' prescience. Because...

    Dune uses the spice melange, a highly addictive drug which among other things enables humans to navigate in outer space without computers and is the source of Paul Atreides' prescience. Because it's essential to space travel (in a world that has banned the use of machines that think like humans) and only found on Arrakis, it's the cause of a lot of political scheming and basically the whole plot of the series.

    In the real world, mind altering substances have been used for religious rituals here and there to bring people closer to the truth, the gods or whatever. In a fantasy setting that could literally be the case.

    2 votes
  13. Comment on Our commitment to Windows quality in ~tech

    text_garden
    Link Parent
    Even Windows had that for at least 30 years.

    Linux had that for at least 30 years, but okay. It's nice getting it now.

    Even Windows had that for at least 30 years.

    4 votes
  14. Comment on What programming/technical projects have you been working on? in ~comp

    text_garden
    Link
    I solved the first severe bug in my music tool that was giving exactly one user gray hairs. Here's the change:...

    I solved the first severe bug in my music tool that was giving exactly one user gray hairs. Here's the change: https://github.com/boomlinde/pocketacid/commit/5bac2c98c03ed1ba89ef954d20d49c8b997e12a5

    For some context, in my tool, references to musical patterns are arranged in rows that users edit control the overall arrangement. At some point, I added the ability to additionally save snapshots to any row of patterns. Snapshots contain mixer settings, synth settings and so on, which will be recalled when the row is played back. So far so good. The feature is rock solid.

    At some later point, I decided to add more editing commands. Two of these were the ability to insert and delete arrangement rows. For the pattern references this is straight forward insert/delete in an array which is cheap because the columns are 256 pattern references each and each pattern reference is just a byte. But the snapshots are significantly larger and can't be moved around atomically. I solved this problem by adding a hidden indirection table: the snapshots column nor also just represents an array of references to snapshots, but you don't edit these directly. Instead, when you start the program, references to the patterns are laid out in the indirection table going from 0, 1, 2, 3...255, and only the references are rearranged when you delete/insert rows. Then when the pattern is saved the patterns are stored in the order of the indirection table. Again, this works perfectly. Absolutely rock solid, never had an issue.

    Finally, around new year, I added support for multiple project workspaces. Previously, the users could only work with one arrangement view and one set of patterns and snapshots. With this change, they could instead switch between different projects each representing an arrangement and sets of snapshots and patterns. I did this by wrapping what was then my main function in another function which would essentially run the old function with a given project file. When switching projects, I just change the file path, exit the "old main" and let the new main rerun it with the new path.

    The problem was that I don't reset the mapping table. I know that I looked at it and considered it at the time, but my conclusion was that I didn't need to, because the patterns would be loaded into the correct slots via the indirection table was regardless of how jumbled it was. This was the wrong assumption: the patterns were loaded linearly into the slots irrespective of the reference table, which was fine when the table was in its initial state, but not when it had been jumbled. Hence working on one project, inserting and deleting rows and then switching to another project would cause the snapshots to shift around as though the changes you made in the other project had been made to the current one.

    This last feature is not something I've used myself a lot, but was requested a user running out of space in the arrangement view. With his and my usage patterns, the issue never manifested. I simply didn't really use projects myself, and the user would fill one project and then switch only when he was running out, which hasn't happened a lot. But then a second power user started using projects in a way that made this bug a major pain in the ass for him.

    Meanwhile the user that reported the bug started debugging his own setup. Using different controllers (he'd had problems with one), switching computer (one was giving him bluescreens for other reasons)... It made it sound like the issue was maybe on his end and I let my guard down a little. But then it just struck me while I was on the bus that I should either reinitialize this table when switching between projects, or also load patterns via the indirection table.

    3 votes
  15. Comment on gb-recompiled - Translates Z80 assembly directly into modern C code in ~games

    text_garden
    Link Parent
    The discussion seems a bit abstract to me, given that we're discussing the Game Boy. The Game Boy's CPU isn't a Z80. It's a custom design, not even binary compatible with the Z80. "Z80" in the OP...

    The discussion seems a bit abstract to me, given that we're discussing the Game Boy. The Game Boy's CPU isn't a Z80. It's a custom design, not even binary compatible with the Z80.

    "Z80" in the OP link is a bit of a misnomer. That's fine if that's what the community decided to call it, but you shouldn't conflate the longevity of the Game Boy "Z80" with that of the Zilog Z80. I don't imagine the GB CPU was in production after the Game Boy.

    2 votes
  16. Comment on What programming/technical projects have you been working on? in ~comp

    text_garden
    Link
    I made a web-based fractal playground based on chaos games. It's the latest of a few experiments with WebAssembly and Zig. The code could be a nice read for someone who want to get started with...

    I made a web-based fractal playground based on chaos games. It's the latest of a few experiments with WebAssembly and Zig.

    The code could be a nice read for someone who want to get started with WebAssembly from first principles. There are a lot of tutorials and examples online that target rather heavy libraries and frameworks, but you can achieve a lot with simple parameter passing and sharing buffers. In addition to what you can see if you view the source of the page, there's the wasm module source code and build script.

    The module exports two statically allocated buffers for coordinates. It also exports the update function which fills these buffers with coordinates and returns the number of coordinates it added. On the JavaScript side I then loop over them and plot a point on an output canvas for each.

    I also save and load the parameters from the URL fragment, so if you find something nice you can link to it!

    5 votes
  17. Comment on Hot take: movies suck because there is no rental market in ~movies

    text_garden
    Link Parent
    I imagine that the industry now also has much better means of achieving that than ever before. The shift to streaming means much more granular data on what does and doesn't appeal to people, and...

    I imagine that the industry now also has much better means of achieving that than ever before. The shift to streaming means much more granular data on what does and doesn't appeal to people, and social meda provides an insanely quick way to both register and disseminate sentiment. You can manufacture hype, you can react quickly to lackluster response and after the fact you can evaluate whether mass appeal was achieved at an unprecedentedly granular level, taking that info with you to the next production.

    One of my favorite examples of how the movie industry is reactive to social media is that there was a Sonic the Hedgehog movie where at some point late in production his eyes had been made relatively tiny compared to those of the original video game character. Fans of the franchise, not exactly known for their lack of attention to details regarding the character, were angered and made that known within minutes of the release of the first trailer or so. The studio eventually responded by redoing the character which IIRC pushed the release back much further.

    Of course, this was more appealing to the fans. But I still want to see the beady-eyes cut of the Sonic movie. And Super Mario Bros (1993) is a much more fun movie than the new one.

    1 vote
  18. Comment on In a blind test, audiophiles couldn't tell the difference between audio signals sent through copper wire, a banana, or wet mud in ~tech

    text_garden
    Link Parent
    Sibilance is something you should hear whenever an s is pronounced for that sound to be legible at all. The problem is rather that it places a lot of energy around 6-9 kHz and comes across as...

    Sibilance is not something you should be hearing in a professionally mixed song...

    Sibilance is something you should hear whenever an s is pronounced for that sound to be legible at all. The problem is rather that it places a lot of energy around 6-9 kHz and comes across as louder than lower frequency sounds when you sing directly into a microphone. But it's not something you shouldn't be hearing, at least if you want sibilant consonants to be audible, just something that should be relatively lower in the mix than it is on the original microphone recording, if you want a pleasant sound.

    12 votes
  19. Comment on What games have you been playing, and what's your opinion on them? in ~games

    text_garden
    Link
    I've spent a shameful amount of time playing Fuel. It's an open world racing game from 2009, known for it's very large map. Apparently it's 14,400km² in size, though largely empty except for an...

    I've spent a shameful amount of time playing Fuel. It's an open world racing game from 2009, known for it's very large map. Apparently it's 14,400km² in size, though largely empty except for an absolutely absurd road network tens of thousands of kilometers of winding roads going nowhere. You can ignore most of the map and open world if you like, and directly accept races and challenges from a menu system. Winning races unlocks new camps around the world, which function as hubs for more races.

    The novelty of just driving around the map was enough to keep me interested until the racing mechanics started to grow on me. It's not realistic in any way, but you need a certain finesse when it comes to exploiting shortcuts and executing sharp turns, which is necessary to win some races at the highest difficulty.

    At its best, its races make really good use of its map: a lot of freedom in picking a route and long distances covered. At worst it's extremely frustrating, though I don't think I've played a racing game that isn't at times. Usually this is in circuit races.

    One point of criticism with a world this large is of course that the surroundings can get quite repetitive. There are a lot of different, clearly distinct areas of the map, but they're all so, so large. At the same time, the maps are littered with instances of models of a few handfuls of buildings, abandoned cars, broken wind turbines and so on which I don't think offer enough variety to fully support the illusion of a large world.

    Another is that it's very unpolished in some senses. One thing that comes to mind is hitboxes around things which will stop your car dead if you hit them. They're often bigger than they look. Good news is that with not that many objects and after a few hours you get a good sense of how big the hitboxes are.

  20. Comment on What programming/technical projects have you been working on? in ~comp

    text_garden
    Link
    I extracted the audio of all episodes of Star Trek: TNG. I'd realized two things: TNG is very audio-only friendly and I know it well enough that I can usually fill in the blanks where it isn't....

    I extracted the audio of all episodes of Star Trek: TNG. I'd realized two things: TNG is very audio-only friendly and I know it well enough that I can usually fill in the blanks where it isn't.

    From my source video files, this turned out to be ~11 GB of ~150-200 kbit/s AAC. Sadly, this would not fit on my phone along with the music I have there. I ended up reading about Opus which seemed ideal for this use case. I did an initial test at 48 kbit/s VBR and was impressed with the performance. I re-encoded all of it overnight, getting 2.7G of Opus files. All the dialog is clear and legible, there are no overt artifacts in the background sounds and sound effects. The only place I really noticed a slight degradation was in the theme song, though I imagine the problem is similar for other full arrangements of music.

    I also experimented a bit with WebAssembly and browser Worklets. It was very easy to build a WebAssembly module using Zig. It can then be built in the main Javascript thread in the browser, but the worklet has to instantiate it. In my case, I created an AudioWorklet that calls into the WebAssembly module to fill the buffer. I started with a basic sine wave tone generator but then combined a few libraries I've made to play back a piano MIDI file using a simple synth. I'd like to experiment with passing messages between the main thread and the worklet thread next, to possibly control the synthesis parameters.

    Finally I added support for multiple projects in Pocket Acid, my software groovebox. Previously, everything about it was contained in one file which was limited to 256 pattern arrangement steps. I though this would be enough for a while but a friend who has been using it a lot let me know that he was running out. Now I've added a screen where you can select one out of 256 such projects arranged in a 16x16 grid. I mostly use this spatial grid representation to avoid text input, which I personally think is rarely fun with a gamepad.