I’m a software developer in the PNW. I enjoy running, bird photography, and tinkering with software.
I hope to publish informative, helpful articles to this blog, as well as document my personal projects.
I can be reached at "phil" at this domain.
PGP
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
My PGP key, with fingerprint:
FFEE 11F1 BC11 F982 883E E809 0495 E560 5977 7C7B
can be found here at:
https://philthompson.me/about
and on public key servers, such as:
https://keys.openpgp.org/search?q=FFEE+11F1+BC11+F982+883E+E809+0495+E560+5977+7C7B
-----BEGIN PGP SIGNATURE-----
iHUEARYIAB0WIQTrWmr4U4hBQ/LDj79lhthTICF+pgUCZGPJ9AAKCRBlhthTICF+
psUQAQD7clBbWs33o+ahE3bqTyZTTY9sn1eWe7zNOua6pUnQnQEAxUYtj9MOPGpU
b4eNPwfsyyQDbhrbm/cRyrGpyX9+sQQ=
=zbXl
-----END PGP SIGNATURE-----
Public Key
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEXOuTXRYJKwYBBAHaRw8BAQdAJVhoEJ3KVZOY+arwiNTXFa8pYTQY8bWtgtB3
7PRZGQu0JFBoaWwgVGhvbXBzb24gPHBoaWxAcGhpbHRob21wc29uLm1lPoiWBBMW
CgA+FiEE/+4R8bwR+YKIPugJBJXlYFl3fHsFAlzrk10CGwEFCSHVnwAFCwkIBwMF
FQoJCAsFFgIDAQACHgECF4AACgkQBJXlYFl3fHu32AEA2XRDOr0cSuwCESZ5mBBa
yMnvlnojU9bVUuNyZcQg6n4BAKXK002xZ0HmICCpqnf5VquI96r2OQNp8H67sgwB
O70FuDMEXOuVUhYJKwYBBAHaRw8BAQdAksDtxZYhOzpiV5pOduzffDzTh3B7jJ8g
mV0E5qOf0B+I9QQYFgoAJgIbAhYhBP/uEfG8EfmCiD7oCQSV5WBZd3x7BQJkY7/F
BQkLRm7zAIF2IAQZFgoAHRYhBOtaavhTiEFD8sOPv2WG2FMgIX6mBQJc65VSAAoJ
EGWG2FMgIX6mrM0A+gLgFk0k31xrRYSMHTnPp2fpJTX08QHm6XlVxlCp65JjAQDQ
VxFbX332HlMrb3u3lD8Ys/XFOCNf60DjefeA/NJjDQkQBJXlYFl3fHuN5AD/aJsb
2UGYOt8wtCKr5rJAJ/z5BHwnHQ8ILzERAsuaFIoBAM7QIVT1R4EdrAZoUBUGiXR8
wmAZDoW6WkaTHlvd6FwCuDgEXOuVmRIKKwYBBAGXVQEFAQEHQPc374Ij6oCoOfR/
0fJaBPxcjS+4S+x6ekk8LSVwXWYuAwEIB4h+BBgWCgAmFiEE/+4R8bwR+YKIPugJ
BJXlYFl3fHsFAlzrlZkCGwwFCQPCZwAACgkQBJXlYFl3fHtznQD9EpvMRIYtdzoB
b7AUHyEbhNbY7mBnFyOBsT5KkjoKGi0BAL+Bapa7JjPlM41rtppq5bqdJca0H/XL
C8i8mVyREm0JuDgEYHwkSBIKKwYBBAGXVQEFAQEHQEIfvq4KtVDmI3VjFtQSyqXN
P1ZoVhlQlXDIE6J+bThBAwEIB4h+BBgWCgAmFiEE/+4R8bwR+YKIPugJBJXlYFl3
fHsFAmB8JEgCGwwFCQP0gAAACgkQBJXlYFl3fHsWXwD/VGb3W7NomvLntbgNq3m9
2MBA3angNjhhMBfu0RCE2BgA/19IdSXyz9Nk5GWogLAon35ktwqNXQWhwsbJTyEH
7/oMuDgEZGO/7RIKKwYBBAGXVQEFAQEHQMRjMKkVP+Oo/gquMn6lX75prXiV2AgR
L85zqAU2hbZgAwEIB4h+BBgWCgAmFiEE/+4R8bwR+YKIPugJBJXlYFl3fHsFAmRj
v+0CGwwFCQPORIAACgkQBJXlYFl3fHujHAD9Gnc8HFmF59NNVc/xXXB06OJvZCYc
JN5Z0sHs7yfi5xcA/jutaMb8OliO11vVojPZA0lkMDevJbGodB4gBWu/KCMC
=OZwe
-----END PGP PUBLIC KEY BLOCK-----
Portfolio
A visual listing of this site's tools and apps is available here.
- 2D Gravity Simulation, 2024
- a set of JavaScript toy pages for simulating gravity in two dimensions
- Noise Flow Field, 2024
- JavaScript app for generating digital art with Perlin noise flow fields
- Cascading Bloom Filters, 2024
- JavaScript app for playing with cascading bloom filter parameters
- Counting Birds in Photos, 2024
- A small Python script using OpenCV to count birds in photos, but is general enough to count any type of "spots"
- the source code is available in its GitHub repository
- "Break | Away" EP, 2024
- Electronic/Chill EP available on all major music streaming platforms
- Click Counter, 2024
- JavaScript app for counting things in images
- Image Stacking in Python, 2024
- A set of Python scripts to align and stack astrophotography frames using OpenCV
- while I've used my code to align and stack frames for several of my astro photos, I'm unsure if I want to publish it on GitHub since it is slow and not user-friendly, and I don't want to devote more time to its ongoing development
- Pi random, 2024
- JavaScript toy that approximates Pi with randomly-placed points
- Fractal Trees, 2024
- JavaScript toy that generates fractal trees
- NFL Elo Power Rankings, 2023-2024
- written in Python
- parses Wikipedia data, calculates Elo ratings, and outputs the above linked page
- test harness for adjusting Elo rating model parameters, which backtests the model on several years' worth of NFL games (12 full seasons at the time of writing)
- Partial String Match for Birds, 2023
- tested out algorithms for finding partial string matches of bird species names
- I found my algorithm to work well enough, and to run fast enough, for use in smartphone apps (this would fix a gripe I have with the otherwise perfect eBird app)
- implemented the algorithm in JavaScript, and published pages for testing and running the algorithms
- in the above linked post, I outlined the steps taken to develop the algorithm
- "Smarter than a Chimp" game, 2023
- a simple JavaScript canvas-based memory game
- the source code is available in its GitHub repository
- Calculating the Mandelbrot set with BLA: Bivariate Linear Approximation, 2023
- a JavaScript implementation of BLA for Very Plotter, my web Mandelbrot set viewer
- this was the cutting-edge Mandelbrot set approach, as of May 2023, which was developed by others (see the discussion at fractalforums.org) starting at least as far back as 2021
- Advent of Code, 2022
- solved nearly entirely by myself, with python 3, after nearly a month of concentrated effort
- my code is available on GitHub
- birds "year in review" and favorites pages, 2022
- created by writing photo metadata into a SQLite database, and then running queries and writing static pages, all with python 3
- photography gallery pages, 2021
- these galleries are statically generated with a bash script, including some SQLite for faster re-generation of previously pre-processed gallery content
- Water Jars game, 2021
- Very Plotter, 2021
- view the Mandelbrot set, and plots of a few mathematical sequences
- uses JavaScript worker threads, the number of which can be updated on the fly
- the source code is available in its GitHub repository
- rust-calc-term, 2020
- a terminal-based calculator powered by bigdecimal math, written in Rust
- qrcodejs, 2018
- a JavaScript page for interactively generating QR codes
- the source code is available in its GitHub repository
- this website, 2018
- static site files are mostly generated with bash scripts
- no JavaScript, except for some individual JavaScript-based pages mentioned here
- background on the site generator was provided in a blog post.
- the source code is available in its GitHub repository
- screensavejs (interactive, 2018) / harvey.dog (non-interactive, 2016)
- a JavaScript page that paints a blurry rendition of any image file
- Javascript toy: black & white box, 2015
- finds a box (many are possible) describing the percentage of black and white pixels, where the text itself is counted
- inspired by the xkcd #688 Self-Description
- also available for fiddling with at jsfiddle
Other Links