The Case of the Vanishing Fiber: A Ruby Mystery
Dr. Claude Watson investigates how a suspended CRuby frame kept a raw Fiber pointer after garbage collection had reclaimed its owner.
System Administration, Computer Programming, and Travelling
Dr. Claude Watson investigates how a suspended CRuby frame kept a raw Fiber pointer after garbage collection had reclaimed its owner.
Dr. Claude Watson investigates why a readable TLS socket could still be a dead HTTP/1 connection, and how a layered non-blocking peek exposed the truth.
An Open Source Progress Report about predictable failure handling, lower-memory MIME lookup, and load-aware Falcon clusters.
Dr. Claude Watson recounts an investigation into safely running blocking operations through Ruby's fiber scheduler.
An overview of how to use Falcon to stream requests and responses in Rack applications.
My RubyKaigi 2024 talk on how to use Falcon and Rails together to build real-time interactive applications.
An Open Source Progress Report about Ruby's experimental Fiber Scheduler, Async, task-oriented project documentation, and parallel testing.
The final Ruby Concurrency Progress Report presents a per-thread Fiber Scheduler and evaluates it with native Net::HTTP requests.
An Open Source Progress Report about running Falcon Virtual in production, uncovering a Ruby socket vulnerability, and improving thread safety and developer tooling.
A live stream demonstrating the proposed scheduler interface for Ruby.
An Open Source Progress Report about Rack maintenance, Falcon production deployment commands, and programming education resources.
A Ruby Concurrency Progress Report introducing a prototype Scheduler that lets native Ruby I/O cooperate with fiber-based event loops.
An Open Source Progress Report about Ruby scheduler hooks, Falcon production deployment, process metrics, and reusable Async connection pools.
A Ruby Concurrency Progress Report exploring fibers for cooperative concurrency, isolates for parallelism, and VM hooks connecting native I/O to event loops.
An Open Source Progress Report about practical thread-safety fixes, Ruby concurrency, OpenSSL, Rack, and Faraday.
How to make streaming clients and servers using Ruby.
Concurrency can be tricky and fibers are here to help.
An overview of Falcon, a native HTTP/2 server for Ruby.
Improve Ruby scalabiltiy using concurrent event-driven IO.
Using event driven IO to improve Ruby's concurrency.
Using native assembly to improve Ruby's performance.
An overview of the Transform Flow toolkit assists with the development of mobile outdoor augmented reality applications, presented at CHINZ 2013.
A research paper about hybrid tracking algorithms for mobile outdoor augmented reality, presented at IVCNZ 2013.
A complete overview of my thesis research into outdoor augmented reality on mobile phones/tablets.
Here are some of the details of my current research in Outdoor Augmented Reality.
Ever wondered how garbage collection works?
Here is my solution to solve Sudoku efficiently.
This might come across as slightly trivial, but I enjoyed thinking about it none-the-less.
I've been thinking about the differences in modern programming syntax, and how we separate expressions.
Kai is my attempt to build a programming language interpreter which can itself compile and execute code dynamically.
Some examples of my source code visualisation research.
Here are the first results of my Mr. Painting Robot research - looking good!
How is Computer Science being taught and how is it changing?
I've been working on an image analysis algorithm for generating painted images.. here are the results so far!
Richard Stallman visited Christchurch recently. The talk was fascinating.
Matrix Mathematics often becomes complicated when the words row-major and column-major are thrown about. Here is a clear and simple implementation in C++.
Compile Time Polymorphism through meta-programming is a powerful way to express your ideas - learn about how to do this using C++
Run Time Polymorphism is a useful construct which allows us to change the behaviour of code depending on its input - but what are the costs associated with this technique?
I developed an interesting solution to the inverse kinematics problem using the A* algorithm.
Here are a number of permutation generation algorithms in C++.