Interactive Digital

Engineer, interested in networking, tooling, languages, and systems.
Activity
(last seen near Abingdon, VA)
(last 300 commits)
chasm-toolchain 2026-02-23
Added beginning of insert mode.

This immmediately revealed a cursor problem, namely that I can't
style it with a vertical bar without using the actual terminal
cursor (I've been styling the normal-mode cursor with a highlighted
cell, not the real terminal cursor). I'll need to refactor a bit to
support that, but for now I'm just using a different color.

On the other hand, I was able to implement some basic commands:
- Switch to insert mode from normal via 'i',
- Switch to normal mode from insert via 'esc',
- Insert chars when in normal mode,
- "Forward deletion" (delete-key deletion, as opposed to backspace).
chasm-toolchain 2026-02-22
Fixed bug where widgets were using stale frame sizes.
chasm-toolchain 2026-02-22
Added cursor x position memory.

Explicit horizontal movements store their final x position. When
making vertical movements, the cursor attempts to honor this stored
x position while clamping to the line length. The stored x position
is updated when another horizontal movement is made.

If this is confusing, open a text editor (I used Vim as a reference for
the observed behavior), move the cursor to the end of the line, then
navigate up/down. If the moved-to line is longer than the moved-from
one, the cursor will be at the same x position. If it's shorter, it
will be clamped to the moved-to line's length. This will apply no matter
how many times you move up/down. Moving horizontally will reset the
"stored" position.
chasm-toolchain 2026-02-22
Added basic horizontal cursor display and movement.

- h/l for left/right
- 0/$ for beginning/end of line
chasm-toolchain 2026-02-21
Added a cursor_y position and assocated behavior.

- The editor now tracks cursor (y only) movement
- The viewport scrolls 1:1 if the cursor goes outside
the current view
- Added keybinds for cursor up/down (j/k/uparrow/downarrow),
viewport up/down (shift+), and fastscrollup/down (ctrl+).

Next steps will be cursor_x movement across the columns,
and 'insert' mode.
chasm-toolchain 2026-02-20
Added a scrollbar
chasm-toolchain 2026-02-20
Added Y/N shortcuts to YesNoModals
chasm-toolchain 2026-02-20
Filling in editor components.

1. Added modal for app quitting,
2. Added editor with file load and simple scroll,

I'm still messing with event handling and call/returns. It's
not clear yet how I'll let child views control which views
are visible. Bunch of stuff to read/figure out.
chasm-toolchain 2026-02-19
Added basic app elements.

UI development paradigms are generally foreign to me, so
I'll be doing some exploration while implementing basic features.

Right now there's a status bar and module picker. Next is the basic
editor and module creation.
chasm-toolchain 2026-02-16
Added project scaffolding.

I need root directory for the editor to hook into. It's
primitive at the moment, the only requirements being:

1. There must exist a file, chasm.toml, at the specified dir,
2. There must be a src/ directory within the specified dir.

It's just enough to signal "project dir" without defining much
about it (yet).
chasm-toolchain 2026-02-15
Added ratatui and crossterm scaffolding for editor.

The goal here is to experiment with a TUI-based editor
for chasm assembly projects.
chasm-toolchain 2026-02-14
Started assembly editor project
bferris413.github.io 2026-02-08
Applied uniform border to code
bferris413.github.io 2026-01-27
Updated single line styling.
bferris413.github.io 2026-01-27
Small changes to formatting.
metal-arm 2026-01-25
Updated some verbiage in Project 5.
metal-arm 2026-01-25
Added Project 5 - Linker and module system.
chasm-toolchain 2026-01-23
Added doc comments explaining rationale
chasm-toolchain 2026-01-23
First cut at an object file.

The file format is more-or-less ad-hoc. I wanted something that was
going to be human-readable while not being fully textual. I ended up
with the following:

1. A binary prelude containing some magic bytes, the version number,
   and the length of the header,
2. A human readable header containing the struct fields of
   AssemblyModule,
3. The module's code as binary.

I'm fine-ish with it as first pass, but may just end up with a fully
binary format and some kind of chasm 'objdump' program to read it. We'll
see.
chasm-toolchain 2026-01-19
Added public labels.

The syntax is '@pub label'.
chasm-toolchain 2026-01-19
Cleaned up a couple error messages, removed import
chasm-toolchain 2026-01-17
Removed redundant tokenization for single-symbol tokens.
chasm-toolchain 2026-01-17
Added application support for multiple files.

- Previously 'chasm assemble' took a single file, it now takes a list
- 'chasm assemble' now automatically invokes the linker on the given
  files.
- Added '--no-link` flag to opt out of linking. When provided,
  'assemble' will write the modules to their respective binary files as
  before.
chasm-toolchain 2026-01-17
Fixed bug where definition references were always 32-bit.
chasm-toolchain 2026-01-16
Renamed patch_size to ref_size.
chasm-toolchain 2026-01-16
Added support for branch patches across modules.

- All labels are considered public.
I'll take the next few rounds of commits to do some cleanup, but
immediately afterwards I'll delineate between public and private labels.
chasm-toolchain 2026-01-16
First cut at imports and cross-module references.

