Two thirds done

As the title says, the GSOC is 2/3 done.

This phase was a bit tougher than the first one, as I started my internship and it’s really hard with the reviews, as Alex is working hard and pushing a lot of code, that I can’t keep up!

 

The job keeps me busy all day, so the only part of my day when I can review is after I come home, eat something, and then check his code.

However, this didn’t stop us! We managed to finish the phase on time without and rescheduling, which is a thing to be proud of.

 

Congratz Alex, and let’s keep it up for the next phase!

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 (github.com/Nosferatul) 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!

https://gsocsite.wordpress.com/category/gsoc/

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 https://gitlab.com/coala/bear_installation_tool/issues . 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 (http://conda.pydata.org/docs/). 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.

UploadTool

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 setup.py 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/setup.py, upload/Test/Test/Test.py, upload/Test/requirements.txt. This way we will have the bear done and ready to be uploaded on PyPi.

The trick

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

Week 1

By week 1 I finally got a part of the hardest thing regarding this project: a way of maintaining the requirements for the bears easily.

To help myself with that, I created a PackageRequirement class. Now each bear can have a REQUIREMENTS tuple made of instances of the PackageRequirement class.

To automatize working, I worked on two separate things:

  • creating a “multiple“ method, which helps you instantiate multiple instances of that class instead of calling out the same class again all over and over again
  • creating subclasses, such as PythonRequirement and NPMRequirement, which have the manager already set to “pip“, respectively “npm“.

These classes receive 3 arguments: manager, package name and version.

However, there’s more: you can also avoid specifying the version, and this way, the latest will automatically be specified.

On the other hand, I am working on a bearUploader tool. This will upload a MockBear (which I chose to be cpplintbear for the basic functionality it provides) to provide continuous integration. This is still work in progress, as the tool only creates a setup.py file for the bear right now, but it’s going to be done the next week.

So for the next week: More on the bearUploader tool!

Europython & GSoC start

Europython & GSoC start

So this weekend has 2 huge things. First of all, as most may know, this weekend announces the end of the Community Bonding period. This means that the coding session begins on Monday. However, this is not the only thing that happens. Two days ago I just found out that I’m going to be sponsored by Europython with a ticket there!

What is Europython?

EuroPython was the first major Python programming language community conference ever organized by volunteers. It started 2002 in Charleroi, Belgium, which attracted over 200 attendees.

It now is the largest European Python conference (1200+ participants in 2014 and in 2015), the second largest Python conference world-wide and a meeting reference for all European programmers, students and companies interested in the Python programming language.

When?

I have already bought tickets and I’m planning to go there this year. It will be held from 17 to 24 July and it’s probably gonna be one of the most amazing experiences in my life. I’m going there with the amazing coalaians that I’ve been working with on the coala project (see https://github.com/coala-analyzer/coala for more information about what coala is) including (hopefully) my mentor. I’m so hyped about the conferences, the talks, the workshops and especially the coding & drinking sessions I will be having alongside my co-stayers.