The Proposal

This past summer, Todd and I were separated because I was working in St. Louis and he was in Kansas City. One weekend we decided to meet in Columbia where we both still had our apartment. We both arrived at the same time and were extremely excited to see one another.

We walked inside our apartment and began unpacking our stuff. I noticed when I walked into the living room, there was a decorative box sitting on the dining room table. Being the nosy one that I am, I decided to ask Todd what was inside of the box and if I could open it. Todd walked into the dining room with his laptop and new camera. I had no idea what was going on.

I opened the box and at first got really excited. I thought he had gotten me an MP3 player, but I soon realized it was a flash drive for the computer, and not just any flash drive, his mom's flash drive! =) Trust me. I was a little disappointed. With the flash drive was a pink scroll of paper. Typed out on the paper was computer programming code in the shape of a heart that was titled Christina_Heart.cpp. In order to find out what the computer code meant, I had to run the program on the flash drive (this is where the laptop came in handy).

Todd, sitting next to me, tested my computer skills and had me mount the drive, compile the code, and then run the program. But it wasn't that easy! On top of it, I had to guess passwords in order to prove my identity and continue on to the next level. Luckily, I got it on the first try ;)

Once I got the program to run, it started typing out the poem that Todd wrote for me when he first asked me out 8 years ago. The only difference was the ending. Rather than it saying "will you go out with me," it asked "will you marry me?" I cannot tell you how excited I was by this point. So excited I was in tears and couldn't believe that he finally popped the question! But that wasn't all, it then typed out "type 'Y' for yes and 'N' for no." I never hit the 'Y' key so fast in my life! In fact, the program typed out that I said yes in approximately 6.11 seconds. It then typed out "Welcome to the family Mrs.Sullivan!" That was truly the happiest day of my life!

A Small Note on the Details (From Todd)

The pink scroll and the USB drive were in a decorative box that I placed on the table. The pink scroll was a single piece of paper that contained the main function in the shape of a heart. Due to restrictions on the formatting of preprocessor commands, all preprocessor commands and other functions were placed in a header file titled "The USB drive contains this source code file. Compile and execute the program.h". The pink scroll contained an include statement for this header file on the top line, with the rest of the code shaped into a heart below it.

The include statement for the previously mentioned header file gave Christina instructions on what to do with the USB drive. After Christina unrolled the scroll, I gave her a laptop that was running Ubuntu from a LiveCD. The laptop was my father's because I did not have a laptop at the time. The Ubuntu system was set to not automount external media. It also did not have g++ (the GNU C++ compiler) compiler installed. Thus, in order to execute the program Christina had to mount the USB drive, install g++, use g++ to compile the source, and then execute the program.

After pointing Christina to the Terminal (for running command line programs), she had to figure out how to mount the USB drive. I gave her several hints such as how to use "man" to view the manual pages for a program and that most programs had simple help output by sending the argument "-help" or "--help". With a little guessing, she determined that she needed to use "mount" to mount the file system on the USB drive. Christina quickly found out that she needed a directory to mount the file system to. After suggesting that "mkdir" might be useful, she was able to make a directory and mount the file system on the USB drive to the directory.

Once the file system was mounted, Christina navigated to the directory and found the source code. I did not include a makefile, so she had to figure out how to run a C++ compiler from the command line to compile the code. I suggested using a compiler called "g++". Remembering the usefulness of using "man" or sending the argument "-help", Christina jumped right into looking up how to run g++.

Unfortunately, g++ was not installed, so she had to figure out how to install it! Since this step can be a little tricky when one does not have an Internet connection to search for the solution, I introduced the lovely "apt-get" and "sudo" programs, which was all she needed to install g++. After installing g++, she immediately went to the manual pages to figure out how to compile the source code. Following a short examination of the help docs, she successfully compiled the program.

The program used a typewriter effect with manually coded pauses to give the output character. Upon executing the program, the user is presented with the following output:

This program is for Christina Maria Helton.
Please provide a password to prove your identity:

The program accepted two possible passwords, which we will not disclose to you. The program gives the user five password attempts. After five failed attempts, the program would shut down. Depending on the amount of failed attempts, the program responses with the following:

1st Attempt: Hmmm... Not quite.. Please try again:
2nd Attempt: Come on. You can do better than that! Please try again:
3rd Attempt: What would Todd do? Please try again:
4th Attempt: Oy... Please try again:
5th Attempt: You are not worthy... Farewell.

Upon successful password input, the program would respond based on the number of attempts as shown below:

1st Attempt: You have proven yourself worthy on the first try! Not so bad!
2nd Attempt: You have proven yourself worthy. Two tries is quite reasonable.
3rd Attempt: You have proven yourself worthy. Third time's a charm!
4th Attempt: You have proven yourself worthy. Better late than never!
5th Attempt: You have proven yourself worthy. Barely... Barely...

After providing one of the previous responses, the program would proceed with outputting the poem. You cannot see the poem because Christina prefers to keep it between us, and she does not want to give anyone that comes across this page a free poem to use for similar purposes.

After "will you marry me?" line in the poem, the program requests a response by outputting

Provide your response (Y for yes, N for no):

In a similar fashion to the request for a password, the program gives the user five attempts to say yes. If the user does not say yes after five attempts, the program will ask the question a sixth time and then fill in the answer itself. Depending on the amount of response where the answer is not yes, the program responds with the following:

1st Response: Hmmm... I'll let this one slide. Please try again:
2nd Response: Seriously? Please try again:
3rd Response: You are starting to irritate me... Please try again:
4th Response: Breaking. My. Balls. Please try again:
5th Response: You have gone off the deep end... Here. I'll help you. Please try again: Y

If the user did not say yes on the first response, the program would reply

I knew you would come through!

The program would record the elapsed time from the first output of the request to when the user (or program if after the fifth response) says yes. Finally, the program would output the following lines and shut down.

And it only took you ___ seconds to say yes!

Welcome to the family, Mrs. Sullivan!

I am proud to say that Christina did a wonderful job completing all of her tasks. Due to the pressure that today's media and society place on men in regards to creating elaborate proposals and performing amazing feats on other areas pertaining to weddings, I thought it was quite fitting to require Christina to work a little as well. She can definitely say that she earned it. =)

While I normally post the source code to programs that I create, we have decided to keep the source code pertaining to this proposal to ourselves. We are not posting the code here because if we did then some asshat searching for proposal ideas could come along and pick up a fully packaged geek proposal without doing any work. Since we described the program and proposal idea in fair detail, the least you can do is write the code and setup the presentation yourself.

Pictures!

Todd proposing to Christina #1Todd proposing to Christina #2Todd proposing to Christina #3Todd proposing to Christina #4Todd proposing to Christina #5Todd proposing to Christina #6Todd proposing to Christina #7Todd proposing to Christina #8Todd proposing to Christina #9Todd proposing to Christina #10Todd proposing to Christina #11