- Updated definition references ($thing) to require a width.
Deciding on syntax for this was difficult and the current solution is
unsatisfying, I have a mental note to revisit it: $32:thing.

- Added support for definition references across modules:
  $32:modname::thing

- Added support for label references across modules: &module::label.
Label references are more palatable because the width is always the
size of a pointer (currently 32-bit since we're targeting Cortex M
first).

There's pieces laying around the shop, but all the plumbing and
implementation is present. Some of the proverbial mess needs attention,
and I also need to add the final support for applying branch patches.
chasm-toolchain 2026-01-05
Discovered variable-width sizing in emitted assembly, fixing.

- This commit addresses the declaration side, although perhaps not
  strictly needed.
- Next commit will fix the use/caller side, where the assembler
  must know the length of the imported reference.
chasm-toolchain 2026-01-05
Added linker patch for thumb addr pseudo op
chasm-toolchain 2026-01-04
Added linker patch support for branch instructions.

While implementing this, I realized that current branching
only supports local references, and thus no linker patching
is needed.

As soon as I add reference support across modules, this will change.
chasm-toolchain 2026-01-03
Implemented linker patching for plain label offsets.
chasm-toolchain 2026-01-01
Updates to support linker work.

- Differentiate between linker patches and assembler patches,
- All address references used during assembly will generate a linker
  patch,
  - This needs some work around automation, adding is manual, tedious
    and error-prone,
- Added linker tests for basic main/lib module behavior.

Next commit with actually apply linker patches when linking.
chasm-toolchain 2025-12-30
Updated import references to fail codegen if the module wasn't imported.
chasm-toolchain 2025-12-30
Started defining linker semantics and constraints.

1. Initial support is for executables only.
2. All modules must be included at link-time.
3. One and only one module must be designated "main".
4. The main module is the root. Modules provided to the linker
that aren't directly or indirectly imported into main are ignored.

None of this is meant to mirror conventional C-toolchain linkers
(although some parts may, and some parts may be wildly different).
chasm-toolchain 2025-12-29
Added linker project boilerplate.
chasm-toolchain 2025-12-29
Added assembler support for module references.

Next step is linking and resolving references across modules.
chasm-toolchain 2025-12-25
Intermediate commit
chasm-toolchain 2025-12-23
Linker prep: added  pseudo instruction for exported definitions
chasm-toolchain 2025-12-23
Added basic import statement
metal-arm 2025-12-19
Added Project 4 - function calls
chasm-toolchain 2025-12-19
Updated emulator scripts to use cgdb
chasm-toolchain 2025-12-16
Added mov! pseudo instruction.

The syntax is `mov!(reg, hex_literal)`, where hex_literal is a
32, 16, or 8-bit hex literal. The different bit widths result
in different instructions being generated:

u32 => movw(lower16), movt(upper16),
u16 => movw,
u8  => movs
chasm-toolchain 2025-12-15
Added define pseudo instruction.

- Syntax is `define!(identifier, hex literal)`
- After definition, `$identifier` evaluates to the hex literal
- The definition itself doesn't appear during code generation
chasm-toolchain 2025-12-14
Added some unit tests for pop error paths
chasm-toolchain 2025-12-13
Added POP {regs...} - T1 encoding
chasm-toolchain 2025-12-12
Added PUSH {regs*} - T1 encoding.
metal-arm 2025-12-11
Fixed clarification on project 2 references.
chasm-toolchain 2025-12-10
Removed debug prints from BL codegen.
chasm-toolchain 2025-12-10
Added basic qemu setup for toolchain-centric changes.
chasm-toolchain 2025-12-09
Added BL instruction after some...difficulties.
metal-arm 2025-11-29
Added LLM dislaimer (no programmatic usage).
metal-arm 2025-11-29
Added Project 4 - button press LED toggle.
chasm-toolchain 2025-11-27
Added BX instruction.
chasm-toolchain 2025-11-21
Added EORS reg reg.
chasm-toolchain 2025-11-19
Consolidated some token fetching logic.
chasm-toolchain 2025-11-19
Added pad-with-to! pseudo instruction.

The only supported form is `pad-with-to!(<byte: u8>, <target: u32>)`, which fills
the output with <byte> from the current address up to, but not including
<target>.

An soon-to-be-implemented extension will support <target> as a label
reference.
chasm-toolchain 2025-11-19
Added support for pseudo-instructions.

These take the format instruction!(operand). The intent is
to provide support for common operations that don't neccessarily
correspond to a specific assembler mnemonic, or wouldn't be
found in the ARM technical reference.

The first supported pseudo is `thumb-addr!(&ref)`, which expects a
label reference and relaces it with <label-address> | 1.

An obvious objection to this pseudo is that it's too specific. A more
general pseudo like `math!(&ref | 1)` would be applicable to a variety
of usecases. I agree, but a) I wanted something I could use immediately,
and b) I didn't want to get tangled up in a more general-purpose
implementation when it wasn't strictly neccessary.

It's possible that thumb-addr! gets removed in lieu of something more
general, but this is fine for now.
chasm-toolchain 2025-11-18
Added support for branching forward.

