Hackathon Girona 2015

Ahir vaig participar al Hackathon Girona. Era la primera vegada que participava en un esdeveniment d’aquest tipus, i em va fer il·lusió fer-ho a Girona, el meu nou lloc de residència, i amb un projecte molt interessant, Wallyjobs.

logo_wally_blanco

La proposta de projecte era una plataforma de recerca de feina que funcionès a partir de recomanacions i amistats comunes a Facebook. Per entendre’ns, el boca a boca de tota la vida traslladat a la xarxa:

La Maria té un taller de fusteria i necessita una ajudant per gestionar comandes: segurament entre els seus cercles d’amistats hi ha gent que busca feina, i ja sabem que la coneixença sempre ha estat un factor clau per trobar feina.

La jornada

La jornada de treball fou llarga. Per alguns començà ja el divendres, en la reunió de preparació, i per altres, com jo, fou el dissabte de 8h del matí fins quarts d’una de la matinada. Un munt d’hores que, curiosament, no se’m van fer gens llargues, ja que l’ambient era distès, teníem bona teca i beure (sortidor de cervesa inclòs!) i l’objectiu principal era passar-ho bé i fer alguna cosa entre totes.

La meva tasca

He de reconèixer que la teconologia escollida per desenvolupar el projecte no era santa de la meva devoció. Per l’aplicació web es va escollir Code Igniter, un framework de PHP amb una llarga trajectòria però també una mica desfassat. Si bé la darrera versió, la 3, inclou millores significatives com la incorporació de Tests, l’equip corresponent va decidir tirar pel dret. Això es va notar en el resultat final, en què alguns dels processos fonamentals estaven trencats. Però el meu paper en aquest equip fou minúscul, i tan sols al final de la jornada, per donar-hi un cop de mà.

La meva tasca principal fou construir una petita API REST per a ús de les apps iOS i Android, així com pel procès de recomanació de candidat. Novament, la tecnologia escollida tampoc hauria estat la que jo hauria preferit, però, en aquest cas, el microframework Slim de PHP va resultar ser una eina prou satisfactòria per desenvolupar-la, junt amb l’ORM PHP ActiveRecord, sense la qual hauríem mort havent d’escriure SQL a pèl.

L’aprenentatge

Vaig aprendre prou coses, i no totes necessàriament de tipus tècnic.

Per una banda, en Rubén González i l’Àlex Toro em van ensenynar a configurar un localhost local sense necessitat d’utilitzar tecnologies com MAMP. L’Àlex també m’ensenyà els bàsics per fer l’API amb Slim.

Una cosa que em va agradar aprendre, tot i que reconec que encara no acabo d’entendre del tot com funciona a causa de la meva total incomprensió de les matemàtiques, fou com fer un recurs que et llista les ofertes de feina en un radi de 25km. Els programadors que tenia al voltant van quedar flipats quan els vaig dir que no tenia ni puta idea de què merdes és un sinus i un cosinus o no sé quina puta merda. Les mates mai han estat el meu fort. Però bé, StackOverflow mediante, ho vaig fer.

Un altre aprenentatge, tot i que més aviat per la via de la confirmació, és la importància de les eines que utilitzem i, sobre tot, dels processos guiats per tests. Parlant amb companys vaig confirmar que, malauradament, el desenvolupament guiat per tests no té molta implantació a casa nostra, i que és un terreny en el que encara cal treballar molt.

Les sensacions

Va ser una jornada molt agradable, i no dubtaré a repetir un altre any. Això sí, intentaré no perdrem la jornada de preparació, i aviam si puc enxufar-hi una mica de Ruby i TDD ;-)

L’àmbit de self a Ruby

Com a llenguatge de programació Orientat a Objectes (OO), Ruby té el concepte de self, que fa referència al propi objecte. És important tenir en compte que self fa referència a l’objecte, no a la classe, de manera que allò que representa és diferent en funció de si l’utilitzem en el context de la classe o d’una instància.

I com podríem accedir a la referència a la classe, des d’una instància?

Installing Vim on Crunchbang

