A History of Vince
Hi, I'm Vince! Some may know me by my full name Vincent Milum Jr, or by one of my online handles: Darkain, DarkainMX, Darkain Multimedia, Darkain Dragoon, or VinceRants.
Who am I? A nomadic developer! This page details a chronological list of projects I've worked on over the years, along with many external references. Over the years I've had to assume the many roles of Software Engineer, Database Administrator, System Administrator, Network Administrator, Technical Writer, and Electronics Hobbyist to accomplish the tasks required for each of these projects.
SFC to JAMMA Adapter
Designed the schematics, PCB, and Arduino based source code from scratch to allow a Super Famicom (SFC) or Super Nintendo (SNES) controller to interface with standard JAMMA based arcade cabinets, including 6-button kick harness systems. In my particular case, I'm using it with my Street Fighter II cabinet from 1991.
Additionally, this board also features a USB interface, allowing both SNES/SFC and the arcade cabinet's controls to register as a gamepad on a PC. This allows a traditional PC to output a display to the arcade cabinet while retaining the main arcade control interface.
Schematics and PCB design done in Autodesk Eagle CAD. PCB printing done by JLCPCB. Component assemble done by hand myself.
FreeBSD on the Steam Deck
Worked on getting FreeBSD bootable on the Valve Steam Deck, all the way to the point of having a functional desktop interface with web browser access.
FreeBSD ARM64 / Aarch64 Virtualization Status Update
Wrote the report on FreeBSD ARM guest support for the FreeBSD 2020-Q4 quarterly report.
Hosted a panel discussing the current status of FreeBSD running under VMware ESXi-ARM Fling and Parallels Desktop for Apple M1. Presented information on status of virtual hardware support in the FreeBSD kernel, development status of guest tools, and performance metrics of bare metal vs ARM VM benchmarks.
CentOS 7 Userland
Ported the CentOS 7 Linux userland binaries to FreeBSD on ARM/Aarch64.
Over 100 packages from the FreeBSD Ports collection updated to support this work.
This work is the basis for all Linuxulator packages on FreeBSD to work going forward.
FreeBSD Discord Server
Helped launch and promote The FreeBSD Project Discord Server, which has gained over 1,000 members in its first year of activity. We've built an active and engaging community of experts, novicies, Hobbyist, and more to discuss FreeBSD and general technology as a whole.
FreeBSD ARM64 / Aarch64 Virtualization
Lead the testing and patching efforts to get FreeBSD as a guest operating system supporting the virtual hardware on VMware ESXi-ARM Fling hypervisor.
VMware open-vm-tools and Parallels Desktop parallels-tools
Ported open-vm-tools and parallels-tools to ARM64 / Aarch64. While the code updates focused on FreeBSD, the majority of the changes were platform agnostic so they should work on Linux and other guest OSes. These changes were accepted and merged upstream into open-vm-tools 11.3.0.
MariaDB Galera Cluster ZFS Compatibility
Developed the fix for MariaDB Galera Cluster to work correctly when using rsync WSREP SST replication on ZFS based file systems where the "snapdir" is visible to the operating system.
ZeroTier on FreeBSD
Discovered and fixed several regression issues with ZeroTier on ARMv6, ARMv7, and ARMv8. These patches were tested and fixed under FreeBSD, but also apply to other ARM based operating systems.
FreeBSD on Raspberry Pi
As of this writing, over 100,000 unique users and 1,500,000 messages have been logged to a Raspberry Pi 3B+ on a 3x 16GB USB ZFS Raid-Z1 array.
Launched a web site dedicated to the documentation of the PHP Universal Database Library (PUDL). As of this writing. PUDL-Docs is still a very early work in progress with many missing pages.
phpMyAdmin with System-Versioned Table support
MariaDB 10.3 added System-Versioned Table support, the ability for the database to automatically track historical change to records. This support altered some of the reporting features for MariaDB tables which broke phpMyAdmin in several different ways.
As an early adopter of System-Versioned Tables and heavily using phpMyAdmin in my workflows, I wrote the patches for phpMyAdmin to handle these new features in MariaDB.
FreeBSD on Raspberry Pi
Custom tuned ZFS for Raid-Z1 (3x USB thumbdrives) on Pi 3B+ to be used with a FEMP stack.
I fixed IPv6-to-Text, and Text-to-IPv6 conversions to be RFC-5952 compliant by converting to standard inet functions.
I also fixed the ZeroTier port for the Raspberry Pi 1, 1A, 1B and Zero on FreeBSD by adding proper ARM NEON detection.
I use ZeroTier as a SD-WAN service to create a virtual multi-premise network. Each node connected to this network is a OPNsense router running OSPF. This enables any device connected to any private LAN at any location to be able to talk directly to any other device in any other location. This is the backbone for my MariaDB Galera cluster and ZFS multi-site replication.
Lua on Microcontrollers
Ported the Lua programming language to ESP8266 and ESP32. I used this to create LED animation libraries for the SpiderBoard.
ESP8266 Web Server
Entirely rewrote the ESP8266 Web Server class. The initial server class by the ESP8266 community had countless stability issues that I fixed with my rewrite. This enhanced web server was built for the "Spider 2" LED board to support an embedded Lua script editor and uploader.
Physical address from IP address lookup
The Tacoma WA based ISP Click-Network was using customer's router's MAC address for the reverse-DNS name lookup on their public IP address. Most consumer routers use sequential MAC addresses for their WAN, LAN, and Wi-Fi ports. There are publicly available databases of Wi-Fi MAC addresses tied to physical locations as a geolocation lookup service. By combining the reverse-DNS information containing MAC address, checking the two address above/below the WAN MAC, and comparing it to the Wi-fi GEO DNS database, it was possible to pinpoint where someone physically lived to within about 100ft just by knowing their IP address.
After discovering this information and validating it against known IP addresses and physical locations I was aware of, I reported this information to Click-Network for them to update their reverse-DNS information to no longer be physical location deterministic. This has since been fixed, so I am now sharing it publicly!
Microcontrollers and Custom PCB Design
Designed and created a prototype portable power supply with an ARM CPU paired with two ATTiny85 microcontrollers for controlling four independent LED arrays. Board is controlled remotely using Bluetooth game controllers. I ported the Bluetooth stack from AVR to ARM. The entire system was debuted at BlizzCon 2017.
After initial prototype, I modeled an improved circuit design using Autodesk Eagle CAD, had the PCB printed, and then I assembled by them by hand. I also changed the design to use Wi-Fi with a custom web server with access via a cell phone instead of accessed by Bluetooth game controllers.
Rewrote entire Cospix front-end for a responsive design, mobile friendliness, new image presentation, and infinite scrolling on the homepage. This is the design that is currently live today. Also migrated back-end infrastructure.
PHP persistent connections to MariaDB
While working on Cospix and PUDL (PHP Universal Database Library), I noticed connection error codes did not match the connection state between PHP and MariaDB Galera Cluster. This turned out to be an edge case with how PHP's MySQLi connector handled persistent connections.
Open Source Advocate
To help promote various open source projects, I set up a 24/7 torrent seeding machine on a 1gbps WAN connection. I use this machine to host archives of Linux distributions and other open source projects. One example is the entirety of the Debian 7 CD and DVD archives for i386 and AMD64 platforms (70 ISOs in total). I also use host security focused ISOs such as Kali Linux and Tails. Beyond software, I also seed the complete Overclocked ReMix collection from their official torrents archive, featuring over 4000 original video game music remixes.
Not every organization that produces large software, operating systems, music collections, or other large data sets have the financial means to support the bandwidth to distribute their content. I help these projects out by donating my own bandwidth to their causes. Not all open source contributions are strictly code, and I believe this is a good way to me to help this open source and open content creators to share their works with the world freely.
Cospix Photo Studio
Founded the Cospix Photo Studio at Anime Expo (AX). Recruited and lead a team of 20 volunteers to help run the photo booth, including Photographers, Photo Editors, and Social Media Specialist. Anime Expo handles over 100,000 unique attendees over five days and our team captures over 10,000 photos each AX.
I created a distributed file storage system to synchronize photographs between camera tethered laptops, photo editing workstations, and printing/sales workstations.
MariaDB Galera Cluster on SmartOS
SmartOS is an illumos kernel based operating system specializing in containerization and virtual machine workloads. One contain format it supports is a Linux compatibility layer known as LX Zones. Under LX Zones, I fixed the MariaDB Galera initialization code to properly support the way SmartOS with ZFS handles file size pre-allocation.
Launched my high performance and scalable PHP framework. The Altaform framework is built on top of the PHP Universal Database Library, Getvar, and TinyButXtreme.
Forked the TinyButStrong (TBS) HTML template processor by Skrol29 as TinyButXtreme (TBX). Initial fork was due to dispute over a bug that the initial developer refused to fix. Afterwards, I reorganized all source code and simplified the entire library API. Legacy and insecure features were removed. Fixed several other bugs that persisted in the original code base. New code is now extended with countless new functionality. Code updated for PHP 5.x and modern PHP 7.x support.
Developed and launched the web site Cospix.net as a high quality photo hosting web site for the global cosplay community. Cospix uses the Altaform framework, runs on both PHP and HHVM, uses MariaDB Galera Clustering, Redis caching, and ZFS Raid file storage across multiple systems in a cluster and across multiple data centers.
PHP Universal Database Library (PUDL)
Open-sourced my PHP library for connecting to and interacting with SQL databases. Created a SQL query generator that transparently works with MySQL, MariaDB, PerconaDB, PosgreSQL, SQLite, Microsoft SQL Server, and general ODBC servers. Unlike PDO bundled with PHP, the PUDL library works virtually identical with all engines with just a simple connection configuration change.
PUDL also has direct support for Galera multi-master clustering, including load balancing, high-availability, and multi-datacenter awareness.
Forked and updated bmem by Brennen Underwood as vmem. Added support cleaner true-type font rendering and for real-time CPU clock speed display on systems with Intel SpeedStep (or AMD equivalent). Entire application written in C/C++.
Lead data recovery efforts after a 100% total loss of all on premise computer equipment after a devastating warehouse fire. By previously instituting a combination of online cloud backup and off site tape backup rotation, virtually no data was lost.
After data recover, lead the effort in designing new on premise infrastructure, including all equipment in server and networking room, client workstations, and building wiring for networking.
Created an Android app that allows basic playback control of either Winamp or foobar2000 media players on a desktop through LAN UDP broadcast messages. RMX Automation received a beta update at the same time to act as the RMX Server component.
Spent the year working 100% remote from the middle of the Rocky Mountains in Montana.
Created a conceptual cosplay oriented social network. Code based on the Image Metabase project.
Created a public URL shortening service that also included analytics tracking.
Renamed RM-X General Purpose Control to RMX Automation and released it as open source software under the BSD license.
The public release of RMX supports Windows Media Player 7, Winamp 2, Winamp 3, Winamp 5, foobar2000, Radlight Player, BSPlayer, and as a stand-alone Win32 Application all from a single binary binary file by exposing multiple DLL entry points plus a WinMain entry point.
RMX Automation includes LuaPlus, an object oriented version of the Lua interpreter to make RMX fully scriptable. This release also includes 30 RMX Plugins which include support for integration with many more hardware and software platforms, such as X-10 home automation and several methods of TCP/IP network access. By writing a plugin once for RMX, it instantly works with all softare and systems listed above that RMX can communicate with, without the plugin needing any knowledge of those systems whatsoever.
I also launched a MediaWiki instance to act as the homepage, changelog, and general resource information center for all of RMX Automation.
Released Image Metabase
Created a tool for indexing, searching, tagging, and previewing images from the internet. Image Metabase utilized the LAMP stack.
Released a simple PHP library in a single class for easier access of HTTP GET and POST data. GetVar supports automatic data normalization, UTF-8 safety, and the ability to decode JSON.
Nintendo Wii Virtual Console Notification Service
Created a script that would poll and scrape content from the Nintendo Wii Virtual Console e-shop, and then publish those results on the Darkain.com web site, as an RSS feed, and push notifications directly to registered user's Wii console's messaging service.
Wii Media Player
Created a simple MP3 media player for the Nintendo Wii by utilizing its embedded web browser to load and display content.
Wrote a simple basic podcast hosting script that would auto-generate the RSS feed based off of the contents of the folder the script lived in. This enabled simple publication of podcast content by authors as all they needed to do was to FTP a file into the folder, and it would automatically update the RSS feed
Battle Game MMonster
Created a simple web-based multiplayer turn based click-fest online game. Players can select their race, class, and weapon, and then attack each other for various in-game points. Ultimately the game is a complex rock-paper-scissors idea expanded out to thousands of simultaneous players acting asynchronously.
Homebrew / Indie Video Game Developer & Advocate
Acted as moderator and community leader for the unofficial Nintendo DS community on LiveJournal with nearly 2,000 members. I used this and other online platforms to advocate for Homebrew video game developers, which eventually went on to become the modern Indie Video Game development community. During this era, homebrew game developers were not seen as part of the industry, but instead were treated like outcasts that did not belong. The big-three console gaming platforms at the time only wanted large AAA $60+ titles. By developing homebrew games and advocating for other developers using public internet channels, this helped shaped the indie gaming community and industry we have today on platforms such as Steam and the Nintendo Switch.
Beyond advocacy, I also developed a micro-kernel, user interface, application loader, and several demo applications within the Nintendo DS homebrew community as an operating system under the title DarkStar (wordplay on my handle, Darkain). I built basic clones of Tic-Tac-Toe, Minespeepers, and Lights Out and a Paint Program as demo applications to show how the multi-application loader functioned. Other developers used it as a way to distribute their homebrew games and applications in larger bundles.
I created the DS-Paint demo to illustrate some of the rendering API available within DarkStar. These features included full touch screen support, 15-bit RGB color, brush drawing, shape drawing, gradient drawing, anti-aliasing, and alpha blending (on Darkain.com via Archive.org).
Discovered an exploit in Microsoft Excel that allowed for full SQL access through VBA instead of the intended support of only SELECT statements. I then used this exploit to write a full SQL INSERT data entry front end and SELECT data reporting system using VBA in Excel 2003. Those scripts have since been ported to Excel 2007. To date, I've yet to publish knowledge of this bug and as far as I know it is still fully exploitable. However, Microsoft has significantly locked down running VBA scripts, so risk is extremely minimal.
2023 Update: So here is the disclosure of the bug. With Excel's VBA, you can run SQL reports via ODBC. However, if you try to run anything other than a SELECT statement, a VBA error is thrown. I discovered that if you simple use "ON ERROR RESUME NEXT" that whatever SQL query was entered would be forwarded through the ODBC driver unmodified. This allowed for INSERT, UPDATE, and any other query to execute.
Wasabi - Internet Relay Chat Client
Created a full featured IRC client using the Wasabi SDK. This IRC client is fully stand-alone, not requiring Winamp3 to run, possibly the only Wasabi application ever released that wasn't Winamp3 itself.
The Wasabi IRC client supported full skinning and scripting, the same as Winamp3. I also created a full rich-text viewer to support formatted text from IRC, such as bold, italics, and color changing. The user interface also works similarly to how modern web browsers work, it is a tabbed interface where tabs can be pulled out of the parent container into new containers, and then later rejoined into the original container.
Created a homebrew clone of the PC game Matrix Attack as the GameBoy Advance game Matrix Advance. Entire game written in C/C++ and some ARM ASM. Matrix Advance is a hexagon board based puzzle game featuring two simultaneous boards. Match five continuous gems of the same color on the active board to clear them. Gems can also be flipped between the active and passive boards.
RM-X General Purpose Control
Following the success of RM-900 and DX-Joystick, I merged these two plugins into a single plugin, RM-X General Purpose Control. I added a third module to this plugin known as API-KB which allowed global keyboard shortcuts and multimedia keys to control Winamp while the application is out of focus or minimized.
RM-X was awarded "Feature Component" by Winamp.com on August 8th, 2002 with the staff comment "a plethora of remote controlling."
Contributor to the Wasabi Development platform. Wasabi is a cross-platform application development SDK targeting Windows, Linux, and Mac.
Wasabi - DeJaVU Meter
Created a simple volume meter, spectrum analyzer, and oscilloscope visualizer component for Winamp3 using the Wasabi SDK.
Wasabi - Playlist Script Object
Created a wrapper object to allow the Maki scripting engine to interface directly with Winamp3's playlist. This component allowed other developers to embed custom playlist layouts directly into their application skins.
Wasabi - Web Server
Created a web interface for interacting with Winamp3. This allowed playback control and playlist access remotely from anywhere in the world.
Wasabi - Games
Created a minesweepers clone as Llama Sweepers using the Wasabi SDK, playable within Winamp3.
Started utilizing VMWare Workstation for multiple operation system testing of software I was developing. I actively tested RM-X on Windows NT4, 95, 98, 2000, ME, and XP through virtualization on a single workstation.
Created the initial RM-900 infrared remote control plugin for Winamp using Visual Basic to interact with the Creative Labs driver. Support was later expanded to include support for the RM-1000 remote as well.
Due to the success of the RM-900 plugin, friends asked me to make a plugin for Winamp which would allow their gamepads to change songs, control playback, and change volume. Using DirectInput once again, this plugin was known as DX-Joystick.
Visual Basic Games
Created a Tic-Tac-Toe game a Lights Out game using Visual Basic form controls.
Alpha Game Engine
Created the "Darkain Alpha Enigne", a tile based RPG game engine written in Visual Basic 6.0 and DirectX 7 (DirectDraw, DirectInput, DirectSound). The Darkain Alpha engine includes a basic game editor which uses Win32 GDI API for painting tiles on the canvas.
Dreamcast VMS/VMI Editors
Created simple editors to edit VMS and VMI content for the Sega Dreamcast. VMS is the hand-held game system that doubles as a memory card. VMI is an animated icon format to display on the VMS while not running a game. Editors are written in Visual Basic 5.0
Freak-Z / DooVoo IRC
Created an IRC chat client in Visual Basic 5.0 that was released under the names Freak-Z IRC and DooVoo IRC.
At age 13, I built my first LAN using systems donated from Boeing Surplus using 10-BASE2 networking hardware on a pair of Intel 386sx 16MHz computers running Windows 3.11 for Workgroups. First successful networked application was Microsoft Hearts multiplayer. Later in the year, helped build networks for a computer lab and library for Gault Middle School, which I was attending at the time.
Started learning computer programming using QBasic for MS-DOS. Later in the year, I transitioned to Visual Basic 3.0 and 4.0.
At age 12, I started learning electronics, creating simple digital and analog circuits on a solderless breadboard.
At age 11, I placed 25th in the K-12 Chess National Championships.
Things To Improve
There are still references to old source code released that are mentioned on the Archive.org Wayback Machine. I still have these source code archives in the exact state they were published and uploaded in many years ago. These archives, however, are now spread all over the place. It is time to start locating all of these archives and combine them into a single repository hosted on the Darkain.com web site.
At this time, there are still about 20 code repositories that have not been uploaded that have been successfully found. These are all early works in Visual Basic and C/C++. The more recent code has been managed through GitHub since 2012.