What's everybody working on? (July Edition)

I’m not sure what you’re using for drawing your diagrams but they look good :+1:

A long time ago I was using a LaTeX package to draw optical layouts for laser systems, which is objectively a bonkers thing to do. This lead to possibly the most niche question I have ever asked on the internet: https://tex.stackexchange.com/q/204266

2 Likes

Any reason you don’t just use Debian on your desktop; installed side-by-side with Windows; or via USB?

Or, why use Windows at all?

1 Like

I have to have at least 1 windows computer in my house because that’s the only way I can support a lot of mechanical engineering software (CAD…).

Plus I’m in that situation that a lot of us adults are in, where you don’t have a lot of free time for gaming, and when you do want to game there’s updates etc. So it needs to “just work” with minimal fuss otherwise it will steal time from me if I need to administer it / learn something.

Gets to be that way for a lot of things, I want everything that is not a hobby interest to “just work” and require zero administration (hence Debian, hence windows desktop, hence laziness in the face of time constraints). Running out of space in the brain to learn more things.

I am working on Meioziz, a tiny self-hosted event stats server for my apps and games.

I got tired of analytics SDKs causing dependency conflicts and warnings in my Flutter and Swift projects. And I’m concerned about what and for who these SDKs are really collecting. I think indie developers know the pain.

I would like to know which features people actually use, that’s why built an event aggregator that is enough for me.
It’s Zig + SQLite, uses about 3 MB of RAM in my setup. It’s now running in production on a small shared server.

I was really pleased to see it handling 16K POST requests per second on my mac. No keep-alive, WAL enabled.

