Janis Jansen ๐ŸŒณ's Avatar

Janis Jansen ๐ŸŒณ

@janis.me.bsky.social

Putting things on websites you didn't know could be on websites. Like fluid simulations or CAD software. Also conversational AI agents at cognigy.ai. Currently working on surimi.dev (pre-alpha) ๐Ÿ”— janis.me ๐Ÿ–ฅ๏ธ github.com/janis-me ๐Ÿ“ฝ๏ธ youtube.com/@janis-me

50 Followers  |  216 Following  |  243 Posts  |  Joined: 27.03.2025  |  2.2082

Latest posts by janis.me on Bluesky

The game Metroid Fusion (the best Metroid game) and a Wii remote.

The game Metroid Fusion (the best Metroid game) and a Wii remote.

You can't stop me from playing Metroid Fusion on a GBA emulator on my modded Wii.

I do own a computer and I do own several other consoles. But this is the way you are supposed to play GBA games.

04.11.2025 16:14 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Crazy how consistent that is! My three user apps could never.

04.11.2025 07:18 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Preview
Should we remove XSLT from the web platform? ยท Issue #11523 ยท whatwg/html What is the issue with the HTML Standard? XSLT v1.0, which all browsers adhere to, was standardized in 1999. In the meantime, XSLT has evolved to v2.0 and v3.0, adding features, and growing apart f...

And also
github.com/whatwg/html/...

01.11.2025 15:49 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Intent to Deprecate and Remove: Deprecate and remove XSLT

I didn't even know browsers support it at runtime?? Thought it needed to be processed beforehand.

For people like me who need to read up, here is a discussion on the deprecation in blink
groups.google.com/a/chromium.o...

01.11.2025 15:47 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

"This is a classical issue when <some activity Claude absolutely has no clue about AT ALL"

31.10.2025 13:23 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Awesome, great to know!

The part I felt was "dirty" was me writing some regex which might or might not work. As soon as I write regexes, I feel like I shouldn't have. But providing paths like you mentioned feels better :)

28.10.2025 10:10 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Okay sorry for the spam, but I'm stupid. You can filter by regex.
`-regexp:/(src|node_modules|@vite)` kinda hides all these requests in a very dirty way.

28.10.2025 06:43 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

(I tried to just set a custom response header like "Vite-hide-request", but they're not added to all responses)

28.10.2025 06:37 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

Though I feel like that's something other people already have figured out? @jakearchibald.com maybe you know how to get rid of unwanted dev server requests in the network panel, for example requests for @vite.dev modules.

You can filter by domain and negate, but that would hide too many

28.10.2025 06:34 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

In Firefox, if you could filter network requests based on path/file.. you could negate the filter and exclude all requests from the vite dev server.

I think that's something we need. Vite module requests always spam the network panel.

28.10.2025 06:32 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

"... and that concludes our guide to using the ECMAScript language effectively.

Now, forget everything you just read and let's talk about nodejs."

26.10.2025 17:43 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

I also hate that you can use either asterisks, dashes OR underscores to make horizontal lines.

We recently needed to adjust how we parse markdown because we had messages that were "censored" with asterisks, which were interpreted as lines.

26.10.2025 17:23 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

It's like working with a technology for 10 years and then learning in random bluesky comments, that you always used a part of it fundamentally wrong without noticing.

The amount of specs, exceptions and precautions to ensure compatibility and graceful handling is just insane.

26.10.2025 17:18 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

Wow. For some reason I never realized vitest used chai. Makes absolute sense, but I always assumed vitest built its own assertions with a chai-like API.

Anyways, great to hear about the improvements!

26.10.2025 17:14 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Hm yeah might be. I did struggle especially with audio as soon as I wanted something non-standard. Like low level audio device access for DAWs, or getting my shitty audio card to work. But it was fun in a weird way.

24.10.2025 08:16 โ€” ๐Ÿ‘ 4    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Screenshot of a GitHub PR summary, showing:
162 Files changed, +11.691 additions, -2.682 deletions and 24 commits

Screenshot of a GitHub PR summary, showing: 162 Files changed, +11.691 additions, -2.682 deletions and 24 commits

We're getting there! Was a very productive week.

23.10.2025 20:14 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

I mean sure you can figure it out. And once it's set up fully, it's super awesome.

But I already don't want to deal with, idk, audio tool chains and graphics drivers etc. on mainstream Linux, let alone on nixOS.

23.10.2025 20:08 โ€” ๐Ÿ‘ 16    ๐Ÿ” 0    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0
Preview
Yggdrasil Web site: sunsite.unc.edu/Sep-29-1996/docs/distributions/yggdrasil/announcement (not active) Origin: USA Category: Desktop Desktop environment: GUI ? Architecture: x86 Based on: Independent Wikipediaโ€ฆ

Not gonna lie, I'm this ๐Ÿค close to diving down the "Yggdrasil Linux" rabbit hole. But I will resist. Can recommend the Wikipedia entry and this post though.

archiveos.org/yggdrasil/

23.10.2025 20:03 โ€” ๐Ÿ‘ 30    ๐Ÿ” 0    ๐Ÿ’ฌ 3    ๐Ÿ“Œ 0

"What Linux distro are you using?"
"I'm rocking plug-and-play Linux"

23.10.2025 19:58 โ€” ๐Ÿ‘ 45    ๐Ÿ” 1    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0

It's simple for a developer with 15 years of Linux experience. Difficult for the remaining 8.1 billion.

23.10.2025 19:56 โ€” ๐Ÿ‘ 52    ๐Ÿ” 0    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0

Let an LLM write some code. Then write like 100 tests but still don't trust the code.

- coding in 2025

23.10.2025 11:22 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Wow. fully forgot I pre-ordered that. Congratulations to all of us then!

23.10.2025 11:12 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

I think more people should

22.10.2025 04:45 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

(that's excluding all media query level 5 ones btw, they're even more that I will hide behind a flag because of browser support)

20.10.2025 13:12 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
  | `-webkit-${string}`
  | `-moz-${string}`
  | `-ms-${string}`
  | `-o-${string}`
  | `-khtml-${string}`
  | `-apple-${string}`
  | `-x-moz-${string}`;

| `-webkit-${string}` | `-moz-${string}` | `-ms-${string}` | `-o-${string}` | `-khtml-${string}` | `-apple-${string}` | `-x-moz-${string}`;

Speaking of Vendor prefixes. These are the ones I found so far

Stopping with the "spam" now :) sorry

