Ryan Hunt's Blog

Presentation at Web Engines Hackfest 2021

May 12, 2021 - web wasm

I recently gave a talk at Igalia’s Web Engines Hackfest about SpiderMonkey’s WebAssembly engine.

It’s a talk geared towards implementors and dives into our pipeline for compiling WebAssembly modules.


Implementing a pin-to-bottom scrolling element with only CSS

March 28, 2019 - web scroll-anchoring

Have you ever tried implementing a scrollable element where new content is being added and you want to pin the user to the bottom? It’s not trival to do correctly.

I recently worked on a new CSS feature called ‘scroll anchoring’ that shipped in Firefox 66 (for an introduction, check out my post on Mozilla Hacks or the summary on MDN).

While implementing this feature, Nicolas Chevobbe and I were debugging an issue and discovered that scroll anchoring can be used to create a pin-to-bottom scrolling element without any Javascript.

It’s a neat trick, so I thought I’d post the snippet here and explain how it works.


Scroll Anchoring in Firefox 66

March 28, 2019 - web scroll-anchoring

I wrote an article about the work on scroll anchoring that I did for Firefox 66.

Check it out!


Updated Blog

December 26, 2018 - web blog

I’ve been intending to write some new content on my blog, so I thought I should also update the site while I’m at it.


The first and most important change is https support. I’ve been a bit lazy here, but I finally decided to just do it.

This site is hosted on AWS as a static website. I followed this nice guide which describes how to use Cloudfront as a CDN for S3 to get https support.


EdgeHTML and control of the web platform

December 10, 2018 - web chrome

There’s been a lot of discussion this past week around Microsoft’s decision to abandon EdgeHTML and its implication on the future of the Web.

If you’ve missed this news, take a look at this post by Microsoft and this response by Mozilla.


Future directions for cbindgen (rust-ffi)

October 5, 2018 - rust ffi project

It’s been over a year since I first wrote about cbindgen. A lot has happened since then.

We’ve had a few new features added (tagged enums!), it’s seen some good use (25k all time downloads!), and there was a talk given at a rust berlin meetup!

This project started out as a quick fix for a problem we were facing at Mozilla. I thought others might find it useful so I open sourced it. It’s the first time I’ve ever ran an open source project, and I’ve learned a lot.

To this day, I’m continually surprised to see people using this tool and going through the effort to improve it. To everyone who’s helped out, thank you!

There is one issue I’d like to write about though.


Generating C bindings for Rust crates with cbindgen

August 30, 2017 - rust ffi project

Rust is a great language for doing tasks normally done in C/C++. While it has a minimal runtime and zero-cost abstractions, it also has guaranteed memory safety and high level language features that make programming easier.

Another neat thing about Rust is its ability to have a C FFI. Rust can be used to rewrite parts of an existing C/C++ application without having to rewrite the whole thing.

This means that you can get some of the benefits of Rust, without having to rewrite the whole world (which is often infeasible and tends to introduce new bugs).


Solving Wordament Boards in Rust

April 6, 2016 - rust project

After a short break from coding for school, I finally got enough free time to finish a project. One of my favorite puzzle games is game called Wordament. It’s a bit old now, but it still has an active community. The game is like Boggle, you get points for building a word across tiles.

To be honest, I’m not very good at it. So I thought, why not write a program to give me some answers? So I did. I know that there are other solvers out there, but I just thought it’d be fun to hack together.


Dash, a simple programming language written in C

August 12, 2015 - plang project

In my spare time this summer I set out to write a programming language from scratch. I’ve always been interested in learning about how programming languages worked, and sometimes the best way to learn something is to get your hands dirty. So after quite a few nights of work, I created Dash, a very simple procedural language, virtual machine, and bytecode.

Dash is nothing extraordinary. It won’t be the next Python or Javascript. But it was a great learning experience and is pretty cool. I thought it would neat if others could see the end result, so I’ve hooked up a web server to run the compiler and virtual machine.


Reliable Networking with a Sliding Window Protocol

February 15, 2015 - networking project

I’ve always been interested in how networking protocols work, and how they can be reliable and also efficient. After some reading, I decided the best way to learn about it would be for me to have to write one.

It turned out to be much more difficult than I anticipated, and I only really ‘got’ the idea on my third try.

If you do research on this topic, you’ll find guides that describe all the important ideas, such as ARQ’s and sliding window protocols, and they do a good job at describing the general idea of what they accomplish and how. But all the references I found used very opaque terminology and didn’t go into enough detail to actually implement the protocols.

This was especially true for Sliding Window Protocols. I wrote this to try and provide an end to end guide on how some reliable networking protocols operate. It goes into enough depth to cover most of the implementation details that arise, but code is not actually discussed.

If you are looking for code, the c++ library created along with this article can be found here. Hopefully this will provide some help for anyone else seeking to do this in the future!