Adding support involved generating code for forward references with 'dummy'
values, and then making a second pass over all unresolved references
to patch the generated binary.

The implication of doing so is that we can now support if/else logic.
chasm-toolchain 2025-11-17
Added '.' to README.
chasm-toolchain 2025-11-17
Added support for standalone label refs '&label'.
chasm-toolchain 2025-11-17
Added support for label references.

- Branch-related syntax went from 'B @label' to 'B &label'.
- The actual benefit is that we can use &label elsewhere to
refer to arbitrary addresses.
chasm-toolchain 2025-11-09
Made LDR and STR use [R*] syntax.
bferris413.github.io 2025-10-29
Bunch of small styling changes.
metal-arm 2025-10-26
Added project 2 - red LED.
chasm-toolchain 2025-10-25
Added BEQ (t1 encoding)
chasm-toolchain 2025-10-25
Added AND(register)
chasm-toolchain 2025-10-24
Added encoding and instruction:

LDR(immediate) - t3 encoding,
ORRS(register) - t1 encoding,
STR(immediate) - t1 encoding.
chasm-toolchain 2025-10-24
Added LDR(immediate) - t1 encoding
chasm-toolchain 2025-10-23
Added MOVT
chasm-toolchain 2025-10-23
Added movw - first 32bit instruction
metal-arm 2025-10-15
Added Project 1 - chasm conversion.
chasm-toolchain 2025-10-15
Added chasm project README.
chasm-toolchain 2025-10-15
Added metal-arm/0 as a test.
chasm-toolchain 2025-10-15
Added support for comments, via ';'
chasm-toolchain 2025-10-14
Added support for 'B @label' (backwards only)
chasm-toolchain 2025-10-14
Added labels, like @label
chasm-toolchain 2025-10-13
Added ADDS Rdn, #imm8
chasm-toolchain 2025-10-12
Support for MOVS Rd, #imm8 (hex)
chasm-toolchain 2025-10-08
Added tokenize, parse, and codegen for 8-32bit hex literals.
chasm-toolchain 2025-10-06
Added assembler scaffolding
metal-arm 2025-10-06
Changed comment char in Project 0 program.
chasm-toolchain 2025-10-06
Changed comment char to ';'.
metal-arm 2025-10-04
Added project 0 - machine code and flash.
metal-arm 2025-10-04
Added project README.
chasm-toolchain 2025-10-01
Added CLI help
chasm-toolchain 2025-10-01
Added a few CLI args.

- --reverse (-r): bin -> text instead of text -> bin
- --row-len (-l): specify number of bytes per row (line break after n hex bytes)
- --spaced (-s): spaces between hex bytesspaced: bool,
- --offsets (-o): Print hex byte offsets in left column.
chasm-toolchain 2025-09-30
Added tests for existing functionality.
chasm-toolchain 2025-09-29
Added basic text -> binary support, including,

