Outreachy and GNOME Fractal

Dec 1 2018

It has been a bit over a year since I dropped my last blog out of frustration with the thing I was using and after swearing that I would make my own thing.

So here it is, my blog, written in Rust <3 with some parts a bit glued together just so it would work and with the promise that I will make this better (first thing will be making https work, I'll get it done in the next week)!! I will make a blog post about making this blog, deploying it, me, what else is happening (aka. Recurse Center), my cats (?). But all of that comes later, now I want to talk about Outreachy :D.


Outreachy is much like Google Summer of code, they both are global programs focused on bringing more people into Free and Open Source Software (FOSS) development by doing a three-month programming project (with mentorship) in an open source organization AND they offer a stipend. In short, both allow people to do paid and mentored FOSS work for a short period of time :D.

The programs are different mostly in which people they target. Google Summer of Code, runs on summer because it targets university students (it is called Summer of Code because it happens when US students have summer vacation even though the program is global).

Outreachy targets minorities in tech and I personally love it (not only because I can apply to it), but because it can offer minorities a great starting or resetting point. It is an internship, so people can definitely learn technical and soft skills. But beyond that, an Outreachy internship can be one of the affirming experiences that a minority in tech can use to fight the feeling that they don't belong in this industry.

Outreachy internships run twice a year and they have a calendar of applications in their home (in case I have already convinced you to check it out) and to apply you have to:

  • Check if you are eligible
  • Choose a project to contribute
  • Do something? - Usually, this means contributing to the project by solving some issues in the issue tracker, but it does vary
  • Record your contributions and fill out your application (before the deadline)

Fractal, I choose you!!!

My project of choice was GNOME Fractal because I really like Rust <3

I refreshed the Outreachy projects page every day, waiting for the GNOME listings to come in, rooting for a Rust one to be in there, and one day, there it was :D GNOME Fractal, a GNOME desktop client for Matrix (which is basically a better IRC).

I joined their matrix chat, forked the project, installed some tooling (like GNOME Builder, using Flatpak) and went off to look at the issues with the newcomer tag.

Sometimes it is hard to know the balance when you start contributing :) a lot of people that work in FOSS are super nice and helpful and that was my experience with the GNOME Fractal folks. But that didn't mean that I felt comfortable asking questions all the time.

Everyone is doing something and not everyone is paid for the work they are doing, so it is specially important to be kind, not have too much of a sense of entitlement to quick answers and such. Which are very real worries that I have, that maybe made me ask less questions than I should've, because I thought that dealing with my doubts could be too time consuming to people that are busy with other things. I'm trying to remember that even though it is very important to be nice and police yourself sometimes, people like to help and that it is in fact pretty much fine to ask questions <3. I'll definitely work on being better about it during the internship itself.

During the application process, I submitted 3 merge request to Fractal, each of them tackling a different small issue.

The first one reorganized the imports in the project. Rust's imports have two parts: * extern crate that lets Rust know that we are using a crate * use that brings the traits into the scope As Fractal was, there were extern crate declarations in almost every .rs file, which is not necessary because one declaration at the main.rs or lib.rs file is enough to make the crate available in the global namespace. My job in this one was basically trading use self::foo for use foo where it was relevant, finding and deleting redundant extern crate statements and moving the ones that were not redundant to the appropriate files. I really appreciated how straightforward this issue was! It was really nice to get a hang of the file structure of the project.

The second one was changing the menu on the app, which is an UI change. This was kind of exciting as I had never touched a .ui file before, much less any GTK+ code. I installed Glade, which is pretty interesting (but not always super helpful in my experience), and poked around the .ui files until I got the design to be what was described in the issue, got some help and found out that the GNOME Builder gets very angry at you if you happen to delete a file and forget to clean and rebuild your project. I felt really good about learning new things that at first glance I had no idea how to tackle :)

The third one was also on the simple side. Fractal had a lot of println! and eprintln! in its code, which meant that Fractal was spamming the system journal, making it hard to get other things :< The fix for this was substituting the prints for macros from the log crate so the information can fall into more appropriate channels :D

With these contributions, I filled my application and got accepted for the internship :DDD , which is so, so nice! I'll get experience writing Rust code <3 in an actual thing that is not mine alone and is being used by other people!!!

I have since not done any work in Fractal, because I was trying to finish this blog before the actual internship starts and some things took me way longer than expected!

The actual internship

Me, as I try to make my internship project work

The internship officially starts on December 4th and its goal is implementing video previews and a video player in the Fractal client which seems like a pretty doable task in three months, and if we have some extra time, investigate video calls, which sounds hard and exciting!

My first step is investigating the implementation for image previews that is already there and also the implementations for the audio player widget. I would really like to do a bit of that before my first weekly meeting with my mentor...

But this blog really should have at least https :< and a safe guard against failling and there are so many blog posts to write! And I also really wanted to do Advent of Code in Rust this year and the first one is already out! And today there's also a Tech Zine Fair in NY!

There are so many exciting things happening and so little time...

So we'll see how much I can do :>