ISHICORP Logo

Personal History of Computing

Published | Last updated

BA-LA avatar
BA-LA avatar | Source: William Breathitt Gray

🔗Early Exposure

Although I had exposure in passing to computer systems earlier, I truly began using computers in the second half of 1998, starting with Windows 98 to primarily access the World Wide Web via AOL 4.0. Over the next few years, my father would acquire two other computers that I would spend time on as well: a Windows 95 system primarily used by my brother and a Windows 2000 Professional system that I grew particularly fond of and now look back on with nostalgia. I also used a few classic Mac OS systems in school to play children games such as Kid Pix Studio and Math Blaster Episode I: In Search of Spot.[^1]

Sometime between late 2000 and early 2001, I created a personal website[^2] hosted on Yahoo! GeoCities. Despite using Yahoo! PageBuilder[^3] to construct the website, I did develop an interest in web development from the peripheral exposure to HTML and Javascript code that I copy-pasted of various popular web widgets at the time (banners, visitor counters, guestbooks, etc.).

Over the next few years, I gained my own personal computer running Windows XP. During this time, I administrated a few Internet forums hosted on InvisionFree with my peers and I gained some exposure to web technologies such as CSS.

🔗Foundational Development

In the summer of 2005, my parents bought for me a TI-83 Plus Silver Edition[^4] in preparation for an algebra course I was to take at school in the coming semester. At some point along that semester I learned that the calculator was programmable via a built-in programming language called TI-BASIC 83. This would mark my first true endeavors to write and understand code; albeit, the most complex program I achieved was a quadratic formula calculator.

I also took a computer typing course at school sometime during that 2005-2006 year of school. We followed an old touch typing course book (the kind that can be propped up and the pages flip from bottom to top) on a Macintosh Classic running System 6. Every class we would load TeachText, follow type exercises from the course book, and save our work to a 3.5-inch floppy disk.[^5] I was disappointed at the time that we were using such outdated systems in our class, but I'm thankful now of the experience that I had exposure to classic Macintosh computers and software.

In the summer of 2006, I came across a website with a computer pranks forum that had some posts covering Microsoft Windows batch file scripting. This was similar to the TI-BASIC language I used on my calculator, so I began writing simple batch file scripts[^6] that I shared on my personal website.

That fall in my first semester of high school, I took a course in game development that covered DarkBASIC[^7]. The course was unique in that it was structured like an alternate reality game where the student took on the role of an intern in a game company; the class was self-paced and students were allowed to complete story objectives (e.g. fix a bug in a game function, add a sound effect to the character jump action, etc.) that served as the classwork for the semester. I was gifted with a lifetime interest in game development from that course and by the end of the semester I had decided I wanted to become a game programmer after graduation.[^8]

Motivated by the more complex pranks created in other coding languages that I saw achieved by members on the computer prank forum[^9], I started learning AutoIt near the end of 2006[^10]. I ported my batch file scripts to AutoIt and shared them on my personal site.

🔗Influential Studies

Around that time, I came across a copy Hacking: The Art of Exploitation at a local Borders and, despite not understanding much of its technical contents, would eagerly browse the pages whenever my parents brought me to the store. While online I was influenced by "How To Become A Hacker" by Eric S. Raymond.[^11] From Raymond's advocation of open-source and exposure to diverse programming language paradigms, I committed to learning the C programming language[^12] along with others (e.g Perl, PHP, Python, etc.) and tried a Linux distribution (BackTrack 2); I had gone down the rabbit hole.

Of note during this time is that I became a strong sympathizer of the philosophy of Free Software and started releasing all my software under the GNU General Public License[^13]. This had a significant influence on my worldview and tenets as a teenager and young adult.[^14]

My parents gave to me at my request a Everex gBook VA1500V[^15] preloaded with gOS V2 for my 2007 birthday, and I tried my hand at GTK+ 2 GUI development. I undertook more elaborate programming challenges in a variety of languages, and started to reach the limits of my knowledge at the time, abandoning some projects I could not solve at that point.[^16]

I took a summer online class in 2007 covering computer programming in QuickBASIC. The class was self-paced, and I had learned QBasic some months earlier by myself, so I breezed through the course within a couple weeks.[^17] Later, I took a computer science course covering Java for a semester during the 2007-2008 school year; I struggled with the concept of classes and object-oriented programming.

The following summer 2008 I participated in a computer science program for high school students at the Burnett Honors College of the University of Central Florida. We primarily used Java and I studied several introductory computer science concepts such as classic sorting algorithms, as well as genetic algorithms[^18] in an artificial intelligence course.

During late 2008 to early 2009, I mainly focused on server administration and ran game and webservers with my friends. I learned a lot about Linux distributions such as Debian and set up my own LAMP to run my personal website. I also joined the robotics club at my school where we built a simple radio-controlled robot powered by a VEX Robotics kit.

🔗Academic Endeavors

