Reno, NV    +1 (800)0 621-0871

Go back


My Internship Experience with ÆLOGICA

  |  June 5, 2014

The end of my summer vacation is nearing, and the end of our summer internship is coming twice as fast. We’re already on our 7th and last week here at ÆLOGICA and I’m sure we have learned so much in just one and a half months.

During our internship, we are to experience developing web applications using Ruby on Rails, and to contribute to open source projects like Gitlab or Discourse.

Almost everything was new to me.


Learning Ruby on Rails

I started learning by reading and following tutorials available online. I was able to make a blog by following Michael Hartl’s tutorial. I also followed a Rails Girls tutorial. I also experienced deploying these apps via Heroku! Another first for me!

Design Mentoring

The following week, I worked on ÆLOGICA’s Brand Identity Style Guide together with Ricky. I am already familiar with Photoshop before the internship program but I still learned a lot while working on the style guide. I figured that there were steps I used to do before that can be done in an easier manner.

Gitlab and Open Source

My fellow intern, Denise, and I decided to work on the Commits Calendar feature for Gitlab. We followed the instructions on how to contribute to the project and we had to setup a development environment (with Vagrant) to be able to work on our contribution. We looked at Github’s own calendar to get ideas for our contribution. I found Cal-Heatmap–a javascript module using d3.js library that is used to build the heatmap.

We studied how the contributors’ graph is getting all the data that it needs. We found out that we can retrieve the logs containing the commit author’s information (e.g. email, name, and the number of commits, etc.). Then we fed the data we retrieved to the calendar interface. To do this, we built a hash containing a timestamp of the user’s commits, converted into UNIX format, and the number of commits grouped by date. Denise also found a gem that contains the cal-heatmap files.

Cleaning Up and Refactoring

Once we finished this feature, we opened our pull request to Gitlab. The maintainers said they liked this feature but we still have to clean up our code to be consistent with the project’s coding conventions. We proceeded to refactor our code by moving some pieces to a helper. To test, we built a controller spec. We updated our pull request (with modifications) and waited for feedback. They asked us to refactor more and make it mergeable.

gif_900x821_485bcaWhile refactoring, Denise thought of adding more features to our calendar. We worked on adding Ajax to our calendar: when a day in the calendar is clicked, it will show the user’s commit activity in each of the repositories the user has contributed to in that day. We had to get the logs again and group the commits per project, and then per date. So now, we also have a hash whose value is also a hash.

Refactoring is “breaking down the code without breaking the code”. I watched Katrina Owen’s talk during the RubyConf 2012 about Therapeutic Refactoring to know more about the process. We moved the code from the helper to the lib folder. Our contribution looked very different from what it initially looked like, but it is definitely cleaner now.

We’re still waiting for their decision whether they’ll merge our pull request or not, but we do hope that they do.


What’s challenging about this project is that everything was, like I said, new to me. So everything new I know by now, I learned from working on this project because of this internship. I experienced pair programming here at ÆLOGICA, and I liked it. Before, I wasn’t much of a fan of pair programming, because I feel shy whenever someone’s watching me type the code I have in mind. They might make fun of me inside their heads, but I figured that pair programming makes two people work together on a shared problem and helps both programmers learn from each other.

The ÆLOGICIANS shared their knowledge to us willingly and we really learned a lot from them.

Thank you for having me, ÆLOGICA!