- All whitespace is stripped from the text input,
- Comments (preceding #) are stripped,
- Output to file or stdout.
chasm-toolchain 2025-09-29
Added hx project.
metal-arm 2025-09-23
Initial commit
chasm-toolchain 2025-09-16
Initial commit
bferris413.github.io 2025-08-26
Updated markdown parsing to include inline HTML.
dover 2025-08-20
Paid the long-coming clippy tax.
dover 2025-08-19
Made --to-html a global arg.
dover 2025-08-19
Fixed git issues.

- We were including submodules in attempted diffs.
- We weren't pulling files from the working directory and repo
  correctly. Sometimes we would do a repo read when we really needed the
  working directory, and vice-versa.
dover 2025-08-18
Fixed spacing issue where multiple diffs weren't separated by newline.
bferris413.github.io 2025-08-09
Added Rust dependency post.
dover 2025-07-24
Fixed issue where extra padding was applied to add/remove items.
dover 2025-07-23
Version bump.
dover 2025-07-23
Bugfix: filenames were printed even if there wasn't a diff.
dover 2025-07-21
Updated tag.
dover 2025-07-21
Added tuple/field diffs.
dover 2025-07-21
Added unit/field diffs.
dover 2025-07-21
Added unit/tuple diffs.
dover 2025-07-18
Added HTLM output escapes.
dover 2025-07-18
Variants now elide information.
dover 2025-07-18
Updated TODO with completed and upcoming items
dover 2025-07-18
Started updating struct diff logic.

- This fixes the issue where order mattered when diffing structs
with named fields.
- Tuple structs and name structs are handled.
- Still need support for diffs like tuple -> named and vice versa.
- Also discovered an issue where enum variants with tuple/field
types aren't elided like other container types.
dover 2025-07-16
Updated TODO and some comments.
dover 2025-07-09
Added visual cue when eliding members.
dover 2025-07-07
Refactored to use shared signature parsing.
dover 2025-07-05
Elide whitespace in trait item diffs.
dover 2025-07-04
Elide whitespace from enum diffs in the same vein.
dover 2025-07-04
Updated impl_ and struct_ change construction.

* Impls now elide whitespace like structs.
* Fixed a bug with structs where completely new members
caused an infinite loop.
dover 2025-07-03
Fixed an issue with struct parsing.

* The shared parsing functions were referencing "new" structs only.
dover 2025-07-02
Refactored struct's View implementation to:
* Elide whitespace not pertaining to any struct diffs (eliminating diffs as long as the struct's definition),
* Share a bunch of code between old/new parsing.
dover 2025-06-28
Made changes to HTML formatting.

I'll slowly try to make the 'feel' of the UI familiar, or at least
not completey foreign, to folks familiar with the GitHub diff UI.
It's not there yet, but something actually useful is forming...
dover 2025-06-27
Added basic HTML output.

CSS grid is used for formatting, but honestly a table would
be easier to work with. GitHub apparently uses a table for
their diffs, so I'll likely take that as my cue/allowance
to do the same.
dover 2025-06-25
Adding plumbing for --to-html output option.
bferris413.github.io 2025-06-23
More styling updates.
bferris413.github.io 2025-06-23
Some styling updates, edited post.
bferris413.github.io 2025-06-22
Updated a bunch of random stuff, prepped for first post.
bferris413.github.io 2025-06-08
-
bferris413.github.io 2025-06-08
Moved nav bar next to header.
bferris413.github.io 2025-06-01
Deploying with (empty) posts support.
bferris413.github.io 2025-06-01
Updated and tested publish/deploy scripts.
bferris413.github.io 2025-06-01
Updated local deploy script.
bferris413.github.io 2025-05-31
Added new deployment layout and directory structure.
bferris413.github.io 2025-05-30
Updated templates dir
bferris413.github.io 2025-05-30
Testing posts build.
bferris413.github.io 2025-05-30
Got post index page working.
bferris413.github.io 2025-05-30
Added basic support for posts/ index.
bferris413.github.io 2025-05-26
Fixed home location when near Bristol.

My ISP comes out of Bristol, TN or Bristol, VA. I had a check
in place to correct Bristol, TN to my current home, but not
for VA (Bristol straddles the TN/VA border). I added the check.
dover 2025-05-25
Updated README.
dover 2025-05-19
Updated install instructions.
dover 2025-05-19
Updated wrongly-formatted license.
dover 2025-05-19
Updated .toml.
dover 2025-05-19
Updated README, adding publishing stuff.
dover 2025-05-18
Fixed issue where appendln was inserting newlines incorrectly.
dover 2025-05-16
Switched to relative path when displaying overview.
dover 2025-05-16
Added basic --fancy output (but removed the flag).
dover 2025-05-16
Starting --fancy diff output (somewhat akin to 'git diff'-style).
dover 2025-05-15
Fixed bug where add/remove impl diffs were displaying function bodies.
dover 2025-05-13
Fixed bug where impls weren't working on traits.
dover 2025-05-13
Updated struct diffs to omit fields that weren't changed.
dover 2025-05-12
Updated enum diffs to omit variants that weren't changed.
dover 2025-05-12
Removed useless design block.
dover 2025-05-12
Trying to get impl items to omit items that didn't have a diff.

For example, skip printing methods that don't have a signature change.
I'll apply this to struct members, enum variants, and traits, but
the algorithm needs more thought.
dover 2025-05-09
More finely-grained diff for enum variants, specifically around 'fields'.
dover 2025-05-08
Used function diffs in trait items.
dover 2025-05-08
Removed old column formatting.

Display-based output is managed by View now.
dover 2025-05-07
Added View to Use
dover 2025-05-07
Deleted impl Display on TraitDiff.
dover 2025-05-07
Converted trait diffs to View.
dover 2025-05-06
Converted enum diffs to View.
dover 2025-05-06
Converted structs to use View instead of Display.
dover 2025-05-06
Removed display from impls structs.
dover 2025-04-17
Implemented impl blocks.

- Need to remove { .. } on impl functions.
dover 2025-04-17
Removed display from Function[s]Diff
dover 2025-04-17
Finished function inputs and block omissions.
dover 2025-04-17
Giant commit for a a bunch of formatting changes.

- Added colored output on terminals.
- Starting with functions, output formatting is delegated to a separate
struct. The goal is to output a single type that can then be formatted
based on the chosen "backend." Text output is currently supported,
but HTML is planned for use in GitHub-like PRs.
- Need to finish function inputs.
dover 2025-04-15
Deleted Vis and just using syn::Visibility.
dover 2025-04-15
Updated TODO, starting ViewableDiff.
dover 2025-04-14
Use original source for impls.
dover 2025-04-14
Added original source for function and traits.
dover 2025-04-13
Use original source for enum diff.
dover 2025-04-13
Use original source for struct diff.
dover 2025-04-13
Added original source to each overview and diff.

This enables us to:
- use the author's original formatting when presenting the diff,
- selectively highlight the original source based on the diff.
dover 2025-04-13
Impl display implemented, need to fix:

- Impl displays full block, need to remove fn bodies,
- Formatting
dover 2025-04-13
Filled out impl diff (functions only).
dover 2025-04-04
Added boilerplate for impl diffs.
dover 2025-04-02
Added ~ on modified trait/struct/enum/fn
dover 2025-04-02
Filled in 'diff <c1> <c2>' capability.

- Commits can be diffed like 'dover diff <tree-ish> <tree-ish>'
- Intent is to emulate the general cases of 'git diff <...>'
dover 2025-03-31
Fixed side-by-side formatting

Existence changes (+/-) for top-level types like functions
and structs were being printed in the left column only,
instead of following the "left old, right new" columnar
format.
dover 2025-03-28
Added diff subcommand in place of just 'dover'.

eg: dover diff
I want to capitalize on the muscle memory for 'git diff'.
dover 2025-03-27
Formatting and git search changes.

- Formatting was appending a bunch of newlines to the final output, fixed.
- Enabled search through parent directories if a git repo wasn't found in
currentdir.
dover 2025-03-26
Removed redundant overview formatting when set was empty.
dover 2025-03-26
Added recent additions to overview print.

- Enums
- Traits
- Freestanding functionswq
dover 2025-03-26
Updated TODO.

Next is impl blocks.
dover 2025-03-26
Changed function formatting.

Removed function blocks from display since they're irrelevant.
dover 2025-03-25
Added freestanding function diffs.
dover 2025-03-14
Added function diff boilerplate.
dover 2025-03-09
Refactored OverviewDiff display.

- Display now doesn't show headers for diffs that aren't present.
dover 2025-03-08
Added support for diffing trait modifications.

- (prior support was just for existence)
- Updated todo.
dover 2025-03-08
Added coarse trait diff.
dover 2025-03-05
Added Trait scaffolding.
dover 2025-03-02
Updated TODO. Next tasks include:

* impl blocks for structs and enums,
* freestanding functions,
* trait signatures
budget 2025-03-02
Added category importance (UI) and default port (backend).
dover 2025-02-28
Added enum and variant diffing.

Sample output:
--------------------------------------------------------------------
enum L7Protocol<T: Clone> {                        enum L7Protocol {
    Http { t: T },                                     Https,
    Https,                                             Dns,
    STUN,                                              Smtp,
}                                                  }

variants:
- Http { t : T }                                   + Dns
- STUN                                             + Smtp

generic parameters:
- T : Clone
--------------------------------------------------------------------
dover 2025-02-28
Added scripts/ and test_files.
dover 2025-02-23
Added enum and variant scaffolding.

Some shared structs/functions were moved from structs.rs
into lib.rs (like struct Vis, get_source, etc.).
dover 2025-02-23
Added coarse fields diff.
bferris413.github.io 2025-02-23
Formatted commit messages with pre tag.
dover 2025-02-23
Added formatting goals from previous commit.

Given two files containing (side-by-side):
```
use cake::cheese;                                     use cake::cheese::eggs;
                                                      use rice;

pub struct Thing<T, U, V: Clone, W, X>(T, U, V)       struct Thing<T, U>(T, U)
where                                                 where
    X: Cake,                                            U: Cake,
    U: Powder,                                          T: Eggs;
    W: Rice,
    Y: Milk;
```

We can get a diff like:
```
Use
¯¯¯
- cake::cheese
+ cake::cheese::eggs
+ rice

Structs
¯¯¯¯¯¯¯
pub struct Thing<T, U, V: Clone, W, X>(            struct Thing<T, U>(
    T,                                                 T,
    U,                                                 U,
    V,                                             )
)                                                  where
where                                                  U: Cake,
    X: Cake,                                           T: Eggs;
    U: Powder,
    W: Rice,
    Y: Milk;

visibility:
- pub                                              + (none)

generic parameters:
- V : Clone
- W
- X

where clause:
- X : Cake                                         + U : Cake
- U : Powder                                       + T : Eggs
- W : Rice
- Y : Milk
```

TODO:
  - struct fields
  - Formatting will likely change to something capable of layouts
    (ratatui).
dover 2025-02-22
Working on struct visualization.

* Using `prettyplease` for formatting
* Need to decide what to use for side-by-side layout. Options:
  * ratatui, if I can use it without replacing the screen,
  * self written, if it doesn't get too painful.
dover 2025-02-21
Working on visualizing more complex diffs.

Sample struct output (WIP):

Structs
¯¯¯¯¯¯¯
    pub struct Thing<T, U, V: Clone>(T, U, V)            pub struct Thing<T, U, K: Milk + Eggs>(T, U, K)
    where
        X: Cake,
        U: Powder;

    Generics
    ¯¯¯¯¯¯¯¯
    - V: Clone                                           + K: Milk + Eggs
    - where
        - X: Cake,
        - U: Powder

    Fields
    ¯¯¯¯¯¯
    - V                                                  + K
dover 2025-02-17
Added coarse-grained where clause diffing.

'where' clauses are diffed by existence (for now), similar to generic
types.

Also like generics, the plan is to introduce per-type/lifetime diffs on
the constraints, but that's a future problem. The immediate goal is to
get an end-to-end diff of all main components (struct args, return
types, etc), before tackling more specific diff problems.
dover 2025-02-13
Added coarse-grained generic diffing.

Generic diffs currently only check existence. That is, if the
exact generic type isn't found in another struct's declaration,
it's counted as added or removed.

The next step is to include modifications to a type (like T: Debug +
Clone), and to be able to say "T was modified, added Clone constraint").
dover 2025-02-11
Filled out struct templates for Generics[Diff].
dover 2025-02-10
Added struct/field diffing.

Technically this only supports unit/tuple structs, but with the
struct variant refactor from a recent previous commit, 'standard'
structs are likely supported as well.

Next up are enums, traits, and impl blocks.
dover 2025-02-09
Added fields to Struct struct.

- Removed struct variants.
- diff/overview will be done on struct, vis, and a struct's fields.
dover 2025-02-09
Changed Vis formatting.
dover 2025-02-07
Added structs diff.

Formatting isn't perfect, but the model is correct enough.
dover 2025-02-07
Updated enum signature in git.rs.
dover 2025-02-07
Updated diff method and applied to Use statements.

* The diff return type for containers will be `Option<T>`.
* Diffs will be 'member' based, e.g
  * Use members are a single use statement (non-nested),
  * Struct members are (currently) vis and fields,
  * Field members are (name, type) pairs,
  * etc.
dover 2025-02-04
Refactored modules.

* Overview goes into its own module.
* Overview "members" (structs, use statements, etc.) go into submodules
  of overview.
dover 2025-02-03
Added TODO to repo.

This has been going since the start of the project, but it's worth
adding to the repo in case I need a timeline of added/completed.
dover 2025-02-03
Added non-diff overview for a list of .rs files.
dover 2025-02-02
Included early use of git.

- Running 'dover' in a repo root will diff unstaged changes against
  HEAD.
- Running 'dover files <file1> <file2> will diff two files on the
  filesystem.
dover 2025-02-02
Added diff behavior between two files.

Sample output:
src/lib.rs
¯¯¯¯¯¯¯¯¯¯
Imports:
  anyhow::Context
  anyhow::Result
  std::fmt::Display
  std::fs
  std::ops::Deref
  std::path::Path
  std::path::PathBuf
  syn::File
  syn::Item
  syn::ItemFn
  syn::ItemUse
  syn::UseTree

test_files/lib_copy.rs
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Imports:
  anyhow::Context
  anyhow::Result
  std::collections::HashSet
  std::fmt::Display
  std::fs
  syn::File
  syn::Item
  syn::ItemFn
  syn::ItemUse
  syn::UseTree

src/lib.rs -> test_files/lib_copy.rs
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Imports:
  + std::collections::HashSet
  - std::ops::Deref
  - std::path::Path
  - std::path::PathBuf
dover 2025-01-29
Added support for use statements.

Uses are flattened, de-aliased, de-duplicated, and collected into
a HashSet.
dover 2025-01-28
First commit of "diff overview" AKA dover.
dover 2025-01-28
Initial commit
bferris413.github.io 2025-01-18
Updated job description

This seems like something that will be tweaked forever...
bferris413.github.io 2025-01-11
Fixed full-width link issue.
bferris413.github.io 2025-01-11
Updated spacing and removed border.
bferris413.github.io 2025-01-09
Fixed spacing on mobile.
bferris413.github.io 2025-01-07
Updated some verbiage in the job description.
bferris413.github.io 2025-01-07
Updated dev watch script.
bferris413.github.io 2025-01-06
Expanded the site, included a little work history.
bferris413.github.io 2024-12-26
Updated to include last location.
cottage 2024-12-25
Updated TODO and categorized certain 'milestone' goals for the project.

The purpose has always been to make programming 'better' by shortening the feedback loop when
reading and writing code. The intended features operate at at least two 'meta-layers' of programming work:
* The function level, like when you're reading/writing a function.
* The module/architectural level, like how different modules compose to form the entire application.
The core features are:

* Interactive Trace View
(function-level)
- Is implemented in VSCode Cottage extension (with some TODOs for polish)
- Like printf debugging, but the timeline is 2d and interactive.
- Interaction involves the user hovering over values. The view responds by
showing the values for associated cells.
- This can be thought of as a replay editor in which all the steps are available immediately.

* Execution Graph
(module-level, but some function-level as well)
- Is not implemented
- Will show a graph-like view (a la Sprotty and ElkJS) of data paths
- Zoomable to different layers of the application (mitigates the massive picture of
'boxes and arrows' of certain prior attempts from other projects)
- Collapsable to show only a single piece of data/function.

* Inline Forever
(function-level)
- Is not implemented
- Inline function calls to a certain depth to show a more complete view of code

* Call Trace
(module and function-level)
- Is not implemented
- Simple execution trace showing what actually happened (like bash's 'set -x' or lisp's (trace) macro).
cottage 2024-12-21
Removed yet more debug logs in extension.
cottage 2024-12-19
Made select styling in code comparable to trace view.
* Code used border outline, trace used bg color.
* Code now uses the same bg color.
This more or less unifies styling between trace and code views.
cottage 2024-12-18
Fixed issue where decorations wouldn't display on extension load.
cottage 2024-12-17
Fixed issue where a document's activeTextEditor wasn't being null-checked.
cottage 2024-12-17
Updated hover support.
* Hover in code sends events to webview, and webview sets styles accordingly.
* Longstanding exception when opening webview depending on if a cottage file is open or not, needs fixed.
* Updated TODO.
cottage 2024-12-17
Removed many debug logs from extension.
cottage 2024-12-17
Hover now responds to cursor movement.
* TODO: Pass hover to webview
* TODO: Remove onhover in webview and receive message from client
* TODO: Remove debug logs.
cottage 2024-12-16
Added boilerplate for tracking cursor movements.
* Goal is the repurpose 'hover' in trace view to reflect cursor movements in editor, instead of responding to hover in trace view.
bferris413.github.io 2024-12-12
Removed UTC time from commit date.
cottage 2024-12-12
Updated TODO and cottage test script.
bferris413.github.io 2024-12-11
Fixed styling.
* Graph wasn't scaling correctly with the updated commit size (too much
  history).