I became interested in computer repair, so for the summer of 2009 my father, who had worked previously as a computer technician, enrolled me in a CompTIA A+ course as part of the Computer Systems Technology path at a local technical college[^19]. The course was self-paced and covered a wide range of topics such as Windows Active Directory as well as hands-on troubleshooting and repair of faulty hardware. I took the course out of my own interest in learning computer repair, so at the end of the semester, I elected not to take the CompTIA A+ certification exam because I was not interested in acquiring a certificate at the time.

I was approved for Early Admission at the University of Central Florida for my 2009-2010 year of school. Although I had spent much time in my youth with computer studies, I decided to pursue a premedicine program and selected a major in Molecular Biology & Microbiology. Regardless, I continued to self-study server administration and web development during this year and became interested in BSD operating systems such as FreeBSD and OpenBSD.

I was also attending a couple of elective classes at my high school (Ancient Latin and Orchestra[^20]). One of my teachers noticed I was handy with computers and recommended I help troubleshoot computer issues for some of the teachers. The Engineering and CAD teacher forgot the password for an old Windows 95 system used to control a CNC machine; after recovering the password, I was given free rein of the engineering lab and used the opportunity to play around with the old Windows 9x and Windows NT systems and try out different pentesting tools and live USB software. The following year I would also interact with the Art teacher next door and help her with Mac OS X issues she encountered.

By my second year at the university, after considering the lifestyle requirements of a career in medicine as well as my own personal interest, I decided I wanted to study computers in earnest afterall and switched my major to Computer Engineering.[^21] Although I found the computer programming courses easy, I had a lot of difficulty with the physics and calculus courses.[^22] It wasn't until I took a digital systems course in the fall semester of 2011 that I truly felt I made the right choice of career path.[^23]

Between August 2010 and April 2011, I volunteered at Florida Hospital Orlando[^24] and was placed in the Management Information System department thanks to my previous education in computer systems technology. I had the opportunity to shadow the various IT technicians at the hospital as they responded to support calls, and I gained hands-on experience cloning OS images, configuring printers, and troubleshooting and repairing computers.[^25]

🔗Formative Internships

I had my first paid job from August 2011 to December 2011 as an IT intern at Dignitas Technologies. It was part-time and my job responsibilities included typical IT technician work such as administrating Linux servers, troubleshooting computer issues, crimping and running network cables, etc. The company developed products in the modeling, simulation, and training field, a common business type in Orlando, so I soon became interested in developing software for computer simulations. I wanted to transition to a software development role, but no positions were available at the time so I ultimately left the company when my school semester ended.

From September 2011 to July 2012, I had another part-time job as a participant of the UCF Lockheed Martin College Work Experience Program. I was initially placed on the Logistics Support System team at Lockheed Martin where I completed various quality assurance tasks as such debugging, running tests, and resolving stale tickets lingering in the Mantis Bug Tracker queue. The team developed military logistics software and my daily work involved working with web servers utilizing Java Server Pages. Of note is that I was first exposed to the concept of a software versioning and revision control system via the team's prominent use of Subversion. My manager seemed to really like Agile software development which she incorporated into our meetings, but I had trouble understanding the concept.

However, the work I was doing for the Logistics Support System team was drudgerous and the nature of the work meant I rarely interacted with the rest of the team as I was addressing isolated bug reports that were low-hanging fruit. At the onset I had taken on the position in order to improve as a software engineer and learn from mentors in the professional field. I didn't feel like I was advancing much in my career. Disillusioned, I was prepared to leave my job at the end of the semester.

By chance, a manager from the Lockheed Martin UK CATT wanted a bug tester for his team and I was referred; I wanted a change so I accepted the offer to transfer to the UK CATT team. I was initially placed on bug discovery duty for the OneSAF environment. I much rather enjoyed my position on the UK CATT team because I got far more opportunities to interact with team members, fellow interns, and cool simulation technology[^26]. I was also given more unique software development tasks with senior software engineers serving as mentors.

During my time with the UK CATT team, I did come across some interesting tasks. For example, a lot of legacy code needed porting so I had a chance to port Ada[^27] code written with the PowerADA compiler in mind to the arguably better supported GNAT compiler.

I then transitioned to the Lockheed Martin CSA team to help with their F-35 flight simulator where I ported a joystick driver to SDL along with a radar occulting service that generates audio simulating enemy radar. In order to support C interoperability, I was tasked with porting old Fortran code to Fortran 2008. I also had some exposure with Linux cpuset and IRQ configuration to optimize simulation runs and support a legacy DAQ interrupt card implementation.

I wanted to continue on a career path with Lockheed Martin so I decided to become a proper full-time intern in July, 2012; I continued with the Lockheed Martin CSA team. My tasks now focused heavily on the Linux operating system, such as troubleshooting a real-time memory map debugger to inspect the simulations as they run; I compiled my own Linux kernel for the first time and gained experience parsing Linux ELF files for DWARF debugging information.

In November of 2012, the team I was on was disbanded at Lockheed Martin and I decided to take a break from work for Thanksgiving. I hadn't been placed on a new team when I returned so I requested to be called in when there was position available; I was more focused on studying for final exams that December so I didn't think much of it.

However, I returned to school in January of 2013 and was still in a limbo state at Lockheed Martin without a position available for me.[^28] I held out hope for a role opening up with a team at Lockheed Martin, but ultimately began searching for a position with another company.

