User:Jcf2000

When I initially heard of the Google Code-In (GCI) challenge, I wasn’t exactly jumping out of my seat. I was a little apprehensive, for the GCI sample tasks used languages such as Java, C++, and Ruby. While I've had my share of experience with the languages, I felt my abilities were too limited to compete. Yet, I've always had a fiery passion for computer science, and this challenge presented another mountain to conquer. Thus, after having filtered through the hundreds of tasks, I took the first step as a Google Code-In student.

The task was to design a share button for Kiwix, an offline Wikipedia reader. Though Kiwix itself wasn't a sponsoring organization for GCI, it still provided a branch of tasks under MediaWiki. With five days on the clock, I researched vigorously and studied the documentation for Android’s share API.

After a few hours of coding, the task seemed to be complete. Reading through the compiler’s documentation, I downloaded all of the listed prerequisites then launched the Kiwix autogen bash file. But even with all of the required libraries installed, Kiwix still refused to compile. I returned once again to Google, searching fixes for the individual problems I encountered.

At one point, I even booted Linux from an old installation DVD, and tried compiling there. I continued this crazy cycle of debugging until 2 am. I would have continued longer had my parents not demanded that I sleep. The next morning, I whipped up a quick breakfast, and then rushed directly to my PC. With my mind refreshed, I tried a variety of new approaches, finally reaching a point when Kiwix finally compiled.

With a newly found confidence, I decided to continue pursuing more GCI tasks. Since I had thoroughly enjoyed the challenge presented by Kiwix, I initially wanted to hunt down more of their tasks. However, finding that there weren't many left, I gained interest in the organization it branched off of: Wikimedia. Navigating to Wikimedia’s GCI information page, I took in as much information as possible.

''“We believe that knowledge should be free for every human being. We prioritize efforts that empower disadvantaged and underrepresented communities, and that help overcome barriers to participation. We believe in mass collaboration, diversity and consensus building to achieve our goals. Wikipedia has become the fifth most-visited site in the world, used by more than 400 million people every month in more than 270 languages.” - About Us: Wikimedia (GCI 2013)''

Reading through the last sentence once more, I realized the amazing opportunities that were ahead of me. Whenever I needed to touch up on any given topic, Wikipedia was always one of the top results. Moreover, Wikipedia had become a source of entertainment for me and my friends. We always enjoyed hitting up a random article, then using the given links to find our way to Pokémon, Jesus, or maybe even Abraham Lincoln: Vampire Hunter.

Eager to begin, I chose video editing as my first task for Wikimedia. I began the long endeavor of watching, reviewing, and editing the two forty-five minute clips. Despite the lengthy videos, I was quite amused in watching the technical difficulties the Wikimedia team encountered during their Google Hangout. It was comforting to put human faces behind the Wikimedia mentors of Google Code-In.

As with my first task, the work itself breezed by. But also similar to Kiwix, I encountered some difficulties with the “trivial” part of the task. I had never worked with the wiki interface before, so the wiki structure was somewhat foreign. I only had a vague idea of how to create a page. I also didn't know where to upload files nor did I know how to create subcategories. Nonetheless, after observing the instructions in Wikipedia’s documentation, I finally managed to upload the videos. Marking the task as complete, I scouted for my third GCI task.

Unbeknownst to me, my third task for Wikimedia would also prove to be the most challenging so far. Since this task required me to modify the code, I requested developer access. With the help of Wikimedia’s instructions, I registered myself as a developer, generating a private key to use with their servers. Granted my own special SSH access, I proceeded to download the source code.

Though my experience with Git was quite basic, MediaWiki provided an easy to follow documentation, which aided greatly in my efforts to download their repository. As I waited for the download to complete, I quickly set up an Apache server for a testing environment. Configuring the MediaWiki files for my server, I began the installation. MediaWiki’s interface was quite intuitive; the installer performed flawlessly with minimal user input.

“Off to a good start,” I chuckled quietly to myself, a grin spreading across my face. And with that statement I tempted fate and my troubles had begun. Upon opening up the code, I realized I couldn't comprehend a single line. I had worked with PHP but the code was more advanced than what I had written before.

Running my fingers through my hair, I sighed in exasperation. I spent the next few hours analyzing the code, trying my best to comprehend the functions. Suddenly, I began to recognize numerous amounts of functions, and patterns began appearing. I started to tinker with different modules until the code slowly unraveled.

Finally formulating a solution, my fingers moved swiftly across the keyboard, implementing the code with ease. I tested the code once more, checking for any mistakes. Following the instructions written in the task description, I uploaded the code to Gerrit.

As it was my first time using Gerrit, I was surprised at how simple the upload was. But what especially surprised me was the immediate feedback from the mentors. Within a few minutes of the upload, MediaWiki developers were already reviewing the patch, making suggestions for improvement.

Thankful for their helpful input, I worked to implement the changes they suggested. Adding the finishing touches, I was ready to upload another patch. Unsure if I should upload to a new Gerrit, I took some time to search for a way to push to the same patch as before. Not finding anything on the subject, I made the rookie error of uploading to a new Gerrit.

My mistake quickly received a corrective response from Aude, one of the developers. While I initially felt embarrassed, I realized I wasn't alone. In fact, I was thankful that the MediaWiki collaborators taught me how to do it right.

Checking out the link Aude had given me, I learned to squash the two Gerrits together. However, when I tried to follow Aude's instructions, I somehow managed to mix someone else’s code with my own. What’s even worse was I already pushed the changes to Gerrit, exposing my blunder publicly.

Had it been any normal day, I would've just been calm and tried my best to fix it. But it just so happened to be the Thanksgiving holiday (in United States). I had to leave in a few minutes for a family dinner and I couldn't bear the thought of leaving my patch in such a state.

I felt about ready to scream. I abandoned my Gerrit patch, and navigated to the task page, ready to give up. But just as I was about to revoke my claim on the task, I remembered something Quim had told another GCI student:

''“They are not mistakes! Only versions that can be improved. Students learn in GCI, and all of us learn every day.”''

Remembering this advice, I cleared my mind, ready to do whatever it would take, and learn while I was at it. And like an answer to my prayers, Hoo Man, another developer, guided me through how I could return to my original patch, and then send my new improvement through. But more importantly, he motivated me to persevere.

I came into GCI as a passionate, yet undisciplined student. But the Wikimedia open source community is helping me plant the seeds of discipline, perseverance, and collaboration. It’s no coincidence that my hardest task thus far was staged on Thanksgiving. Every year I express gratitude towards friends and family. But this year, Google Code-In and the Wikimedia community have made my gratitude list as well.