David Pflug’s Project History

Table of Contents

1 Appsulate

1.1 Appsulate

  • Requirements:
    • Work with an international team to build a Linux distro to provide secured/trusted access to web apps
  • Solution:

    They had a custom Python build process when I signed on, and wouldn’t be swayed from it. I helped with solutions for additional security and hardening of the system, streamlining of the image, and troubleshooting.

    Helped coworkers with git workflow. Helped manage Jenkins CI.

  • Result:

    Helped get the thing working. Cut build time in half, image size by 30%. Reduced attack surface.

2 5th Circuit

2.1 Help desk email routing and scheduling software

  • Requirements:
    • “Fair” help desk schedule from a roster, with some constraint
    • Email routing updates for the above
    • Ability to schedule exceptiosn
  • Solution:

    Tried playing with some constraint-based programming, then simulated annealing, but ended up in a Jupyter notebook just walking through the permutations; our roster wasn’t that big.

    Cron+shell+modulo math for the email routing updater atd+shell for the exceptions

  • Result

    Worked rock solid for a couple years, before I left. I believe they’re still using it.

2.2 Looping video display unit

  • Requirement:
    • Something to loop a selection of videos on a display
  • Solution:

    A systemd unit + a small shell script + a Raspberry Pi and an afternoon to put it all together A Samba share for them to change the playlist was planned, but got mothballed by the client

  • Result:

    Stable, still in use

2.3 Process Automation for judge schedule display

  • Requirement:
    • We get emailed this stylized Excel spreadsheet and spend ~10-15min/day hand-copying it into this web interface
  • Solution:

    Two, actually.

    1. A Sikuli script that screen scraped and did everything for you Downside was it was very sensitive to small differences. Brittle. Using a different browser caused enough rendering differences to confuse it. Different workstations and resolutions broke it, too. It worked well enough to save time for the one person who was in charge of the task, though. After enough times being bothered by it:
    2. Banged out a small Python script that would read the Excel file and dump bare html to be copy/pasted into a code editor the web interface provided
  • Result:

    Saved a few man-hours/month

2.4 Help desk statistics

  • Requirement:

    Can you email out a weekly report of who worked on what, how many tickets they closed, etc? I’ve been doing it by hand but it takes like half an hour.

  • Solution:

    Hit the RT API with Python, but that was unreliable/broken. Ended up web scraping and generating the graphs with numpy and matplotlib

  • Result:

    Worked fine, though it couldn’t be automated; it needed my login password to get to the tickets.

2.5 Programming tutor

  • Requirement:

    “I’m tired of not knowing anything about computers. Teach me programming. I’m trying to decide between C and Python.”

2.6 Details:

We did weekly lessons for several months. Taught him computing basics, enough Python to be dangerous, git workflow, and how to find info he didn’t know.

2.7 Proxy switch

  • Requirement:

    Their draconian forced proxy had to be switched every time I changed counties, disabled outside the Circuit

  • Solution:

    Hooked into netctl, ran Squid locally, and changed upstream whenever location changed

3 Design Interactive

3.1 Fileshare

  • Requirement:

    Convert Windows Server file host to Linux

  • Solution:

    Samba, with clamav scans nightly

  • Result:

    Less load on the server

3.2 Workstation management

  • Requirement:

    Find a way to manage workstations without Active Directory/joining a domain

  • Solution:

    Used Puppet

  • Result:

    It was a bit rocky. It more or less worked, but Samba’s domain controller role is probably a better option. Should’ve pushed the client to either convert workstations to Linux or use Samba server.

    PDQ also works

3.3 VPN

  • Requirement:

    We need VPN

  • Solution:

    OpenVPN, deployed with Puppet, trained users

  • Result:

    Worked fine

3.4 Backups

  • Requirement:

    Backups, yo

  • Solution:

    Bacula set up on server and deployed via Puppet

  • Result:

    Actually didn’t get to finish this one. So close, though.

3.5 Hardware

  • Requirement:

    We need a copier and some printers, we want to support it in-house, and we’re mad at HP

  • Solution:

    Picked out a couple Brother models

  • Result:

    Worked great

4 GoCon

4.1 Mayo Clinic

  • Requirement:

    Interactive experience with per-guest card printing

  • Solution:

    I recall I wrote the PDF generation, specifically, and used Puppet to manage the kiosks.

4.2 Faro

  • Requirement:

    A kiosk to do product recommendations, integrating with a lighting controller

  • Solution:

    Django-based recommender system, with PyGame using MIDI to talk with the lighting controller

4.3 Atlantis

  • Requirement:

    Security assessment

  • Result:

    Found numerous concerning items and compiled a report

4.4 Cirrus Aircraft

  • Requirement:

    Site redesign, joined partway through

  • Details:

    Helped with the site redesign. Memory foggy on the details. I do remember specifically being told I needed to integrate with their “industry standard” DB system, and not being given any more than that even when I pressed. So, I designed a generic DB interface that was almost useless when their DB turned out to be MS Access. Found a hack to get things migrated anyway.

    Found an old repo with some Google Maps code to show their service centers and sales places.

4.5 ZeroWater

  • Requirement:

    Site redesign, joined partway through

  • Details:

    Based on customer requirements, integrated Google Maps and checked a sparse database for location-specific info. Had to find next-closest point when a location wasn’t in the DB.

4.6 Sher

  • Requirement:

    Share media across multiple social media platforms

  • Details:

    Don’t remember the details, but I got as far as Facebook. It was Django-based. Still have the repo. Very unfinished. lol

5 Primal Innovation

5.1 mesh wireless network consulting

5.2 Email and web hosting

  • Postfix with Postgres backend
  • Apache

6 Cross Tech

6.1 Real estate website stuff

I don’t even remember this guy’s name, and I can’t find him online. Ken something? I remember we used digallery and difont, though. :)

6.2 Hair salon sound system, customer management, and POS

This place may actually still be open.

6.3 linux systems training

Ok, Grandma. Click the K. See? It’s like you’re used to! And you don’t have to worry about viruses!

6.4 pentesting libraries and businesses


6.5 redhotlips credit card processing programming

I’m not sure I was even fully awake for this. That was a trip.

7 Hashbang

7.1 hardened gentoo system building and maintenance

7.2 Ghetto admin

7.3 Wrote a few bot plugins

8 Orlando North Church

They didn’t actually listen to me on anything but the projector, but hey, they asked my opinion. Projector works great, though. It’s throwing a ~20ft image in office lighting, and it didn’t break the bank.

8.1 Consulting

  • Projection equipment
  • Copiers
  • Lighting controllers
  • Child check-in system
  • Website
  • Networking

9 Personal projects

9.1 3d Printing

Various projects in Blender, FreeCAD, and OpenSCAD

9.2 GameMaster Dice

Added a new die type to this open source Android app

9.3 Writing/typesetting a D&D variant

Started in LaTeX, went to markdown for the ease, converted to org-mode when I wanted more flexibility

9.4 Microscope

Partial implementation of an interface to allow playing Microscope RPG over the web

9.5 Programming exercises

  • Build Your Own Lisp
  • Advent of Code
  • exercism.io
  • Project Euler
  • Codingame
  • CodeCombat
  • University of Washington’s Programming Languages course via Coursera
  • The Little Schemer
  • SICP

9.6 Triple Town

Got obsessed with the Android game for a second. Implemented it in Python and tried to make an AI to play it.

Created: 2018-08-02 Thu 08:57