Mauborgne: the best 2FA OTP authenticator app for elementary OS (and anywhere else flatpak)

This app has been a labor of love during my parental leave. This app “scratched an itch” — I wanted an elementary OS native authenticator for all of my 2FA OTP codes

So, why do I think it’s the best app available?

  • Code Type Support It supports both TOTP and HOTP codes. I don’t have any services that use HOTP codes, but it does support them
  • Dynamic Code Paste Since TOTP codes expire, copying a code will always paste the most current code, not necessarily the code that was active when you clicked the Copy button
  • Roundtrip Support For Aegis Mauborgne can both import and export using Aegis’ encrypted JSON vault files
  • Flatpak Native Mauborgne uses Flatpak portals to capture screenshots, to load and save files, and to securely protect your pad’s secrets. It thus uses the bare minimum of Flatpak permissions
  • Attractiveness Thanks to the elementary OS platform underneath, the app looks sleek. It natively supports both light and dark mode using system preferences (on elementary OS 6.0+ and will also work on GNOME 42+)

    You can get the app on the elementary OS AppCenter, or if running other operating systems that support Flatpak, installing from the the Flatpakref file.

Hibernate+JPA Multi-version concurrency control with Postgres

If you are working with Postgres and using JPA via Hibernate, here’s a short cut to get MVCC without having to add an extra column to your database tables:

@Column(name = "xmin", columnDefinition = "xid")
private int version;

Postgres automatically creates and maintains the “xmin” column, and JPA already supports the concept of @Version columns. Hibernate adds on support for database-generated Version columns. Now, xmin is really a “xid” type, but it happily accepts casting to and from Java’s int type.

Does Fat Fit: 2018 Chevrolet Equinox LT

For people who don’t know me, I’m a rather large guy in 3 dimensions. I’m tall (just about 6’0) and round (north of 400 lbs).

My truck (2010 Ford F-150) recently had its warranty expire, and it was beginning to show problems resulting from both its age (8 years) and the accidents its been in (1 major, 2 minor). It also had HORRIBLE gas mileage on my daily commute (from Hiram, GA to Buckhead in Atlanta, GA — it averaged between 8 mpg and 14 mpg). So.. I convinced the wife to let me trade it in for something more economical.

And so we got the 2018 Chevy Equinox. It’s a compact SUV, same class as your Toyota Rav4 or Honda CR-V.

My fat fits perfectly. It’s a little snug on the sides, but not horribly so. The steering wheel doesn’t touch my gut or my knees. The seat belt actually fits! (It didn’t even in my F-150). I can reach the pedals just fine.

I highly recommend it for other large people looking for a compact SUV.

Git: Require Work Item # (Or Similar) In Commit Messages

So here at Videa, we require that Git commits have the TFS Work Item # in the Commit message for linking the work to the Work Item.

In order so that I don’t forget ever again, I wrote a commit-msg hook in Git to keep me honest.

Save the following as “.git/hooks/commit-msg” in your Git Repo. This works on Windows and *nix with any tool that uses the git command line (SourceTree does, however other tools are YMMV)


grep -EHnq "^((Fixes|Resolves|PBI|Bug|Task|Work Item|WI): (\#([0-9])+|None)|Merge branch '(.*)' into)+" "$1"; RET=$?
if [ $RET -eq 0 ]; then
    exit 0

echo "ERROR: Work Item # missing in commit message" 1>&2
exit 1



Comcast X1 Gigabit vs AT&T Fiber (Gigapower)

I live in unincorporated Paulding County, Georgia in a “Planned Residential Development” subdivision (Ballentine Pointe). It’s one of the few subdivisions in a relatively rural area (Paulding is basically the rural-suburban fringe) that has both AT&T Fiber (thanks to them upgrading BellSouth FTTC infrastructure) and X1 Gigabit (being part of the Atlanta market).

Looking at JUST Internet, here are how the 2 companies compare:


  • Delivery Method: Fiber
  • Speed: 1 Gbps down, 1 Gbps up
  • Included Data Usage: Unlimited
  • Price: $70/mo

Comcast Xfinity:

  • Delivery Method: DOCSIS 3.1 over coax
  • Speed: 1 Gbps down, 35 Mbps up
  • Included Data Usage: 1 TB
  • Price: $139.95/mo

What is Comcast thinking? They are delivering a slower lower quality product with less included data for quite literally twice the cost.


Then we start looking at bundling TV with the deal….

AT&T offers your choice of U-Verse 450 or DirecTV Premier, with 4 TVs and whole home DVR (and 4K with DirecTV) for less than $200/mo for 2 years (and $250/mo after that)

I’m currently on the X1 HD Complete bundle, which currently costs $200/mo, with a normal price of $250 after 2 years, basically the same deal AT&T offers.

Except that it only includes 105/20 Mbps internet and it has a 1 TB data usage limit.

I could quite literally get Gigabit internet over Fiber, extend my promotional pricing for another 2 years, stop worrying about data usage (we watch a lot of Netflix, Amazon Video, Hulu, etc..) get Disney Junior and Nick Jr. in HD (Xfinity only has them in SD for some reason, they did use to have them in HD, but not anymore… I have a 1 year old after all), just by switching to AT&T.

However, I’ve been a Comcast customer for quite literally half my life at this point. I really don’t want to switch, since its annoying. I just wish a human being at Comcast is willing to realize that they are losing a very valuable high ARPU customer because their pricing is stupid and non-competitive.

However, Comcast… has been disappointing so far. I’m going to try and keep pushing them to actually compete. They have until April for various reasons to do so.

New Job, Yet Again

I ran into a problem many have in the startup world: funding runs dry. As such, I’ve embarked in a change in my career path.

I’m now a Principal Software Engineer at Videa, part of Cox Media Group, a Cox Enterprises business.



Aura 1.3.0 released

Aura 1.3.0 has been released (and available on NuGet), with the following improvements:

  • We now depend on updated MongoDB Drivers
  • Preliminary support for Full Text Search

If you’ve enabled Full Text Search on your MongoDB server, you can do the following:

  • Call EnsureTextIndex on in your record manager’s Initialize override with the fields you want searched
  • Get a result by calling TextSearch from within your record manager subclass with the query you want passed to the full text search engine

We do not currently support weights, or any other full text search features. We will be working on it however!