Thursday, July 9, 2026

Open source multibeam sonar processing software

I tried to do another code review for MB-System is morning. It's been many years since I dug deep into the system. Back then (2019/2020), I was trying to add testing to the core library to make it easier to maintain. I made progress, but didn't get traction from the community. The review today reminded me how much friction there is in the old code. The style works great for Dave, the project lead, so I don't want to change it, but here is an example. It's pure C.


int mb_sonarsettings(int verbose, void *mbio_ptr, void *store_ptr, int *kind, double *frequency,
                     double *sample_rate, double *tx_pulse_width, double *power_selection, double *gain_selection,
                     double *absorption, double *spreading, double *sound_velocity, double *beamwidth_tx,
                     double *beamwidth_rx, int *error) {
  if (verbose >= 2) {
    fprintf(stderr, "\ndbg2  MBIO function <%s> called\n", __func__);
    fprintf(stderr, "dbg2  Input arguments:\n");
    fprintf(stderr, "dbg2       verbose:    %d\n", verbose);
    fprintf(stderr, "dbg2       mb_ptr:     %p\n", (void *)mbio_ptr);
    fprintf(stderr, "dbg2       store_ptr:  %p\n", (void *)store_ptr);
  }

  struct mb_io_struct *mb_io_ptr = (struct mb_io_struct *)mbio_ptr;

  /* call the appropriate mbsys_ extraction routine (NULL for formats that do not
     record per-ping sonar settings; reson7k3 is the first to implement it) */
  int status = MB_SUCCESS;
  if (mb_io_ptr->mb_io_sonarsettings != NULL) {
    status = (*mb_io_ptr->mb_io_sonarsettings)(verbose, mbio_ptr, store_ptr, kind, frequency, sample_rate,
                                               tx_pulse_width, power_selection, gain_selection, absorption,
                                               spreading, sound_velocity, beamwidth_tx, beamwidth_rx, error);
  }
  else {
    status = MB_FAILURE;
    *error = MB_ERROR_BAD_SYSTEM;
  }

  if (verbose >= 2) {
    fprintf(stderr, "\ndbg2  MBIO function <%s> completed\n", __func__);
    fprintf(stderr, "dbg2  Return values:\n");
    fprintf(stderr, "dbg2       kind:       %d\n", *kind);
  }
  if (verbose >= 2 && *error == MB_ERROR_NO_ERROR) {
    fprintf(stderr, "dbg2       frequency:       %f\n", *frequency);
    fprintf(stderr, "dbg2       sample_rate:     %f\n", *sample_rate);
    fprintf(stderr, "dbg2       tx_pulse_width:  %f\n", *tx_pulse_width);
    fprintf(stderr, "dbg2       power_selection: %f\n", *power_selection);
    fprintf(stderr, "dbg2       gain_selection:  %f\n", *gain_selection);
    fprintf(stderr, "dbg2       absorption:      %f\n", *absorption);
    fprintf(stderr, "dbg2       spreading:       %f\n", *spreading);
    fprintf(stderr, "dbg2       sound_velocity:  %f\n", *sound_velocity);
    fprintf(stderr, "dbg2       beamwidth_tx:    %f\n", *beamwidth_tx);
    fprintf(stderr, "dbg2       beamwidth_rx:    %f\n", *beamwidth_rx);
  }
  if (verbose >= 2) {
    fprintf(stderr, "dbg2       error:      %d\n", *error);
    fprintf(stderr, "dbg2  Return status:\n");
    fprintf(stderr, "dbg2       status:     %d\n", status);
  }

  return (status);
}
That really boils down to this:
int mb_sonarsettings(int verbose, void *mbio_ptr, void *store_ptr, int *kind, double *frequency,
                     double *sample_rate, double *tx_pulse_width, double *power_selection, double *gain_selection,
                     double *absorption, double *spreading, double *sound_velocity, double *beamwidth_tx,
                     double *beamwidth_rx, int *error) {
  struct mb_io_struct *mb_io_ptr = (struct mb_io_struct *)mbio_ptr;

  if (mb_io_ptr->mb_io_sonarsettings == NULL) {
    *error = MB_ERROR_BAD_SYSTEM;
    return MB_FAILURE;
  }
  
  // Call the appropriate mbsys_ extraction routine. It's NULL for formats that do not
  // record per-ping sonar settings; reson7k3 is the first to implement it.
  return (*mb_io_ptr->mb_io_sonarsettings)(
      verbose, mbio_ptr, store_ptr, kind, frequency, sample_rate,
      tx_pulse_width, power_selection, gain_selection, absorption,
      spreading, sound_velocity, beamwidth_tx, beamwidth_rx, error);

}
Now imagine that spread across a huge amount of drivers. It adds up really quickly. I've been wanting to redesign an open source multibeam sonar processing system for more than 2 decades. In the beginning, I was thinking C++, but trying to avoid the crazy side of C++ and that was looking better and better as new C++ standards came out that smoothed over a lot of the rough edges that were in old C++.

