Starting Outreachy Internship

Let me introduce myself

I am Dilara Tekinoglu, currently an incoming Computer Science PhD student of University of Massachussets Amherst. I have just graduated from Computer Science program of Sabanci University. I am selected as an Outreachy intern for NetworkX project for May 2022 round.

Core Values

To be selected as an Outreachy intern is wonderful. Application process, on the other hand, is very competitive and effort demanding. Thus, I want to mention some core values which helped me a lot during the application process.

1. Being Organized

Among all traits that lead to success, I believe that being organized is one of the most important ones. I believe that scheduling your daily tasks not only allows to focus on what really matters. It also allows you to concentrate on what needs to get done that day instead of being distracted by things that should be done in future.

2. Patience

Almost all the time, any kind of success is a result of a long period of hard work, does not come all of a sudden. This is valid also for Outreachy internship period. Especially, in the contribution period, being patient and continuing to make contributions regularly helped me a lot.

My motivation for applying to Outreachy

Before applying to Outreachy, I had never contributed to any open-source project. While I was looking for a summer internship program, I heard about Outreachy and started to check for open projects. Personally, I enjoy studying algorithms and graph data structures, therefore I had a special interest in NetworkX project. My main motivation for applying to Outreachy was the opportunity of working in NetworkX team. Besides, communities unbiased selection criteria which gives importance to contributions you make was very influencing.

Everyone Struggles

Everyone struggles in one or the other way in life, this is for fact. I believe that facing problems is an opportunity to become a problem solver. I faced some difficulties during my Outreachy internship period. During the contribution phase, I made several mistakes about git workflow (e.g. I made developments in the wrong branch etc.). With the help of my mentors, I learned how to correct such things. Moreover, during the actual internship period, I had a task which is quite complex and confusing to me. The task was to analyse several issues of the project repository related to a single algorithm, trying to understand the referenced paper for the algorithm and to debug it. This actually took almost 2 weeks. Till now, I haven't faced big hurdles, I am enjoying the process of learning and exploring NetworkX codebase.

My Internship Project: Creating Pedagogical Notebooks for Algorithms Implemented in NetworkX

NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks. Many algorithms related to graphs are implemented in NetworkX codebase. My internship project is to create explanatory notebooks for selected algorithms of NetworkX. In my proposal, I have selected 4 algorithms which are Euler, Lowest Common Ancestor, A* (A star) algorithm and Cliques. Notebooks for each algorithm is designed to include related key concepts, examples and step-by-step explanation of NetworkX implementation of the algorithm.

Progress Report

According to my initial proposal, I was expected to complete 4 notebooks until the internship ends. Luckily I was able to complete first two notebooks in the first half of the internship period. Here is a brief summary of what I've done so far:

  1. Modified implementation of Eulerian methods in Networkx (such that isolated notes will not be allowed neither for Eulerian paths nor for Eulerian circuits)
  2. Created notebook on Eulerian methods implemented in NetworkX.
  3. Created Contributors Guide for nx-guides.
  4. Modified docstring of nx.ancestors() and nx.descendants() methods.
  5. Implemented naive lowest common ancestor algorithm in NetworkX.
  6. Created a noteook on Naive Lowest Common Ancestor algorithm.
  7. Removed deprecated code.
Considering my progress, I believe that I can keep following the original timeline. For the second half of the internship, I plan to work on the following topics:
  1. Creating a notebook on A* algorithm
  2. Creating a notebook on Cliques
  3. Implementing a new feature for drawing edges in multigraphs
  4. Working on previously created PRs on Graph Walks.