Public application template
A: An introduction
- Please describe yourself in three sentences, one of them regarding your current studies.
My name is Brayan Stiven Zapata Impatá and I am a native Spanish speaker, but I am also proficient in English. I am currently a PhD student in robotics and machine learning at University of Alicante, Spain. My background includes a Bachelor's degree in Computer Engineering, specialized in computer vision and artificial intelligence, and a Master's degree in Computer Engineering.
- Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so?
My desire in taking part of the GSoC is driven mainly by a need of developing further my programming skills as well as working on a real open project. I have been working on many private researches and, although research is carried out with the idea of helping grow our society, it is usually very jealous of sharing. This is my first time participating at GSoC but I hope to learn a lot from it!
- Why are you choosing Octave?
On my very first day at college when I began the journey to get my Bachelor's degree, what I was firstly introduce to was Octave. Some time has passed but I still find the Octave project a quite useful resource, I did even use it for my Bachelor's thesis. Since I feel in debt with this tool and its community I want to give it some of my time and knowledge in return.
- Please state the (unique and identical where possible) nick you use on IRC and any other communication channel related to Octave.
My IRC nickname is yayan and my e-mail address is email@example.com
- Which time zone do you live in? Will that change over GSoC duration?
My time zone is UTC+1 and it will not change during GSoC.
- Please state the timeframe (in UTC+0) when you feel most comfortable working during GSoC. Where are your time buffers?
Being sincere, since I am currently on a PhD program my work load is very unstable. However, I plan to work on GSoC from 07:00 to 10:00 and 17:00 to 21:00 during the weekdays. Anyway, I am very flexible and surely the excitement of working on this will lead to many more hours even on weekends. I have been working in a private company and at the same time carrying my Master studies through a year and a half so I am quite good at managing my time.
E: Coding experience
This part is one of the more important ones in your application. You are allowed to be as verbose as you want, as long as you stay on topic ;-)
- Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt.
I have been coding in C/C++ since I was in high school and I keep writing C++ code every day. As an example, during the last term of my Bachelor's degree I developed a machine learning toolkit paring with some of my classmates. I was in charge of writing the implementation of Support Vector Machine and three kernels, a Genetic Algorithm with some self-created mutation operators, the k-Means clustering algorithm and a cross-validation method. Then, I used this toolkit to create a broker bot that could predict movements in the stock market.
Regarding Octave/Matlab, as I said before I have been using m-scripts for 6 years now and my Bachelor's thesis was written solely in this tool. This principally consisted on writing preprocessing functions for treating medical signals and then implementing the Particle Swarm Optimization algorithm to optimise the training set used for a machine learning model. I have also used it to execute simple filters over images. Nowadays I keep using it as a prototyping environment. Finally, I once took a 4-hours-course at college to learn about OpenGL but I don't have further experience with it nor Qt.
- Please describe your experience with other programming languages.
I have experience working with Python 2.7.6. For my Master's thesis I created an open tool for open research data reutilisation and the scripting was whole written in Python. These scripts mainly used libraries like matplotlib, numpy and pandas. In addition to that, Tensorflow was utilised through its Python API so I could implement a simple logistic regression model. As a side project, just for the sake of learning, I once used Python and Keras (over Tensorflow) for building a cat/dog images classifier training a Convolutional Neural Network.
I do also have experience with Java, although I don't use it frequently. The same could be said about Scala, Go, R and FORTRAN that have used sporadically.
- Please describe your experience with being in a development team.
In the Open Source community I am new. I have experience working on a company (one year and a half) where we tried to follow the SCRUM agile methodology so I got some fluency in the use of GIT and building/packaging processes. I feel very comfortable working with others.
- Please describe the biggest project you have written code for and what you learned by doing so. Also describe your role in that project over time.
I think the biggest project I have worked on was that Machine Learning toolkit I built with four other colleagues in the last term of my Bachelor's degree. As I wrote before, I was in charge of implementing and testing of several algorithms like SVM (linear, Gaussian and Sigmoid kernels), k-Means, GA and cross-validation. I learnt a lot about software development practices and I did also have a first contact with great libraries like boost.
- Please state the commits and patches you already contributed to Octave.
Up to this moment I have been only helping other in the IRC channel with general Octave questions. I plan to start contributing very soon but I am still deciding whether to contribute to the Image package with missing Matlab functions or try to revive the nnet unmaintained package.
F: Feeling fine
- Please describe (in short) your experience with the following tools:
- IRC and mailing lists
This is my first time using IRC and mailing lists.
- Mercurial or other source code management systems
I have experience in the use of Git due to college and my past working experience.
- Mediawiki or other wiki software
This is my first time using this kind of wiki software as well.
- make, gcc, gdb or other development tools
I use CMake and gcc everyday. I am not very familiar with gdb (apart from some college assignments) but I have experience with debugging through the Eclipse IDE.
- What will make you actively stay in our community after this GSoC is over?
I believe that I will stay in this community because I really want to contribute to grow such a useful resource and up to this moment I have been enjoying my time here. I think I can provide with more knowledge about Machine Learning and general Artificial Intelligence techniques that could be integrated in a new package. This GSoC project could be the beginning.
O: Only out of interest
- Did you ever hear about Octave before?
As said before, Octave was the first tool I was introduce to on my first day at college. It did even support the coding on my Bachelor's thesis.
- What was the first question concerning Octave you could not find an answer to rather quickly?
I had a bad time implementing some signal processing functions but I think that was due to some lack of knowledge about the topic.
- Please state the operating system you work with.
I frequently use Ubuntu 16.04 but I do also dispose of an Ubuntu 14.04, Windows 10 and a Mac OS X. I can access all of them at any time.
- Please estimate an average time per day you will be able to access
I can access to an internet connection the whole day, not only on a computer but also on my smartphone. I expend about 10 hours per day in front of my computers and they are all synchronised so I can access my progressing work any time.
- Please describe the degree to which you can install new software on computers you have access to.
I can install anything on them.
- Please describe how useful criticism looks from your point of view as committing student.
Constructive criticism is a key factor for improving one's skills and for creating better things. Someone told me once that if no one says nothing about your work that can only mean two things: it was perfectly done and no one knows how to improve it, or it is so regular that it does not seem useful or interesting to others - and the most common case is the second one. In addition, if you are not self-critic with your own work, that is a signal of being conformist. I do not like being conformist because that stops you from growing and learning.
- How autonomous are you when developing:
I am very used to working autonomously: in my past job I was in charge of a whole project myself and as a researcher I am very proactive. I like to think and design everything as perfectly as I can before writing code because I find this a good practice for saving time in the long term. However, I can understand that sometimes it is quite useful writing some toy prototypes that can evaluate your ideas. This is frequent in research when you do not know how something will turn out and you test it using tools like Octave that support perfectly a fast prototyping process. If the results are not satisfying they are never a failure if you learn from them!
Y: Your task
- Did you select a task from our list of proposals and ideas?
Yes, I would like to work on the Neural Networks package: Convolutional Neural Networks 
- Please provide a rough estimated timeline for your work on the task. This should include the GSoC midterms and personal commitments like exams or vacation ("non-coding time"). If possible, include two or three milestones you expect.
I plan to work on a daily habit on this project expending at least 35 hours a week. I may take part of a summer school on Machine Learning here in Spain in June, but that would only be five days and I can bring with me my laptop. This is the schedule I would like to follow:
Before 30 May:
I want to be more familiarised with the community and the mentors. I would like to contribute as much as I can to the nnet forge package. I plan to check if it is possible to reuse code from such package, since it is related to neural networks. In addition, we should study how the Matlab CNN toolbox works in depth so we can have a great modulated and configurable design for our package so it can be compatible before coding.
Phase 1, until 30 June:
Write the basic layers (image input layer, convolutional layer, RELU layer, max/avg pooling layer, fully connected layer and dropout layer), test their functionality and check their compatibility with Matlab code.
Phase 2, until 28 July:
Write the rest missing layers like classification, softmax and regression layers. Write the main CNN class, that holds the layers, its training process and the classify method. In this point we should be able to train some networks and test their functionality. Once again, check its compatibility with the Matlab toolbox.
Through the whole process I plan to keep the code well documented using Doxygen. In case we use the Tensorflow's Python interface, we could look for another way of doing it (like Sphinx).
Phase 3, until 29 August:
Add extra features like the activations class, that can display a layer activations, and the possibility to load pretrainned networks. We could start by defining the AlexNET and VGG16 networks. This could be extended with an exporting/importing tool to process CNNs' architecture and weights saved in files.