June 17, 2025
Uploaded and wrote descriptions for more photos after editing them
Improved inputs with validation, so panics should be avoided. Also, I have replaced the default program with a bubble sort algorithm that takes 10 user inputs and sorts them.
Some quick touch ups before I sign off for the night; pagination has been improved for mobile users with a much larger touch target, and the article display is now easier to read on desktop with bigger text and a centred layout.
Uploaded the photos from today's trip out, complete with titles & descriptions
On the web development side, added some CSS that fixes image scaling particularly with super tall images (like portraits)
After much debugging, I finally got inputs working, although I couldn't make the Modal struct as general as I'd like it to be.
Now programs that have an INP instruction will show a popup asking the user to input an integer which will be checked and passed to the program.
Popups now show for errors. Currently the only error which will show a popup is a compiler error, although the message isn't very detailed at the moment; I plan to address both of these issues later on.
Also there is now an empty configuration column on the right of the screen which I plan to fill in later as well.
Added a memory display column, which shows a partial (not scrollable, yet) view of the program's memory and highlights the memory address being accessed currently when the VM is running.
Also added a blank configuration column to be filled in later, and added methods to load text into the program area potentially allowing programs to be loaded from files in the future.
Forgot to add this project! Anyways here's a quick rundown:
I've speedran building a Little Man Computer emulator in Rust - basically a really small virtual machine that takes in some basic assembly-like instructions, compiles and runs them. It is a very simplified system and has one input and one output, and only handles 64-bit integers. Coupled with a terminal user interface, it's a really good learning tool to understand how CPUs function at a basic level and can even do more complex things (e.g. bubble sort).
Currently, it is still missing a memory display and user input (all inputs default to 10).
Rust-based implementation of a Little Man Computer with more memory, a sleek terminal user interface and an expanded instruction set.
Fixed a bug where NaN values in the EXIF data would completely break the application, so that's good I guess.
Also added some more photos from the march and two photos of the Armidale/Moree Xplorer service passing Wondabyne
Added more photos from a rally and fixed up pagination links not working on Firefox mobile (those links that take you to the 2nd, 3rd, etc. pages at the bottom)
Minor improvements to the look and feel around the site, for example making titles consistently sized and adding the View all photos button to the gallery page as well.
Big user interface overhaul. Firstly, the photo grid has been turned into a masonry layout to better suit vertical photos and code refactored + extracted to a separate component. Secondly, the display page has also been greatly reworked to look more modern (inspiration taken from National Art Gallery of Australia and the NSW Art Gallery websites). Also, the font has been changed from the default sans-serif to a more interesting DM Sans.
Added a big go to gallery button on the front page, and expanded padding and generally spaced out the images a bit more for easier mobile usage and for better looks
Refactored and rewrote both the list rendering code and the GTFS data handling!
GTFS data is no longer fed directly raw to the rendering code (which cluttered it up with trying to make sense of missing data, etc.) and now goes through an abstraction layer with custom data structures that handle the conversion with From impls.
This allowed me to rewrite the rendering code to clean it up a lot and handle errors better as a side effect.
Did some adjustments to the layout of the header, added more photos as always and improved some tags.
Added a paginated list of all photos across regardless of tag to enable users to scroll through the whole gallery.
Added the first real post/article, adding the ability to link a header photo, and displaying the author and published date of each post.
Also improved the navbar especially on touch devices with bigger and more well-defined gaps between touch targets.
Added Open Graph protocol support so now gallery pages can be richly embedded into social media sites like Twitter or Discord
Also some minor performance improvements related to fetch priority, etc.
Added EXIF parsing now using a hacky little method involving fs reading the images bytes directly and some path wizardry. I hope this works on GitHub actions lol.
Anyways, this saves from having to specify the date on the sidecar YAML for each image going forward, but if provided will override the EXIF included date.
Improved the Gallery page, with tags themselves now also being grouped into helpful boxes, along with sorting them in alphabetical order within these boxes.
As usual, more photos have been added.
Successfully deployed to GitHub pages with a custom domain! The hosting provide may change once we exceed their recommended 1GB limit though.
We're almost ready for the first public deploy, likely on GitHub pages. To that order, I have added more photos, more tags and now sorted the tags by the amount of photos they have (descending order).
The home page actually has something on it now.
Also added a couple more photos. The most time consuming part of this whole process is filling in image details and giving them a detailed, accessible description.
Finished up pagination after adding a few more photos to see it in action — users can now go between pages by clicking the links at the bottom.
Added and described more photos. I aim to provide a detailed alt-text/description for each photo to help the visually impaired and just for documentation reasons.
After much messing about and reading the docs, it finally builds! There were a couple issues with dynamically importing images but they have been resolved (the import must be a Promise for some reason and must occur in an Astro file)
Gallery, tags and photo display all working now!
Started work on the website. Only the navigation, collections and basic layout is done at the moment, along with a simple About page. I am aiming for a very simple and static website that looks decent on most platforms (phones, tablets, laptops & pcs).
A statically generated website using Astro.js which hosts rail photographs and related posts created by myself
Created a new crate to help with fetching live vehicle positions from realtime GTFS data called tfnsw-realtime, a thin wrapped around tokio's prost to dynamically generate Rust code based off the .proto files supplied from TfNSW.
Using that data departures now have their vehicle types along with carriage information (e.g. occupancy) displayed if available. Scrolling through the departures list was also added.
Added colours in the terminal for each different train, light rail, intercity and bus line. Also added a display on each departure of that service's lateness with colours too.
Signing off for the night;
Learnt how to use the very nicely named ratatui library to create the basis of a usable and dynamically updating terminal user interface. The interface right now consists only of a title bar, a list of departures (from a hardcoded station, choices coming later) and a details panel, which doesn't work yet.
Started work on the API interface part of this project — the part of the code that interacts with TfNSW's APIs. Created Rust structs for the various data structures that could be returned from the departures endpoint and just logged them to the terminal for now - I will work on making this prettier later once more endpoints and data are collected.
A neat terminal user interface for viewing public transport departures from stops across Sydney and NSW using Transport for NSW's Open Data APIs.
Final devlog
Totally tidied up and finished the game, a lot to go through so I'll use dot points:
- Fully completed the game including the boss fight and Easter Egg
- Cleaned up the code removing some unnecessary overrides
- Generally polished up the UI and stamped out some loose bugs relating to selection menus
Continue working on the fighting sequence, boss fight, characters and items in the game. Made it possible for enemies to drop items.
Added additional items and weapons (bats, flamethrowers and a candle).
Improved the map generation.
Disaster!! (Just kidding). All the great terminal-based features I worked on last time turned out to not work on Windows, as the standard library module it relied on (tty and termios) are Unix-only.
So I extracted some of the platform-specific code into generic functions which each check what platform they are running on via os.name, and then import and run the correct code. Now it works just as well on Windows.
Big changes time!!!!!
Overhauled the entire Terminal User Interface with a system that takes raw TTY input allowing for lots of flexibility (namely with colours, editing, left/right keys etc. + more to come on that front). Also used more special Unicode box drawing characters to further improve the interface.
Reworked the command system from a bulky loop with a switch to instead be based on Python's standard library class Cmd which fits nicely into a OOP-style project.
Shop system now works, but more items need to be added.
Improved the tutorial UI (not complete yet) and the starting terminal user interface, making use of ANSI codes
---Initial Devlog---
Continued briefly working on improving the user
interface for the game, including only refreshing the status message if the player’s cave changes (to avoid the user’s previous commands being cleared), and made it clear the screen when the player moves caves for an overall cleaner interface.
Notice how after the fight command and the game’s response it prompts the player for their next command rather than clearing the screen.
A command-line ASCII based video game about exploring a network of caves, tunnels and dungeons, collecting items, fighting enemies and defeating the final boss! Loosely based on Hunt the Wumpus.
This was widely regarded as a great move by everyone.