Arxiu de Informàtica

Machine Learning reloaded

// setembre 3rd, 2016 // No hi ha comentaris » // Informàtica

Machine LearningPer si no duia prou coses al vol,  m’he apuntat a un curs de Machine Learning. Però anem per pasos.

Durant la carrera, vaig donar diverses assignatures d’aprenentatge automàtic. He de reconèixer que machine learning sona més fancy que aprenentatge automàtic, tot siga dit. Va ser José Oncina, principalment, a l’assignatura d’Aprenentatge Computacional i d’Extracció de la Informació, però també des d’un enfocament més concret a les dues assignatures d’intel·ligència artificial o a la d’Enginyeria del Llenguatge Natural, on vaig tindre el primer contacte amb el processament del llenguatge natural i després hi vaig aprofundir (tot i que menys del que m’hagués agradat) durant els cursos de doctorat, amb Rafa Carrasco i Mikel Forcada.

ML LogoDes que me n’havia vingut a Barcelona, havia deixat gairebé per complet “l’estudi” des d’un punt de vista acadèmic, tot i que he aprés moltíssim d’enginyeria i desenvolupament de programari a la feina, i ja tenia ganes de tornar a fer alguna cosa. I després d’una xarrada fa una setmaneta amb Héctor, em vaig decidir a refrescar els meus coneixements “teòrics” de Machine Learning (i ja vorem si els apliquem a alguna cosa després).

Per a fer-ho, m’he apuntat a un curs de la Universitat de Standford a través de Coursera, un plataforma d’aprenentatge en línia. El curs està impartit pel professor Andrew Ng, cap científic al cercador xinés Baidu, professor adjunt de la Universitat i co-fundador de Coursera.

De moment, he fet ja un parell de “setmanes” del curs, d’un total de dotze, i m’està agradant molt. He posat setmanes entre cometes perquè, tot i que el curs està dividit en tasques “setmanals”, res no t’obliga a fer-les cada setmana; de fet jo he fet totes les tasques durant aquesta setmana.

El curs en sí està molt bé: senzill per a fer memòria de molts conceptes matemàtics (gairebé no recordava les derivades parcials) o algorismes d’aprenentatge senzills com el descens per gradient, però el professor Andrew ho explica tot d’una manera molt planera i fàcil.

Ja aniré contant més sobre el curs!

D’un sistema monolític a un basat en microserveis

// maig 31st, 2016 // No hi ha comentaris » // Programació

Últimament, per coses de la feina, he estat llegint més sobre sistemes que funcionen sobre microserveis enfrontat a sistemes monolítics.

La veritat és que s’ha parlat molt últimament sobre el tema, i hi ha un grapat de xarrades i articles molt interessants al respecte.

Martin Fowler ens parla en aquesta sobre què són els microserveis, i alguns dels seus principals avantatges i inconvenients front a sistemes monolítics. És una molt bona introducció si, com em passava a mi, tens alguns dubtes de què són (o, millor dit, què entén la gent per) microserveis.

En aquesta altra, una miqueta més llarga, Chad Fowler parla d’un exemple concret de migració d’un conjunt d’aplicacions basat en un sistema monolític (Wunderlist, una aplicació de llistes de tasques que potser coneixeu). És força interessant veure com han muntat tota l’arquitectura que gestiona els milions i milions d’usuaris de Wunderlist en una arquitectura totalment basada en microserveis.

En un moment d’aquesta última xarrada, Chad fa una frase que m’ha fet molta gràcia, perquè m’ha recordat al que em passa cada vegada que mire gairebé qualsevol fitxer de codi (tant siga d’una altra persona com meu):

We really really suck, we’re really bad at delivering software projects. And then when we do, we deliver crap.

Fem pena, som realment dolents a l’hora de produir projectes de software. I quan ho fem, entreguem porqueria.

Chad Fowler

 En definitiva, diuen que una imatge val més que mil paraules:

Comparativa d'un sistema monolític a un basat en microserveis

Comparativa d’un sistema monolític a un basat en microserveis – Imatge d’Álvaro Sanchez

I una altra extensió per al WordPress: XV Random Quotes

// agost 19th, 2015 // No hi ha comentaris » // Programació

XV Random QuotesJa feia temps que ho tenia a la llista de coses pendents: “netejar” l’extensió que utilitze per a mostrar una cita a la barra lateral (i també la pàgina més vista d’aquest lloc, la de cites) i publicar-la al repositori d’extensions de WordPress.

