About Jonathan M. Wilbur
I am a System Administrator, a Programmer, and an enthusiast for anything that is both technical and useful. I studied at the University of Florida, where I received my Bachelor's degree in Economics with a minor in Chemistry. I have been programming since I was twelve (or so). I also make music; I am quite the metal-head, but I appreciate talent in any genre. I have way too many hobbies for one lifetime, and too many ambitions for ten.
Associate Systems Engineer at
since July 5th, 2016
- Received company-wide commendation from the CEO for providing a creative solution to a unique problem
- Enhanced DNS Filtering by blocking over 2000 dangerous top-level domains
- Received over 20 "High Fives" (a digital commendation)
- Improved server provisioning times with PowerShell scripting
- Active Directory administration for over ten thousand users
- Windows Server Administration for over 1000 Windows Servers
- Enterprise administration of hundreds of Red Hat Enterprise Linux (RHEL) Servers
- Associate Quality Assurance [Automation] Engineer at
since March 30th, 2015
- Significantly reduced test durations by automating data setup through the API
- Fixed hundreds of automated VBScript tests in HP's Unified Functional Testing (UFT)
- Automated tests in C# with Visual Studio Coded UI Testing and Team Foundation Server
- Intern at A-Squared Fab Lab (Now Infinity Lab) – 3D-Printing, Laser Cutting, and CNC Milling
- Pediatrics Intern at the Medical Office of Dr. David W. Powers, M.D., P.A. (Summer 2012)
- Orthopedics Intern at the Medical Office of Dr. Anuj Sharma, D.O. (Summer 2012)
- Civil Engineering Intern at Furman and Hilpert Civil and Structural Engineering (Summer 2011)
Education, Certification, and Licenses
- Red Hat Certified System Administrator (RHCSA)
- Linux Professional Institute Certification Level 3 (LPIC-3) with a specialization in Virtualization and High Availability
- Linux+ Certification from CompTIA
- Project+ Certification from CompTIA
- OpenSUSE System Administrator Certification from Novell
- Healthcare IT Certification from CompTIA (Now Retired)
- Bachelor's Degree in Economics with a Minor in Chemistry from the University of Florida
- Cryptography I from Stanford University
- Computer Networks from University of Washington
- FCC-Licensed HAM Radio Technician
Additional System and Network Administration Skills and Experience
- Creator of Three Websites
- Created and configured my own email server with Postfix and Dovecot (email.wilbur.space)
- Created my own TLS Certificate Authority using OpenSSL
- Version Control with Git, Gerritt, and Visual Studio / Team Foundation Server
- Crypto-currency (Bitcoin) Owner and User
Programming Skills and Experience
- Created an ASN.1 library in the D programming language that is roughly 23,000 lines of code
- Submission of a NodeJS module (email-alert) to the NPM package repository
- Creator of over twenty repositories on GitHub, totaling over 40,000 lines of code.
- Understanding of Intel x86 Assembly, Most C-Related Languages, Java, Python, Go, and Rust
ASN.1 Codec in D (done)
It is hard to even describe what ASN.1 is, but if I have to use a word, I would say that it is a meta-protocol. ASN.1 is a specification that includes data types, nomenclature, a syntax for describing protocols, as well as modular encoding and decoding rules.
ASN.1 is used in several things, including TLS (formerly called "SSL"), LDAP, Kerberos 5, satellie communications, and even the magnetic strip on the back of your credit card!
I completed this project in January of 2018. See the GitHub repo.
External Data Representation (XDR) Codec in D (in progress)
External Data Representation is like ASN.1, but a lot simpler. To add to that,
its type system is a lot more sensible than that of ASN.1. XDR is used in NFS, ZFS,
There already is a D library for XDR, but it looks pretty lackluster. At the very least, it needs more documentation and unit tests; at the very worst, it needs to be re-written. If I re-write it, you can expect the same extreme quality that I put into my ASN.1 library.
Binary Presentation-Layer Serialization Format
Text-based protocols unambiguously displaced their binary equivalents, to a strong degree because they are easy to use. You can send an email using SMTP by sending raw keystrokes over a TCP connection to an SMTP server, for instance. You can also perform an HTTP request in the same manner. They are also easy to diagnose, because a packet does not have to be converted to a different representation to be human-readable.
While text-based protocols have afforded us a lot of simplicity, their simplicity was also a curse. Webpages typically have about 500,000 characters of text alone, which could be condensed to less than 100,000 if a binary protocol were used. Worse yet, ramshackle solutions, such as Base-64 encoding, are wasteful attempts to permit binary data within text-based protocols that were not meant to transfer binary content in the first place.
After having written an ASN.1 library, and after having explored its alternatives, I am convinced that further exploration into a new presentation-layer binary serialization format is necessary. Currently, External Data Representation (XDR), MessagePack, and Binn look the most promising, but it may turn out to be necessary to invent a new protocol.
Strong Types D Library
The sorry state of a lot of standard libraries is to have functions / methods that accept string inputs representing some sort of standardized identifier, such as a Uniform Resource Identifier (URI), an iSCSI Qualified Name (IQN), or even a Phone Number, and validate them with each call to the function. This is a source of poor performance in cases where the function may need to be called multiple times using the same value, or when other similar functions within a library need to be called using the same value, which themselves require the same validation code.
Worse yet, the fragmentation of validation code throughout the codebase is
a security problem. If there are multiple functions / methods that accept strings
representing standardized identifiers, then developers have to remember to
add the validation code to each one that needs it. Of course, a developer could make
validateXYZ(string value) function / method, but it would still
have to be added to each function, and could still incur the overhead of repeated
I call this practice Weak Typing 2.0. The problem, summarily stated, is that developers have moved compile-time validation to run-time validation. The whole point of compiled languages is to be able to trust code; having repeated and distributed run-time validation is slow, insecure, and against the spirit of modern programming practices.
Instead, I propose that we overhaul our code--especially our standard libraries--to
provide a system of strong types, and to require strong types in the signatures
of functions / methods. For instance, every standard library should have a
data type, representing a Uniform Resource Identifier, and every function in that standard
library that accepts a URI should only accept a
URI data type instead of a string.
Here, Microsoft's .NET Framework really shines in this regard, with their class
Now, since strings are the usual way that data are serialized and deserialized from objects in memory, most of these data types will still generally need to be converted from strings, or perhaps some other similar primitive, such as an unsigned byte array. In code, this can be done by accepting these unsafe primitives as arguments to a constructor if you are doing Object-Oriented Programming. If you are doing functional programming, you could have a single function that outputs strong types from weak ones. Within the constructor / generator, you can validate the inputs.
From then on, all functions / methods can be re-written to accept the new strong type. In so doing, you can ensure at compile-time that the data being passed into your functions / methods is valid. This makes for simple and secure code.
Having said that, I am working on such a thing now in the D Programming Language. So far, I have created a libraries for IEEE Identifiers (including MAC Addresses), Semantic Versions, Global Trade Item Numbers (including UPC Codes), and Object IDs. I expect to create strong types for IP Addresses, UUIDs, GUIDs, all cryptographic hashes, IQNs, URIs, LUNs, IMEIs, Phone Numbers, Credit Card Numbers, Social Security Numbers, and many more. This library is kept only minimally dependent upon the standard library, with the intent that it can be added to the standard includes for your choice of D compiler without conflict.
I also expect to standardize the strong types system, in the same way that Unix-like filesystems are standardized by the File System Hierarchy. Once I do, I will join all of my repositories into a single, coherent standard library for strong types.
Operating System (Name to be determined)
Before it sounds like I am taking credit for something I have not even started, I will say it explicitly here: I am not currently working on an operating system; this is just something I plan on doing in the future.
The operating systems we know and use today were designed decades ago to handle problems that were common to information technology decades ago. Operating systems--particularly Unix-like operating systems--we designed for computers that were the size of a two-car garage and used vacuum tubes for transitors. These computers cost huge sums of money, so they were expected to be used by multiple users. Multi-user computing required schemes for intra-operating system security, including, most notably, file system permissions.
Things are different nowadays. The balance of humans-to-machines has tilted in the other direction: there are now typically multiple computers for each person. Nearly every computer has only one administrative login shared by anybody that needs it. Further, in modern computing, entire hosts typically serve a single purpose, such as an HTTP or FTP server. Interprocess communication has been almost entirely replaced by TCP/IP traffic between virtual hosts.
As for drivers, most operating systems include drivers for storage disks, with the assumption that spinning disks will be used for storage. Spinning disk storage introduces a ton of complexity, because it is so tremendously slow, that the operating system does a lot of computation behind the scenes to minimize the latency of spinning disks. A modern operating system can afford to be more discriminating, starting with the assumption that all storage will be either solid state drives or non-volatile memory. For that matter, non-volatile memory is likely not going to take off on any modern operating systems because all modern operating systems use a SCSI emulation layer that translates disk I/O from SCSI commands being sent to virtual SCSI devices to the actual language of the hardware, and vice versa. This overhead empirically mitigates the costs of using non-volatile memory. An operating system that abandons the SCSI emulation layer has the performance gains of non-volatile memory to win.
But you do not need to take my word for it: empirical evidence of the failure of operating systems abound all around you. We use databases because file systems are a failure. We use multiple hosts in a virtualization environment, because interprocess communication is a failure, and because managing users for a single host is too difficult. We use virtualization because modern operating systems fail to scale.
Further, there are problems innate to the C Programming Language, in which Windows, Linux, and the BSDs are programmed, the remainder being variations of C, which still suffer similar problems.
My aspiration is this: to create a modern operating system that parts almost entirely from convention for the sake of a modern experience. I want a file system that functions more like a NoSQL database than a recursive hierarchy of folders within folders. I want to nuke the permissions system. (This does not mean that there cannot be multiple login credentials; just that everything in the host is readable, writeable, and executable by all users once they are authenticated.) I want a basin of hardware drivers that forsake compatibility with technology that modern users are unlikely to use. I want to program this operating system in the D Programming Language, which itself is a modern language that is safer that C or C++, and provides constructs for object-oriented programming, which, despite the naysayers, I believe is an objectively superior programming paradigm.
As an added benefit, since we are already throwing away the conventional premises of
operating systems, there is that much less overhead to overhauling the software on top
of it. Linux command line tools do not exactly have the most intuitive names, such as
cat. Also, the Linux Standard Base does not include tools
that are up to date with modern needs. Where are the HTML, XML, and JSON parsers? Where is
the Markdown reader? Why don't we have a command-line financial calculator? Many more important
tools are missing, but I think you get the point.
Readme: A Modern Alternative to Man Pages
Man pages were written in the seventies. They have done a fine job, and they have served many system administrators well, but it is time for a very modern update. Readme is a command-line tool for reading README files, written in GitHub-flavored Markdown. The idea is to entirely replace Man Pages with something that is easier to edit.
Here is a collection of a few of my writings.
The Scalding Descent
The team raised their straws and compared them by length. Solemnly, their gaze shifted to Alphonse's grim countenance. By the vice of having randomly chosen the shortest from the cup, he was the unlucky delegate to descend into the belly of the supercomputer. No words were spoken, and no words could formulate the terror that dawned upon the team as reality drew nigh. There in silence, they averted their eyes, unable to make honest contact with their beloved elder, whose leadership and technical wisdom had proven nothing short of miraculous.
Maintaining his characteristic British civility, the first to break the silence was Dr. Manchester.
"Well, let's get that hatch open."
The team surrounded the white rotational valve, and with five otherwise idle hands, they each provided a sixth of the necessary torque to open the hatch. Meanwhile, Alphonse donned his helmet, and meticulously triple-checked the locks and pentuple-checked the connection to his oxygen tank and cryo-cell. Foo offered up what useful information he could, emotionally unattentive to the gravity of the situation:
"According to my calculations, your two parallel cryo-cells should have enough liquid nitrogen to provide you with approximately six minutes of suit-temperatures of 60 degrees Celcius."
"Yes, I know Foo. We've been over this before," Alphonse snapped, trying to maintain his composure as he squeezed into the conveniently coffin-sized airlock separating the air-conditioned corridor from the sweltering abyss of the supercomputer's core. "You should be the one doing this shit."
"Yes, but sir, you know that I cannot maneuver my--"
"Foo. Stop," Corporal Burton interjected. Though not quite what Corporal Burton meant, Foo immediately powered down, and gracefully curled into the fetal position, to which none of the busy crew objected.
In the tight confines of the airlock, Alphonse maneuvered into the single uncomfortable position that would permit his arms the leverage to open the second hatch. When the second valve began to rotate, his eyes returned to the silhouette of his teammates, blocking the beam of light pouring in from the hatch opening. He paused briefly to look at them.
"Well, go ahead. Shut the hatch."
His crew snapped out of their fixation and sealed him in the airlock. With their communication moved routed through the radio now, Corporal Burton chimed in: "Draining airlock atmosphere in 3... 2... 1..."
With a loud roar, the airlock's temperature soared two hundred degrees Celcius. Alphonse's internal suit temperature rose to sixty degrees Celcius so rapidly as to take his breath away. His crew immediately retracted as a sudden wave of scalding heat from the outer hatch made the air shimmer. Alphonse regained his composure and continued the arduous turn of the second valve in those tight and dark quarters.
After finally having released the second hatch door, he opened it to find that the door would only open to a roughly sixty-degree-angle before colliding with a small pipe extruding from the wall of the airlock. At such high temperatures, his civility was apt to abandon.
"Goddammit! Who designed this shit?" he shouted as he pounded the wall. His crew heard his muffled fit of rage through the hatch door.
"Al, is everything okay?" Corporal Burton asked.
"Yeah. We're good."
As Alphonse managed to squirm into the opening of the second hatch, the supercomputer's glowing grid of red-hot coolant channels came into view. A veil of gaseous mineral oil filled the air. Amidst the breath-taking heat, he peered through the fog to see the blinking blue lights of the quartz drives on the opposite wall. Notably outstanding from the pattern of blue lights was the control arm--a mechanical claw responsible for replacing quartz drives when they get full or damaged--dangling lifelessly, its motor whirring fruitlessly.
The Pale Sea
For the sake of the poor souls whose salvation depended upon it, Jericho found himself knee-deep in pale, concrete-colored water on a foreign planet, whose gravity was painfully strong, and whose surface was, with the exception of a few jagged rocks that surfaced from volcanic activity, flat and windy all the way to the horizon. Had the water not shimmered in the perpetual breeze, the planet would have looked as though it were a sphere carved from white marble. It was into these milky shallows that Jericho waded in pursuit of the distress beacon, from which rang the digital cries of Terra's interplanetary diplomats.
Despite the use of entanglement telephony, and hence, the near-instantaneous reception of distress signals (astronomic distances notwithstanding), the rescue team usually arrived to the scene too late, and this case appeared to be no exception. Neither wreckage nor raft could be seen, though the landing site was within a kilometer of the beacon.
Jericho activated his infrared visor so he could see through the murk. In the noir anti-world that was revealed on his heads-up display, the bottom could be seen for the lifeless desert it was, where naught but hair-thin plants dangled listlessly. Through this barren canvas, he tread, cautiously surveying each prospective step with scientific scrutiny. With each step, the fear of his team leaving him stranded grew more potent; for, despite having shared years with them aboard the rescue vessel, and knowing everything about them down to the most trivial of details, the heartless accountant of life and death saw six other teammates aboard the ship, and him--a dispensible radar technician--on the planet's surface: a balance sheet that did not bode so favorably for him should a disaster necessitate an expedient exit.
About 10 meters from origin, he slipped on a slight decline, and recovered his balance in waist-deep water. Alphonse's chimed in via radio:
"Are you alright?"
"Better than the poor suckers we're lookin' for," he snapped with characteristic snark.
A fast-moving cloudfront had now blanketed the sky, and from the horizon most overcast, the end of the grey water and the beginning of the grey sky could not be distinguished. A flash of lightning on this horizon prompted him to turn around and lift his visor. The sight was hypnotic: a vista without distance or depth, without color or contrast. The mission, and all attendant thoughts, plans, and emotions, were suspended by the mesmerizing sight of the infinite grey void encompassing him. This sight, so unnatural and bizarre, captured his focus with such transcendant and spiritual fascination that made a trivium of time itself.
A flash of lightning in the distance, which momentarily made the horizon distinguishable once more, set him free from his spiritual somnolescence. At once, he turned to his team, who turned to him at the same time. No words were exchanged across the whipping winds, but a tranquil smile was, and with it, the affirmation that they had all shared the same breath-taking experience.
Jericho turned once more missionward, and restored his infrared vision. To his horror, the lifeless surface beneath him had changed, now occupied by strange cylinders that passed between his legs, sinister, yet unmoving. Upon inspection of their length, that they tapered to an end became apparent. These were tentacles, which had silently wandered between and around his legs. What he had taken to be hair-thin plants were, in fact, whiskers on these tentacles.
Careful not to touch them, he rotated his torso as much as he could without moving his legs, turning to the team. Remembering his headset, he averted a yell, and whispered through his microphone:
"Guys, there is something in the water here with me. I see it. Tentacles!"
The team was visibly horrified, but they had nothing to say. Their minds toiled for something they could offer. Alphonse, no more helpful himself, asked Jericho: "Well, can't you just walk away from it?"
"It's really fuckin' close to my legs, dude."
Jericho slid his left foot back with surgical precision, careful not to disturb the whiskers. But despite his reverant caution, the tentacles contracted rapidly, thereby forming a loose ring that orbited his left knee. Heart assailing his sternum, he returned to the microphone with breathless terror:
"D'holy shit, it's moving! It's closing in on me! Do something!"
"Does it move when you are not moving?" Alphonse asked, feigning calm.
"It does not look like it. What do I do?"
Alphonse turned to Roderick: "Where is your parachute?"
Roderick ran into the rescue vessel and returned seconds later with the white bag. Alphonse took it from him without thanks and chucked it into the water, 90-degrees elsewhere from Jericho. The tentacles loosened at once, visibly drifting closer to the site of the splash with each ripple they received.
Alphonse turned to a puzzled Roderick with a smirk: "You're afraid of heights, anyway."
"It moved, Alphonse! It moved away! Throw more stuff!" Jericho begged with the excitement of a child awaiting Christmas morning.
Alphonse turned to his crew: "We're not expecting any parachute drops any time soon. You know what to do."
With ant-like spontaneous order, the team formed a line, each with their parachute packs in arms, and tossed them by the other, and with each disruptive splash, the looming threat of the tentacles dissipated further. Finally, perceiving the threat being entirely gone, Jericho asked for further instruction.
"Very--VERY--slowly, come back to the ship."
Jericho moved no faster than driftwood through the water. In roughly ten minutes, he was within arm's reach of the cargo bay. At that point, he made the bold decision to leap for the bay, and upon doing so, a thunderous whip of a tentacle could be heard underwater. From the calamitous splash of grey water, the tentacle's true color could be seen: it was black as tar--a color chosen by evolution for a beast that needs neither sunlight nor camouflage. At once, his teammates corralled around him, rubbing his hair, patting his shoulder, and any other affectionate gesture his body had room for, elated at his survival. He felt like crying out of joy and relief, but kept his emotions in check.
After re-telling the story for an attentive audience that had nevertheless watched the entire event, the crew reclaimed their focus. Alphonse, wiping the stress from his face, asked "well, I don't suppose anyone would object to considering this a DOA mission and heading back to M.O.T.H.E.R., would they?" He was visited upon by a unanymous and vocal negative.
Within moments, the crew had strapped themselves down for departure, prepared for a return to normalcy, but destined for the horror to resume the second that Alphonse started the engines.
I have produced over sixty hours of music, but a significant chunk of that is me recreating the same songs over and over again, getting better each time. I play my own guitar, bass, and what little vocals I have, I do as well. As for drums, I can play drums reasonably well, but I resort to a very highly-tweaked electronic drumkit that I have built from audio snippets, most of which I recorded myself from when I had a drum set.
I am planning on releasing an album before the end of 2018 titled "Computational Planet". It is a metal album--arguably progressive metal--with a spacey / futuristic theme. Samples can be found below.
If you would like to get in touch with me, you may reach me by the following means:
Here are a few downloads that can make our communications more secure:
- My GPG Key (also available here)
- My Self-Signed TLS Root Certificate Authority Certificate
- My Personal TLS Certificate (Signed by my own Certificate Authority)