Me

Yours Truly

Me, Myself, And I

My name is Alex Rao, and this is my personal website. Here you'll find out who I am, what I'm all about, and what I've done. You'll also find out how to contact me, if you're in to that sort of thing.

Who am I? That's an interesting question. The simplest answer is that I'm a young man ready to make something of myself in this world. I was born in Atlanta, GA, but quickly moved to Birmingham, AL and eventually to Tulsa, OK - which I still call home to this very day. I'm the son of two extraordinary parents, and the twin of one awesome sister. I'll answer your question before you ask it - no, my sister and I are NOT identical!

I'm very passionate about the relationship between software and hardware, and while not working, studying, or sleeping, you can usually find me hacking on some personal project. Indeed, that's the reason for the existence of all my GitHub repositories! Unfortunately, experimenting with software is much easier (and cheaper) than experimenting with hardware, so I haven't had as much experience tinkering with hardware - I hope this will change soon.

Most projects start because of a single thought - "Wouldn't it be cool if..." Interestingly enough, most of what I know about languages comes from these projects. While I take classes in Java, Python, etc. like everyone else, it is through these projects that I really learned these languages. As an example, I learned the Java Programming Language through the creation of Sudoku Online, and I really learned MATLAB® through SoluCheck. Indeed, even while doing a project, I'll think "Oh, but what if I could do...," and then I start doing.



I invite you to explore the rest of this website. I hope you enjoy!

Best Regards,
Alexander Rao

Education

I've been blessed to have an absolutely wonderful set of parents, who placed a high value on education. As such, I went to one of the best schools in Tulsa, OK - Holland Hall College Preparatory School. I graduated from there having earned the Patrick O. Morris award for outstanding intellectual, social, and ethical standards. While it may sound like I'm bragging about myself, I like to think I'm bragging about my family. It takes a village to raise a child, and the village did one hell of a job with me!

The Early Years: Holland Hall & High School

I went to Holland Hall from Kindergarten to Senior Year - which makes me a lifer there. I really did enjoy my time there, and I am confident that though I may wander far and wide, I will never forget my roots - and those roots started at Holland Hall.

The Classroom

This was where I belong. I loved the classes at Holland Hall, especially since the classes were allowed to be interesting, engaging, and "abnormal." For example, Dr. Keri Shingleton taught a class called Microbes & Diseases, where we actually got to grow, test, and interact with different bacteria. Whenever I tell anyone about this class, they're response is almost always "You got to do THAT in high school!?" I credit most of my critical thinking abilities to Holland Hall - learning how to learn was by far the overarching goal of Holland Hall. To say that has served me well would be massive understatement.

Thankfully, Dr. Shingleton was not the only wonderful teacher at Holland Hall. Mrs. Karen Holmes taught me mathematics, and she was darn good at it too. She was so good, in fact, that she and I did an independent study together on Multivariable Calculus! To say she had a lasting impact on me would be 100% accurate. Indeed, I owe much of my mathematical ability to her teaching skills!

The Sports

I was a part of the Holland Hall Cross Country Team, all the way from 6th Grade to Senior Year. Don't be fooled - I am not a fast runner, but I can hold my own. Greg Spencer, my coach, actually was fast. Like, so-fast-you-can't-see-him fast. Incidentally, he had actually graduated from Holland Hall, and his dad also taught there as well! A Holland Hall family right there. I actually did become the Men's Varsity Team Captain, and I earned the prestigious "Hamburger Helper" award (It's not that prestigious, I guess, but still...) for keeping the tent standing during a torrential downpour. Overall, I really enjoyed Cross Country, and I made some lifelong friends in that group.

Modern Times: College & Beyond

Nowadays, I'm a student at the Georgia Institute of Technology, where I'm working towards a Bachelor's of Science in Electrical Engineering (BSEE) with a minor in Computer Science (CS). Eventually, I hope to earn a Master's Degree, probably in Computer Science. But who knows? Maybe I'll be whisked away into Philosophy. The future's an open book, and I'm just hopping one page at a time. But I wouldn't bet on the whole Philosophy thing panning out. In my heart of hearts, I know I'm an Engineer.

My Pastimes

Boy Scouts of America (BSA)