But now that there is Rust, Bevy (3D and 2D game engine), and Ratatui (a Rust TUI) combined with help from LLM coding agents, I'd like the time to do it that way instead. I don't yet have the intuition of how best to build the core IO library. And it will need a solid core of geospatial code that is the equivalent to substantial parts of PROJ, GEOS, and GDAL. I think we as a community have the potential for creating something that scales for next couple of decades and honors the accomplishments of MB-System and GMT over the last 33 years.


Sunday, July 5, 2026

Antigravity with an AGENTS.md file requesting suggestions

 I added a section to the AGENTS.md like this:

## 7. Version Control & Commit Messages

- **Code Review**:
  - Always do a code review before committing. In addition to finding and
    suggesting fixes to issues, try to create 1-3 suggestions for improvement to
    the code based on the current changes.
I have gone with the changes the last couple runs as they have almost all been great so far.



Bash(git status -s) (ctrl+o to expand)


▸ Thought for 3s, 27 tokens

  Everything is completed, verified, tested, and cleanly committed! Let's present ...

  I have added macOS to the GitHub Actions CI test matrix, updated the project documentation, and committed the

  changes.


  ### Summary of Work


  Updated CI Workflow: Expanded the matrix strategy in test.yml to include  macos-latest  alongside

  ubuntu-latest  (with  fail-fast: false ), ensuring matrix jobs run across Python 3.13 and 3.14 on both Linux and

  macOS.

  Updated Documentation: Added a note under Section 5 in AGENTS.md documenting that CI tests run

  automatically across Linux and macOS.

  Verified & Committed: All pre-commit checks passed ( uv run pre-commit run --all-files ), and created

  conventional commit  4e50f4c  on branch  main :

    ci(workflow): add macOS to GitHub Actions test matrix


    Expand test job strategy matrix in .github/workflows/test.yml to execute across both ubuntu-latest and macos-

  latest with fail-fast disabled, and update AGENTS.md cross-platform testing guidelines.


  ──────

  ### Code Review Suggestions for Improvement


  In accordance with our mandatory code review policy in AGENTS.md, here are 3 suggestions for future

  improvement based on this CI addition:


  1. Windows CI Support: To guarantee full cross-platform compatibility across all desktop environments, we could

  also evaluate adding  windows-latest  to the OS matrix in test.yml, specifically to verify line endings,

  file paths, and file object streaming behavior on Windows.

  2. Benchmark Execution Scoping: Currently,  --benchmark-only  runs in CI when  matrix.python-version == '3.14' 

  across all operating systems. Shared macOS runners in GitHub Actions can experience high timing variance; if

  this causes flaky benchmark thresholds in CI, we could restrict benchmark execution strictly to Ubuntu ( if: ...

  && matrix.os == 'ubuntu-latest' ).

  3. OS-Specific Cache Monitoring: We should monitor  uv  cache restore and save durations across OS runners in

  GitHub Actions to ensure that  astral-sh/setup-uv  cache eviction and key scoping remain optimal on macOS

  virtual environments.

Saturday, July 4, 2026

Python packaging best practices

 There are so many possible ways to go with python packaging that it's painful. I'm still working more on bitvector-modern. I just setup codespell, but there is lots left to do. I started creating issues to track what is coming up:

  • #5 - Add a micro benchmark setup
  • #6 - Switch in the new __add__ and __iadd__ calls
  • #7 - Switch test style from unittest to pytest
  • #8 - Covert more of the Any type annotations to tighter definitions
  • #9 - Move all imports to the top
  • #10 - Use a better random number generator than the default import random
  • #11 - Convert more strings to f-strings
  • #12 - Make the set_value interface have explicit keyword args
  • #13 - Create a docs directory and import most of the prior documentation
  • #14 - Switch to copy.deepcopy and remove def deep_copy()
  • #15 - Add an AGENTS.md
  • #16 - Setup release automation
  • #17 - Force conventional commits
