Goes Live!

10/04/2022 19:43

Hi all! Today consisted of lots of work on, in addition to fixing some issues with not generating documentation for all modules.

  • Fixed the CSS issue that caused the twisted website to have the wrong font size on mobile.
  • Added the solve database page.
    • Generated a basic plain-text page as a prototype.
    • Added breakdowns for supported methods (HSC).
    • Added solve metadata from json dumped from timer (SSCT).
    • Added links to WCA profiles using WCA ID from json files.
    • Added links to solve reconstructions on
  • Improved's CSS.
  • Re-added the background.
  • Wrote's home page.
  • Made the logo in the header link to the home page.
  • Added metadata to Twisted's Cargo.toml so optional modules generate documentation.
  • Re-wrote all my daily logs into basic HTML and adjusted the site generator to compensate.
  • Added domain entries for
  • Set up web server.
  • Generated up-to-date HTML using the static site generator.
  • is now live!, Formatting, and Solve DB Progress

09/04/2022 20:41

Hello again everyone! Today's work was a lot of documenting and general cleaning up of Twisted's public interface. Some functionality has been separated as to reduce dependencies for some projects, and Twisted's documentation should now be viewable on!

  • Added the bluetooth module to a new optional 'bluetooth' feature.
  • Removed some unused imports that were causing warnings at build time.
  • Incremented the version number.
  • Removed some tests made for a much earlier version.
  • Formatted everything using rust-analyzer and Neovim's built-in LSP support.
  • Wrote the top-level documentation for Twisted in
  • Published the new, documented version of Twisted, v0.1.1, to
  • Added support for loading and validating solves to the static site generator in preparation for the solves database.

Async and Traits, Plus Publishing Version 0.1.0!

08/04/2022 21:15

Good evening everyone! Lots of today was spent on researching rust's async concept, and the complications created when using async in traits. Additionally, once I decided on using the async-trait crate, I implemented a 'Connection' trait so we can now write cube-agnostic code for when more smartcubes are supported.

  • Moved Twisted's 'cube' library into a sub-directory.
  • Refactored functions that deal with lists of moves, moving them into their own module, 'twisted::cube::moves'.
  • Refactored the bluetooth module.
    • Researched async in traits, deciding to use the async-trait crate.
    • Created a connection trait so smartcube-agnostic code is now possible.
    • Refactored the Moyu Weilong AI code to implement the new connection trait.
    • Added functions to the connection trait so device addresses can be retrieved easily.
    • Refactored the Moyu Weilong AI code to allow specifying a device address to connect to.
  • Fixed Twisted's REUSE compliance.
  • Added licensing metadata to Cargo.toml
  • Published an un-documented version 0.1.0 of Twisted to

The REUSE Specification, Copyleft and the GPL-3.0

07/04/2022 22:07

Hi again! Today, I officially decided on the GPL-3.0-only as the licence for the Twisted library. This choice was made explicitly to encourage the creation of copyleft and FOSS software. Copyright attribution will not be required. Currently, there is no public repository where contributions can be submitted, but I'd be more than happy to take a look and any patches or ideas you'd like to email to twisted.cubing(at)

The REUSE Specification defines a standard for specifying copyright and licensing information for projects. This makes licensing clear, while avoiding huge license headers in files. Additionally, the REUSE project maintains many helpful tools that can verify a project meets the REUSE specification. More information can be found here.

  • Updated my development environment
  • Licensing under the GPL-3.0-only, made the Twisted project REUSE compliant.
  • Researched documentation and publishing to
  • Created an account on
  • Obtained the domain to use for the Twisted project and this development log.
  • Fixed all Twisted's build warnings.
  • Generated documentation for Twisted using 'cargo doc'.
  • Referencing the generated documentation, began refactoring to improve the public interface of the library.
    • Refactored the 'twisted::cube::subset' module to hide consts and move functions to the top level of the module.

Debugging, Dev Tools, and Breakdowns

06/04/2022 20:51

Good evening everyone! Today began with debugging an issue where the CP substep of HSC was sometimes not correctly identified as solved. Eventually, this turned into creating a new development tool that allows testing methods and substeps. Additionally I took some time to create a simple but pretty website using only basic HTML and CSS that scaled well across both desktop and mobile.

  • Tried to debug HSC's CP substep model.
  • Added a new 'breakdown cli' binary to the ss-devtools library.
    • Added the new binary to Cargo.toml and created the source files.
    • Used the 'clap' crate to setup argument parsing.
    • Added support for EO-First HSC breakdowns.
    • Added support for tracing a substep throughout a broken-down solve.
  • Used the new 'breakdown cli' tool to debug the hsc corner permutation bug.
    • Fixed the face.cycle_matches method where only 3 of the 4 rotated states were checked.
    • Regenerated the local version of to ensure the bug had been resolved.
    • Fixed a bug that was discovered here where '+' characters were not encoded correctly in links.
  • Added a new repository to the gitolite server for a Twisted website.
  • Studied HTML and CSS until I could create a testing website that looked pretty and scaled well on destop and mobile.
    • Created a prototype testing website.
    • Wrote a custom card and container class for the development log.
  • Created a basic static site generator to generate the development log page automatically from a directory of txt logs.

The GUI Module, Optional Features, and Development Tools

05/04/2022 21:15

Good day all! Today saw the addition of a new optional feature. The sdl2 feature enables the 'gui' module, a module that allows easy drawing of cube states to sdl2 canvases. This was done to allow the use of this graphical functionality in both SSCT for streaming, and SSCS, a simple cube simulator.

  • Refactored SCSS, moving the gui element into an optional module of the Twisted library.
  • Created a new repository for a library of development tools.
  • Created the first development tool, VSS, the visual subset selector.
    • Created the library's repository using the gitolite admin repository.
    • Wrote a basic simulator, similar to SCSS.
    • Added an enum and mutable variable for 'modes'.
    • Add a mode for subset selection that prints rust arrays onto the command line.
  • Rewrite the edge and corner cycle arrays using VSS so they always line up in the same way. This will make recognising alg-sets like OLL or PLL easier in the future.
  • Fixed the solve reconstruction for the Moyu Weilong AI so that moves are non-cancelling.