I was very active in Boy Scouts, starting as a wee little Cub Scout. I participated in all the cool stuff, like selling popcorn and making pinewood derby cars. While mine **almost** won, I still learned alot from the experience, not to mention that I had a lot of fun doing it! Additionally, I made some of my most important friendships and relationships during my time at Troop 26.

Once I graduated to Boy Scouts, I went to BSA Troop 26, one of the largest Boy Scout troops in the United States. I quickly found that I loved it. Absolutely loved it. I became an Eagle Scout in 2012, and then became Senior Patrol Leader of Troop 26 a year and a half later. Under my leadership, we went to Summer Camp, the National Jamboree, Sea Base High Adventure camp, and did a float trip down the Illinois river. Interestingly, on all four of these trips, there was substantial rain. Enough rain that I stopped caring about getting wet.

While Troop 26 is a wonderful troop in its own right, I give most of the credit for its size and magnificence to its Scoutmaster, Bill Shaffer. Bill has been the scoutmaster for over 40 years, and is an integral part of why Troop 26 is as successful as it is today. I personally owe him a great deal, as he has given me much of my work ethic and common sense.

Hacking

I absolutely love to hack. Probably not the "hack" you're thinking of. My definition of "hack" means to simply work on a personal software and/or hardware project. All of my GitHub repositories arose from my "hacking." Which one's my favorite? Good question. As of this writing, I'd probably have to say Sudoku Online. It's my most successful project, and it's actually used. By the same token, however, shouldn't MealPlanner be my favorite? Hmmmm...

Regardless of what my favorite project is, I think it has become evident that I like to code. I impore you to look below and view my various projects; I really am proud of them all!

Travel

I had the opportunity to study abroad in Metz, France for the Fall 2017 school year. I consider it one of the best decisions I have ever made. To read about all the places I was able to visit, you can click here to go to my travel blog. To see all of my travels, go to the Travel tab!

My Resume

It looks like you don't have a PDF viewer for this browser. Not to worry... You can download my resume here.

Passions

Software Engineering

You don't have to look far to see that I LOVE software. My GitHub repositories (which includes this site, by the way...), and my biography repeatedly hints at my software leanings. But it's more than that. It's software that can serve. Software with a purpose. I'm passionate about making software that can change people's lives for the better. Now, many of you are thinking "Oh, he's just a kid that wants to change the world. Just like everyone else." While I would like to change how this world works, my goal is a bit more... reasonable. Improvements are where I think I can actually make substantial impact. Making applications easier to use and available to a broader audience. Making sure that websites are reasonable, and apps that allow users to make decisions faster. This is where I think I can truly make a difference.

Embedded Systems & IoT

This is more... recent than anything else. I've always loved the thought of learning hardware - only recently have I actually been able to do so. Most of my work with embedded systems have been with the MBED class of systems. These are small devices based on ARM architecture. With this, I've been moving closer and closer to developing for the Internet of Things, or IOT. Making a simple MBED program that can flip a switch, over the internet, is something I've been working on recently. Of course, unlike other embedded system companies, I'm going to first ensure that the system is secure.

Experience

Click on any company to learn more about my experience there

This is where I currently work, as a Cooperative Education employee (Co Op). For my first rotation, I worked in Transmission Planning East, which was chiefly responsible for making sure that Georgians can expect reliable power at all times. As it turns out, this is quite a bit more difficult than it looks - and it already looks challenging.

Here, I helped improve efficiency by improving the already-existing technologies. For example, I created a form in Microsoft™ Access that allows users to automatically enter in new "contingency events." This dramatically reduced the precent error, since before my program, the process had been completely done by hand.

Also, I was responsible for adding new reports, such as reports showing historical project plans, and how they've changed over time. The report is intuitive, easy to use, and completely interactive.

I also currently work at MathWorks™ as a Student Ambassador. Basically, my job is to:

  • Ensure Students and Faculty at Georgia Tech know that they can get MATLAB® & SimuLink for free
  • Ensure Students are aware of how MATLAB® can help solve real-world problems
  • Generally promote MATLAB® and other MathWorks™ products

To this end, I've hosted two events - a Publishing workshop, and a booth near University House.

At THG, I was responsible for studying possible connections between price of energy and carbon dioxide emissions. I used MATLAB® and Excel® to analyze the huge amounts of data; in particular, I used the Parallel Computing Toolbox and Publishing to complete the project in a timely manner.

