A: An introduction
- I'm a student of Informatics Engineering degree in the `Universitat Politècnica de Catalunya` university. Many years ago I started a double degree on mathematics and computer science, but I've paused it to start working on the web development industry, then I specialized on software architecture and after that, on machine learning. Now I'm "finishing" my studies.
- I speak spanish, catalan and english.
- I want to participate in the SOCIS because I like programming open source software, but usually I can't devote enough time because all my previous jobs were on privative software. Almost all my open source code is inside toy projects because the remaining time I have isn't enough to make serious contributions (and I'm very disperse, it's difficult for me to choose a project to contribute). Additionally, I'm studying robotics and computer vision, and my teachers are fanatics of Matlab. I don't like depending on privative software for studying projects, because learning something should be economically affordable for everyone.
- I always use the `castarco` nick wherever I am.
- I'm the the Europe/Madrid timezone (UTC+2). I'll live in Barcelona this summer. In summer time I like to code from 08:00-14:00 and then from 15:00 to 17:00, but if I get up late for some reason, probably I'll be coding from 9:00 to 18:00 (with the same midday pause as in the usual case). If one day I haven't nothing more interesting to do, then probably I'll work more hours on the project.
E: Coding experience
- I "know" Octave since I started to learn about ML two years ago, I've jumped between Octave and R to experiment with problems of this knowledge area, Since a few months ago I'm already working with Matlab because it's a requirement for the subjects I'm studying at my university course (robotics, and computer vision).
- I have experience with C and C++11, but mainly for toy projects and university homework. I've also have experience with OpenMP (but not with GPU parallellization). I'm used to make and cmake, but autotools isn't strange to me.
- I've developed classroom projects with Qt4 and OpenGL, but nothing at professional level.
- Almost all my professional experience is related with Python, PHP, Java and C# since four years ago. I've developed tens of thousands code lines with them. I know their main package management systems (PIP, Composer, Maven & Gradle, and NuGet), and I think this experience is useful to contribute to the package management system of Octave.
- Currently I haven't contributed any patch to Octave, but I hope to do it early, luckily before April's 30th.
The biggest project
The biggest project I worked on is Infantium, a spanish startup aiming to apply machine learning techniques to children's learning process modelling in order to improve and optimize it, helping them to learn more and faster. The idea was to analyse their gaming sessions (with educative games) in order to compute cognitive indicators (numerical coefficients measuring their capabilities, designed to associate "bigger" to "better") and trying to maximize them. The "problem" isn't one single problem, but many difficult interrelated problems (designing models, guessing models parameters, validating the models, maximizing children's coefficients, dealing with "inflation" and "deflation" problems associated to children scores, designing experiments, making temporal series predictions...).
This is an interesting project and idea, but we didn't work in a rational way. Sadly, we hadn't psychologists nor neurologists in our team , and our bosses denied the needed resources to experiment and obtain information to validate or refute the models, and to adjust their parameters. They expected magic from their workers: parameterless perfect models (without having experts in the field), or guessing the parameters from divine inspiration. We were three non-expert workers, and many serious companies have more (and more skilled) workers for much more humble projects.
I was working in the Data Science team, and I lead it until a more experienced engineer entered into the company. This project made me return to the university. I had to work in very hard problems, but I only solved a few ones. In any case, I've learned a lot of time series analysis, ranking and rating models and artificial deep neural networks.
Other not so crazy projects
My first programmer job was at Bananity (we were programming with PHP, it was another "online social network"), also a spanish startup. Firstly I was frontend developer, and then I jumped to backend development. My first tasks were bugfixing and code style fixing, later I started to work on improving the software's architecture, performance, and security. I also did a DB migration, I had to develop many integrity checking scripts and data transformation scripts. After that, we started working with Vert.x to create a new fast and scalable API.
My last 6 months in the company (I stayed there for 14 months) I started working together with the lead data scientist of the company. With him I started working on very simple NLP problems related with DBPedia (we extracted information from DBPedia because our social network was thought to allow people to tell what they love and what they hate, and DBPedia helped us to create those "things" in a simple way).
My last project in the company was a short-texts indexer (using MongoDB as storage system, and JBoss as application server). We could have used Sphinx or Solr, but we thought it was more interesting to develop our software (it's open source, is called Platano Indexer). The design (& implementation) of Platano Indexer is far from being perfect, but I've learned a lot doing it and implementing it.
F: Feeling fine
- IRC and mailing lists : I'm very familiarized with mailing lists. Sometimes I use IRC, but less than mailing lists.
- Mercurial or other source code management systems : I'm very familiarized with GIT and many of it's not-so-well-known features. I've also used Mercurial, but I'm not so familiar with it.
- Mediawiki or other wiki software : I'm used to use wikis for professional usage, but also when I edit Wikipedia articles.
- make, gcc, gdb or other development tools : When I program with C or C++ I usually use make or cmake, and GCC as compiler. I'm not very familiar with GDB, I usually find the bugs without having to touch it. I've also use valgrind sometimes to find memory leaks.
- What will make you actively stay in our community after this GSoC is over? Well, I think having the sensation that my work is worth, that I'm helping people. Working for startups that only care of trends and don't solve people's real problems isn't for me. I need to solve real problems.
O: Only out of interest
- Did you ever hear about Octave before? Yes.
- When and where? How far have you been involved already? I discovered Octave many years ago, I can't say when exactly, but probably when I started learning ML, or a few months before.
- What was the first question concerning Octave you could not find an answer to rather quickly? When I was trying to parallelize the Zhang-Suen thinning algorithm, and I spent a lot of time to discover how to apply a function to each element of a matrix, but taking into account its neighbourhood. Finally I discovered the colfilt method ^^U.
- I work with Ubuntu, usually the LTS versions. I also have access to Windows 7, Windows 8.1 and Mac OS X Yosemite, but using virtualization.
- I have access to Internet whenever I need it, and I also have "emergency solutions" (3G, friends connections, family connections, or a nearby library with Internet connection).
- I have access to my PC whenever I need it, I have one PC and one laptop, and I also have "emergency solutions".
- About useful criticism: I think criticism is useful when it's done with respect, without insults, without condescension, and when it's done in a constructive way (all together). Put it simple, if a critic is done to help me understand that what I've done could be done in a better way, and an alternative approach is sketched or pointed, then I'll learn something. But if all I receive is something like "your work is crap", then I'll leave the project and start looking for projects with nicer people.
- How autonomous are you when developing? I'm relatively independent when I develop, but evidently I'm more independent when I'm familiar with the code base. In any case, when I suspect a change can be polemic or can affect my partners work, then I think it's good to discuss it and looking for a good consensus solution.
- I think proof of concepts are a very good idea, and I should use this "tool" more. I have to admit that I don't usually do proof of concepts. I don't mind "throwing away code", I'm used to it, even without doing proofs of concepts. If I don't do proofs of concepts is mainly because: the company doesn't want to spend money on "unproductive" work, or because I work for myself without having to agree with anybody.
Y: Your task
- Did you select a task from our list of proposals and ideas? Yes, from [], Infrastructure section: Octave Package management ( [] ).
- If yes, what task did you choose? Please describe what part of it you especially want to focus on if you can already provide this information. Please also wiki-link the page for your elaborated proposal here.
- If you apply for a task you have added yourself instead, please describe this task, its scope and people you already talked to concerning it. What field of tasks did you miss on the list?
- 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"). Optionally include two or three milestones you expect.