bferris413.github.io 2024-12-08
Fixed styling, it'll probably need more work but it's not ultra-small anymore.
bferris413.github.io 2024-12-08
Added --save-commits option to save fetched commits (useful for debug/UI experiments)
bferris413.github.io 2024-12-06
Functionality and template updates.
* Commits are now bucketed by week to give a more stable feel.
* Changed the number of max tracked commits from 100 to 500.
* Adjusted the activity graph to account for the increased number of commits.
* Added a brief info specifying the number of displayed commits (I may yet make this <details>).
cottage 2024-12-04
Trace view updates:
* Fixed missing early return when we can't find the expression id,
* Made tdElements global for reference in document.keydown handler,
* Reset [last]selectedRow/Col on incoming updates,
* Fixed issue where document.keydown was being processed multiple times due to multiple event listeners being registered.
cottage 2024-12-03
Cleared cache on updated decorations.
cottage 2024-12-03
Trace view selections now cause the code in question to be highlighted in the editor pane.
cottage 2024-12-02
Cottage trace view sends hover requests back to the extension.
cottage 2024-12-02
Added lint to ignore possibly-missing global function (acquireVsCodeApi).
budget 2024-12-01
With the new recurrence plumbing, 'duplicate' functionality was easy to add, so I did.
budget 2024-12-01
Added recurrence functionality.
* Utilizes the pre-existing 'select ledger row',
* Present a modal to configure the recurrence for each row,
* Save or cancels recurrence,
* Adds new entries per configuration (only monthly recurrence is supported currently).
budget 2024-11-30
Added callbacks for frequency selection. Upcoming:
* Remove all custom classes and swap in tailwind,
* Store map of selection changes,
* Handle selection changes on 'confirm'
budget 2024-11-30
Setup open/close callbacks on recurrence modal.
cottage 2024-11-29
Fixed an issue where the last selected cell wasn't being rehighlighted if it was previously hovered or hover-related.
budget 2024-11-28
Added interface for RecurringEntry, updated callback signature.
budget 2024-11-28
Started plumbing for 'recurring selections'.
* Added RecurrenceDisplay widget,
* Added new method to Grid - selected(), returns selected entries,
cottage 2024-11-28
Updated TODO to account for trace updates.
cottage 2024-11-27
Added hjkl movement to selection in trace view.
cottage 2024-11-27
Styling changes to trace UI:
* Made highlight and select colors less intrusive,
* Made borders and test 'not black',
* Bumped font weight one level on keys and evaluated cells,
* Shrunk padding on header
cottage 2024-11-27
Removed hover highlight when the current element is already selected.
cottage 2024-11-27
Fixed styling behavior on selection.
* Selected cell is outlined and highlighted.
* Cells related to the selection are outlined.
* Hovered cell is orange.
* Cells related to the hover and highlighted.

