Java is the language of healthcare IT. Deepening expertise in Spring, Spring Batch, and ETL patterns to be as valuable as possible across corporate and industry-wide systems.
In 1929, Baylor University Hospital in Dallas introduced one of the earliest U.S. health insurance plans, initially covering local school teachers. This prototype eventually evolved into the Blue Cross system.
My first taste of tech was the almighty Atari 2600 around 1978. A 6507 MOS CPU (hmm, was this before Commodore bought MOS?) and a huge 128 bytes of RAM. I was a huge arcade lover, and even built a full-sized MAME cabinet around 2000 with hundreds of my favorite gamess. I've owned a VIC-20, and still have my Commodore 64 & monitor. I'm learning 6510 assembly these days. Too many consoles to count, including the very questionable 3DO purchase.
I've spent 25 years in the healthcare industry, following a decade in banking. My career has centered on data: starting in QA, testing data propagation jobs. I then moved to a Test Data Management team where I built an ETL-based process from scratch that quadrupled our environment setup speed.
I currently work on a healthcare interoperability team, enabling provider access, patient access, and payer-to-payer data exchanges via the FHIR standard. I've also introduced synthetic data pipelines into lower environments using Synthea, and built Splunk dashboards for our EDI Gateway team.
Each night I set aside time to learn new skills — Java mastery, 6510 assembly on the C64, advanced SQL, cloud computing, AI integrations, and whatever corner of the homelab needs attention next (always something).
I've run some form of home server since 2012, starting with FreeNAS 8.3 on a SuperMicro board that (unbelievably) is still running NAS duties today. The lab has grown massively since.
- Proxmox VE cluster (primary hypervisor, 64GB RAM)
- TrueNAS (dedicated ZFS storage, 24GB ECC)
- UnRAID (media server, 64GB RAM)
- Lenovo ThinkPad X220 (Fedora i3 dev box)
- Onsite Proxmox Backup Server
- Offsite Proxmox Backup Server
- TrueNAS — SuperMicro/Xeon/24GB ECC (2012!)
- 12TB ZFS RAIDZ1 mirrored pool + hot spare
- UnRAID - consumer MB/i7/64GB
- 120TB UnRAID array, 2x2TB cache
- Full Unifi stack
- 30+ home Ethernet runs
- Nginx Proxy Manager (edge)
- PiHole (macvlan DNS)
- fail2ban on NPM container
- Authelia SSO
- Grafana + Prometheus + Loki
- Synthea + HAPI FHIR Server
- Plex · Tautulli · *arr Stack
- Nginx Proxy Manager · Vaultwarden
- Home Assistant (Z-Wave, Rachio), 35 nodes
- Blue Iris NVR
- Vikunja · Linkwarden · FreshRSS
Building an internal REST API around Synthea for synthetic patient generation, with OAuth 2.0 isolation and FHIR R4 output for lower-environment test data.
Self-hosted Keycloak + Node.js OAuth learning project modeled on real-world CMS Payer-to-Payer FHIR exchange patterns, including patient-scoped JWT tokens.
Full observability stack: Grafana dashboards, Prometheus exporters, Loki log aggregation, GeoIP world map of access logs, and fail2ban ban tracking via NPM log parsing.
Window functions, CTEs, Git best practices, Data Lake architecture, FHIR interconnectivity — always leveling up.
The Commodore 64 was introduced in 1982 and remains the best-selling single personal computer model of all time. Its MOS 6510 CPU (a variant of the legendary 6502) runs at ~1 MHz and addresses 64KB of RAM. Despite that constraint, it produced remarkable software — and I'm learning why firsthand.
I'm currently dipping my toes into 6510 assembly language — learning to speak directly to the hardware, working through addressing modes, registers, and the peculiarities of the C64's memory map. There's something deeply satisfying about understanding computation at this level.
- MOS 6510 CPU @ ~1 MHz
- 64KB RAM (with bank switching)
- MOS 6581/8580 SID chip (audio)
- MOS 6569 VIC-II (video)
- MOS 6526 CIA ×2 (I/O)
- 16-color palette
- 320×200 / 160×200 graphics modes
- 3 registers: A (accumulator), X, Y
- Stack pointer + program counter
- Addressing modes: immediate, zero page, absolute, indexed...
- Key instructions: LDA, STA, LDX, INX, BNE, JSR, RTS
- Memory-mapped I/O for everything
- IRQ/NMI interrupt-driven tricks
* = $C000 ; load at $C000 in RAM
CHROUT = $FFD2 ; KERNAL print-char routine
START LDX #$00 ; X = 0 (index into string)
LOOP LDA MSG,X ; load next char
BEQ DONE ; if zero, we're done
JSR CHROUT ; print it via KERNAL
INX ; next char
BNE LOOP ; loop (X wraps at 256)
DONE RTS ; return
MSG .TEXT "HELLO FROM JASONHALL.NET"
.BYTE $0D,$00 ; CR + null terminator
Feel free to reach out about healthcare IT, FHIR, homelab setups, C64 assembly, or just to say hello. I am not currently seeking employment, but am always happy to connect with fellow nerds.