Document Path:          /v1/event
Concurrency Level:      8
Time taken for tests:   6.240 seconds
Complete requests:      100000
Failed requests:        0
Total transferred:      6500000 bytes
Total body sent:        18700000
Requests per second:    16024.83 [#/sec] (mean)
Time per request:       0.499 [ms] (mean)

Another joy: ReleaseSmall binary for Linux is only 1,2 Mb. Though I’m using ReleaseSafe, ~12 Mb.
Not-so-joy: DB migrations, HTML templates, url- and form encoded strings.

Here is a screenshot of a dashboard for the app:

2 Likes

Hmm. Isn’t there CAD in Linux world? CAELinux? Eagle CAD?

Thank you for this monthly update thread format. This might be the only thing that could push me to continue to work on my projects. Something to genuinely look forward to. Because seeing so many passionate people working on mindblowing projects get me excited and hopeful.

So, some updates on What's everybody working on? - #178 by sohro_desu.

I learned many things. The main one being that I need to learn more.

Specifically, 3D graphics. So I went ahead and started with Vulkan. Because what was I doing is software rendering, relying only on CPU. It’s not that bad, AzPainter does that. But I won’t do that, no way in hell. I need to offload as many work to GPU as possible, leaving the absolute minimum to CPU. Any GPU has thousands of cores for this specific computing, even on low-end ones.

I don’t want lags, I don’t want my device to melt.

Here’s how the progress might look like from someone who have many jobs for living not related to programming at all :smiling_face_with_tear:

There’s a bonus at the end of the video.


Moving forward, I want to solidify my understanding about Vulkan and 3D graphics. Then continue to work on my minimalistic UI layout+drawing module that uses Vulkan.

Then brush engine, layers, etc. I don’t even know what’s waiting for me, I’ll see when I see it.

I’m extremely thankful that even someone like me can do stuff like this with all these publicly available guides, tutorials, tooling, great programming language, everything that is made available for us to use for free.

17 Likes

Very good idea. I’ve started to learn Zig two months ago. Unfortunately, I don’t have a lot of free time, so l progress bit by bit.
I use ziggling project to learn the language rules through real problems, and also I develop a RPG game that I used to play with my brother as kids.
I enjoy the language, even if it’s challenging when you come from a higher language.

2 Likes

It tickles me that you celebrated doing something that would have taken me 10 minutes (drawing a few rectangles) by doing something that would have taken me 10 years (drawing a sketch at that level of quality)

13 Likes

oh no you got it wrong :sob: this took me only a day. 3-4 hours maybe, from watching this great video https://youtu.be/by9lQvpvMIc to implement not even half of it

my bad for vague posting it like that :rofl:

And that sketch is so poop I drew in 10 or so minutes, on the debug run of the app, no proper eraser, no ctrl+z, nothing ,_,

1 Like

I’ll mirror everyone else - a monthly update is a much better format. Thanks for this!

It’s pushed me to find the courage to make my work in progress public - Flyt. It’s a full re-write of GameMode in Zig, or it will be once I get to filling in the rest of the functionality. Flyt currently supports the same basic feature-set I wrote in GameMode way back in 0.1, so that feels like a milestone worth celebrating.

Many parts are “just for fun” and have gone through substantial re-writes while I experiment with Zig features. I’ve been loving feeling out using various bits using whatever Zig I discover, seeing how the implementation settles in, and then applying what I’ve learned to delete most of it and re-write so much better than before.

Happy to take feedback on any bits :slight_smile:

3 Likes

I’ve been working on an NTPv 4 RFC compliant implementation for work. We have a distributed simulator that needs a high degree of time synchronization and while implementing it from scratch is about as necessary as milk in coffee, in this era of having everything done by AI agent, it feels great to take the time to make something great, from scratch, with nothing but an RFC + zig build std + man pages. So far i’ve implemented the server,client,broadcast, leveraging the superb IO. It can resolves more than 800 servers concurrently, the byzantine selection works great, and it’s been really fun to learn. The reason I’m making one from scratch, it’s mainly to learn, and because I need something that can literally compile anywhere.

6 Likes

Whoa! I didn’t know this was a thing. I’ll have a demo ready by next month… but the project I’m working on is tentatively called raylib-zig-assets. The goal of the project is to allow game Dev’s using raylib-zig library to work with their external assets at scale.

There are three features worth automating in this space that will allow developers to move faster with less errors.

First is importing assets using generated enumerations. Which allows static analysis tools to enforce correctness.

Secondly, caching of assets. Calling load does not do any file I/O as long as an asset is already loaded.

For example, this asset:

assets/player/skin.png

Is imported like so:

const Assets = @import(“assets”).io;

const skin = Assets.textures.load(.player_skin);
defer Assets.textures.unload(.player_skin);

_ = Assets.textures.load(.player_skin); // No file IO.

Thirdly, depending on the IO implementation that the user provides, file IO is done in a worker thread. This prevents the game loop from stalling.

const Assets = @import(“assets”).io;

var handle = Assets.animations.loadConcurrent(.player_attack);

// later…

const anim = if (handle.status() == .success) Assets.animations.load(.player_attack) else null;

// successful load concurrent puts the desired asset into cache, calling load pulls from the cache directly without bogging down the main thread with large file IO operations.

It’s all still WIP. Trying to get codegen working reliably at the moment.

11 Likes

It’s so cool to see what everyone is working on. :high_voltage:
In my case I have nothing super complex or as interesting, just a small .env parser but it works great and I have learned a lot working on it.

5 Likes

Hi everyone!

I have been working on my first ever contributions to free and open source software, more specifically to GCC, as lately I’ve had a big interest in CPU microarchitecture-aware performance analysis and optimizations and the compilers space has drawn me because of that, and I love the idea of giving back to the community and to such an influential project. Already got some patches accepted. I’m also interested greatly in Zig, though I am yet to start learning and using it, I’ve watched some Zig talks and I have immense support for the language and the movement behind it.

Other than that, I recently started a new pet project of mine - creating a small compiled programming language by myself with C++, without using helping hands like LLVM. The language is so early in development that it doesn’t even have IF-conditions and loops yet, and just the frontend (going from source code to an array of tokens and then to an AST) is already over a thousand lines of C++. Using this project to learn advanced C++, already had a meaningful usecase for, and thus an opportunity to learn move semantics. The plan is to write an SSA IR emitting pass, then an x86_64 assembly code generator, then slowly implement compiler optimizations, like register allocation and various IR-level passes like common subexpression elimination, all while hopefully learning C++ and CPU microarchitecture-aware performance analysis to a more advanced level.

Glad to see the Zig community going strong and what others here are working on.

3 Likes

Hey all! I’ve finally gotten around to writing a devlog for my Ziggy game + game engine of three years.

Shameless self-plug, for anyone interested :stuck_out_tongue:

As that’s a bit light on technical details, some of the more Zig relevant parts:

  • I was able to get DLL-style hot-reloading working. I can make a code change, have it automatically picked up by Zig incremental compilation, and it’ll be applied while the game is running. The usual limitations of game struct changes apply but it’s great for e.g. adjusting movement parameters.
  • I wrote a proper editor for my game using zgui (ImGui wrapper library). It supports Blender-style transform/rotation/scale using hotkeys and mouse movements.
  • On that note, zgui is awesome and really pleasant to use. Because state is stored in a big hashmap, it actually works with hot reloading (TIL!)

A couple recent screenshots:

As always, love these threads. It’s great to see all the exciting things people are doing.

21 Likes

Just for fun, I’ve been building a toy browser using DVUI and superhtml.

19 Likes

“won’t be big and professional like Servo or Ladybird”[1] *nudge, nudge* :winking_face_with_tongue:


  1. “Hello everybody out there using minix - I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones.” — Linus Torvalds, 1991 ↩︎

4 Likes

My problem is I have way too many project ideas and very little time to actually work on any of them. It would be cool though.

1 Like

I’ve been working on a learning project: A video editor / colour grading app, with my own crudely made immediate mode ui, its been a great struggle but lots of fun to get playback working properly/ smoothly.

It targets MacOS via Metal and Video toolbox and Linux via Vulkan / GPU Decode and FFmpeg 8.1.

Still very early days, but you can move clips around on the timeline, make edits, select and play sources in the source viewer, make to the frame feedback comments, zoom in and pan on the viewers.

I’ve been kind of following the PostgreSQL architecture of DaVinci Resolve so everything is hydrated from the DB, persists to the DB.

Next will be some initial colour grading controls! :slight_smile:

10 Likes

I’ve been doing this too, it’s been a fun learning experience. It’s not something I would have thought of to do on my own without someone suggesting the idea to me (the concept of immediate mode guis in general).

2 Likes