La idea realment és més gran: estic intentant “netejar” totes les extensions que tinc instal·lades i que tenen algun error, bé perquè noves versions de WordPress o PHP han modificat les API o bé perquè simplement tenen bugs. Amb eixe ànim vaig començar a col·laborar amb MonthChunks (on les últimes versions ja les he publicat jo sol), i ara continue amb altres extensions.

En aquest cas concret, es tracta d’una extensió que s’anomenava originalment Random Quotes, que després d’estar abandonada va ser represa per un altre desenvolupador sota el nom Stray Quotes i finalment, després d’un nou abandonament, un altre anomenat Stray Quotes Z.

I ara rep un nou nom: XV Random Quotes. La part de Random Quotes és evident: es tracta d’una extensió que permet desar cites i mostrar-les de manera aleatòria (tot i que també les pots mostrar com vulgues). I la part de XV (que ve de Xavi, no de XV en números romans) vull utilitzar-ho com a “prefix” de les diverses extensions que vaja publicant en el futur, com una mena de “marca” personal. Respecte al logo, el senyor Mario Santacreu ha tingut a bé crear-ne un per a l’ocasió 🙂

Aquesta extensió, ara mateix, és funcional, però necessita moooooolta feina: el codi és caòtic, i cada vegada que òbric qualsevol fitxer del codi font m’agarren ganes de tirar-la al fem. A més, l’extensió fa moltes coses que no utilitze, i possiblement eixa siga una manera de fer-la més senzilla: eliminar funcionalitats. Per eixe motiu, és possible que futures versions de l’extensió tinguen alguna característica menys de les que té ara. Siga com siga, espere poc a poc anar millorant la qualitat i la legibilitat del codi, tant per a simplificar el manteniment per la meua part com també per a facilitar que altra gent s’involucre amb el desenvolupament.

També tinc intenció d’aprofitar aquesta extensió com a “banc de proves” per a utilitzar eines que faciliten el desenvolupament en un llenguatge de programació que no destaca per ser massa agraït: PHP. Proves d’unitat amb PHPUnit, integració continua amb Travis…

Com deien els obrint pas, tot un món per descobrir 🙂

 

Traducció de l’extensió WordPress SEO de Yoast

// maig 5th, 2015 // No hi ha comentaris » // Informàtica

YoastDurant les últimes setmanes, he estat participant més activament del que ho feia abans en la traducció del WordPress i d’algunes extensions. En concret, m’he focalitzat en la traducció i correcció de l’extensió WordPress SEO, creada per Joost de Valk, més conegut com a Yoast.

Ja allà pel 2011 vaig fer un primer intent de traduir l’extensió, però en aquell moment vaig “abandonar” la tasca: es tractava d’una extensió amb moltes cadenes (i moltes paraules tècniques), i en aquell moment no ho vaig considerar prioritari. No obstant això, vaig seguir utilitzant-la, i he anat seguint l’evolució de l’extensió.

Ara, en canvi, s’han unit un grapat de coses que han fet que al final em posara mans a l’obra. D’una banda, la jornada de traducció que, amb motiu de la Catosfera 2015, vam organitzar des de Softcatalà a Girona em va fer tornar el gusanillo de traduir, després de temps dedicant-me a altres tasques dins de Softcatalà i Softvalencià. D’altra banda, tenia ganes de contribuir a la comunitat, encara que fóra una miqueta, amb el coneixement que he adquirit i millorat els últims mesos a Vistaprint com a tech lead de l’equip de SEO (optimització per als motors de cerca). I finalment, amb el llançament de la versió 2.0 de l’extensió, des de l’equip de Yoast van contactar amb antics traductors per aconseguir traduir l’extensió a tantes llengües com fóra possible.WordPress SEO

Així que unes poques setmanes i vora 7.000 paraules traduïdes després, ja està disponible al 100% en català/valencià/com-li-vulgueu-dir la millor extensió que hi ha ara mateix al món de WordPress per a optimització per a motors de cerca: WordPress SEO.

Tot i que l’extensió es troba traduïda al 100%, encara hi ha moltes coses per a corregir. Gràcies a la feina que Jordi està fent a Softcatalà amb les memòries de traducció i la integració de l’espectacular corrector ortogràfic i gramatical que s’ha currat Jaume, ja n’he corregit moltes. Però encara queden moltes errades per corregir, falta millorar la coherència terminològica, ajustar verbs en diferents variants dialectals… així que si utilitzeu el WordPress SEO i trobeu cap error en la traducció, aviseu-me intentaré corregir-lo 😉

