Jonathan Tron's Avatar

Jonathan Tron

@jonathan.tron.name

web, mobile and games dev (@games.openhood.com) owner @ openhood.com (dev/ops consulting specialized in Rails and Elixir) France πŸ‡«πŸ‡· / Luxembourg πŸ‡±πŸ‡Ί

505
Followers
288
Following
12
Posts
24.09.2024
Joined
Posts Following

Latest posts by Jonathan Tron @jonathan.tron.name

Preview
No Graphics API β€” Sebastian Aaltonen Graphics APIs and shader languages have significantly increased in complexity over the past decade. It’s time to start discussing how to strip down the abstractions to simplify development, improve pe...

My "No Graphics API" blog post is live! Please repost :)
www.sebastianaaltonen.com/blog/no-grap...

I spend 1.5 years doing this. Full rewrite last summer and another partial rewrite last month. As Hemingway said: "First draft of everything is always shit".

16.12.2025 18:51 πŸ‘ 466 πŸ” 191 πŸ’¬ 19 πŸ“Œ 12
Screenshot of a dark futuristic UI with glowing neon blue and red accents, showcasing sci-fi styled panels for sales, subscriptions, calendar, and fitness goals with sleek charts and buttons.

Screenshot of a dark futuristic UI with glowing neon blue and red accents, showcasing sci-fi styled panels for sales, subscriptions, calendar, and fitness goals with sleek charts and buttons.

Tired of liquid glass already? Meet cosmic UI, a fun set of futuristic very components, with a cyberpunk look and feel.
(to be clear, they have many accessibility issues, this is more for inspiration and for the joy of having something fun than for using in actual projects)

www.cosmic-ui.com/

02.12.2025 08:30 πŸ‘ 17 πŸ” 4 πŸ’¬ 1 πŸ“Œ 0

Our GitHub repository is now public!

github.com/elixir-lang/...

28.08.2025 20:34 πŸ‘ 104 πŸ” 36 πŸ’¬ 0 πŸ“Œ 4
Preview
GitHub - alektron/imgui-odin-backends: A custom backend for 'Dear ImGui' written in Odin A custom backend for 'Dear ImGui' written in Odin. Contribute to alektron/imgui-odin-backends development by creating an account on GitHub.

I wrote a custom Dear ImGui backend for Windows/DirectX in Odin. With thin abstraction layer to allow easy extension for more platforms/renderers:
github.com/alektron/img...

#imgui #DearImGui #Odin #Odinlang

17.07.2025 07:01 πŸ‘ 2 πŸ” 1 πŸ’¬ 0 πŸ“Œ 2

I use ORMs when writing programs, raw SQL when doing analysis, debugging, or database admin.

The problem with raw SQL queries in code is that a) they don't compose well, and b) I still need to convert rows into objects somehow.

19.07.2025 14:06 πŸ‘ 7 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Preview
On Shaping Light: Real-Time Volumetric Lighting with Post-Processing and Raymarching for the Web - The Blog of Maxime Heckel A deep dive into Volumetric Lighting implemented via Post-Processing leveraging a custom shader with raymarching to create beautiful light and atmospheric effect for your React Three Fiber and Three.j...

πŸ“ New Blog Post πŸ“

I finally sat down to write about what I learned building a Volumetric Lighting effect for the web

In it, I detail how to blend raymarching with post-processing to create beautiful atmospheric light to elevate your next WebGL project

blog.maximeheckel.com/posts/shapin...

10.06.2025 15:12 πŸ‘ 39 πŸ” 12 πŸ’¬ 1 πŸ“Œ 1
Preview
News from WWDC25: WebKit in Safari 26 beta Welcome to WWDC25!

Looks like WebGPU will finally be available in Safari 26…

webkit.org/blog/16993/n...

09.06.2025 19:12 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Post image

odin-c-bindgen can now create constants from C macros

Pictured: Generated raylib bindings that bring along constants based on `#define`s in the C header. Also included: Code alignment and comments.

Thanks to xandaron for helping me implement this.

Check it out: github.com/karl-zylinsk...

10.05.2025 22:17 πŸ‘ 15 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
Load-store conflicts meshoptimizer implements several geometry compression algorithms that are designed to take advantage of redundancies common in mesh data and decompress quickly - targeting many gigabytes per second in...

New blog post! "Load store conflicts", in which we look at some performance sensitive code that has surprisingly dramatic performance swings based on the compiler and the microarchitecture used. Reposts appreciated!

zeux.io/2025/05/03/l...

04.05.2025 14:37 πŸ‘ 60 πŸ” 23 πŸ’¬ 1 πŸ“Œ 0
Four vector icons: a cream-coloured rabbit, green trees, a crimson bird with a white eye, and a silver cloud with raindrops in different shades of blue

Four vector icons: a cream-coloured rabbit, green trees, a crimson bird with a white eye, and a silver cloud with raindrops in different shades of blue

part a: a mix task that will traverse /assets/ (or anywhere else you point it) for svg images of any size and complexity, and merge them together into a sprite sheet in /priv/static/assets/.

