Data Engineer & Software Engineer
Databricks · Python · SQL · CI/CD — plus 12+ years of enterprise software delivery
Data engineer and software engineer with 12+ years developing, modernizing, automating, and supporting enterprise applications and data-processing solutions — from migrating legacy Oracle SQL into distributed Databricks pipelines to keeping decade-old production web apps alive under modern PHP. Comfortable across the stack, from backend automation to the client sites I still build and maintain independently under fuzedlogic.
# Apply only what changed since the last run, using # Delta Change Data Feed -- not a full-table reload. # last_version: the table version the last run reached. from delta.tables import DeltaTable from pyspark.sql import Window, functions as F last_version = read_checkpoint("curated.orders") changes = (spark.read .option("readChangeFeed", "true") .option("startingVersion", last_version + 1) .table("raw.orders") .filter(F.col("_change_type") != "update_preimage")) # Several changes to one row? Keep the newest. newest = Window.partitionBy("order_id") \ .orderBy(F.desc("_commit_version")) latest = (changes .withColumn("rn", F.row_number().over(newest)) .filter("rn = 1")) (DeltaTable.forName(spark, "curated.orders").alias("t") .merge(latest.alias("s"), "t.order_id = s.order_id") .whenMatchedDelete("s._change_type = 'delete'") .whenMatchedUpdateAll("s._change_type != 'delete'") .whenNotMatchedInsertAll("s._change_type != 'delete'") .execute())
Technical skills
Professional experience
Software Engineer
Systems Analyst
Independent Databricks development
Outside of client work, I also build against the Databricks Genie API — a natural-language interface over structured data. This chat is talking to a live Genie agent through my own server-side proxy (Genie's own embeddable widget isn't available on this workspace), currently pointed at Databricks' sample bakery sales dataset.
Independent web development
Alongside full-time engineering work, I design, build, and maintain production sites end to end for small businesses under fuzedlogic — and keep them secure and running on current PHP and WordPress.
Side projects
Explored on the side, not yet built for a client.
Backend build
Static front-end → real PHP/MySQL backend
A community arts nonprofit's site had a "Join the list" modal that faked success client-side and threw the data away. Built the real backend behind it.
Wrote the validating PHP endpoint (server-side email format checks, duplicate detection), designed the tbl_email_list schema, and wired both the modal and a second footer form into the same table so the two signup paths can't fragment into separate lists. Added a branded HTML confirmation email sent through a bundled SMTP mailer, with the send failure path logged instead of silently swallowed.
Legacy maintenance
WordPress 7.1 · PHP 5-era theme → PHP 8.4
A solar company's quote-request site was still calling PHP extensions removed years ago — silently fataling on parts of the site and breaking every outgoing email.
Ported the theme's remaining mysql_* calls (removed in PHP 7.0) to mysqli across five form-submit files and the session-tracking code that runs on every page load. Found each() (removed in PHP 8.0) inside the bundled SMTP mailer's auth-detection logic — quietly fataling and breaking every outgoing email — then replaced the old mailer with one shared PHPMailer-based mailer used by all my client sites. Fixed a newsletter sign-up that returned a 500 and never sent its welcome email, and closed a SQL injection where the session cookie was pasted straight into a query.
Moved the database, mail and WordPress credentials out of the web root into a server-side config folder the site loads through small password-free stubs, with a loader that refuses a misplaced copy and logs exactly what's missing. Also tracked down a one-line path bug where a sibling include resolved relative to the wrong directory, which had worked by coincidence until a new include exposed it as a fatal error on every page.
Legacy maintenance
WordPress 4.0 → 7.1 · PHP 5 → PHP 8.4
A neighborhood pharmacy's refill-request site, still handling real customer accounts and still running on assumptions from a much older PHP era.
Upgraded WordPress from 4.0.1 to 7.1.2 and brought the custom theme up to PHP 8.4. Found and closed a login flaw where a pharmacist's session was created before the password was checked — knowing a pharmacist's email was enough to get in. Moved passwords from salted SHA-1 to password_hash(), re-hashing each account on its next login so no customer had to reset, and made reset tokens random, hashed and https-only.
Converted every request-driven query (refills, insurance, family members, account settings) to prepared statements, filtered the JSONP callback, and fixed mixed-content blocking, a logout 404 and a registration flow broken by hand-built JSON. The site is now covered by the daily automated checks below.
Web app
Ext JS 3 front end · PHP 8.4 / MySQL back end
A web app where customers scan items at home and get a ready-made shopping list: accounts, item search across a product database, and saved lists.
Moved every page from Ext JS 2.2 to 3.3.1, fixing a registration page that crashed outright and turning registration into an in-page dialog. Hardened the back end: password_hash() with transparent upgrade of the old salted SHA-1 hashes, hashed reset codes, prepared statements for login, registration and every request-driven query, CSRF tokens on every form handler, and database or mail errors no longer shown to visitors.
Brought the mailer and the rest of the PHP up to 8.4, and cleared the warnings that were logged on every login and search.
PASS OSG: wrong password is rejected PASS OSG: saved items list PASS OSG: logout ends the session PASS BPRX: members-only pages refuse visitors PASS BPRX: customer is kept out of the Rx manager PASS BPRX: refill list PASS EES: form: solar consultation FAIL OSG: linked files (logged-in pages) 1 missing: usb-to-serial-cbl-num.jpg (404) PASS EES: HTTPS certificate ...
PHP CLI · cron · email alerts
With one person maintaining several production sites, problems need to reach me before they reach a customer.
Wrote a cron-driven checker that uses each site the way a visitor would, every morning. It logs dedicated test accounts in and out, confirms members-only pages turn visitors away and customers can't reach the pharmacist tools, and posts deliberately mismatched forms that every handler must refuse, so nothing is ever saved or emailed.
It also checks every linked stylesheet, script and image, connects to each database and counts key tables, reads only the new lines of each PHP error log since the last run, and warns before a certificate expires. It emails a report only when something fails or recovers, plus a weekly all-clear. Its first runs turned up broken image, stylesheet and document links and PHP warnings on two sites, all since fixed.
How I work
01
Every project starts with what the business actually needs — not just what looks good in a mockup.
02
Clean, maintainable code and a design that holds up well past launch day, on infrastructure the client can actually afford.
03
Sites stay online and current — updates, security patches, and fixes don't stop once it ships.
Education
Master of Science, Information Technology
Hood College
Frederick, MD
Bachelor of Science, Computer Information Systems
DeVry University
Columbus, OH