My name is
Doug
Fenstermacher
I build software for novel projects, and for the people who use them.
My Projects
From long runs to code sprints
I used to run competitively. These days I chase solutions that work for real people in real places, not just demos that impress in conference rooms.
I like building sustainable solutions for specific problems. Here are some of the components that can be combined, adapted, and maintained long after the initial build.
Web/App Development
I led the redesign of a large research organization’s interactive public software catalog and several of its internal sites and applications. For its analytics, I built an institution-wide zero-configuration way to segment internal staff from the public, with no authentication and no exposure of internal information. I also have experience building creative consumer-facing sites that drive engagement, registrations, and philanthropic giving, instrumented with Google Analytics enhanced e-commerce tracking and HTML email campaigns integrated with Salesforce Marketing Cloud.
Data Analysis
I turn messy data into something people can act on, from ETL pipelines on Oracle databases to Python for wrangling, anomaly detection, recommendation systems, and information extraction. I’ve worked with topic models on large corpuses, trained NVDM models in PyTorch with a custom loss for keeping topics distinct, and worked with semantic embeddings for search and trajectory similarity. Upstream, I contribute to open source projects such as gensim, where I improved Wikipedia segmentation to include articles’ categories as ready-made training labels.
Machine Learning
I build retrieval-augmented generation systems and use semantic embeddings for text classification, clustering, trajectory similarity, and concept representations. I have trained and deployed PyTorch text classifiers using custom hierarchical loss functions and class taxonomies with prediction thresholds. Upstream, I’ve contributed to mainstream libraries, updating Hugging Face’s tokenizers.js to work with modern client-side bundlers and fixing the tomotopy topic-modeling library’s build to be compatible with older GCC compilers.
Operations Research
WebAssembly now allows native compute speeds in the browser. Capitalizing on this, I ported a lightweight Rust graph library (petgraph) to JS/WASM and implemented custom optimization algorithms. This dropped execution times by 3x to 400x over native JS alternatives, enabling offline use, offloading compute from servers, and allowing zero-cost experimentation by hobbyists that eventually diffuses back into commercial software. I also contribute upstream, including implementing the summarization module in NetworkX.
System Architecture/Design
I work on the infrastructure constraints that stall distributed web deployments. I designed and merged the WasmEntryPoint directive into Apache’s mod_wasm, letting developers specify custom module entry points, and built the testing framework for its C API. DoG Studio, my tool for sketch-ifying images and video, falls back from WebGPU to WebGL to CPU and tiles large images through small GPUs off the main thread. I have also built isolated code-execution sandboxes for LLM chatbots, along with Docker, GitLab CI/CD, and REST API experience.
My blog is where I think out loud about messy, real-world problems. Sustainable solutions, impact-driven design, practical approaches that outlast the next shiny framework.
Directed Random Walk Betweenness Centrality
A random-walk betweenness centrality implementation that extends it to directed graphs using absorbing Markov chains
Tags
Epochron Multi-Stopwatch
Most stopwatches assume one runner and one clock. Epochron is built for coaches and timers tracking multiple people at once. It supports group stopwatches for relays, heats, or ranked comparisons, and get live split predictions mid-race instead of doing the math yourself. It runs entirely in the browser, works offline (built for track meets with no signal), and keeps all data on your device. No account required.
Tags
DoG Studio: Computing and Compositing Aesthetically Pleasing Lines
A deeper dive into modern approaches for generating aesthetically pleasing lines based on difference-of-Gaussians (DoG) edge detections.
Tags
XDoG: Computing Aesthetically Pleasing Lines
A deeper dive into modern approaches for generating aesthetically pleasing lines based on difference-of-Gaussians (DoG) edge detections.
Tags
Streamline Hatching: A Programmer's Attempt at Computational Drawing
Sharing an attempt at computational hatching. Using structure tensors, edge tangent flow, and streamline integration to transform photographs into hand-drawn-looking illustrations.
Tags
Balancing LLM Prompt Analytics and User Privacy
Learn how to implement effective prompt analytics for large language models while safeguarding user privacy. Discover key strategies, best practices, and ethical considerations in this guide.
Tags