➜ mix phoenix_svg_sprites
➜ [info] Successfully generated SVG sprite sheet at priv/static/assets/sprites.svg
the sprite sheet contains all of the processed svgs, stored as <symbol />s addressable by ids derived from the processed svg's filenames. bird.svg and rain.svg become:

<svg>
<symbol id="bird"><path d="m1154.3...
<symbol id="rain"><path d="m1047...
</svg>

part a: a mix task that will traverse /assets/ (or anywhere else you point it) for svg images of any size and complexity, and merge them together into a sprite sheet in /priv/static/assets/. ➜ mix phoenix_svg_sprites ➜ [info] Successfully generated SVG sprite sheet at priv/static/assets/sprites.svg the sprite sheet contains all of the processed svgs, stored as <symbol />s addressable by ids derived from the processed svg's filenames. bird.svg and rain.svg become: <svg> <symbol id="bird"><path d="m1154.3... <symbol id="rain"><path d="m1047... </svg>

part b: a phoenix component, <.sprite />, that will render the specified svg sprite in your heex template, the same way you might render a heroicon with core component's <.icon />.

the four example sprites at the top of this page are rendered with this code:

<.sprite icon="animal" class="animal" />
<.sprite icon="nature" class="nature" />
<.sprite icon="bird" class="bird" />
<.sprite icon="rain" class="rain" />
css classes are applied to the examples to allow for specific colour styling. however, an svg's internal fill, stroke, and other colour values will be preserved, and you can also use currentColor to colour your sprites dynamically through the text colour of a parent element.

default tailwind size classes are applied automatically, but you can apply arbitrary classes and other attributes as well.

part b: a phoenix component, <.sprite />, that will render the specified svg sprite in your heex template, the same way you might render a heroicon with core component's <.icon />. the four example sprites at the top of this page are rendered with this code: <.sprite icon="animal" class="animal" /> <.sprite icon="nature" class="nature" /> <.sprite icon="bird" class="bird" /> <.sprite icon="rain" class="rain" /> css classes are applied to the examples to allow for specific colour styling. however, an svg's internal fill, stroke, and other colour values will be preserved, and you can also use currentColor to colour your sprites dynamically through the text colour of a parent element. default tailwind size classes are applied automatically, but you can apply arbitrary classes and other attributes as well.

I just published my first Elixir + Phoenix LiveView package: Phoenix SVG Sprites!

Merge all of your SVG assets into one file, and display them individually, just like you do with <.icon />.

more info: www.argylewerewolf.com/code/sprites/
GitHub: github.com/ArgyleWerewo...

#Elixir #PhoenixLiveView

02.05.2025 16:47 πŸ‘ 35 πŸ” 7 πŸ’¬ 0 πŸ“Œ 0
Preview
GitHub - karl-zylinski/odin-handle-map: Map a handle (index + generation) to an item. Map a handle (index + generation) to an item. Contribute to karl-zylinski/odin-handle-map development by creating an account on GitHub.

Handles update: I've made a handle-based map that uses growing arenas for storing the items. This gives good performance while keeping the pointers stable.

Check it out: github.com/karl-zylinsk...

Web support (uses dynamic arena instead of virtual growing arena): zylinski.se/odin-handle-...

28.03.2025 14:05 πŸ‘ 7 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
"Handles are the better pointers": An Odin gamedev follow-up Background Andre Weissflog wrote an article in 2018 called β€œHandles are the better pointers”. In it he talks about how one can use handles instead of pointers when one wants to store permanent referen...

New blog post: zylinski.se/posts/handle...

This is my own personal follow-up to @flohofwoe.bsky.social's classic article "Handles are the better pointers"

25.03.2025 22:25 πŸ‘ 28 πŸ” 5 πŸ’¬ 1 πŸ“Œ 0

Hi Karl, I recently picked up Odin (and your book).
I'm interested in making games/apps and generally playing with graphics APIs (webgl / wgpu / vulkan / metal) on desktop and wasm (I got two PRs accepted this week for fixes in the "core:sys/wasm").
Feel free to add me to the list.

23.03.2025 09:05 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Prototype 03 - Fog of War Β· Openhood Prototype 03 with Fog of War, sounds, merchant, and hero

Prototype 03 released: playing with Fog of War, Merchant stall for new units, sound effects for battle and more.

Try it and tell us what you think.

games.openhood.com/2025/3/16/pr...

16.03.2025 12:47 πŸ‘ 0 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
bundler/inline for single-file ruby scripts Β· Openhood Openhood technical blog.

TIL: bundler/inline

It makes testing specific versions of gems in a single file and run it so easy. Highly recommended for creating reproducible test cases.

experiments.openhood.com/2025/3/4/rub...

05.03.2025 09:55 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Odin 7 Day Jam A game jam from 2025-03-08 to 2025-03-23 hosted by Karl Zylinski. Make a game in 7 days using the Odin Programming Language ! Ever wanted to make video games using a low-level programming language? Od...

Join my game jam if you:
- Want to learn game development
- Want to learn Odin or low-level programming