This allows you to view the trace related to a selection and the trace related
to a hover separately.
cottage 2024-11-26
Made expressions selectable in trace view.

Styling still needs some work (for example, some borders are overwritten)
cottage 2024-11-21
Updated trace view with debug data for 'long range' feature and fixed metadata reference bug.
cottage 2024-11-21
Added trace view in static/ for non-vscode development.
cottage 2024-11-21
Updated 'metadata' Td field from boolean -> interface
cottage 2024-11-20
Updated TODO with trace view 'polishing' tasks.
cottage 2024-11-20
Added test code for UI 'long ranges' design issue.

In any program with loops, an expression may be evaluated multiple times. This is reflected
in the trace view by multiple columns, e.g. if an expression is evaluated twice, the trace
has 2 columns, 10 for 10 evaluations, etc. etc.

This becomes unweildy once the number of columns scrolls horizontally off the screen, because you can
no longer see the full state of execution for a given trace in a single view. It's a UI problem and needs
some design work to solve.
cottage 2024-11-19
Updated TODO to account for:
* Trace MVP finished,
* Graph view on the horizon
cottage 2024-11-19
Added webview -> extension messages.

When the active editor in a given column switched from the webview to a different panel and back,
the webview lost the previous trace it was displaying, if any.

This commit allows the webview to request the last displayed trace from the extension, if any.
cottage 2024-11-18
Added default message if trace wasn't loaded.
cottage 2024-11-12
Trace view now updates on script changes.
cottage 2024-11-12
Bugfix: only set editor decorations if the current editor language is cottage.
cottage 2024-11-12
Added webiew support in vscode and ported trace view over (non-interactive still)
cottage 2024-11-11
Fixed comment and updated formatting.
cottage 2024-11-09
Hover works as expected for all related expressions in trace UI.

