iPhones by default store photos in the High Efficiency Image File format (HEIF), a lossy format that often uses the .heic extension 1 . While this file format works well enough within the Apple ecosystem, there is very poor support for it outside of the walled garden. Windows requires the HEVC Video Extension , which costs $0.99 2 . Android added support in 2019 with Android 10 3 . Linux…
In March I wrote a Google Summer of Code proposal for St. Jude Children's Research Hospital . My proposal was specifically geared towards Sprocket , a bioinformatics workflow engine. While typesetting my document, Sprocket's homepage caught my eye. Sprocket's homepage I really love the gradient in the background of the hero banner. The blend between navy, purple, and blue are…
Hashing is the process of transforming arbitrary data into a fixed-size number. Several useful programming concepts arise out of hash codes: Hash sets and maps Data digests Cheap identifiers / inequality checks Storing passwords Recently I tried writing a hash set from scratch in Rust for educational purposes, but was awfully confused by the collection of traits and types provided by…
Bevy is an open-source game engine built in Rust. On August 10th, 2025, the project lead Cart celebrated Bevy's 5th birthday with a blog post , and I wanted to do the same! Hi, I'm BD103 For those uninitiated, I'm BD103! I'm a programmer who's been working on Bevy for a little under 2 years, at this point. Last year I talked about how I got involved with Bevy and how I…
When deserializing a string using serde , it is possible to use a borrowed &str instead of an owned String : use serde :: Deserialize ; use serde_json ; # [ derive ( Deserialize ) ] struct Foo < ' a > { // This string is borrowed. text : & ' a str , } fn main ( ) { let json = r # " { "text": "Hello, world!" } " # ; let foo : Foo = serde_json :: from_str ( json ) . unwrap ( ) ; println! (…
Hello there, my dear punctual splendiforous bright questionably loud reader! I hope your day has been going exceptionally well. I have returned from my 6 month 1 writing hiatus to give you a very special announcement: today is the official release of bevy_lint v0.2.0! With it comes some very exciting features that I can't wait to talk about! bevy_lint is a custom linter for the Bevy game…
It's Bevy's 4th birthday! If you haven't already, read Cart's post here . As part of this milestone, I would like to reflect on my journey in the Bevy developer community. Wait... Bevy?! Yeah! I contribute to Bevy , an open-source game engine written in Rust . I'm a relatively new contributor, having started in November of 2023 1 , but I've accomplished a lot since…
Rust Pointer Metadata Welcome back! In my last blog post I talked about overriding the global allocator. It was reasonably successful, even getting mentioned in This Month in Rust OSDev without me suggesting it! That success has inspired me to write about another really interesting feature in the Rust programming language called pointer metadata. Caution Some examples in this blog post use the…
Important This post is directed towards programmers experienced with the Rust programming language that are interested in manual memory management. I will not explain some concepts like pointers, statics, etc. If you want to learn how to program in Rust, you can find a helpful page here . It is possible to replace the global heap allocator used by Box<T> , Vec<T> , and more. This is useful if you…