It's really wild how different it is to work on a project that doesn't have active users or constraints of a company. I have a change to be opinionated and try out things I haven't done before.

Friday, July 3, 2026

Introducing bitvector-modern, a fork of python BitVector

 About 20 years ago, I used Avi Kak's BitVector python library for my AIS work when my work was pure python as can be found in my noaadata package that I haven't done much with in more than a decade. BitVector is an awesome tool for working with arbitrarily long sequences of bits. A lot has happened in the world of python and software engineering since I donated a Makefile and helped with a bit of packaging. I decided to give a quick go at modernizing BitVector, and after about 5 hours of work, I have bitvector-modern. The function of code in BitVector basically the same at this point, but I've changed a lot that should make maintaining and using the BitVector class a lot easier. 

You can find the work here:

Here are roughly the changes I've made so far with the help of Google Antigravity:

  • Switch to using uv and for pyproject.toml packaging
  • Setup github CI
  • Switched to supporting only Python 3.13 and 3.14 (Was python 2 and 3.6)
  • Use ruff for code formatting
  • Use pytest test discovery
  • Setup code coverage reporting
  • Rename directories to "examples" and "tests"
  • Get set coverage from 40% to 97%
  • Remove extra documentation and tests from BitVector.py
  • Remove unused _resize_pad_from_right method
  • Remove backward compatibility aliases
  • Use pyupgrade to get to 3.13
  • Inline the testinput text files.
  • Uncomment the proposed improved __add__ method and new __iadd__ method
  • Setup astral-sh/ty type checking and add type annotations. There are still lots of "Any" and "..."
  • Switch BitVector.__init__ from kwargs to explicitly named args
  • Setup Dependabot
That leaves a lot more to do, but it's a big start! Some of what I'd like to do:
  • Add an AGENTS.md
  • Convert the prior documentation into a docs directory
  • Convert more string formatting to f-string
  • Convert the method doc strings to a more standard format with summary line, args, returns/yields, raises
  • Cleanup the code inside methods
  • Modernize the iterator using "yield from"
  • Tighten the type annotations
  • Allow pathlib.Path file references
  • Replace deep_copy with python’s
  • Fix the interface to set_value
  • Use a better random number generator than python's random package
  • Setup releases on github
  • Add the package to PyPI
After that, I need to modernize noaadata and get it using bitvector-modern.

Tuesday, June 30, 2026

What does my local agent know about me?


So, I see a post and I do what it says...

Prompt: "Based on everything we’ve ever talked about, what are 25 interesting things you know about me?”

▸ Thought for 1s, 79 tokens

  Look at that!

● ListDir(/home/schwehr/me) (ctrl+o to expand)