TODO: plug in to LSP update cycle
cottage 2024-11-08
Begin styling trace view.
TODO: Add hover on data elements.
TODO: Store data elements for hover reference.
cottage 2024-11-07
Testing table vs. grid, and added tailwind in js.
cottage 2024-11-07
Added tailwind setup for UI trace view prototype.
project-tracker 2024-11-03
Scrolling works with various edge cases, still need a scrollbar.
project-tracker 2024-11-03
Started plumbing for scroll/overflow.
project-tracker 2024-11-03
Hooked database up to UI.
project-tracker 2024-11-03
Added contractors page and click-to-nav in nav bar.
project-tracker 2024-11-02
Set border type on selection.
project-tracker 2024-10-30
Added top-level nav bar w/ 'active screen' styling.
project-tracker 2024-10-30
Implemented nav scheme from parent <-> child.
project-tracker 2024-10-29
Restructing in the same direction as the previous commit.

* Debug event display was moved to AppUi
* Screen::draw() takes an area and buffer instead of a rect. This lets parents deterine the box children live in.
* Next step is adding navigation between screens, and whether it should be heirarchical or if children can send events back to the parent.
project-tracker 2024-10-28
Restructured a bit.

* Introduced a screen heirarchy, where each 'screen' is a top level view responsible for layout and sending events to the right widgets.
* The AppUi is the top level struct holding all the screens, and is responsible for detecting screen switches and delegating events to the active screen.
project-tracker 2024-10-27
Started filling in UI events.