Monthchunks, col·laboració en el desenvolupament d’una extensió de WordPress

// gener 10th, 2015 // 1 comentari // Programació

Fa ja molts anys que sóc usuari de WordPress com a gestor de continguts. Des que l’any 2006 (ja fa més de 8 anys!) migrara el meu blog de Pivot a WordPress, he anat millorant el meu coneixement sobre el CMStunejant els temes que he tingut al blog o a altres pàgines (com Infobenissa, o el blog de la meua germana o Softvalencià, per exemple), he participat en la traducció tant de WordPress com d’algunes extensions, reportat alguns errors upstream (algunes de les quals no s’han resolt encara) i també he modificat/desenvolupat algunes extensions. Però açò últim sempre ho havia fet de manera privada, quedant-me per a mi l’extensió (o la millora a una existent). Fins a que l’estiu passat em vaig decidir a començar a posar ordre a gran part del codi que tenia escampat per tot arreu.

Una de les primeres extensions que havia modificat s’anomenava “Monthchunks“, de Justin Watt. Es tracta d’una extensió que genera una versió minimalista dels arxius del blog, que es troben habitualment a la barra lateral. Amb aquesta extensió, s’aconsegueix que l’espai utilitzat per tots els enllaços siga molt inferior al llistat estàndard de WordPress.

Llista estàndar dels arxius del blog

Llista estàndar dels arxius del blog

Llista dels arxius del blog de Monthchunks

Llista dels arxius del blog de Monthchunks

Vaig fer dues modificacions, la primera permetia posar abreviatures dels mesos en lloc de les opcions existents fins aquell moment (números del mes i primera lletra del mes). Després, vaig afegir l’opció de poder posar, en temes “moderns” de WordPress, els arxius a la barra lateral sense necessitat d’haver de modificar el codi de la plantilla, sinó a través d’un giny de WordPress. A més, també he afegit la possibilitat de localitzar el plugin, i la traducció al valencià.

I aquesta setmana, després de molt insistir, he aconseguit que els canvis s’integraren al repositori de l’extensió, i que Justin publicara la tercera versió del plugin. Així, de manera automàtica, les mil persones que tenen l’extensió instal·lada, han rebut la nova versió amb les millores. Al mateix temps m’ha afegit com a autor de l’extensió a WordPress.org, de manera que en el futur faig alguna altra millora, no hauré d’esperar mesos en que es publique.

Tots eixim guanyant: jo, perquè aconseguisc tindre unes modificacions integrades en l’extensió, de manera que a cada nova actualizació no les hauré de tornar a aplicar. La resta de la gent que utilitza el plugin, perquè tenen noves característiques de manera automàtica. I Justin, perquè aconsegueix algú que l’ajude a mantenir les extensions actualitzades.

I així és com llueix al meu blog

Monthchunks al Racó de Xavi

Monthchunks al Racó de Xavi

Visca el programari lliure!

Generar un fitxer PDF que continga 3 pàgines per pàgina

// agost 9th, 2014 // No hi ha comentaris » // Linux

Una de les coses que acostumava a fer quan aquest blog era posar entrades curtes, tècniques que després em serveixen per a no haver de tornar a perdre temps buscant-ho de nou a Google: “això ho vaig posar al blog!”  I avui m’ha costat fer una cosa d’eixes que em costarà repetir si no m’ho apunte a algun lloc.

Havia generat un fitxer amb el LibreOffice Writer de 210x99mm (just una tercera part d’un A4) i necessitava generar un fitxer PDF amb 3 còpies del primer. La següent imatge mostra exactament el que intentava fer

PDF 3x1

Tot i que sembla fàcil, fer-ho amb 3 pàgines no ho és tant (amb 2 o quatre pàgines si que ho és més); això no ho pots fer en cap programa del tipus Word d’Office o LibreOffice Writer sense posar-te a modificar el document original, que és una cosa que jo no volia fer: si canvie una cosa del text original, ho hauria de canviar a les 3 columnes?

Així que com a bon linuxer, segur que hi ha una manera senzilla de fer-ho utilitzant la línia d’ordres. I m’he trobat amb pdfjam, una capa per sobre del paquet pdfpages de LATEX, una eina extraordinària per fer documents.

I a continuació l’ordre simple per a generar, a partir d’un fitxer com el de l’esquerra (fitxer.pdf), un altre fitxer com el dreta de la imatge (fitxer-3.pdf), en només una línia

