odilf @odilf.com · 09/10/2026just deployed sorcery on my server git-archive.odilf.com it's so good. it's exactly what I wanted. it just works so well. bless ugit.t4t.associateschar/sorcerystatic-files based git repo viewer 010
Reposted by odilfmaya🌻 @maya.is.fckn.gay · 05/09/2026kayserifserif.place/posts/2026/h...kayserifserif.placeHandwritten code | Katherine Yang 0103
odilf @odilf.com · 15/07/2026I guess they could be even clearer that not only a free tier exists, but that Typst is open source and the typst web editor is the only closed part? But like, it does say that when scrolling down. I don't know, I'm just sad seeing all this unnecessary negativity. 081
odilf @odilf.com · 15/07/2026man it makes me so sad to see people pile on a really good open source product just because they don't understand that it _is_ open source. It almost seems that y'all want open source to be upheld by unpaid labor, software stuck in the 70s, or closed software? 1100
odilf @odilf.com · 07/07/2026but it's kind of inconvenient that the designer is kind of an asshole 🤠 020
odilf @odilf.com · 07/07/2026I saw Jai getting like 2s compiles for a huge game, which sounds like it would make iterations sooo much nicer. Also the metaprogramming approach it has is interesting 120
odilf @odilf.com · 20/04/2026Hmm, this sounds like something that you can do safely with bytemuck... (but not sure because I have not used bytemuck too much) 100
odilf @odilf.com · 07/08/2025It's funny that the assembly of the web is not really wasm, it's vanilla javascript. Like, both vanilla javascript and assembly are generally a compile target and most people don't write it by hand and it's hard to write by hand especially for big programs. And svelte is I guess like C? 050
odilf @odilf.com · 07/08/2025Trenitalia bingo, on my new blog (hand crafted with Rust, of course) www.odilf.com/blog/trenita...odilf.comDisclaimer: I have no idea what I'm talking about, none of this is fact checked. 030
odilf @odilf.com · 06/08/2025I was thinking Java for gluttony and Python for sloth. Also maybe PHP for greed (bc of $vars) and Js could be envy since it has basically nothing to do with java and they chose it to sound cool this is a very fun idea 🤓 160
odilf @odilf.com · 15/07/2025Asahi linux is a thing! asahilinux.org Works very very well, the only reason I don't daily drive it is because suspend power is not as good as macOS yetasahilinux.orgAsahi LinuxPorting Linux to Apple Silicon 060
odilf @odilf.com · 15/07/2025It looks like sending it to the micro task queue (or whatever setTimeout sends it too, I don't exactly remember) solves it, so I guess there's some problem in doing the update on the main loop? Some sort of race condition? That's what jumps to mind at least, but who knows 🤷♂️ 100
odilf @odilf.com · 07/07/2025Vouch for typst and fletchter! I've used it and the results are nice and the code can be pretty consise 010
odilf @odilf.com · 21/06/2025I have never done this and I have no idea what I'm talking about, but can't you just allocate, put the bytes you want in your allocation and transmute? I feel you could even make a constructor function that has a safe API and everything 200
odilf @odilf.com · 15/06/2025I feel that if you're not confident enough to use unsafe (which you probably shouldn't be indeed!) then having an error message just in case is worth it. It's just a few bytes after all 🤷 000
odilf @odilf.com · 15/06/2025Oh wow I was totally thinking of `let else` 😅 (but in my defense, let else is a more direct substitute to unwrap that if else) 010
odilf @odilf.com · 15/06/2025By "cascading messages" you mean propagation Option up the call stack? I would say that having a possibility of your program crashing when calling a function is a worse violation of LoD, no? Saying "this function might not have something to return" doesn't break isolation, I think 000
odilf @odilf.com · 15/06/2025I guess one might use unwrap for cases where it's very obvious why a panic won't occur but eh I'd rather write a reason quickly with expect. If I was really confident and didn't care about me being mistaken, maybe I'd even write an unwrap_unchecked. imo unwrap is exclusively valid for prototyping 🤷 110
odilf @odilf.com · 15/06/2025Hmm, idk, I like expect to describe the reason I expect something not to be None because if that case is hit you get an informative error message of what invariabt has been broken. If you used unwrap for when you "know" it won't panic you don't have a place to record this information. 110
odilf @odilf.com · 15/06/2025I've found that oftentimes when there is friction and resistance in Rust it's because something could have been arquitected better. I've also had to learn to ignore that sometimes. In this case, I think it's best to just let the formatter do its thing 🤷. Fighting it is a bit Sisyphean imo 100
odilf @odilf.com · 15/06/2025...and for the second example, if you want to keep those three field acesses in one line maybe you can declare a variable. Or in your case maybe it can be a method! I think it can make sense. 100
odilf @odilf.com · 15/06/2025But also weird rust formatting might be a bit of a code smell. Most likely it doesn't matter, but in your first example, the clone might be unnecessary and the unwrap should probably be removed and should return an Option instead... 210
odilf @odilf.com · 15/06/2025The problem with that it's that the things in one line might look like they're grouped together when semantically they might not need to be. With the current design, either everything is one line, or every dot is in a different line. It is easy to predict and kinda helps collaboration 110
odilf @odilf.com · 15/06/2025But, of course, if it's a program you run once for yourself, its totally fine to use unwrap 🤷 buuut actually returning something like anyhow::Result might make the code cleaner!you only need to do ? instead of .unwrap(), and you get all the benefits above ^^ 100
odilf @odilf.com · 15/06/2025For instance, returning an error that bubbles up, says what went wrong exactly with a nice message (e.g.., "you've entered silly input") and is recoverable in case the program becomes bigger and you don't want the user to restart the program to try to write input again. 100
odilf @odilf.com · 15/06/2025For those cases you have `expect`, where you give the reason why you expect not a None. And you could also do a match and an unreachable (or unreachable_unchecked!). Or even better, encode it in the typesystem. unwrap is generally used for the "I can't be bothered to handle this rn" case 210
odilf @odilf.com · 15/06/2025`if let` is relatively new tho. But yeah generally way better than unwrap! 100
odilf @odilf.com · 10/06/2025Preferring to be short is like preferring winter. It is better in many ways, and you can use technology to go counteract the effects (e.g., high shoes/coats)... and yet most people prefer the opposite. hmm 010
odilf @odilf.com · 24/05/2025For searching and comparing crates, lib.rs is a nice alternative to crates.io!lib.rsLib.rs — home for Rust cratesList of Rust libraries and applications. An unofficial experimental opinionated alternative to crates.io 010
odilf @odilf.com · 18/05/2025In case you hadnt heard of it, lib.rs is a very nice alternative to crates.io that generally does a nicer job at finding and evaluating a crates and alternatives ^^lib.rsLib.rs — home for Rust cratesList of Rust libraries and applications. An unofficial experimental opinionated alternative to crates.io 141
odilf @odilf.com · 16/05/2025i like naersk 🤠 but also buildRustPackage is very much usable crane is just… too much for me 110
odilf @odilf.com · 14/05/2025But the real problem is when you try to package stuff. I spent way too long trying to get a relatively simple pnpm app working and, really, the best option to this day in my opinion is to search all github for similar stuff which isn't intuitive and just isn't a nice experience... (still <3 nix tho) 020
odilf @odilf.com · 14/05/2025Well, a few times there are options but it's unclear what the options do unless you go look at the source (which is often pretty approachable!). Getting an entrypoint is surprisingly tricky, I had a friend switch to nixos and he knew what he wanted to write, he just didn't know _where_ to put it. 130
Reposted by odilfMe and a small nugget of love. 🇸🇪♥️🇺🇦 @mnotme.bsky.social · 15/04/2025Next level #birdwatching 11621152
odilf @odilf.com · 16/04/2025i think they're using nextest nexte.st github.com/nextest-rs/n...nexte.stcargo-nextestA next-generation test runner for Rust. 130
odilf @odilf.com · 14/04/2025umm how long do you think it can take someone to go from basically 0 knitting knowledge to this? I always thought knitting looked fun but I really want to actually start knitting now because this looks sooo good!! 🤩🤩 050
odilf @odilf.com · 11/03/2025its also beautiful on the ground when its sunny, like in the past few days ^^ (but not so much when you have 3 months of straight grey 😒) 010
odilf @odilf.com · 10/03/2025Wait, the functor => applicative => monad hierarchy is not a fundamentally mathematical result thingy?? Is it just a reasonable decision from Haskell? Is it not a deep truth of how computation works, backed by the unbreakable rigor of math??? I feel betrayed 🥺🥺 140
odilf @odilf.com · 09/03/2025Some people say that one of the ways rust has been successful is by "disguising" concepts (generally more advanced) into more digestible forms. I don't know if it's an example of it, but the fact that we say mutable instead of exclusive references is probably the notation i find most unfortunate? 140
Reposted by odilfAndrew Parsonson @andrewparsonson.bsky.social · 06/03/2025Liftoff of the first commercial flight of Ariane 6! 0195
odilf @odilf.com · 05/03/2025the only good rustfmt option is no options ...something something 1984 020
odilf @odilf.com · 03/03/2025But then again, sometimes they are just regular lists if you, e.g., sort them or access the last element. In fact, the two things I don't like about Haskell is that it's spooky in terms of performance and that while I generally dig the mathematical generality, sometimes I just want to be specific. 020
odilf @odilf.com · 03/03/2025I was wondering how come that Haskell isn't incredibly inefficient since the basic list used everywhere is a linked list which is generally very bad for performance. Then I realized that evaluation is lazy, so these linked lists act more like rust's Iterator rather than Vecs! 110
odilf @odilf.com · 25/02/2025hmm yeah i guess it's personal preference but as long as everything is on its own line I find it very easy to parse where the type starts, while if you align it you might have a bunch of space between name and type. either way the difference is not that big now that I think about it 000
odilf @odilf.com · 25/02/2025basically I'm saying that arguments and their types are not really *semantically* a table. but idk I guess tables are used for things like this and I don't use python that much so maybe it makes more sense than I think 100