Hobbies
Programming
You can find my programming projects on GitHub.
Topas (source code) is a "from scratch" chess engine I created as a hobby project. It is an open source UCI chess engine written in Rust that uses traditional search and evaluation techniques. It has a CCRL Blitz rating which you can find here. You can play against Topas on Lichess (running on a Raspberry Pi 5) here.
Coral (source code) is an open source chess GUI I created to go along with Topas. It is a cross-platform GUI written in Python.
Interactive Celestial Sphere (source code) is a "vibe coded" (with Claude Sonnet 4.5) interactive, browser-based celestial sphere that I built for better visualizing my set of deep space astrophotography images found below. Try it out here.
Smartphone Astrophotography
I've started experimenting with untracked smartphone astrophotography using an iPhone 16 Pro and either an Orion SpaceProbe 130ST EQ or an Apertura AD8 Dobsonian, as well as free image software including AstroShader, GIMP, DeepSkyStacker, PIPP, AutoStakkert, Siril, and StarNet.
All of these images were taken in a Bortle 5 environment in suburban Massachusetts, unless otherwise noted.
You can interactively view the deep-sky images here.

Jupiter and Europa
Europa (bottom left of Jupiter) is casting a shadow near the bottom of Jupiter
20 images stacked + post-processing (taken with SpaceProbe 130ST)

Jovian System
From left to right: Europa, Jupiter, Io, Ganymede, and Callisto
Jupiter: 20 images stacked + post-processing (taken with SpaceProbe 130ST)
Moons: Single image, over-exposed and merged with Jupiter image

Saturn and Titan
Saturn: 13 second video (400+ frames) stacked + post-processing (taken with SpaceProbe 130ST)
Titan: Single image, over-exposed and merged with Saturn image

Mars
8 second video (263 frames) stacked + post-processing (taken with AD8)

Venus
19 second video (559 frames) stacked + post-processing (taken with AD8)

Uranus
7 second video (198 frames) stacked + post-processing (taken with AD8)

Neptune
11 second video (274 frames) stacked + post-processing (taken with AD8)

Moon (Composite)
A 2-image composition, consisting of a darken full moon transparently overlayed and aligned on a bright partial moon (taken with AD8) to provide an increased dynamic range effect. Here is an example of making these kinds of images, although I didn't follow this procedure exactly.

Moon
Single image; the light portion of the above composite image

Harvest Moon
Single image + post-processing (taken with AD8)

Orion Nebula (M42) and M43
75 images stacked + post-processing (taken with SpaceProbe 130ST)

Ring Nebula (M57)
70 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Blue Snowball Nebula (Caldwell 22; NGC 7662)
52 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Dumbbell Nebula (M27)
80 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Andromeda Galaxy (M31)
137 images stacked + post-processing (taken with SpaceProbe 130ST)

Bode's Galaxy (M81) and Cigar Galaxy (M82)
100 images stacked + post-processing (taken with SpaceProbe 130ST)

Hercules Globular Cluster (M13)
100 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Great Pegasus Cluster (M15)
100 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

M92 Globular Cluster
100 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Angelfish Cluster (M71)
100 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Pleiades (M45)
50 images stacked + post-processing (taken with SpaceProbe 130ST)

Double Cluster (Caldwell 14; NGC 869 and NGC 884)
74 images stacked + post-processing (taken with SpaceProbe 130ST)

Spiral Cluster (M34)
85 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Shoe-Buckle Cluster (M35)
30 images stacked + post-processing (taken with SpaceProbe 130ST)

Scorpion Cluster (M52)
80 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Beehive Cluster (M44)
30 images stacked + post-processing (taken with SpaceProbe 130ST)

Owl Cluster (Caldwell 13; NGC 457)
34 images stacked + post-processing (taken with SpaceProbe 130ST)

Christmas Tree Cluster (NGC 2264)
30 images stacked + post-processing (taken with SpaceProbe 130ST)

Satellite Cluster (Caldwell 50; NGC 2244)
30 images stacked + post-processing (taken with SpaceProbe 130ST)

Pyramid Cluster (M39)
40 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

NGC 7510
80 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Albireo
80 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)

Mizar and Alcor
30 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader)


First is 100 images stacked + post-processing (taken with AD8) (auto stacked on phone with AstroShader), second is a single, high magnification image showing further doubles


Comet C/2023 A3 (Tsuchinshan-ATLAS)
Single, unprocessed images


Northern Lights in April 2024
Single, unprocessed images (shot with iPhone 12 Pro)




Northern Lights in October 2024
Single, unprocessed images


Milky Way
Single, unprocessed images with 30 second exposure. Taken at Shenandoah National Park.

Milky Way
Single, unprocessed image with 30 second exposure.
Fishing
I enjoy freshwater fishing, mostly in the lakes and rivers of Massachusetts. The setup I use most is:
- St. Croix 6'8" Mojo Bass spinning rod (wacky style) with medium power and extra fast action
- Shimano Vanford 2500HG spinning reel
- Seaguar Tatsu 8lb fluorocarbon
I've won two Freshwater Sportfishing Awards from the Massachusetts Division of Fisheries and Wildlife (MassWildlife). These bronze pins were for a catch-and-release 21.5" largemouth bass (5lbs 9oz) and a catch-and-release 25" chain pickerel, both shown below.