pdfnup --nup 3x1 --suffix "-3" --frame true fitxer.pdf fitxer.pdf fitxer.pdf

Fàcil, no?

WTF! per minut

// novembre 12th, 2012 // No hi ha comentaris » // Programació

He començat a llegir-me el llibre Clean Code, the Robert C. Martin, a vore si aprenc d’una vegada a programar per a millorar el meu codi. I gairebé només començar, m’he trobat amb esta imatge que m’ha fet molta gràcia.

Habitualment, intente que el meu codi estiga darrere la primera porta, però no puc negar que hi ha vegades que està, segur segur, darrere de la segona.

WTF! per minut

Font: WTFs/m, OS News

Llançament d’Infobenissa per a Android

// agost 19th, 2011 // No hi ha comentaris » // Internet, Programació

Infobenissa per a Android
 

Infobenissa per a Android

Infobenissa per a Android

La setmana passada vaig publicar la meva primera aplicació per a Android. Es tracta d’una aplicació per a Infobenissa des de la que accedir d’una manera més còmoda des del mòbil a la informació de Benissa.

Es tracta d’una aplicació, de moment, molt senzilla, ja que només permet accedir als titulars de les últimes notícies publicades, amb enllaços directes a cadascuna d’elles.

No obstant, la meva intenció és anar poc a poc afegint funcionalitats a l’aplicació, així com alliberar el codi font sota una llicència lliure. També he creat una pàgina que servirà per recollir tots els avanços en l’aplicació: Infobenissa per a Android.

Donar permisos a un usuari en MySQL

// juliol 22nd, 2011 // No hi ha comentaris » // Linux

MySQLÚltimament, per motius de feina, estic treballant prou amb bases de dades MySQL. I gràcies a la magnifica instal·lació elèctrica que tenim a la universitat, últimament se m’ha corromput diverses vegades la base de dades amb què estava treballant. A més, també he hagut de fer unes quantes instal·lacions de la BD amb usuaris nous en altres equips. I al crear el nou usuari, m’he trobat amb el següent problema:

Suposem que partim d’aquest codi

create database prova;
grant all on prova.* to 'usuari'@'%' identified by 'contrasenya';

La primera línia ens crea una base de dades, anomenada prova. Amb la segona, estem donant-li tots els permisos a l’usuari usuari es connecte des d’on es connecte (amb el comodí de MySQL, %), i que la seva contrasenya serà contrasenya. Fins ara sembla tot prou senzill i clar, no?

Doncs no funciona, i aquest és l’error que ens torna el MySQL quan intentem connectar-nos al MySQL des del terminal

mysql -u usuari -pcontrasenya
ERROR 1045 (28000): Access denied for user 'usuari'@'localhost' (using password: YES)

Per què ens dona aquest error? Perquè encara que li hem donat permisos a l’usuari usuari per a connectar-se a MySQL “des de qualsevol lloc”, açò inclou tots els llocs possibles excepte localhost. És a dir, des de qualsevol altra màquina del món ens podrem connectar a eixa base de dades, però no des de la mateixa on està instal·lat el servidor!

Per a solucionar-ho, només cal que afegim una tercera ordre al codi original, donant permís explícit per a connectar-se a la nostra base de dades des de localhost.

create database prova;
grant all on prova.* to 'usuari'@'%' identified by 'contrasenya';
grant all on prova.* to 'usuari'@'localhost' identified by 'contrasenya';

Potser a algú li vinga bé aquesta entrada, i segurament d’aci alguns mesos, quan haja de crear un nou usuari de MySQL i m’isca aquest error, no m’hauré de tirar hores pensant/buscant per internet la solució.

Transició entre dues imatges amb ImageMagick

// abril 2nd, 2011 // No hi ha comentaris » // Linux

Després de prou articles de política, llengua o altres coses de l’estil que acostume a escriure al blog, ara toca una entrada un poc més tècnica, d’eixes que pose ací simplement per a en un futur, quan intente tornar a fer una cosa semblant, no estar hores cercant-ho al Google.

Es tracta d’una simple ordre a l’eina convert, del paquet ImageMagick, i a partir de les dues imatges genera una transició, deixant un temps a l’inici i al final.

$ convert ( im1.png  -set delay 100 ) ( im1.png im2.png -morph 9 -set delay 30 ) ( im2.png -set delay 100 )  tr.gif

I a continuació, un exemple per a mostrar-ho (en homenatge al documental “Del roig al blau: la transició valenciana“): la imatge roja, la transició entre les dues, i la imatge blava.