I'm a Teaching Assistant for CS 1371 (MATLAB®) at the Georgia Institute of Technology. Here, I'm responsible for teaching students the basics of MATLAB® and programming, and how computers can help solve complex problems. Additionally, I'm also responsible for the autograder, which is software that automatically runs and grades student submissions.

At Experian™ Health, I was responsible for managing the client-facing, Tableau®-based healthcare dashboard system. The system allows users to monitor patients and billing. Using the Tableau® Python API, I automated the user sign up process, saving ~3 hours per week and reducing errors to zero.

At the Chickasaw Nation, I worked on two projects - a Digital Library and 3 Dimensional Printing.

For my first project, I was part of a team that designed a template for digitally storing all the artifacts and research of the Chickasaw Nation. A few of the things I learned from this experience:

  • Don't be afraid to speak up
    • This project in particular taught me that speaking up is an important part of being a team player. If you See something, Say something™. This might be from the TSA, but it really makes a difference.
  • Give clear directives
    • I also learned that delegation is important. If nobody has a specific problem to solve, it's unlikely anyone will solve anything. Indeed, without direction, nobody even knows what to solve. Giving clear orders is a must in any team.
  • Planning makes a huge difference
    • Planning out a journey before you make the journey is a no-brainer. How else would you know where to go, who to meet up with, or what to do? Well, like trips, work must be planned prior to being done.

I worked with another student to be research current 3D printing capabilities, and how they could be used to help the Chickasaw Nation. I consider this project to be much more successful than the Digital Library:

  • Braille
    • Using a free utility and some in-house programming, we were able to print Braille signs that said arbitrary english, all automatically
  • Artifacts
    • Using special scanning utilities, we were able to successfully scan and print an artifact. As 3D printing capabilities increase, so will the accuracy of these reprinted artifacts!

Still, I learned a few things. For starters, I learned that there's no shame in not creating something in-house. Using tools from others is a sign of wisdom, not weakness. I also learned that being honest about meeting deadlines was better than putting it off. It's better to promise less and then deliver more than the other way around!

At Stinnett & Associates, LLC, I was primarily responsible for creating and maintaining VBA applications for the company, particularly applications within Microsoft Excel. I created an Inventory Tracker, which would alert users when to order more supplies so that existing events would be properly staffed. Furthermore, I also created an Outlook app that would read the content of an applicant's email, and then place salient information into a companion Excel workbook.

At Mathnasium™, I was responsible for teaching students young and old how to grapple with Mathematics. The experience gleaned proved invaluable when teaching MATLAB at Georgia Tech.

At the University of Tulsa, I interned as an assistant researcher in Mechanical, Chemical, and Electrical Engineering. Specifically, we were testing the strengths of different epoxies, which were utilized in fixing fissures in underwater oil pipelines. I worked under TU professor Dr. Michael Keller and Graduate Student Chris Burnworth, both of whom were experts in their respective fields.

Specifically, we made 60 pipes with fabricated deficiencies, and then saw how much pressure was required to blow the pipe. Then, after fixing this hole with epoxy, we'd see how much pressure the pipe could take before bursting again.

Additionally, we also made extraordinarily thin plates out of the same epoxy. Using paint-on electrical wiring, I drew across the plate and connected the paint to a wire, which led to NI equipment connected to a LabVIEW-equipped computer. Using LabVIEW, I then created an experiment which logged measured resistance across the line, subtracting out the resistance of the wire. Then, a constantly increasing stretching force was applied to the plate, until the plate broke. Since the resistance would increase dramatically as soon as the plate broke, reading this resistance was integral in figuring out exactly how strong the plate was.

Projects

The Autograder is a stable, performant automatated grader for CS 1371 Homework Submissions

Grading

Use efficient grading techniques to automatically grade an entire homework assignment for any number of students. Grade outputs, plots, files, recursion, and more

Notifications

The Autograder can send you rich, interactive notifications via email, text, or Slack.

Performance & Efficiency

Do you have a need for speed? The Autograder is a highly performant grader.

  • The Parallel Pool means multiple tests can be run simultaneously
  • Cheat Detection can take as little as 10 minutes
  • Grading 1,000 students often finishes in less than an hour
  • Downloading via the Autograder is often faster than directly from Canvas
  • Enjoy native Java performance for "hot spots" like downloading and file diffs.

Sandboxing