Crunchbang (also refered to as simply #!) is a minimal Debian distribution that I’ve fallen in love with. I switch from OSX to Crunchbang every now and then, since I plan #! to be my primary OS when my MacBook Air dies. Crunchbang comes with Vi installed. This is how to install Vim, which will also install the vim command line tool.

If you go to the Vim downloads page and search for Unix builds, you’ll be directed to this page. However, I got to some errors following this guide, due to missing dependencies. Basically, what I had to do, was installing those dependencies first:

Unless you chose to install the development tools when you first installed #!, you might need to add mercurial to the previous command.

Now you can follow with the instructions in Vim.org, that I post here too for reference:

Now, next time a Vim version is released, you can just go and fetch the changes, and build it again:

Accessing instance variables in Ruby

Classes may have instance variables that are not explicitly in the public interface – this is, they don’t have a corresponding reader method. These variables can still be accessed with instance_variable_get, a method of Object class. Consider the following example:

 

If we make an instance of Example and call #name, we’ll get a NoMethodError, since there is actually no name method.

We can get the value of @name with instance_variable_get:

The returned value will be that of the current state of the variable when we retrieve it:

Hello, Vim

For years, I have been using eternal text editors for programming. When I was doing mostly PHP sites that were “deployed” (ehem) via FTP, Espresso was my editor of choice, because I liked (and still like) the built-in FTP client that lets you sync files with the server. Then, when I started to write Ruby and working on code that wasn’t uploaded via FTP, I switched to Sublime Text. From it, I enjoyed the fact that the default theme is already cool and that it automatically wraps strings, method calls and so many other things: I had to type less, which is always fine.

However, for the last couple of months I have been getting rid of a lot of stuff in my life; things that I don’t actually need and that just take space and effort to move around. Books, too much clothing, useless objects, etc. Software is part of this. I’ve been trying to use less and less external software (that is, software that needs to be installed) and just go on with the default stuff or web software when I need some specific functionality. My laptop is lighter than ever, and I’m less dependent on what’s in it.

Two days ago I started using Vim, the text editor I thought I’d never use do to its bad reputation as a hard learner. And, to my surprise, it feels so good. I started with vimtutor, which makes a 30-40 minutes introduction to Vim by practice, and after that I was able to set to some basic settings and start using it. I love having all my workspace in one single window and still getting cool features like autocompletion (using tab) or autoindenting.

Here is my very first version of settings for Vim, using Gruvbox theme.

Vull fer Open Source, i encara no sé com (II)

Just ahir deia que voldria treballar en projectes Open Source, propis o aliens, però que encara no sé com. L’afirmació té part d’ironia, perquè saber-ne, en sé i, és més, ho faig. Però per algun(s) motiu(s) que no acabo de tenir clar(s), aquestes aportacions no sempre m’acaben d’omplir.

Generalment, la motivació per llançar un projecte ha sorgit d’una necessitat pròpia, i enlloc de fer una solució puntual de qualsevol manera he optat per realitzar una eina amb vocació de ser utilitzada per més gent amb la mateixa necessitat. Però, sovint, passada la necessitat passada la motivació. Quan es tracta de projectes aliens, generalment hi he arribat a partir de la necessitat d’un projecte en el que estiguès treballant, amb el mateix destí: passada la necessitat, morta la motivació (o morta la disposició). Però el que no mor són les ganes d’enrolar-me en algun projecte engrescador en el que treballar de manera sostinguda.

I potser és per una fantasia, la fantasia que un projecte a llarg plaç em pot omplir més que aportacions puntuals o projectes de curta vida. O potser perquè… ves a saber. Who cares, que diuen. La qüestió és que ara mateix em motiven els següents projectes:

  • Rails API: una versió light de Rails per a construir APIs.
  • Collection+JSON: un format d’hipermèdia per a APIs, que em sembla que pot esdevenir estàndard i pel qual encara hi ha poques eines a l’abast.
  • Active Model Serializers: serialitzadors per a Rails.
  • Kramdown: un convertor de markdown a diferents formats. M’interessa, particularment, el convertor a format de text obert (F)ODT.

No tinc ni el temps ni els recursos com per dedicar-me a tots ells, de manera que ara per ara estic hiper bloquejat en plan què faig. La paradoxa de voler fer tantes coses que no en fas cap per no decidir-te per quina començar. L’Open Source és com la vida, veges tu. Qui ho havia de dir!

Vull fer Open Source, i encara no sé com

Fa dies, més aviat setmanes, més aviat mesos, que tinc unes ganes enormes de col·laborar en projectes Open Source. Per mi, l’OS agrupa dues grans aspiracions vitals: la creativitat i la transformació social. Treballar en projectes OS em permet programar d’una manera diferent a com acostumo a fer-ho al dia, a resoldre problemes diferents, i això és creatiu; treballar en projectes OS em fa partícip d’una manera de crear tecnologia que redefineix les relacions socials de propietat i que genera un espiral de cooperació i treball comú com segurament no ha exisit mai abans. El problema, però, és que encara no sé com fer-ho.

A nivell individual, he desenvolupat alguns projectes que he publicat com a Open Source, com un generador de codi per a WordPress, un framework ultra minimal per webs sense base de dades però que volen rutes boniques i suport multilingüe, una mena de broma per omplir de text documents HTML per fer proves de maquetació, o un mixin de SASS per generar estructures de taules a partir de llistats de definició (en un intent de superar el gran problema de les taules a les pantalles petites). Al moment d’escriure aquest article també tinc a mig coure un projecte, específic per a Rails, per serialitzar dades seguint el format Collection+JSON. En la mesura del possible i de les meues capacitats, també he anat fent alguna contribució a projectes existents. I no obstant, encara no sé com fer-ho.

I arribats al tercer i últim paràgraf, ja no sé si és que no sé com fer-ho o si és que no estic satisfet amb l’impacte de la meva feina. I bé, segurament ja ho sé, ara.

Rails, and its things

Today I forgot my laptop at home and had to do an emergency installation of Ruby, Git and Rails on my sister-in-law’s (yes, this is a real story). After all the thing, I finally ran gem install rails. That’s the list of all the dependencies that were installed by Rails. I just thought it’d be funny to post it here.


$ gem install rails

Fetching: thread_safe-0.3.4.gem (100%)
Successfully installed thread_safe-0.3.4
Fetching: minitest-5.4.2.gem (100%)
Successfully installed minitest-5.4.2
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
Fetching: i18n-0.7.0.beta1.gem (100%)
Successfully installed i18n-0.7.0.beta1
Fetching: activesupport-4.1.6.gem (100%)
Successfully installed activesupport-4.1.6
Fetching: erubis-2.7.0.gem (100%)
Successfully installed erubis-2.7.0
Fetching: builder-3.2.2.gem (100%)
Successfully installed builder-3.2.2
Fetching: actionview-4.1.6.gem (100%)
Successfully installed actionview-4.1.6
Fetching: rack-1.5.2.gem (100%)
Successfully installed rack-1.5.2
Fetching: rack-test-0.6.2.gem (100%)
Successfully installed rack-test-0.6.2
Fetching: actionpack-4.1.6.gem (100%)
Successfully installed actionpack-4.1.6
Fetching: activemodel-4.1.6.gem (100%)
Successfully installed activemodel-4.1.6
Fetching: arel-5.0.1.20140414130214.gem (100%)
Successfully installed arel-5.0.1.20140414130214
Fetching: activerecord-4.1.6.gem (100%)
Successfully installed activerecord-4.1.6
Fetching: mime-types-2.4.3.gem (100%)
Successfully installed mime-types-2.4.3
Fetching: mail-2.6.1.gem (100%)
Successfully installed mail-2.6.1
Fetching: actionmailer-4.1.6.gem (100%)
Successfully installed actionmailer-4.1.6
Fetching: thor-0.19.1.gem (100%)
Successfully installed thor-0.19.1
Fetching: railties-4.1.6.gem (100%)
Successfully installed railties-4.1.6
Fetching: bundler-1.7.4.gem (100%)
Successfully installed bundler-1.7.4
Fetching: sprockets-3.0.0.beta.2.gem (100%)
Successfully installed sprockets-3.0.0.beta.2
Fetching: sprockets-rails-2.2.0.gem (100%)
Successfully installed sprockets-rails-2.2.0
Fetching: rails-4.1.6.gem (100%)
Successfully installed rails-4.1.6
Parsing documentation for actionmailer-4.1.6
Installing ri documentation for actionmailer-4.1.6
Parsing documentation for actionpack-4.1.6
Installing ri documentation for actionpack-4.1.6
Parsing documentation for actionview-4.1.6
Installing ri documentation for actionview-4.1.6
Parsing documentation for activemodel-4.1.6
Installing ri documentation for activemodel-4.1.6
Parsing documentation for activerecord-4.1.6
Installing ri documentation for activerecord-4.1.6
Parsing documentation for activesupport-4.1.6
Installing ri documentation for activesupport-4.1.6
Parsing documentation for arel-5.0.1.20140414130214
Installing ri documentation for arel-5.0.1.20140414130214
Parsing documentation for builder-3.2.2
Installing ri documentation for builder-3.2.2
Parsing documentation for bundler-1.7.4
Installing ri documentation for bundler-1.7.4
Parsing documentation for erubis-2.7.0
Installing ri documentation for erubis-2.7.0
Parsing documentation for i18n-0.7.0.beta1
Installing ri documentation for i18n-0.7.0.beta1
Parsing documentation for mail-2.6.1
Installing ri documentation for mail-2.6.1
Parsing documentation for mime-types-2.4.3
Installing ri documentation for mime-types-2.4.3
Parsing documentation for minitest-5.4.2
Installing ri documentation for minitest-5.4.2
Parsing documentation for rack-1.5.2
Installing ri documentation for rack-1.5.2
Parsing documentation for rack-test-0.6.2
Installing ri documentation for rack-test-0.6.2
Parsing documentation for rails-4.1.6
Installing ri documentation for rails-4.1.6
Parsing documentation for railties-4.1.6
Installing ri documentation for railties-4.1.6
Parsing documentation for sprockets-3.0.0.beta.2
Installing ri documentation for sprockets-3.0.0.beta.2
Parsing documentation for sprockets-rails-2.2.0
Installing ri documentation for sprockets-rails-2.2.0
Parsing documentation for thor-0.19.1
Installing ri documentation for thor-0.19.1
Parsing documentation for thread_safe-0.3.4
Installing ri documentation for thread_safe-0.3.4
Parsing documentation for tzinfo-1.2.2
Installing ri documentation for tzinfo-1.2.2
Done installing documentation for actionmailer, actionpack, actionview, activemodel, activerecord, activesupport, arel, builder, bundler, erubis, i18n, mail, mime-types, minitest, rack, rack-test, rails, railties, sprockets, sprockets-rails, thor, thread_safe, tzinfo after 640 seconds
23 gems installed