Blog
2026
2026-08 Curving a Pipeline with Joint Deflection Instead of Fittings
2026-08 Sizing a Thrust Block, and When to Stop and Use Restraint
2026-08 Planning a Shutdown Against a Hard Window, Buffer and All
2026-08 Flushing a Water Main: Velocity Scours, Not Flow
2026-08 Measuring Pump Capacity by Drawdown, and the Inflow Correction
2026-07 Finding the Pump Operating Point, and Why Parallel Pumps Don't Double Flow
2026-07 Encoding SVG as a Data URI, and Why URL-Encoding Usually Wins
2026-07 Drawing a Channel Cross-Section in SVG, and the 94% Quirk
2026-07 Building a Stage-Storage-Discharge Curve, the Input to Routing
2026-07 CT Compliance, T10, and Why Peak Flow Governs Disinfection
2026-07 Hydrotest Makeup Water and the 148,000 vs 133,200 Divisor
2026-07 Logging Tracer Study Samples with One-Tap Timestamps
2026-07 Translating a Raw Ultrasonic Reading into Weir Flow
2026-07 Diagnosing VFD Rotation Conflicts Between Hand and Auto
2026-07 Detecting Subnet Mismatches Between Field Devices
2026-07 Water-Tightness Testing Concrete Basins per ACI 350.1
2026-07 Tracking Working-Day Contract Time with Computed Federal Holidays
2026-07 Replacing the Granny Knot and Supporting Independent Web Resources
2026-07 Tagging Water Infrastructure in OSM, and Where the Line Is
2026-07 Calculating Ventilation Purge Time (Which Is Not Entry Clearance)
2026-07 Logging Rain Events and SWPPP Inspections Client-Side
2026-07 Cloning GitHub Issue Labels via CLI
2026-07 Preventing Data Bloat with HTML5 Video Preload None
2026-07 Reading TIFF Orientation Tags Client-Side
2026-07 Rendering SVGs Locally
2026-07 Generating JavaScript Bookmarklets
2026-07 Preparing Images for Print Client-Side
2026-07 A Local SVG Sandbox
2026-07 Running QuickJS via WebAssembly
2026-07 Viewing EXIF Data Locally in the Browser
2026-07 Previewing HTML Client-Side
2026-07 A Vanilla JavaScript Pomodoro Timer
2026-07 Running Tesseract OCR Locally in the Browser
2026-07 Client-Side Image Format Conversion to JPEG
2026-07 Generating QR Codes with Vanilla JavaScript
2026-07 Converting Raster Images to Vector Graphics Locally
2026-07 Extracting Tabular Data from Hypertext Markup Language Documents
2026-07 Calculating Date Deltas via Client-Side Execution
2026-07 Detention Time and Disinfection CT with EPA Baffling Factors
2026-07 Scaling 4–20 mA Loop Signals, Linear and Square-Root
2026-07 Flood Freeboard Checks and the NGVD29/NAVD88 Datum Trap
2026-07 Slippy Tile Math and the Overpass Bbox Comma Shuffle
2026-07 Temporary Flow Measurement with Weirs and Orifices
2026-07 Deleting trash on Trash-1000 on Linux external drives
2026-07 LaTeX diagram workflow with AI and TikZ
2026-07 Water Hammer Quick-Checks: Joukowsky and the 2L/a Trap
2026-07 Solving Manning's Normal Depth by Bisection Client-Side
2026-06 A Hand-Method HDS-5 Culvert Headwater Check
2026-06 Billed vs. Received, and What Retention Does to the Cash Curve
2026-06 Rebar Weight Takeoff and ACI 318 Lap Splice Lengths
2026-06 The Earned Value S-Curve, CPI Stability, and the 90% Syndrome
2026-06 Checking Flotation Safety Before Draining a Structure
2026-06 Walking a Metes-and-Bounds Traverse, with Closure Diagnostics
2026-06 The Water Units That Cause Real Errors, in One Converter
2026-06 Asphalt Patch Tonnage for Trench Restoration
2026-06 A Look-Ahead Gantt That Deliberately Has No Dependency Logic
2026-06 Sizing Deflection Test Mandrels from the Base Inside Diameter
2026-06 Reading the Submittal and RFI Backlog as an Aging Histogram
2026-06 Timing Low-Pressure Air and Manhole Vacuum Tests
2026-06 Scaling Pump Performance with the Affinity Laws
2026-06 Converting GeoJSON, WKT, and CSV Geometry, with a Lat/Lon Swap Detector
2026-06 Why Detention Basins Size on a Storm Longer Than Tc
2026-06 Calculating NPSH Available Before the Pump Tells You Itself
2026-06 Calculating Wet Well Cycle Time and Pump Starts per Hour
2026-05 Circular-Mil Voltage Drop for Temporary Power Runs
2026-05 Checking Crane Picks Against Chart Capacity
2026-05 Curve Number Runoff and When Area-Weighting Lies
2026-05 Checking Field Compaction Against the Proctor
2026-05 Estimating Annular and Abandonment Grout Volumes
2026-05 Coordinate Conversion from Snyder, Verified Against Its Own Invariants
2026-05 Trench Quantities in Bank, Loose, and Compacted Yards
2026-05 Computing Bypass Pumping Total Dynamic Head with Hazen-Williams
2026-05 Peak Flow by the Rational Method with a TR-55 Tc Builder
2026-05 An Offline Chlorine Dosing Calculator for Water Main and Tank Disinfection
2026-03 Scrubbing photo GPS data with ExifCleaner
2026-03 Fixing NTFS/exFAT superblock mount errors on Pop!_OS
2021
2015 - Peace Corps Mali
Disclaimer: This is the personal website of Malcolm Smith, a Peace Corps Volunteer in Mali from June
2015-August 2017. The purpose is to maintain communication with family and friends while abroad. The
contents of this website are mine personally and do not reflect any position of the U.S. Government or the
Peace Corps.
2015 - UMN