Nervous that another student's code could affect your grade? Don't be. With sandboxing built in, every single test case is run in a controlled, pristine environment

Cheat Detection

Integrated cheat detection means the entire course can be assessed for cheating in as little as 10 minutes. Results are organized by section, and each suspected cheater has their own control center, where the user can view suspect code side by side

Downloading

Via the Canvas and Google Drive APIs, the Autograder can automatically download solution files and student submissions, directly from the source. Often, this can be faster than using those tools directly

Uploading

The Canvas API also allows the Autograder to automatically publish grades, upload feedback, and post an announcement to the course. The announcement is even formatted via Markdown, HTML, or plain text, and can be previewed before posting

Selectively Grade Submissions

Do you only need to grade a few students? The Autograder allows the user to interactively select which students they want to grade. Need to edit a student submission? The Autograder can pause after downloading, to allow you to add updated student submissions, if required.

Schedule the Autograder

Want to grade as soon as you can, but don't want to stay up until midnight? Schedule the Autograder and relax. You can even continue to use MATLAB until midnight. Scheduling also does sanity checks to make sure the solution is up to snuff.

Banned & Recursion Checking

Static banned function checking means a 0% performance hit due to banned or recursive function checking

Email Student Feedback

Need to email students their feedback directly? Integrated Gmail services means rich emails can be sent to each student. Feedback is linked, not attached, for simple redaction if necessary

Debugging

Did something not work out quite right? Integrated debugging features means you'll never lose work because of an error. Upon breaking, you'll be placed in an interactive environment to test functionality, evaluate state, and even choose to continue grading

Sudoku Online is the world's first (and probably only) cross-platform Desktop application that supports networked multiplayer. While there are many features, here are the notable ones:

  • Play classic Sudoku, with Notes, Hints, etc.
  • Play online with as many players as you wish
  • Drop-In/Drop-Out play style means players can join and leave when they wish
  • Board generation means player's can ask the game for a random board or upload their own
  • In-Game chat means players can constantly stay connected, and even chat after the game is over
  • Cross platform - All the platform needs is a screen and the Java Runtime Environment (JRE)
  • Automatically scales the window to fit any device
  • Has native binaries for Windows and macOS

Sudoku Online was a labor of love. It was originally made so that a certain young lady and I could keep in touch while I studied abroad, but I'm happy to report that it's been used even outside of this context. This project was born out a "I wonder if this is even possible..." thought. I have, of course, since found out that it is indeed possible.

Writing this application actually taught me quite a bit about the Java Programming Language and how modern networking works. Ideas like sockets, servers, and streams were introduced to me for the very first time. Multithreaded programming became second nature. Overall, I actually learned more creating this than I learned in my classes!

MealPlanner was created out of a desire to electronically plan meals. Incidentally, it's actually actively used, but only by me. It's written in PHP™. It allows users to create records for ingredients, recipes, and meals, and then schedule these meals. It then allows users to view a calendar of their meals, and to get a shopping list of what they need to buy for a certain range of dates.

SoluCheck is my very first real "Program" - it has an installer, a GUI, and is extraordinarily user friendly. It's created entirely in MATLAB®, and uses MATLAB®'s GUI elements.

SoluCheck was started from a desire to be lazy. For CS 1371 (A class which I now TA for), we have to create code that will, theoretically, solve a given problem for any starting conditions. These starting conditions are given as inputs to MATLAB® functions, or as external files (i.e., text files, image files, etc.).

The Beginning

Originally a command-line utility, it consisted of one function - Solver - that took in a function name (as a string), a "number of iterations" (how many times solver would test the function), and a variable number of arguments - arguments that specify the starting argument and the "step size" for that argument. Basically, solver would increment the argument by its step size each successive iteration. This was clunky, to say the least, and for a large number of arguments, would quickly go out of hand with number of arguments. Indeed, the first solver didn't even work!

A Second Attempt

Still a command-line utility, this time the solver at least worked... but only for numbers. Characters caused the solver to straight up die, and error checking? Look who's asking for the moon.

Yet Another Attempt

Now this time, there was no real "hot new thing" - it was just bug fixes. It was becoming clear at this point that a GUI would be almost a requirement - the argument entry was becoming nightmarish!

A GUI Rises

