From Fedora Project Wiki

Contact Information

About

I am Caleigh Runge Hottman -- a computer science student passionate about user interfaces. I am especially interested in Fedora’s web-based update system, Bodhi. I wish to implement command line completion for bodhi, Bodhi’s command line interface with the guidance of a mentor. I originally applied for Outreachy, but was also encouraged to also apply to GSoC by Sarah Sharp and Marina Zhurakhinskaya.

I am an avid FOSS user. I am a daily user of Fedora, a variety of GNOME tools, Vim, gedit, Pidgin, LibreOffice, Tomahawk, and VLC. I regularly use Python, git, Wine, CrossOver, Blender, GIMP, Krita, Red Notebook, XSANE, and many more. I try to exclusively use FOSS and avoid proprietary software at all costs. The main exceptions to this rule are Google Chrome (my school’s learning interface runs best on Chrome, and all of my classes are online) and two PC games (which I use Wine and Crossover to run).

Prior FOSS Contributions

My first ever FOSS contribution was documentation for the Tomahawk Player project (https://github.com/tomahawk-player/tomahawk). I wrote instructions for how to build Tomahawk on Fedora: https://github.com/tomahawk-player/tomahawk/wiki/Fedora-Build-Instructions.

My first contribution to Fedora was also my first FOSS code contribution. This contribution consisted of fixing a bug in Bodhi. When an update reaches the required time in testing, Bodhi comments to alert the user that it can be pushed. The user can edit this update anytime, including after Bodhi comments that the update can be pushed. After a build is updated, the karma counts and the number of days in testing are reset, and thus the ability for the update to be pushed is also reset. If the karma or days in testing threshold is reached, the user should yet again be able to push the update. Bodhi should comment to notify the user of the recent ability to push. The error occurred when Bodhi did not post a comment notifying the user that the update could be pushed if Bodhi already commented that the update could be pushed prior to the karma (and thus, days in testing) reset. This error occurred because the method met_testing_requirements() determined whether the testing requirements were met based on Bodhi's push approval message prior to the recent edit. I fixed this error by creating a new method to only retrieve the comments since the most recent update. The methods that determine the amount of karma and whether the testing requirements were met used the new method I created instead of simply retrieving all comments. I also wrote a test to ensure that this type of error won't occur in the future. My initial contribution can be found here: https://github.com/fedora-infra/bodhi/pull/1396.

I am currently in the process of triaging and fixing more bugs in Bodhi.

Educational Background

I am currently studying computer science. My first undergraduate degree was in psychology from Beloit College. I was deciding between my wide array of professional interests: cognitive science, social work, human/computer interaction, and user experience design. At the time, I had a misconceived notion of programming, so I tended to focus on the social side of my interests, as opposed to the technical side. As I was about to graduate, I realized I was feeling less and less challenged and mentally stimulated. I expressed my concern to a friend, and he suggested I try programming. My hobbies revolve around visual arts and literature, so I was initially surprised that I enjoyed programming as much as I did. I started viewing all creative problems through a programmer's lens -- "How could I solve this with logic statements?" My journal that was once for art and story ideas soon began filling up with ideas for programs and little snippets of code. I realized that programming had the potential to tie into all of my interests, and any interest I could ever acquire.

I found myself feeling intense regret for not originally pursuing a degree in computer science. I began to research whether universities accepted people for second bachelor's degrees, and I found my current degree program: Oregon State University's Post-Baccalaureate in Computer Science. This program is intended for people who want a second bachelor's degree in Computer Science. Since I've begun rigorously studying computer science, I've realized my interest in programming had only just begun. I truly enjoy the creative and logical problem-solving tool that we call "programming". I am constantly in awe of how it can be used to solve such complex problems in such a wide variety of fields. Now that I’m about to graduate from undergrad, I plan to contribute to my favorite open source projects and apply for graduate school.

Motivation, Focus, Workflow

I love creative problem-solving. The feeling I get after finally getting a test case to pass is like nothing else. As far as focus, I find that I focus best when working on a challenging project that I admire (e.g., Bodhi). In fact, I often find myself so focused that I lose track of time -- sometimes in large chunks. There have been quite a few times that I have assured my significant other "I'm only going to stay up for another half an hour to fix this tiny bug," and the next thing I know, I hear an alarm go off -- it's 6am and I realize I was too focused to go to sleep. Though, one cannot maintain intense focus all of the time. If I begin to realize I'm getting stuck in a rut, I leave my computer, and have a cup of tea, and take a short walk outside. I also try to sketch the problem out, talk the problem through with someone to get an outside perspective or just to gather my thoughts.

If I am feeling discouraged or unmotivated, I look at projects that I really enjoy (for example, Bodhi) for inspiration. I remind myself that the people who contributed to these projects had absolutely no programming knowledge at one point in their lives; the only thing that separates me (or anyone) from them is practice and determination. As for workflow, I generally always have a projects docs handy. Before I tackle something, I familiarize myself with where, how, and why the portion of code will be used. I brainstorm a few ways I could potentially solve the problem alone and with others, then get feedback, and then try to break the ideas down into small, achievable sections. From there, I figure out how I would test each of these sections, which helps figure out the best way to solve the problem. I then work on the smallest structural piece, and increment the development from there. I work in a way very similar to agile and test-driven development.

Why Fedora?

Three years ago, after being aggravated by vendor lock-in, I searched for alternative operating systems. I installed Fedora on my MacBook. It immediately became my favorite and sole operating system. Fedora was my first Linux distribution, and one of my first introductions to FOSS. I began to wonder why Fedora would release a free operating system, and the answer to that curiosity changed my world. Commitment to free and open source software is extremely important to me. I firmly and passionately believe that people should be able to study source code, learn from it, and modify it. Committing to proprietary software is committing to a stunted, technologically-ignorant society, willing to forgo innovation and progress for a dollar. I want to have many individuals and corporations creating innovative, progressive projects that could potentially change the world -- releasing their source code, allowing others to use it, and in turn, creating their own helpful projects. Free and open source software drives innovation, creativity, and pursuit of knowledge. Fedora is not only committed to FOSS, but committed to promoting and encouraging it whenever possible. Fedora goes the extra mile and even takes steps to diversify FOSS (e.g., participating as an Outreachy organization). I would like to be part of a group so committed to FOSS and to diversity. I would be honored to set an example for other underrepresented groups in FOSS under such an esteemed organization as Fedora. I've been planning on applying to Outreachy to work on the Fedora project for over a year and a half, and finally mustered up the courage (albeit, with only three days to spare).

I wholeheartedly plan to continue contributing to the Fedora Project, regardless of whether or not I get accepted to GSoC. As I've mentioned, Fedora is my sole and beloved operating system. I have always wanted to contribute, but have only recently become more confident in my skills. Understanding a code base is my largest barrier to entry when contributing to a Fedora project is understanding a code base. Once I familiarize myself with a code base, there is no reason to completely cease contributing, but all the reason to contribute. Thus, I would prefer to continue working with Bodhi.

Proposed Project Details

I propose to work on bodhi, Fedora’s web-based update system. Providing a smooth and intuitive interface for developers to interact with is vital to any successful project. The more the users enjoy using the product, the more they use it. The project I find the most interesting is auto-completion for the bodhi command line interface (https://fedoraproject.org/wiki/Outreachy/Bodhi_application_2017). Note: If the CLI auto-completion project is unavailable, I would also like to work on the dnf plugin that can install or update from a Bodhi update. If neither of these projects are available, I’m open to any other projects you may propose, too.

Why Bodhi?

It is an understatement to say that I was beyond thrilled when I saw Bodhi listed on Fedora’s Outreachy project page. In a general sense, an update system is clearly very important to a large and diverse project such as Fedora. Having a good system to organize, test, and report on these updates allows for quick, efficient, and safe distribution. This allows for a better product. Such a system requires and heavily relies on a user interface (via command line and web page). The user interface is by far my favorite part of software to write, so I knew this was the perfect time to apply, even if there were only three days left to the application deadline.

My only true expectations are to gain experience contributing to FOSS (which I find very important, morally and philosophically) and to be part of my favorite (let’s be honest: the best) operating system of all time. Additionally, I wish to develop my skills in Python and explore more Python libraries in the context of a large project, such as Bodhi. Also, working on a product that a user uses is, in my opinion, internally motivating and a whole lot of fun.

Mentor Information

  • Name: Randy Barlow
  • IRC: bowlofeggs
  • Email: rbarlow@redhat.com

Proposed Schedule

Please note that this is a very rough schedule, only based on my current, and likely fallible, knowledge of Bodhi -- thus, It will require plenty of revision.

Application Period (April 3 - May 4) Goal: Become more familiar with Bodhi

  • Revise the rough schedule with help of the project mentor
  • Make as many “EasyFix” bug fixes as time allots
  • Study Bodhi’s documentation

Application Period (May 5 - May 29) Goal: Become more familiar with the tools and libraries Bodhi uses

  • Identify and get up to speed on skills required during GSoC
    • E.g., click
  • Identify and study the code that currently implements the CLI

Weeks 1 - 2 Goal: Design

  • Preliminary test design
  • Get feedback on design
  • Publish 1-2 blogs on code design

Weeks 3 - 6 Goal: Implement

  • Implementation iterations of the CLI bash completion
  • Publish 2-3 blogs on what I’ve learned throughout the implementation process

Weeks 7 - 11 Goal: Testing and Bug Fixing

  • Write tests and fix bugs
  • Publish 2 blogs on various ways to test a CLI in Python

Weeks 11 - 13 Goal: Publish code!

  • Get feedback and publish code

Relevant Experience

I have experience with bash scripting. I have written command line games in C and C++. I have also written a small shell in C, so I know the basics of command line interfaces. Please see the projects on my github.


Prior Commitments

I'm only taking two courses from April 3, 2017 - June 14, 2017. At my university, taking a two-course course load renders me a part-time student. Two courses should take about ~25-40 hours a week, depending on how difficult I find the courses. This would leave me with ~5-20 hours on the project during these two weeks (again, depending on how difficult I find the courses). I will not have any other obligations, so I would happily put in additional hours over the remainder of summer to make up for lost time.

It is important to note that my courses are online, so I generally have a 3-day window to take finals (June 11 - June 14). Because of this, it is possible that I will complete my courses as early as June 11, 2017. Though, it is too early to determine this because I do not yet know the due dates of my final projects. When the information becomes available, I will update this portion of my application on my application Wiki to better reflect the final project dates and the approximate dedicated hours.