Long time no see
Ughh, that's been a while. I'm currently dealing with a lot of things at once so I figured: Why shouldn't I start to write about them again? So here we go
School - HEG - Writing a small server in Rust
Since one of the rather fun parts of the book we all grew to love so much is the chapter which explains how to write your own web server I thought that this might be a cool new intermediate goal for the "all-day program". So last week we already started with programming a simple app in plain rust. That is in rust without using a framework or library. To be more specific, we implemented the guessing game.
This week we started to explore the HTTP protocol in a very simple form. We
took a look at all the possible methods that are there by using the very
excellet playground site
https://petstore.swagger.io/. In a playful way
we discovered GET
and POST
requests and could look at the responses that
were coming back. In the end of the unit, we then went over to the rust side of
things and discussed how to do a simple GET
request with reqwest
and
tokio
in rust and what async
means in a nutshell.
progress on the geo
PRs
Currently I'm working on an alternative approach to geometric boolean
operations in the geo
rust library. Although the current implementation that
already existed beforehand is way faster, it has one flaw: Due to floating
point precision issues all of the operations might panic in certain situations.
To make things worse: There's no real way of refactoring the algo into a
variation that returns a Result
since the panic is happening in an
implementation of PartialOrd
which is required by the algorithm to work
(since it does some sorting at some point). And as if that isn't enough already
there's yet another problem: In certain other sitatuions you can't even work
around that problem by catching the panic with catch_unwind
. Unfortunately
one of those scenarios is any WASM app. That means if the app panics due to the
faulty boolops, all your progress might be lost in the browser app which is a
big nono.
And that's basically pretty much the motivation for all of the PRs I'm making. The new approach just triangulates the combined geometries of the geometric objects that should be boolop-ed and then selects the triangles that fit the current operation (union, difference, intersection) and stitches them together again. Currently we're close to merging part 2/3 of the algo which is the stitching algo
And here's a link to it: https://github.com/georust/geo/pull/1087
Btw here's a small demo of the new algorithm which let's you try to break it. It also shows the triangulation in a nice way
https://aviac.dev/is-geo-boolops-still-broken/
VoiDD and the forgejo CLI folks
I'm very happy to announce the small organization
VoiDD I'm a part of. Earlier this year noth
contacted me and picked up some work on the codeberg/forgejo CLI tool I
originally authored. Sometime last year I put it into an organization (VoiDD)
to not own it single handedly. His enthusiasm sparked my joy to work on it
again and I also invited tranzystorekk who has been working with me on the
predecessor version of the tool. We renamed the tool to
fjo, which is supposed to be the equivalent
to what gh
is for g*thub. While working on it I explored the idea of
automatically checking whether the forgejo api had changed via tests and also
thought about auto generating API types for forgejo in rust via
a spec which floats around on the official forgejo page
. Funnily a week after that tranzystorekk noted that there's already somebody
else who's doing that exact same thing. This is how Cyborus joined the crew.
I'm looking forward on creating cool tooling with all of you and I'm very
thankful that we all found together and have such enjoyable discussion.
Bevy primitives gizmo rendering
Another long time PR that I've almost finished is the bevy PR that is concerned with enabling the user to render all the new math primitives with gizmos. Unfortunately I got kind of stuck with lifetime issues after the refactor following the latest review suggestion there.
Here's a link to it: https://github.com/bevyengine/bevy/pull/11072
I'm not really sure how to proceed there. Let's just ask for help.
Working on a secret bevy drawer app
I can't reveal anything yet but currently I'm working on a drawing app in bevy, very much inspired by the very cool posts from Freya Holmér.
So far it has been rather easy to implement the basics in bevy, that is:
- Mostly camera movement relative to a working plane (currently just the XY plane)
- The beginning of an implementation of half edge graphs directly in the bevy ECS.
To expand my general graph knowledge a bit I'm also reading some introductory math paper booky thing. That has been pretty enjoyable as well, but yeah every math book starts out easy until later where you need a lot of brain power to make any meaningful progress.
I'll reveal parts of it pretty soon.