First phase over

The first phase has finally ended.

My student has done a great job and has finished 100% of his milestone.

As it always happens, his preplanning was quite bad and needed to get shaped up. But now, after getting shaped up, it looks more realistically and should be enough for him to finish his whole work for the next phases.

This phase was quite easy, as mostly mockup and design was made. Looking forward for Alex to start implementing the real things in phase 2!

Mentorship begins!

Hello guys!

Last year has been amazing, I’ve blogged a lot regarding my GSoC experience as a student.

This year I come back, but as a mentor! My student is Alex ( and together we’re going to work on Improving the coala CLI. This surely is not going to be an easy task.

So far, Community Bonding is coming to an end and Alex is doing great. He’s already finished all his assignments and has worked on some mockups for his project.

Looking forward to working with him once the coding session begins!

Make sure to follow his blog to find out more about his project from his posts!

It has come to an end..

In this blog post I will write a short summary in which I will present my GSoC progress so far and include some proofs to what I have worked on.

Currently, most of my project’s aims have been achieved. However, there’s still some little work to be done. I loved working on my project and I really had fun, while I learnt a lot of cool stuff!

If I’d have to approximate, I’d say around 80% of what I proposed myself to do this summer I have achieved.

Why have I not finished it? Because I wanted to do too much?

No. This is not the reason. The real reason for not finishing is that I’ve spent a lot of time designing and thinking in advance for the tools and how everything was going to be, because I’ve wanted everything to be well thought and to be actually usable. Instead of going blindly on the first option of uploading, or installing, I took some time and discussed with everyone around coala how this is going to be done and why. This thinking took a lot of time.

Another reason for still not having everything done is that the review process takes a while. Here, at coala, we do not merge things just to have something partially usable. We review it. Hard. Until every line of code is used at its maximum efficiency and makes sense and is optimized.

What I have already done with success

I have fulfilled 90% of the bears with their REQUIREMENTS as a metadata attribute. This REQUIREMENTS attribute is a tuple that contains instances of PackageRequirement classes, classes which contain package names, versions, package managers. I have also created metadata attributes specific to each bear and fulfilled all the bears with them.

I have created a tool that uploads ALL bears correctly to PyPI, taking data from the bears themselves, including from the metadata attributes I’ve written to them.

I have created a tool that installs bears while interacting with the user, giving him the options to install ALL bears, SOME bears or None. This tool will also install the REQUIREMENTS, gathered from the attribute existent in most bears, using an installation_method() that each PackageRequirement instance has, specific to that manager.

I have tied the bears to be discovered by coala using entry points, as coala gathers bears searching for installed PyPI packages that have the ‘coalabears’ entry point.

What is left to do

However, with all the work spent, there’s still some things that I’d love to do next!

Firstly, I’d love to make some cool packages that would be shown to the user using existing bears, such as Web Development bears package which will include JavaScript bears, CSS, HTML.

Also, I will make some cool improvements and enhancements to the installation tool, some of which I started working on, and some of which will be shown here . Some of these enhancements include:

  • Changing the output given by PyPI to a cooler output
  • Showing all bears that failed installation at the end as a list
  • Fix a bug in which coala does not correctly find all bear packages installed


For a full list of my work this summer, these links can be consulted:

Back Home

Ah, what a wonderful trip it has been. I just came back from EuroPython2016 in Bilbao which ended 3 days ago. And I loved it. Not only have I been with wonderful people which I finally got the chance to meet in person, but also the conference was amazing!

So the trip was cool?

Yes. It was really good. The conference was full of amazing talks, sprints, and not to forget lightning talks! The only ones that disappointed me were workshops. Some of them were too hard for me to attend, and some on which I did were pretty bad, and it usually took us half of the time just to set up their tools and stuff, and everyone having dependency issues, lots of time wasted..

But what about coding?

Hehe, I coded during the conference in 7 days probably as much as I did in 14 at home. The productivity at late night coding sessions was quite high, by having people near me that were there to help me with any question. So instead of working a day on something and reworking it the next day, I could go on the best approach and do it in the first day. Cool, huh?

GSoC progress

I can safely say that the project is overall almost done, only the last, grunt work things yet to be done. The upload Tool works really well, and its merged. The installation tool is quite close and does what it should. What’s left? Filling in all the requirements. And this is the worst part. I now have to fill in the correct requirements for each bear. Upon doing this, I see my project done in no time 🙂

Past mid-term

Mid-term evaluation was just two weeks ago. And work is yet to be done.

What’s next?

Currently the uploadTool is almost final. It has endured tons of refactorizing and huge changes in the past week and is almost good to go. However, there’s still tests to be written!

But that’s not all! We still need the Installation tool, which would be a huge addition to coala. This uploadTool only uploads all bears to PyPi. But that’s not enough! They have no requirements, no way to work! That’s exactly what the installation tool does. It generates the installation commands for all the requirements of each bear, and upon installation it simply installs all the dependencies and therefore the bear itself.

Is it hard?

Probably. Probably not. I don’t think that the making of this  tool is actually hard. But the design itself. Because it has to be great. It has not only to work, but to be actually usable and amazing, so that people would choose to use it with pleasure.

Reaching mid-term

Mid-term is almost here (27 of June) and there’s a lot completed, but there’s much yet to be done.

What’s next?

The uploadTool is almost complete, it does its job. However, there are many bears lacking requirements, as they run scripts, or stuff, which is not easy to use, since people use a lot of platforms we can simply not make bears for.

How are we going to do this?

For the pip, npm and gem requirements, we will simply give the command to the user, upload the bears on PyPi and try to run that command once the user installed it. This should work regardless of platform, supposing you have pip, npm or gem installed.

What about the others?

For the others there is conda ( Conda packages are pretty much like PyPi packages, that work on any platform. For that, we can simply pack those scripts or compiled dependencies of bears into conda packages for all 3 important platforms (OS X, Linux, Windows) and when the user grabs that bear that has a conda requirement, it will automatically install that for him. This conda requirement is going to be a class pretty much like PipRequirement or GoRequirement.

Once this is done, this process should be ready, and I can move on to the installation part of the bears, with the nice installation tool and so on.


The next important step in my project is creating an upload tool.

This tool will take every single bear one by one and upload it.

How will I do this?

Simple. Say we are in coala-bears/bears/. Now here’s where the script is. I basically want to create an upload/ folder, where I will have all the bears ready to upload. The tool takes every bear, one by one, creates a subdirectory in the upload/ folder, that subdirectory having the bear’s name, where it will place the file and the requirements for that bear, and then uploads it.

An example

Let’s say we have bear Test. We will create upload/Test/, upload/Test/Test/, upload/Test/requirements.txt. This way we will have the bear done and ready to be uploaded on PyPi.

The trick

The and the requirements.txt files will be automatically generated based on each bear’s requirements and name, fitting it perfectly.