19.10.2025 13:04 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
":dir" | ":has" | ":host" | ":host-context" | ":is" | ":lang" | ":not" | ":nth-child" | ":nth-last-child" | ":nth-last-of-type" | ":nth-of-type" | ":where" | ":active" | ":any-link" | ":blank" | ":checked" | ":current" | ":default" | ":defined" | ":disabled" | ":empty" | ":enabled" | ":first" | ":first-child" | ":first-of-type" | ":focus" | ":focus-visible" | ":focus-within" | ":fullscreen" | ":future" | ":hover" | ":in-range" | ":indeterminate" | ":invalid" | ":last-child" | ":last-of-type" | ":left" | ":link" | ":local-link" | ":nth-col" | ... 21 more ... | ":visited"

":dir" | ":has" | ":host" | ":host-context" | ":is" | ":lang" | ":not" | ":nth-child" | ":nth-last-child" | ":nth-last-of-type" | ":nth-of-type" | ":where" | ":active" | ":any-link" | ":blank" | ":checked" | ":current" | ":default" | ":defined" | ":disabled" | ":empty" | ":enabled" | ":first" | ":first-child" | ":first-of-type" | ":focus" | ":focus-visible" | ":focus-within" | ":fullscreen" | ":future" | ":hover" | ":in-range" | ":indeterminate" | ":invalid" | ":last-child" | ":last-of-type" | ":left" | ":link" | ":local-link" | ":nth-col" | ... 21 more ... | ":visited"

"::cue" | "::cue-region" | "::part" | "::slotted" | "::view-transition-group" | "::view-transition-image-pair" | "::view-transition-new" | "::view-transition-old" | "::after" | "::backdrop" | "::before" | "::first-letter" | "::first-line" | "::grammar-error" | "::marker" | "::placeholder" | "::selection" | "::spelling-error" | "::target-text" | "::view-transition"

"::cue" | "::cue-region" | "::part" | "::slotted" | "::view-transition-group" | "::view-transition-image-pair" | "::view-transition-new" | "::view-transition-old" | "::after" | "::backdrop" | "::before" | "::first-letter" | "::first-line" | "::grammar-error" | "::marker" | "::placeholder" | "::selection" | "::spelling-error" | "::target-text" | "::view-transition"

I also got one for (I hope) every single pseudo class and pseudo element!

There are some edge-cases though. like `:matches()`. And it excludes vendor-prefixed ones. Couldn't be bothered.

19.10.2025 13:00 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0
Here you go. All 40 of them:
'any-hover',  'any-pointer',  'color-gamut',  'grid',  'hover',  'overflow-block',  'overflow-inline',  'pointer',  'scan',  'update',  'aspect-ratio',  'color',  'color-index',  'device-aspect-ratio',  'device-height',  'device-width',  'height',  'monochrome',  'resolution',  'width',  'max-aspect-ratio',  'max-color',  'max-color-index',  'max-device-aspect-ratio',  'max-device-height',  'max-device-width',  'max-height',  'max-monochrome',  'max-resolution',  'max-width',  'min-aspect-ratio',  'min-color',  'min-color-index',  'min-device-aspect-ratio',  'min-device-height',  'min-device-width',  'min-height',  'min-monochrome',  'min-resolution',  'min-width'

Here you go. All 40 of them: 'any-hover', 'any-pointer', 'color-gamut', 'grid', 'hover', 'overflow-block', 'overflow-inline', 'pointer', 'scan', 'update', 'aspect-ratio', 'color', 'color-index', 'device-aspect-ratio', 'device-height', 'device-width', 'height', 'monochrome', 'resolution', 'width', 'max-aspect-ratio', 'max-color', 'max-color-index', 'max-device-aspect-ratio', 'max-device-height', 'max-device-width', 'max-height', 'max-monochrome', 'max-resolution', 'max-width', 'min-aspect-ratio', 'min-color', 'min-color-index', 'min-device-aspect-ratio', 'min-device-height', 'min-device-width', 'min-height', 'min-monochrome', 'min-resolution', 'min-width'

I'm learning so much more about CSS by building surimi (because I am forced to read the CSS specification).

For example, just wrote some types to figure out all possible @media query descriptors you can use.

It's 40 in total

19.10.2025 12:55 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0

Is the part you've already done open source? ๐ŸŒš

19.10.2025 08:49 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

Awesome! Have fun :)

18.10.2025 04:37 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image Post image

I'm in a deep `extends...infer` typescript hole again. And it's just awesome. Getting a lot done today!

17.10.2025 20:46 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

@janis.me is following 20 prominent accounts