* Exploring ways to link widget location with event location.
* First attempt uses (rect, id) scheme, but the plan is to either implement Widget
or create a type that returns a widget on demand. Not sure about tradeoffs yet.
bferris413.github.io 2024-10-25
Updated width for mobile overflow. CSS is great.
bferris413.github.io 2024-10-24
Updates to main and template:

* Only check for token if fetching
* Changed heading size to be less intrusive
* Removed width from activity graph, should fix scaling on mobile.
* Fixed wrap issue on mobile.
bferris413.github.io 2024-10-23
Fixed viewBox for mobile.
bferris413.github.io 2024-10-23
Made activity graph continuous from <most recent hundreth commit date> -> <today>
bferris413.github.io 2024-10-22
Updates to template, dev script and commit stats:
* Template shows a small graph of recent activity,
* dev script now includes changes in the src/ dir,
* Site builder populates recent activity as a series of points.
project-tracker 2024-10-20
Going with ratatui for UI =).
bferris413.github.io 2024-10-19
Fixed repo fetch even when --no-fetch was specified.
bferris413.github.io 2024-10-19
Housekeeping and minor format change:

* Removed parent out/ directory since publish model changed.
* Add newline consideration in comment messages.
* Commented out nav until there's more to populate.
bferris413.github.io 2024-10-18
Updating template still.
bferris413.github.io 2024-10-17
Updated main template.
bferris413.github.io 2024-10-16
Template update.
bferris413.github.io 2024-10-16
Updated template, added dev support scripts.
bferris413.github.io 2024-10-16
Added debug commits and started working on the template.
bferris413.github.io 2024-10-16
Added read-from-file for testing/dry-runs/template work.
bferris413.github.io 2024-10-13
Added sketch.
bferris413.github.io 2024-10-13
Added basic templating w/ Tera.
bferris413.github.io 2024-10-10
Simplified the whole git subtree thing (by not using it =), and turned down some verbose logs in main.rs
bferris413.github.io 2024-10-09
Fixed publisher, installed crontab.
bferris413.github.io 2024-10-09
Updated gitignore.
bferris413.github.io 2024-10-09
Added deployment script, tailwind config, template, etc.
Work History

Aembit
I work with a small, talented team on Aembit's Edge proxy (Rust, Linux).


IOMAXIS
I worked as an engineer for four years with IOMAXIS, including two years as a technical lead (Rust, Networking, Linux).
I led a small team (3-5 engineers) building a new cross-domain solution. I worked on all parts of the project (design, networking, implementation, build/deploy pipelines), but was also responsible for mentorship, team-building, and overall technical project direction.
Prior to that, I spent two years building a DoD-funded private cloud. Most of my time was spent increasing the performance and reliability of a custom protocol over UDP, but I also created web APIs, worked with tun/tap devices, and wrote a lot of async code (Rust, Python, Linux).


Goddard Space Flight Center
I spent two years at NASA Goddard, including two internships (Linux, Java, Python, Jenkins, Docker).
I built CI/CD pipelines, Dockerized applications, wrote ground system software for the James Webb Space Telescope, and created a compiler to translate ~50k lines of Fortran 77 to Java.


Custom Data Processing
I worked nights in CDP Operations for two years while finishing my degree (C#, F#).
The unusual hours gave me the freedom to write a .NET desktop application which automated most of my job. It was approved for production use and adopted by the department (C#, F#).