This is it. The beginning of SoluCheck, SoluWare (The "parent company" responsible for SoluCheck - I had my head in the clouds). The world's first (and still only!) GUI that will programmatically check homework for a variety of test cases. Mind you, there are still some problems. The business logic and presentation logic are still combined - not good for any product, and there are still a variety of arguments not testable. But it's a start.

Now, SoluCheck is at the forefront of MATLAB® function testing. Almost a testing framework, but made for programmers just getting used to MATLAB®, but useful for experienced Programmers as well.

Features

SoluCheck has a multitude of features that help the average MATLAB® programmer test and debug code. Features include:

  • Ability to arbitrarily test any number of arguments, any number of times
  • User has easy-to-use options that allow image testing, plot testing, and file testing, in addition to testing normal outputs
  • As opposed to normal testing procedures, SoluCheck will, by default, treat identical errors as success, since if both the function and solution error, that is success!
  • Advanced options allow user to precisely tune SoluCheck to their precise needs

As noted above, SoluCheck has a variety of advanced options, detailed below:

Notifications

Need to head out? Have SoluCheck email you the results of your test, viewable from anywhere .mat files are supported!

Performance

Does your code run slowly? Or quickly? See how it stacks up against the solution file with timing and code performance analysis. See exactly what's slowing you down, and graph timing information over the entire set of iterations.

Auditing

Don't believe the solution code is right? Audit instead, and see how many times your function agrees with the solution, and, for where they differ, know how and why, with input and output information.

Files

Need to test contents of text files? Use the File Comparison Tool to automatically include files as outputs.

Images

Do you need to check images? Use the Image Comparison Tool, which has built-in tolerance that has been verified as identical to that of the autograder.

Plots

Need to check plot outputs? SoluCheck's Plot Compare Tool will inform you of the average "plot difference" (% difference between plots).

Loading & Custom arguments

Need to fine-tune your input arguments? Simply create custom input scripts that output the new input argument and run in a sandboxed state. Need to include variables, but don't want their value to be overwritten? Just load a custom .MAT file using the Variable Loader.

Variable I/O

Does your function support

varargin
and/or
varargout
parameters? Test the function using SoluCheck's built-in variable I/O support.

Automation

Have a database of tests you'd like to perform? Import them with the Automation module of SoluCheck.

Like Sudoku Online, this one was born out of a simple thought - "I wonder if this is possible..." I was studying Chess algorithms, and I realized that it was possible for a computer to track moves. At the time, the only real "programming language" I knew was MATLAB®, so I got to work, and wrote the first Chess Player for MATLAB.

Supported wherever MATLAB GUIs are supported, the app will track player moves and keep a log of them, which can be docked or free-floating. It also ensures that checkmate is valid, and won't let the player put his or her King into harm's way. The game highlights squares that are valid moves, albeit using an inefficient algorithm. But at the end of the day, it works, and it taught me a good bit about MATLAB®.

A simple project for MATLAB, and interestingly, actually originally a part of SoluCheck. Basically, it allows loading a variable number of .mat files into your workspace, using a user-friendly GUI (which I personally think is better than the one supplied by MathWorks™).

The Gift Hub is an online portal where you, your friends, and your family can all organize any gift-giving occasion.

Features


The Gift Hub allows you to do a variety of things, including:

  • Create your own gifts and choose who can see them
  • Reserve gifts for others
  • Inform others of which events you participate in

Below are detailed descriptions on each facet of The Gift Hub

Groups


Giving is better in groups. Define as many groups as you want, and you have ultimate control over what is shown to whom. Make a group for your family, your friends - all you need is their email to add them!

Gifts


The Gift Hub is all about gifts! We allow every user to keep a personal collection of gifts that he or she might want, and we give the user utmost control over who can view this gift. In fact, a gift can be viewable to everyone - or no one - and anywhere in between.
Additionally, reserve gifts on other’s lists, without that user knowing! This makes planning a gift a breeze!

Events


At the end of the day, giving is about getting together and celebrating a common cause. Here at The Gift Hub, we want to celebrate that, which is why The Gift Hub allows every user to define events they celebrate, with some default events provided right out of the box. Better yet, harness the same privacy controls utilized for gifts and pick exactly who can see what you celebrate.

Acknowledgements


This would not have been possible without the help of my father and my girlfriend, both of whom have worked, and continue to work, immensely hard to make this a reality. This could not have become a reality without them!