This week, we continue my reminiscences of my college days at IUPUI, where I studied computer science. We also cover my final semester and my work at the IU Department of Medical Genetics.
Links of Interest
- IUPUI website: https://www.iupui.edu/
- Prof. Emeritus Dr. John Gersting on IUPUI website: https://science.iupui.edu/people-directory/people/gersting-john.html
- Indiana University Department of Medical and Molecular Genetics: https://medicine.iu.edu/genetics
- Riley Children’s Hospital Indianapolis: https://www.rileychildrens.org/
- Basic Input/Output System (BIOS) on Wikipedia: https://en.wikipedia.org/wiki/BIOS
- Read-Only Memory (ROM) on Wikipedia: https://en.wikipedia.org/wiki/Read-only_memory
- Operating System Kernel on Wikipedia: https://en.wikipedia.org/wiki/Kernel_(operating_system)
- Programmable ROM (PROM) on Wikipedia: https://en.wikipedia.org/wiki/Programmable_ROM
- EPROM on Wikipedia: https://en.wikipedia.org/wiki/EPROM
- Electrically Erasable PROM (EEPROM) on Wikipedia: https://en.wikipedia.org/wiki/EEPROM
- Persistence of Vision Ray-Tracer (POV-Ray): https://www.povray.org/
- How to draw a family tree: https://www.genome.gov/Pages/Education/Modules/YourFamilyHealthHistory.pdf
- IUPUI Commencement 1978 photo: https://iuidigital.contentdm.oclc.org/digital/collection/IUPUIphotos/id/34215
- Mayor William H. Hudnut, III on Wikipedia: https://en.wikipedia.org/wiki/William_H._Hudnut_III
- Baltimore Colts relocation to Indianapolis on Wikipedia: https://en.wikipedia.org/wiki/Baltimore_Colts_relocation_to_Indianapolis
Support us on Patreon: https://www.patreon.com/contemplatinglife
Where to listen to this podcast: https://podcasters.spotify.com/pod/show/contemplatinglife
YouTube playlist of this and all other episodes: https://youtube.com/playlist?list=PLFFRYfZfNjHL8bFCmGDOBvEiRbzUiiHpq
YouTube Version
Shooting Script
Hi, this is Chris Young. Welcome to episode 74 of Contemplating Life.
This week, we continue my reminiscences of my college days at IUPUI, where I studied computer science. We also cover my final semester and my work at the IU Department of Medical Genetics.
I had three courses that semester. Systems Programming CS 403 was a course on operating systems. In it, we learned about the hierarchy of software in a computer.
At the lowest level, your computer has something called a BIOS. That is an acronym for Basic Input and Output System. It is stored in permanent, read-only memory. It is completely hardware-specific to your particular machine. For example, it will poll your keyboard to see if you are pressing a key, and if so, grab the keystroke and pass it along to the other software. In those days, personal computers were completely text-based. There was no graphical interface like Windows or Mac OS. So, the BIOS would handle sending characters to the screen. It would send characters to your printer. Also, it would handle the lowest-level functions of reading and writing data to a floppy disk or hard disk. It didn’t organize the data into files or manage directories. That’s for the actual operating system to handle.
Above the BIOS in the hierarchy is the kernel. It creates and manages the file system on your discs, loads programs into memory, and performs memory management on operating systems that allow more than one program to run simultaneously.
Then, there are utility programs. In a text-based operating system, commands such as copying files, modifying file permission, displaying directory listings, etc., are often handled by utility programs, even though they seem to be commands issued to the operating system itself.
The top layer is your application program. That’s your word processor, spreadsheet, database manager, and later, Internet browsers. The course explained how all of these processes communicate with one another and who does what at each level.
As I mentioned, the course number was only 403. As a senior, I was already taking graduate-level courses in the 500s and 600s. I wished I had taken this course earlier because it would’ve made that independent study project I did with Dr. Gersting much easier. In that project, I had to implement an operating system. Unfortunately, at the time, I really didn’t have a very good understanding of how it all worked.
A few years later, when I started building my own personal computer, I really needed to understand all these things. For example, I had put together a completely customized set of hardware, and I had to write an extension to the computer’s BIOS to handle my specific hardware choices.
In those days, we didn’t have flash memory. Anything stored in computer memory would disappear when the power was turned off. We did have something called a ROM, which stands for Read-Only Memory. Programs stored in ROM are not lost when the power is turned off, but they cannot be changed. Their contents are burned in during the manufacturing process. However, there were devices called PROMs, which were Programmable Read-Only Memories. With special hardware, you could program your own ROMs. The catch was if you made a mistake and needed to update the program, you had to throw the chip away and program a new one.
Next came something called EPROM, which stands for Erasable Programmable Read-Only Memory. If you need to erase the contents of the ROM, you can erase it and reuse it. There was a window on top of the chip. You would place the chip under a strong ultraviolet light overnight. That would erase the memory, and you could reuse it. I had one of those in my first personal computer and had to rewrite my BIOS extension several times.
Eventually, they invented something called EEPROM, which stands for Electrically Erasable Programmable Read-Only Memory. They can be erased and rewritten electrically. It’s not such that you can read and write to the memory at will. You still have to erase it completely and rewrite new content. Such chips are used today to store the BIOS of your computer, and occasionally, when your computer updates its software, it will update your BIOS.
That particular class was one of the most useful classes I took because of the work I had to do on my first homemade PC.
Another class I took in my final semester was CS 661, ”Formal Compiler Methods.” As I explained in an earlier episode, a compiler is a program that translates a high-level language such as FORTRAN, Pascal, or C++ into machine language so that it can be run on the computer. The only thing a computer can do is run machine language. So, you need a compiler to translate other languages into machine language.
Most compilers take at least 2 passes through your program to translate it. In the first pass, your text is turned into tokens. For example, high-level languages have certain observed words such as “IF,” “THEN,” “ELSE,” and “WHILE,” just to name a few. It recognizes that these are reserved words and turns them into a number so they can deal with them more easily. You also get to make up names of locations where you will store values. These are called variable names. They can be anything you want, such as “MyData” or “Counter”. The compiler creates a symbol table of these names and assigns them memory locations.
The process of reading through your program and figuring out all of these things is called “parsing.” I was highly intrigued by different methods of parsing computer languages. In the 1990s, when I began working on the open-source CGI rendering program POV-Ray, I rewrote much of the language parsing section of the program and extended the programming language with new features. The other people on the team gave me the nickname “The Parse Meister.” So again, this course was one of the most useful courses I ever took.
The third class I took was “CS 590 Topics in Computer Science.” This was similar to the independent study project I had done with Gersting, except there were about five or six people in the class. It wasn’t just one-on-one. Anytime a professor wanted to teach a course that wasn’t in the regular curriculum, they just titled it “topics.”
The topic of this particular course was “Program Verification.” We explored formal methods of mathematically proving that a program did what you wanted it to. You would come up with different assertions that you would place throughout the program. These assertions were formal statements about things that you expected to be true of the data. You would then sort of manually run the program backward and see if the code really kept these assertions true.
I made good use of these methods in my work at the genetics lab. It wasn’t so much to verify that the code worked as designed. But we were having problems with bad data going into the database. We had data on punched cards from a previous record-keeping system. This data was put into a translation program that would put it in the new format for the database that we were creating. But occasionally, the data would get corrupted. It would not convert the data properly. So, I wrote a series of programs that would check the data for internal consistency.
Let me explain how the database worked. Each family had a family number, and each member of the family had a member number. In the members’ records, there was data explaining the relationship between that member and the other members of the family. So let’s say that the dad was member number one, the mom was member number two, and the kids were numbered three, four, five, etc.. There was a field called “spouse”. My program made sure that your spouse’s spouse was you. Sometimes, the data would get lost in translation, or maybe it wasn’t coded properly on the punchcards to begin with. The spousal numbers didn’t line up properly. My program would flag “Inconsistent spouse data.” Our data entry person, a nice lady named Paula, would go back and fix the original punched card data, run it through the translator again, and put the correct data in our new database.
They also had a system for keeping track of your siblings. Because you never know how many children a person is going to have, we only had one sibling pointer. The parents would point to the first child. The first sibling would point to the next one, and the next one, and the next one until you got to the last sibling, and that would point back to the first one. My program made sure that the loop closed properly and that each child had the same parents.
The whole concept behind this data verification program that I wrote came out of that topics class that I took in my final semester. It was probably my biggest contribution to the entire project.
We also faced the challenge of trying to get the data displayed in a graphical format. Geneticists have a way of drawing your family tree. If I recall correctly, men were represented by squares and women by circles. Lines connected family members in a particular standardized way. We had a computer plotter that would draw these graphs, and we had a printer that had some graphical capabilities.
I tried to come up with an algorithm that would more efficiently draw these family trees. I had a concept in my head about the way you would traverse the branches of the trees in a particular way that made it easier to create the plots. I wrote a proposal that I thought explained it, but Gersting couldn’t make heads or tails of it. I had not done a very good job of explaining the concept I had in my head. Unfortunately, I never did get around to implementing it. But I’m certain to this day I had a very useful way of creating such graphs.
That final semester was probably the second most stressful I ever had. It was a real challenge to work part-time in genetics and take graduate-level classes at the same time. Still, I managed to get two “A”s and a “B.”
I almost blew the final exam in one of the classes. I had missed a couple of classes under the stress of trying to get programs done. I decided I needed to go to class on the final day because I thought we were going to review before the final. I had the date wrong. This wasn’t a review day. It was the day of the final. If I decided to cut class that day, I would’ve missed the final and blown everything.
I also had to make special arrangements to take one of my finals on a different day. That’s because I was nearly in a car accident. I was riding in the wheelchair van going from my job to the 38th St. Campus when someone pulled out in front of us. The driver had to slam on the brakes very hard. Although my wheelchair was strapped down, it slid forward and bent my footrest as I slid into the back of the driver’s seat in front of me. It sprained my ankle quite severely. I called my professor and told him I had been injured in a minor accident and couldn’t make it. He agreed to let me take the final a couple of days late. I didn’t do very well on the final, so I told him, “As you can see, I didn’t cheat by taking the extra days to cram for the final because I didn’t do very well to begin with.” Ultimately, I still got a B out of the course based on my other work.
While we are talking about incidents while riding in the commercial wheelchair van, I should tell you about one other incident. The lift on my wheelchair van that my dad built was not fully automatic. Once you got up to the level where you could roll your wheelchair in, you had to manually fold up the lift. The wheelchair taxi company had fully automated lifts that would fold automatically.
The lift would unfold and lower to the ground. I would roll my wheelchair onto it backward with my back towards the van. The driver would then push a button, and the platform would raise until it was level with the floor of the van. I would then go back into the van, turn 90° facing forward, and there were straps on the floor that would attach to hold the chair in place.
There were two sets of controls for operating the lift. One was to be used while someone was on board. The other one was to be used when the lift was empty. That first set would automatically stop the lift when you got to the level position, allowing you to get off. But one day, the driver used the other controls. When it got to the top, he let go, but the button got stuck. Rather than stopping at the top, it proceeded to try to fold up with me in it. It was going to tip me over backward.
In the split second that all of this occurred, I began thinking about what it would be like to fall over backward. The driver was standing behind me, and I was going to fall on him, but I didn’t know how that was going to go. I had my head ducked forward to make it through the doorway. I was worried that when I landed, my head would snap back very hard. I figured it was better to put my head back ahead of time. Unfortunately, I did not think about the reason why I had my head forward to begin with. Without ducking, I don’t fit through the door. Just as I flung my head backward, the top of my head got wedged underneath the top edge of the doorframe.
As the lift continued to attempt to fold with me in it, it began jamming my head harder into the top of the doorframe. I could feel it compressing my spine. I was worried it was either going to crush my skull or break my back. I was saved by a rather disturbing outcome. The cable that was pulling the lift into its folded position broke on one side. The lift lurched slightly sideways as it was now being held solely by the right side cable. I don’t know if that triggered some other failsafe or if the driver finally got the button unstuck. But the lift stopped.
He then pushed the other button to unfold it until it was level again. I rolled safely into the van with nothing more than a bruised head and an aching neck.
Now, we had to figure out what to do next. How do we get me out of the van with a broken lift? We drove back to the wheelchair taxi’s garage headquarters. They had another vehicle available, but we had to figure out how to get me in it. We couldn’t figure out how to position the lift of one van to get me in the other one because we would have to unfold the broken lift.
When he unfolded the damaged lift, it was hanging a little bit crooked, but it looked reasonably solid. Having no other choice, I rolled out onto the broken lift, and he quickly lowered it to the ground. The remaining cable held. I got into the other van and made it home safely.
These days, I have a professionally made wheelchair lift on my van and it is fully automated. I make sure that when anyone operates it, they never use the button that can fold it up while I’m on the lift. They only use the other controls that automatically stop at the top.
I think the incident may have actually put a dent in my skull. If you look closely at my baldhead in the proper light, you can see bumps and valleys. Fortunately, there was no injury to my spine.
After nine semesters plus a summer class, I finally graduated with a Bachelor of Science Degree in Computer Science from Purdue University awarded at Indiana University – Purdue University at Indianapolis. Although I completed my coursework in December 1977, I had to wait until the June 1978 ceremony to actually attend commencement.
The commencement ceremony was held at Market Square Arena. Even though I had been to the arena many times over the years for sporting events and concerts and knew the place quite well, I took a wrong turn going from the parking garage to where I needed to go and ended up on a ramp that I had never taken before. It was much steeper than the ramps I usually took to navigate the venue. It felt like my chair was about to tip over backward, but fortunately, I kept it under control.
The commencement speaker was Mayor William Hudnut, III. He was one of my favorite mayors, even though he was a Republican. He was a really great guy.
At the time of my commencement, there was some sort of political controversy going on. I seem to recall it was a disagreement between Mayor Hudnut and the chief of police or something like that. I don’t remember exactly what it was. He made some reference to the disagreement in his commencement speech. It really disappointed me that he would take that opportunity to make political points during a commencement speech. Except for that one incident, overall, I really liked the guy.
A few years later, Mayor Hudnut awarded me a certificate naming me “Indianapolis Outstanding Handicapped Citizen” in recognition of the volunteer work I did as a member of the boards of directors of the Marion County Muscular Dystrophy Foundation and the Central Indiana Radio Reading service. See the YouTube version of this podcast for a photo of me receiving the honor. I liked him before that. He helped bring the NFL Colts here from Baltimore.
I didn’t need to go job hunting now that I had my sheepskin. The genetics department agreed to hire me full-time upon graduation. I don’t think Gersting had to do any persuasion to hire me in a permanent full-time position. I’d like to think that I had proven my worth to the department by then. But I’m sure Gersting was in on the decision to offer me the full-time position.
In upcoming episodes, we will discuss my remaining work at the department and the circumstances under which I eventually left for health reasons.
If you find this podcast educational, entertaining, enlightening, or even inspiring, consider sponsoring me on Patreon for just $5 per month. You will get early access to the podcast and other exclusive content. Although I have some financial struggles, I’m not really in this for money. Still, every little bit helps.
As always, my deepest thanks to my financial supporters. Your support means more to me than words can express.
Even if you cannot provide financial support. Please, please, please post the links and share this podcast on social media so that I can grow my audience. I just want more people to be able to hear my stories.
All of my back episodes are available, and I encourage you to check them out if you’re new to this podcast. If you have any comments, questions, or other feedback, please feel free to comment on any of the platforms where you found this podcast.
I will see you next time as we continue contemplating life. Until then, fly safe.