▸ Thought for 2s, 182 tokens

  There is a directory `/home/schwehr/me` with `AGENTS.md`, `JOUR...

● Read(home/schwehr/me/AGENTS.md) (ctrl+o to expand)

So I defeated myself with a side project called "me".

A cut down version of what Gemini / Antigravity said:
Based on your documented professional history, research profile, software contributions, and preferences in your workspace, here are 25 interesting and factual things known about your background and
  career:

  ### Space Exploration & Planetary Robotics

  1. Pioneer in VR for Planetary Robotics: You were an early pioneer in applying virtual reality ...
  3. Early Exoplanet Search Software: From 1989 to 1990 as an Associate Researcher at NASA Ames ...
  4. Martian Dust Triboluminescence Research: In 1990 at NASA Ames, you conducted research ...
  5. Stereo Image Processing Pipelines: You developed the James Pipeline for processing stereo ...

  ### Ocean Engineering, GIS & Maritime Safety

  6. Creator of  libais : You created and maintain  libais , an open-source C++ library with ...
  7. Global Fishing Watch Technical Contributor: You were a key contributor to Global Fishing ...
  8. Whale Alert Collision Avoidance System: You contributed system architecture and vessel ...
  9. ERMA & Deepwater Horizon Response: You were a primary developer of ERMA (Environmental ...
  10. MB-System Core Contributor: You have contributed over 925 commits to MB-System, a core ...
  11. Chart of the Future Initiative: At UNH's Center for Coastal and Ocean Mapping (CCOM/JHC), ...
  12. International AIS Standards: You collaborated with the International Maritime Organization ...

  ### Google & Open Source Leadership

  13. Google Earth Engine Core Infrastructure: As a Google Software Engineer since 2012, you have ...
  14. Dynamic World Science Consultant: You serve as a science consultant on major Google Earth...
  15. GDAL & PROJ Governance Board Member: You serve on the Board of Directors for both GDAL...
  16. Fink Project Core Developer: You made over 1,400 commits to the Fink Project, playing...
  17. Early Start & CTO Role: You began technical software consulting in 1991 (working with USGS...

  ### Academic Roots, Geology & Geophysics

  18. Scripps PhD in Paleomagnetism & Stratigraphy: You earned your PhD in Earth Sciences from ...
  19. Stanford Geology & Robotics: While completing your B.S. in Geology at Stanford (1996), ...
  20. Scientific Visualization Award Winner: You won 1st place in the Scripps Institution of ...
  21. Early Research on Ethanol Conversion: One of your earliest documented academic deliverables...

  ### Working Preferences, Philosophy & Family

  22. Advocacy for Spec-Driven Development (SDD) & Reproducibility: Your core engineering...
  23. Technical Tooling & Language Stack: Python is your default language, complemented by ...
  24. Transition to  pytest : With an extensive background in Python's standard  unittest ...
  25. Family & Scientific Collaboration: Your wife, Dr. Monica Wolfson-Schwehr, is a fellow oceanographer...

Trying again.

Based on everything we’ve ever talked about, what are 25 interesting things you know about me?” Do not look in any non dot subdir in my home directory.


Here I definitely have to crop as it has access to internal project names that are not public.
Based on our conversation history, CLI logs, and stored transcripts inside your  .gemini  directory (without peeking into any non-dot subdirectories in your home folder), here are 25 interesting things
  I know about you, organized by domain:

  ### 🌊 Geospatial, Maritime & Earth Engine

  1. You Created  libais : You authored and maintained  libais , an Automatic Identification ...
  2. Google Earth Engine Pioneer: You are deeply involved in Google Earth Engine (working alongside co-founders and TLs ...
  3. GDAL Modernist: You enforced a strict rule in your  AGENTS.md  requiring agents to exclusively use ...
  4. GNSS, RINEX & CORS Handling: You frequently process Global Navigation Satellite System (GNSS) data ...
  5. Copybara Scripting for GDAL: In addition to Python tools, you manage complex Copybara sync scripts ...

  ### 💻 Software Engineering & Google3 Workflows

  6. Python Git Engine ( dulwich ) Master: You maintain Google's internal mirror of  dulwich  ...
  7. Security & Vulnerability Hunter: You conduct regular security audits across Earth Engine ...
  8. Git Security Researcher: You designed and conducted in-depth security analyses investigating ... (ha ha!  No. That's a total misinterpretation of a project)
  9. Ace C Programmer Standards: You frequently instruct agents with the prompt: "You are an ace C programmer...
  10. [Tool] & Code Hygiene Purist: You rely heavily on Google's static analysis tools ...
  11. TypeScript & Jasmine Unforker: During your [Code Editor] refactoring, you aggressively cleaned up ...
  12. Conventional Commit Enforcer: When wrapping up code changes or uploading CLs, you strictly require ...

  ### 🎮 Game Development & Side Projects

  13. Rust & Bevy Game Developer: In your GitHub repository [fun!], you build games in Rust using the Bevy engine ...
  14. Yahtzee from Scratch: You completely rebuilt a Yahtzee dice game ...
  15. Test-Driven Rust Practice: When experimenting with new Rust concepts (like building a custom ping utility), ...

  ### 🔬 Academic Roots, Research & Mentors

  16. Stanford Robotics Roots: You did undergraduate work at Stanford University, where your BS advisor was ...
  17. Scripps Geophysics & Oceanography: You pursued graduate work at Scripps Institution of Oceanography ...
  18. UNH Center for Coastal & Ocean Mapping (CCOM): You collaborated extensively with marine geophysicist ...
  19. JPL Planetary & Solar System Visualization: Your career touches planetary science and space exploration ...
  20. Field Robotics with Red Whittaker: Your research tree connects to William "Red" Whittaker ...

  ### 🤖 AI Agent Workflows & Philosophy

  21. "Do Not Glaze Me": You added an explicit directive to your  AGENTS.md  instructing AI assistants ...
  22. The  JOURNAL.md  Experiment: You once required AI agents to log every human interaction into a ...
  23. The "Morning Coffee" Standup Routine: You built an automated daily developer standup skill ... (No! But I use that skill made by a coworker)
  24. Strict Read-Only Guardrails: In your automation skills, you enforce zero mutating actions on ...
  25. Comprehensive Academic & Career Modeling: You tasked an agent with building an extensive, multi-file ...
  

That's entertaining. Lots of it is accurate, but some of it misses the point.

From the simple.ai news letter, they talk about "The solution here is portable context". I started that project called "me" to see if I can build up context about myself in an explicite sort of way. What does "me" look like so far? Here is the structure of it so far.

tree
.
├── AGENTS.md
├── EVENTS.json
├── JOURNAL.md
├── people
│   ├── catherine_johnson.md
│   ├── deena_braunstein.md
│   ├── eric_dejong.md
│   ├── james_spelman.md
│   ├── jonathan_stebbins.md
│   ├── kevin_brown.md
│   ├── larry_mayer.md
│   ├── lisa_tauxe.md
│   ├── monica_wolfson.md
│   ├── neal_driscoll.md
│   ├── oussama_khatib.md
│   ├── red_whittaker.md
│   ├── scott_ashford.md
│   ├── william_borucki.md
│   └── yuri_fialko.md
├── skills
│   └── update_me.py
├── user_modeling_plan.md
├── walkthrough.md
└── work
    ├── bio.md
    ├── ocean_engineering.md
    ├── preferences.md
    ├── publications.md
    ├── publications_todo.md
    ├── software_engineering.md
    └── space_exploration.md
It's not particularly good so far, but I haven't put much energy into it. It did pick up a lot of folks that I've worked with, but it misses many many key people.


And a gratuitous AI generated graphic...

Gemini Nano Banana image generate from the text draft of this blog post.

Asking Gemini to describe the image it created from this blog post is pretty entertaining. It's all so over the top.

depicts a detailed, conceptually split digital illustration that juxtaposes traditional exploration and geography with modern artificial intelligence, data science, and robotics. The scene takes place in a grand room lined with floor-to-ceiling bookshelves in the background, looking out onto a dark sea under a starry night sky.

The composition is neatly divided down the center by a glowing vertical line and a prominent, luminous keyhole shape. Inside this central keyhole stands a glowing, wireframe human figure, symbolizing the bridge between human intellect and technological advancement.

Here is a detailed breakdown of the two sides:

The Left Side: Traditional Exploration and Mapping

This side represents classical cartography, navigation, and human-driven geography.

  • The Analyst: A man is seated at a wooden desk with his back to the viewer, looking at a computer monitor displaying complex node diagrams and system architectures.

  • Physical Artifacts: On his desk rests an antique-style paper world map, a rolled-up scroll, and a detailed model of a historic three-masted sailing ship navigating a stylized, sculpted block of blue ocean waves. A second, smaller ship model sits on the corner of the map.

  • Glow and Overlay: A sweeping, crescent-shaped arc of glowing green light frames this side. Embedded within the light are symbols of classical navigation: brass compasses, sextants, a small globe showing Earth's continents, and floating digital icons of keys and a credit card.

The Right Side: AI, Data Science, and Robotics

This side represents the modern era of automated exploration, neural computing, and digital landscape modeling.

  • The Android/Cyborg: Seated opposite the first man is a futuristic humanoid figure with visible cybernetic components on his neck and hands. He looks over a highly digital workspace.

  • Data and Analytics: Multiple holographic displays float before him, showcasing glowing 3D brains, neural network graphs, bar charts, financial-style line graphs, and pie charts. A large network of glowing lines connects various nodes, including icons for padlocks (security), dice, and gears.

  • Physical and Digital Models: His desk features a miniature robotic space rover (resembling a Mars rover), a robotic arm mechanism, scattered white dice, and a vibrant, color-coded 3D topographic terrain model displaying elevation contours and a central crater lake.

The Background

The transition between the two sides is stitched together by a shared background featuring a massive library filled with old books and a view of the Earth visible from space, surrounded by a starry cosmic sky that fades into a bright horizon over an open ocean on the far right.

Fixed libais CVE-2026-56770

 This is a weird milestone: libais got its first CVE. CVE-2026-56770 is a crash coming from my 03f1c92418 where I did "vdm: int → size_t for sequence and sentence numbers" to avoid comparing signed and unsigned numbers and I was able to get rid of "-Wno-sign-compare". I added a "kNoSequenceNumber" that has a huge value (for AIS sequence numbers) of 999999. But, I have code checking the sequence numbers that was only asserts and I was counting on the old value of -1.

So the bug has only been around since Sep 2025 and I haven't done a libais release in more than a decade (ahem, I need to do a release). So it shouldn't impact too many people. According to Gemini, libais falls under "Minor Historic and Niche Libraries" so... ouch.

This patch should fix the issue: ce0fedeba5 / libais#264

libais needs so much cleanup at this point that it is painful. I also asked Antigravity to do a scan of the code for troubles. In addition to finding lots of spelling mistakes, there are plenty of places to improve the code. Sigh.

Here is a sample from ais8.cpp:

### Specific Typos and Grammatical Mistakes
* **Line 293**: 
  ```cpp
  // Some people transmit without the idiodic spare padding
  ```
  *Typo*: `idiodic` should be spelled **`idiotic`**.
* **Line 138**: 
  ```cpp
  // TODO(schwehr): how to treat this spare vrs water level?
  ```
  *Typo*: `vrs` should be spelled **`vs`** or **`versus`**.
* **Lines 324 & 358**: 
  ```cpp
  horz_viz(0.0) ... horz_viz = bits.ToUnsignedInt(246, 8) / 10.;
  ```
  *Inconsistency/Typo*: Abbreviating "horizontal visibility" as `horz_viz` uses a 'z' instead of 's' (`horz_vis`), which conflicts with line 72 and line 
568 where it is correctly named `horz_vis`.
* **Line 421**: 
  ```cpp
  ice_thickness = bits.ToUnsignedInt(324, 7) / 100.;  // m.  Network is cm,
  ```
  *Grammar*: The inline comment ends abruptly with a trailing comma (`cm,`) instead of completing the sentence or ending with a period.

In addition to mispelling "idiotic," I can just remove that word. I don't really need to express my frustration over the AIS specification like that. 😎

Thanks to github.com/raefko for the bug report!

My current work computer configuration

Two days and two blog posts. Doing well so far on my goal to write / blog a lot more. Now, I just need to use more emojis to keep up with the folks at work. 🎉

I wish I had done this each time I had changed computers so I could see the progression (or regression - my last desktop was far less powerful than the 2nd to last desktop). 

On my desk is my personal machine, a System76 Mini Meerkat from 2024 running Ubuntu 2024. I don't use it all that often, but it works great and it's small.

I currently have this as my primary human interface for work:
  Model Name:	MacBook Pro
  Model Identifier:	Mac15,7
  Model Number:	MRW23LL/A
  Chip:	Apple M3 Pro
  Total Number of Cores:	12 (6 performance and 6 efficiency)
  Memory:	36 GB
  System Firmware Version:	mBoot-18000.120.36
  OS Loader Version:	11881.140.96.701.1

  Drive: APPLE SSD AP0512Z

  uname -a
  Darwin schwehr-mac 24.6.0 Darwin Kernel Version 24.6.0: Tue Apr 21 20:16:56 PDT 2026; root:xnu-11417.140.69.710.16~1/RELEASE_ARM64_T6030 arm64
My primary workstation is a Debian based linux cloud VM:
tail -25 /proc/cpu

processor	: 127
vendor_id	: AuthenticAMD
cpu family	: 25
model		: 1
model name	: AMD EPYC 7B13
stepping	: 0
microcode	: 0xffffffff
cpu MHz		: 2449.998
cache size	: 512 KB
physical id	: 1
siblings	: 64
core id		: 31
cpu cores	: 32
apicid		: 127
initial apicid	: 127
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
TLB size	: 2560 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual

head -1 /proc/meminfo 
MemTotal:       247571292 kB
That seems like a lot, but the VM is likely sharing that with a lot of other VMs. And I'm using Linux 6.18.14 kernel.

I spend most of my time ssh'ed into Linux running work's setup which is mostly Bazel builds with Google's version of Perforce called piper/g4. I frequently use copybara to migrate open source code to the local monorepo. I often use the command line version of Antigravity. But I also spend a fair bit of time using git and emacs for open source work. On the graphical side, it's all in Chrome with Googles internal version of VC Code, Google's code review tool Critique, Google's Buganizer, and a lot of Google Docs. Not very exciting. Occasionally, I get to try out jj (which is fun) and sometimes I'm forced into mercial/hg (which I haven't liked since I tried to teach it in a class back in 2011). 

I used to keep documents that I used for each machine I had on how to configure them. Work locked me out of a lot of software on the Mac and with my cloud vm, I don't to machine updates any more. I regret not trying to do that. That's especially true now that one of my kids just got a Windows 11 HP laptop. I last worked on configuring a Windows machine somewhere in the 2009-2011 time frame. I know nothing first hand anymore about Windows configuration except to disable MacAfee's trial antivirus and make sure Windows Defender is running.