🔗Nascent Career

I interviewed for a Software Engineer position at Control Micro Systems and joined the company on March 4, 2013. I cut my teeth on Linux kernel development during my time at Control Micro Systems. I was hired primarily to port a laser material processing system that formed the core of the business from the aging MS-DOS to modern Linux.[^29] The software was programmed in PowerBASIC 3.5 which only ran on MS-DOS, so I was tasked with rewriting the code to C to get it running on Linux.[^30]

Furthermore, whereas MS-DOS gave programs essentially free rein control over the system, a kernel driver is the typical middleman to hardware on Linux. So I read the Linux Device Drivers book and began writing Linux kernel device drivers. PowerBASIC was not available for Linux, so realizing the limitations that lack of portability posed for future maintainability, I chose to adhere strictly to popular standards; I became well-versed in the C99 and POSIX.1-2001 standards, along with utilizing the GNU Autotools suite.[^31]

I sent my first email to the Linux kernel mailing list on August 22, 2015. On September 30, 2015, I submitted my first patch to the Linux kernel mailing list, adding GPIO support for the ACCES 104-IDIO-16. I would continue interacting with the Linux kernel mailing list thereon and submitting further patches for improvements to the Linux kernel project. By December of 2016 I had also joined the Gentoo project as a proxy maintainer.

The first discussion I had regarding a "generic definition of an idealized counter device" occurred on June 26, 2017. Little did I know that this would evolve to become what I am most known for in the Linux kernel project: the Generic Counter Interface. The final version of the introduction patchset was submitted on April 2, 2019.

During my time with Control Micro Systems, I had the chance to work with FPGA platforms such as the Xilinx Spartan 6 chipset and Avnet MicroZed and PicoZed which gave me a reason to learn Verilog and the ARM Cortex-A9 processor. On the PC side, I learned PC/104 and used a 500 MHz Tektronix oscilloscope to verify latency and jitter of interrupt routines. I even dabbled with a four-layer PCB board design using the gEDA suite.

🔗Sabbatical Retreat

On July 31, 2018, I left Control Micro System to study Japanese in Fukuoka, Japan.[^32] I made a personal vow at that point that thereon that any software I develop must be released as open source. I flew to Japan on September 25, 2018.

I had been granted a student visa for Japan with a valid residence period of a year, so I returned to Winter Park, Florida, on September 22, 2019. I wasn't quite sure whether to return to Japan for second year of Japanese language study, so I waited to decide until the end of the year. I realied I did want to return, so by the end of February I had scheduled the trip for April 21, 2020. Unfortunately, the trip was cancelled by the airline on April 16, 2020, due to the COVID-19 pandemic; it wasn't until January 2, 2021 that I finally reentered Japan.

🔗Open-source Profession

With the free time available in 2020, I took some classes at the University of Central Florida[^33] and applied for software engineer positions. I was interested in working with open source software so I applied to Canonical originally for an Ubuntu package maintainer position but was referred to the Ubuntu stable kernel team. I passed the interview and joined the Ubuntu stable kernel team on August 3, 2020.

My job responsibilities at Canonical consisted of cranking kernels, fixing bugs, reviewing patches, and similar. It was my first completely remote job, yet I built up a pleasant relationship with my coworkers and the work atmosphere was quite relaxed; we had a common objective of producing a solid stable kernel and everyone worked together to achieve it. Ultimately, I left Canonical on March 12, 2021, because the time zone difference living in Japan made it difficult to attend meetings and communicate with my coworkers who all lived in the West.

I returned to Winter Park, Florida, on February 26, 2022. Less than two business days from my arrival I received an email from a technical recruiter out of the blue asking if I was interested in a Linux kernel support position at Linaro. Linaro is a well-known top contributor for the Linux kernel so naturally I agreed to interview and ultimately was offered a position. I started working for Linaro on April 18, 2022, as a senior software engineer.

Ironically, my first project at Linaro did not involve contributions to the Linux kernel but was rather to develop a Fuchsia driver to support the ELAN Touchpad Controller eKT3644 on the Pixelbook Go. The project was to serve as a trial run to see how external developers approach the Fuchsia OS and the Fuchsia SDK; a large portion of my responsibilities was providing ample feedback of my development experience for Fuchsia.

With the success of the first Fuchsia project, I was assigned to a second one which started on November 14, 2022, with the objective to bring up the NXP i.MX 8M Mini EVKB for Fuchsia. The purpose of the project was similar to the first, but whereas the first covered out-of-tree development via the Fuchsia SDK, this would cover in-tree Fuchsia development; it was a much larger project in scope. Similarly, much feedback was provided, and the code produced allowed the board to boot to console with GPIO/pinmux support, but by March 2023 the funding for the project had dried up. I gave my final retrospective for the project on April 5, 2023.

On April 10, 2023, I transitioned to the Linaro Qualcomm landing team. Nearly a year after joining Linaro I was finally assigned to a Linux kernel role with a project to upstream Linux kernel support for the Lantronix Open-Q 865 Development Kit.