No prior knowledge required! You have 7 days to figure things out. You'll be able to make something!

No worries, no pressure. Just have fun!

Starts on March 8.

itch.io/jam/odin-7-d...

03.03.2025 16:56 πŸ‘ 10 πŸ” 5 πŸ’¬ 0 πŸ“Œ 0
How Clay's UI Layout Algorithm Works
How Clay's UI Layout Algorithm Works YouTube video by Nic Barker

What an incredible explanation of how to implement layout in UI!

www.youtube.com/watch?v=by9l...

02.03.2025 12:33 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Post image

Here comes the second prototype, iterating on the previous one we added a new archer, and tried to have working controls for keyboard/mouse, touch and controllers.

Play it on our blog: games.openhood.com/blog/2025/2/...

28.02.2025 21:04 πŸ‘ 0 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Release notes β€” fish-shell 4.0.0 documentation

Fish 4.0 just landed. From C++ to Rust transition is done!

#rust #rustlang #shell

fishshell.com/docs/current...

28.02.2025 04:57 πŸ‘ 20 πŸ” 6 πŸ’¬ 0 πŸ“Œ 0
A list of images being displayed in the new app I'm developing, zooming, filtering by name and picking color.

A list of images being displayed in the new app I'm developing, zooming, filtering by name and picking color.

New application window right after launch, with text explaining you have to drag and drop images or folders on it.

New application window right after launch, with text explaining you have to drag and drop images or folders on it.

I couldn't find a basic and fast assets viewer for browsing and searching our growing collection.

Godot 4.4-rc1 being just released, it was time to implement one.

It's so fun how versatile Godot can be.

Given how useful it is for us, I'm thinking of releasing it to more people.

23.02.2025 18:00 πŸ‘ 7 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Games Β· Openhood We're a small indie game studio from Luxembourg.

We decided to play with small prototypes, the first one is about some RTS melee movements. You can try it on games.openhood.com/blog/2025/2/...

20.02.2025 21:33 πŸ‘ 0 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0

Been reminded today that NIFs taking more than 1ms should be flag to run on "dirty schedulers" to not block regular #erlang / #elixirlang processes scheduling… and that is one macro away in Rustler: #[rustler::nif(schedule = "DirtyCpu")] for CPU intensive, "DirtyIo" for IO intensive functions

20.02.2025 21:30 πŸ‘ 7 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

Holy smokes this is awesome, a new debugger for Phoenix LiveView. Think React devtools, but not a chrome extension.

github.com/software-man...

#ElixirLang

07.02.2025 14:37 πŸ‘ 150 πŸ” 40 πŸ’¬ 5 πŸ“Œ 5
Preview
Pro v1.5 Releases Oban is a background job system built in Elixir and Postgres, and packed with enterprise grade features, real-time monitoring with Oban Web, and complex workflow management with Oban Pro.

✨ Oban Pro v1.5.0 is out!

🎨 Job Decorator
πŸ¦† Unified Migrations
πŸ¦„ Enhanced Unique
πŸͺ Improved Batches
πŸ”— Streamlined Chains
πŸ–‡οΈ Improved Workflows
πŸ‘­ Worker Aliases
🧰 Performance tuning and bug fixes

Generally available after six months of RCs. Read the full release notes: oban.pro/releases/pro...

28.01.2025 15:26 πŸ‘ 26 πŸ” 7 πŸ’¬ 0 πŸ“Œ 2
Video thumbnail

View a step-by-step playback of your feature test incl. JS console and network.
Powered by PhoenixTest + trace.playwright.dev
Great tool to debug feature test failures in CI.
#ElixirLang

15.12.2024 07:36 πŸ‘ 13 πŸ” 4 πŸ’¬ 1 πŸ“Œ 0
Preview
ruby-the-future-of-frozen-string-literals.md GitHub Gist: instantly share code, notes, and snippets.

On the topic of frozen string literals and Ruby 3.4, this post we wrote together with @byroot.bsky.social may be helpful to share again.

gist.github.com/fxn/bf4eed25...

13.12.2024 16:45 πŸ‘ 38 πŸ” 18 πŸ’¬ 1 πŸ“Œ 1
Rendering Tiny Glades With Entirely Too Much Ray Marching
Rendering Tiny Glades With Entirely Too Much Ray Marching YouTube video by Graphics Programming Conference

You just don't realize how much work goes in the rendering of such a beautiful game as #TinyGlade from @pouncelight.bsky.social until its creators explain the crazy journey to get there. Thanks @h3r2tic.bsky.social and @anopara.bsky.social for the presentation! www.youtube.com/watch?v=jusW...

07.12.2024 20:38 πŸ‘ 5 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Preview
GitHub - gp-pereira/refactorex: A VS Code extension for fast and reliable Elixir code refactoring. A VS Code extension for fast and reliable Elixir code refactoring. - gp-pereira/refactorex

This VSCode extension for #elixirlang refactoring looks amazing github.com/gp-pereira/r...

02.12.2024 19:15 πŸ‘ 14 πŸ” 2 πŸ’¬ 2 πŸ“Œ 0