Archive for Informàtica

09 feb 2012

Comparador de bitllets de TMB

1 Comment Informàtica

Amb els viat­ges que faig, em surt més a compte una T-​​MES o una T-​​50/​30? O val més que vagi com­prant una T-​​10 rere l’altra, per si de cas? Quin dels usu­a­ris regu­lars de trans­port públic no es deu haver fet aquesta pre­gunta algun cop a la vida?

Ara feia temps que no anava regu­lar­ment a Barcelona, però resulta que dilluns hi començo un curs de for­ma­ció ocu­pa­ci­o­nal de dis­seny grà­fic digi­tal i avui –que feien una ses­sió infor­ma­tiva i la matri­cu­la­ció– men­tre tor­nava amb el tren, sense saber encara si seria admès, hi he comen­çat a rumiar. Com que tenir poca feina i ésser un gran afi­ci­o­nat a l’Excel té aques­tes coses, m’he pro­po­sat fer un full de càl­cul per ajudar-​​me a deci­dir… I com que al final ha que­dat prou digne i tal vegada sigui útil a algú més, aquí el teniu:

Descarregar ComparaTMB.xlsm | Descarregar la ver­sió vella .xls (97−2003)

És un docu­ment en for­mat 2010 amb macros, per tant, les hau­reu d’habilitar per­què fun­ci­oni cor­rec­ta­ment. Està pro­te­git per evi­tar que les fór­mu­les des­a­pa­re­guin per art de màgia (allò que passa), però si algú té ganes de tafa­ne­jar només l’ha de des­pro­te­gir: no té con­tra­se­nya. Si hi tro­beu erra­des o voleu comen­tar pos­si­bles millo­res, poseu-​​vos en con­tacte amb mi (comen­ta­ris, twit­ter, etc.) També sou lliu­res de modificar-​​lo i redistribuir-​​lo (si ho feu, envieu feed­back, que sem­pre fa il·lusió ^^)

Per cert, ja que parlo d’això –i digui el que digui el mise­ra­ble del Trias– apro­fito per col·laborar en difon­dre la ini­ci­a­tiva T-​​11 per tal que d’altres usu­a­ris apro­fi­tin el tra­jecte que nos­al­tres no farem ser­vir en esgo­tar la T-​​10. Viatgem amb la T-​​11!

Actualitzo: He afe­git un enllaç per des­car­re­gar també una ver­sió en for­mat XLS (Excel 97–2003). Sembla que fun­ci­ona, tot i que no l’he pro­vat a fons. (He detec­tat que no pinta en ver­mell els fes­tius com la ver­sió 2007–2010).

{lang: «ca»}

19 gen 2012

Eclipse IDE per a Python+Django+MySQL a Mac OS X Lion

No Comments Informàtica

Després de barallar-​​me unes hores per a con­fi­gu­rar cor­rec­ta­ment l’entorn de pro­gra­ma­ció, escric aquesta entrada per expli­car com ho he fet. Anem a pams:

Objectiu

La meva inten­ció és uti­lit­zar Eclipse per a pro­gra­mar apli­ca­ci­ons web usant Django en un equip local amb Mac OS X Lion. La base de dades que vull uti­lit­zar és MySQL i es troba en un ser­vi­dor LAMP a la mateixa xarxa local.

Eines necessàries

Procediment

La pri­mera part de la instal·lació real­ment és molt sen­zi­lla, els pro­ble­mes els he tro­bat a l’hora de con­nec­tar amb la base de dades… Però, tant se val, comen­cem pel principi:

1 Instal·lació d'Eclipse Classic

Aquest pas és tri­vial. N’hi ha prou de descarregar-​​lo, descomprimir-​​lo i arros­se­gar la car­peta eclipse a la nos­tra car­peta d’aplicacions.

2 Instal·lació de Python i Django

Molt fàcil, també. Descarreguem i mun­tem el DMG de la ver­sió de Python que vul­guem (jo ho he fet amb la 2.7 basant la tria en aquesta indi­ca­ció del web: If you don’t know which ver­sion to use, start with Python 2.7; more exis­ting third party software is com­pa­ti­ble with Python 2 than Python 3 right now.) i exe­cu­tem l’instal·lador.

Per al Django: des­car­re­guem i des­com­pri­mim la ver­sió esta­ble i poste­ri­or­ment arros­se­guem la car­peta obtin­guda al Terminal. Amb això acon­se­guim obrir un ter­mi­nal amb la car­peta de Django com a car­peta de tre­ball. En aquest ter­mi­nal exe­cu­tem:

1
sudo pyt­hon setup.py ins­tall

3 PyDev

Arribats a aquest punt podem dir que ja tenim les eines a punt i és l’hora de començar-​​les a inte­grar. Començarem afe­gint a Eclipse el plug-​​in PyDev per a poder crear pro­jec­tes amb Python/​Django. Per a fer-​​ho, des del menú Help > Install New Software… afe­gi­rem el següent repo­si­tori:

1
http://pydev.org/updates

I poste­ri­or­ment, des del mateix qua­dre de dià­leg, podem cer­car PyDev i instal·lar-lo (hau­rem de rei­ni­ciar l’Eclipse en acabat!)

4 Connexió amb la base de dades

Aquesta és la part que m’ha donat més mal­de­caps (i bàsi­ca­ment per a recordar-​​me de com ho he fet escric aquest post). L’esquema gene­ral –pro­ble­mes inclo­sos– és el següent: Per tal que Python pugui gene­rar auto­mà­ti­ca­ment el codi font per a interac­ci­o­nar amb MySQL neces­si­tem el con­nec­tor Python-​​MySQL (també cone­gut com MySQLdb o Python-​​MySQLdb). La meva idea ini­cial era que no m’havia de fer falta instal·lar MySQL al Mac si, al cap i a la fi, la BD a la qual vull connectar-​​me està en una màquina dife­rent. Però resulta que durant la instal·lació fa falta con­sul­tar el fit­xer de con­fi­gu­ra­ció i cer­tes lli­bre­ries de MySQL. Després de goo­gle­jar una bona estona vaig arri­bar a la con­clu­sió (no gaire con­ven­çut) que, encara que al final vol­gués connectar-​​me a un MySQL remot, per a fer la instal·lació del con­nec­tor neces­si­tava un MySQL local.

En defi­ni­tiva, el pri­mer pas és instal·lar el MySQL Community Server (fàcil, usant l’instal·lador, un cop descarregat/​descomprimit); poste­ri­or­ment des­car­re­guem  i des­com­pri­mim MySQLdb, n’editem el fit­xer de con­fi­gu­ra­ció site.cfg per a indi­car el PATH del nos­tre fit­xer de con­fi­gu­ra­ció de MySQL

1
2
3
4
# The path to mysql_​config.
# Only use this if mysql_​config is not on your PATH, or you have some weird
# setup that requi­res it.
mysql_​config = /​usr/​local/​mysql/​bin/​mysql_​config

Fet això, neces­si­tem incloure al PATH una lli­bre­ria que uti­litza el con­nec­tor. Concretament: libmysqlclient.18.dylib. Per no complicar-​​me (ni afe­gir “merda” al PATH) vaig fer-​​li un enllaç sim­bò­lic i va fun­ci­o­nar per­fec­ta­ment. En un ter­mi­nal exe­cu­tem:
1
sudo ln -s /​usr/​local/​mysql/​lib/​libmysql­cli­ent.18.dylib /​usr/​lib/​

Ara sí que hau­ríem de poder instal·lar el con­nec­tor fent:
1
sudo pyt­hon setup.py ins­tall

Fet!

{lang: «ca»}

22 jul 2011

Instal·lació neta d'OSX 10.7 Lion

3 Comments Informàtica

Escric aquesta entrada des de Lion, la nova ver­sió del sis­tema ope­ra­tiu OS X d’Apple, des­prés de barallar-​​me durant el dia d’ahir amb l’ordinador per fer una instal·lació que em dei­xés satis­fet. No pre­tenc pre­sen­tar una revi­sió a fons del pro­ducte per­què a hores d’ara encara no l’he fet ser­vir prou; però si que vol­dria donar algu­nes indi­ca­ci­ons sobre la instal·lació que penso que poden ser útils a les per­so­nes que encara estan pen­sant si fan o no el salt d’Snow Leopard (que fun­ci­ona de mera­ve­lla) a Lion (que ja ha rebut algu­nes crí­ti­ques pel seu ren­di­ment) i afegir-​​hi alguna opi­nió més.

A la prò­pia App Store poden llegir-​​se opi­ni­ons d’usuaris que cri­ti­quen un supo­sat des­cens del ren­di­ment des­prés d’haver actu­a­lit­zat. La veri­tat és que a mi mai m’ha agra­dat actu­a­lit­zar sis­te­mes ope­ra­tius (entre ver­si­ons, vull dir) i fins i tot en el cas de GNU/​Linux, que pro­ba­ble­ment és el que millor resol els can­vis de ver­sió, sem­pre he sigut més par­ti­dari de for­ma­te­jar i reinstal·lar. Fer-​​ho d’aquesta manera em sem­bla més net i ele­gant i em per­met eli­mi­nar mol­tís­sima brossa (més de 300 GB!) tan del propi sis­tema com dels meus docu­ments personals.

En resum, des­prés de des­car­re­gar les gai­rebé 4GB de l’actualitzador vaig seguir les ins­truc­ci­ons de Mashable per a crear un DVD de sis­tema des del qual pre­te­nia fer la instal·lació neta. Gravar aquest DVD amb la Utilidad de dis­cos és tri­vial (seguiu les ins­truc­ci­ons) però compte! No hi va haver manera d’aconseguir que el meu iMac arren­qués des del DVD. No vaig cer­car a fons, però em va sem­blar enten­dre que els iMac no boo­ten des de CD/​DVD (ales­ho­res per­què incor­po­rava el DVD d’Snow Leopard dins la caixa, quan el vaig com­prar? Sí, vaig provar-​​ho amb el DVD ori­gi­nal del lle­o­pard de neu i tam­poc va arrencar…)

Seguint les matei­xes ins­truc­ci­ons vaig gra­var la DMG de Lion a una tar­geta SD (no tenia cap lla­pis USB de més de 4 GB) i rei­ni­ci­ant amb la tecla option (alt) pre­muda vaig acon­se­guir ini­ciar el sis­tema des de la SD. Vaig indi­car que volia instal·lar al disc prin­ci­pal (Macintosh HD) i resulta que en comp­tes de sobre­es­criure el disc, va detec­tar que ja hi havia un OS X instal·lat i va fer una actu­a­lit­za­ció! Arg!

He de dir que en el meu cas durant els pri­mers 10 o 15 minuts d’ús vaig notar com, efec­ti­va­ment, el ren­di­ment de la inter­fí­cie grà­fica era força jus­tet. Res a veure amb la flui­desa d’Snow Leopard i gens digne d’una màquina amb un i7 i 8 GB de memòria.

Conclusió? Calia reinstal·lar de nou assegurant-​​me de for­ma­te­jar pri­mer. Fer-​​ho, de fet, és ben sen­zill. Després d’arrencar amb la tar­geta SD s’indica que ini­ciï la Utilidad de dis­cos i es borra el con­tin­gut de la par­ti­ció Macintosh HD. Un cop fet s’instal·la de nou (força més ràpid que l’actualització) i la veri­tat és que ales­ho­res si que el ren­di­ment i la flu­ï­desa de l’entorn de tre­ball són els esperats!

Primeres impressions?

L’scroll natu­ral ho és ben poc de natu­ral! Però a dife­rèn­cia del que havia lle­git si que pot desactivar-​​se des de les pro­pi­e­tats del ratolí.

El LaunchPad és una mera­ve­lla (més ràpid fins i tot que l’Spotlight per obrir les apli­ca­ci­ons més usa­des) i es tro­ben a fal­tar Exposé i Spaces; amb­dós ara inte­grats al Mission Control que té molt bona pinta però que reque­rirà un pro­cés d’adaptació.

Ah, per cert, si feu una instal·lació neta tin­gueu pre­sent que Lion no incor­pora iLife (a dife­rèn­cia de quan com­pres un Mac que ja ve preinstal·lat) de manera que si no el teniu en DVD hau­reu de pas­sar per caixa!

{lang: «ca»}

16 feb 2011

Jugant amb algorismes genètics

No Comments Informàtica

Una de les dis­ci­pli­nes de la infor­mà­tica en què mai he apro­fun­dit però que em crida l’atenció des del dia que vaig estudiar-​​la a la uni­ver­si­tat és una branca de la intel·ligència arti­fi­cial ano­me­nada “algo­ris­mes genètics”.

Comencem pel prin­cipi: un algo­risme és un con­junt de pas­sos orga­nit­zats de tal manera que reso­len un pro­blema deter­mi­nat. Generalment és feina del pro­gra­ma­dor dis­se­nyar quins són aquests pas­sos i com s’han d’estructurar per tal que, com és d’esperar, apor­tin real­ment una solu­ció al pro­blema. Doncs resulta que aquesta branca de la intel·ligència arti­fi­cial pro­posa apli­car tèc­ni­ques prò­pies de la genè­tica i l’evolució per a tro­bar l’algorisme que bus­quem. La idea gene­ral, per no com­pli­car massa la qües­tió, és crear un algo­risme “ale­a­tori”; enfrontar-​​lo al pro­blema i assignar-​​li una pun­tu­a­ció (arbi­trà­ria però objec­tiva i com­pa­ra­ble) per a valo­rar com de bona (o de dolenta) és la reso­lu­ció que ha fet del problema.

Per ser més exac­tes (anem-​​nos acos­tant a la rea­li­tat de mica en mica) el que fem no és gene­rar un algo­risme ale­a­tori sinó que dis­se­nyem un algo­risme –diguem-​​ne– genè­ric amb un con­junt de vari­a­bles lliu­res del qual sabem que donarà la solu­ció al pro­blema (o una bona apro­xi­ma­ció) quan tro­bem els valors “òptims” per a totes les vari­a­bles. En el fons és una qües­tió d’optimització (o d’adaptació al medi, si fem ser­vir ter­mi­no­lo­gia evo­lu­tiva) o de resol­dre una equa­ció amb mol­tes incògnites.

El pro­ce­di­ment plan­te­jat per la intel·ligència arti­fi­cial és el següent: un cop defi­nits aquest algo­risme genè­ric i les vari­a­bles que el con­fi­gu­ren, pre­nem un valor a l’atzar per a cadas­cuna d’elles i ano­me­nem cro­mo­soma aquest con­junt de valors . Repetim el pro­cés fins a crear una pobla­ció de 10, 20, 100… 1000… cro­mo­so­mes. Anomenem gene­ra­ció aquesta pobla­ció de cro­mo­so­mes i enfron­tem cada cro­mo­soma al pro­blema, avaluant-​​ne amb una nota el grau d’aproximació a la solu­ció (segons el pro­blema això serà més o menys difí­cil) o com a mínim amb un indi­ca­dor que per­meti com­pa­rar si un cro­mo­soma ho ha fet millor que un altre o no.

Quan haguem ava­luat tota la gene­ra­ció, apli­ca­rem un pro­cés natu­ral d’evolució que con­sis­tirà en:

  1. Selecció natu­ral: eli­mi­na­rem els cro­mo­so­mes que pit­jors resul­tats hagin obtingut.
  2. Reproducció: farem com­bi­na­ci­ons entre els cro­mo­so­mes super­vi­vents cre­ant nous cro­mo­so­mes deri­vats fins a tenir una pobla­ció amb el mateix nom­bre d’individus que la original.
  3. Mutació: apli­ca­rem certa ale­a­to­ri­e­tat en els parà­me­tres dels cro­mo­so­mes que aca­bem de crear.

En aquest pro­cés hau­rem obtin­gut una segona gene­ra­ció, teò­ri­ca­ment una mica més adap­tada al medi que l’anterior. La muta­ció la fem per inten­tar reflec­tir la rea­li­tat (un fill no és mai una com­bi­na­ció lineal dels parà­me­tres del pare i de la mare; sinó que es pro­du­ei­xen muta­ci­ons “ale­a­tò­ries” en els seus gens) i de la mateixa manera podem rede­fi­nir lleu­ge­ra­ment altres pro­ces­sos. La selec­ció natu­ral, per exem­ple, pot dei­xar viu algun dels cro­mo­so­mes que –per dir-​​ho fina­ment– no se n’ha aca­bat de sor­tir i matar-​​ne algun dels bons; de la mateixa manera que no sem­pre el nyu més dèbil és el que cau a les urpes dels lle­ons ni el més fort té la segu­re­tat que arri­barà a la vellesa.

Sigui com vul­guem aquest pro­cés (aquí juguem a fer de Déu), repe­tint aquesta evo­lu­ció durant gene­ra­ci­ons i gene­ra­ci­ons en teo­ria obtin­drem una pobla­ció que cada vegada serà més bona enfrontant-​​se al pro­blema… No és fas­ci­nant? I el millor de tot és que fun­ci­ona! Vegem-​​ne un exemple:

BoxCar 2D

BoxCar 2D és un joc per a zero juga­dors que uti­litza algo­ris­mes genè­tics per a dis­se­nyar un vehi­cle capaç de superar els obs­ta­cles d’un ter­reny en dues dimen­si­ons. El dis­seny del cotxe (a la imatge supe­rior n’hi ha un exem­ple) par­teix d’una estruc­tura octo­go­nal en què cada vèr­tex està unit amb el cen­tre i és modi­fi­ca­ble segons els següents paràmetres:

  • Angle d’obertura (res­pecte el cen­tre) de cada parell de vèr­texs de l’octàgon
  • Distància de cadas­cun dels vèr­tex al centre
  • Existència (o no) d’una roda en cadas­cun dels 8 vèr­tex (pot haver-​​hi més d’una roda en el mateix vèr­tex però no més de 8 rodes)
  • Angle de l’eix de cada roda amb el seu vèrtex
  • Diàmetre de cada roda
  • Color de cada tri­an­gle for­mat pel cen­tre i dos vèrtexs
  • Color de cadas­cun dels eixos de les rodes

De manera que, en aquest cas, un cro­mo­soma (que és la defi­ni­ció del cotxe) consta de 8 angles i 8 dis­tàn­cies per a la car­ros­se­ria, 8 valors que indi­quen en quins dels vèr­tex situem cadas­cuna de les 8 pos­si­bles rodes, 8 angles per als eixos de les rodes, 8 dià­me­tres per a les rodes i 16 valors de colors (no en aquest ordre). És fàcil adonar-​​se que la quan­ti­tat de vehi­cles dife­rents que podem gene­rar és, a la pràc­tica, infi­nita. Vegeu un exem­ple de cotxe que he dis­se­nyat manu­al­ment i el seu cor­res­po­nent cro­mo­soma numè­ric:

1
2
3
4
5
6
7
8
9
10
11
12
<a href=“http://jordinebot.cat/blog/wp-content/uploads/2011/02/Captura-de-pantalla-2011–02-16-a-las-20.28.29.png”><img class=“alig­n­left size-​​full wp-​​image-​​3008″ title=“El meu cotxe” src=“http://jordinebot.cat/blog/wp-content/uploads/2011/02/Captura-de-pantalla-2011–02-16-a-las-20.28.29.png” alt=”” width=“172” height=“101” /​></​a>1,1.492,0.9335,1.84,0.867,2.101,0.9905,
2.797,0.3635,0.564,0.7245,0.622,
0.5630000000000001,0.941,0.9905,3,3,
0.9424777960769379,1.5,7,
2.199114857512855,1.1973478311672807,6,
2.0202854348261674,1.192,-1,2.3271512214521963,
0.94,-1,5.615403641975675,0.9525596981868147,
-1,4.075827107587588,0.2819843692705035,-1,5.063380270569343,
1.4500815817154944,-1,4.654724898535651,1.4973793599754572,
13054,13054,16321673,16321673,16321673,16321673,
16321673,16321673,16321673,16321673,16321673,
16321673,16321673,16321673,16321673,16321673,8

Quan comença el joc (tan bon punt obrim la pàgina) es crea una pista i una pobla­ció ini­cial de 20 vehi­cles a l’atzar (alguns no tenen ni rodes! XD) i es posen, d’un en un, sobre la pista. En aquest cas la nota que obté cada vehi­cle està for­mada per la dis­tàn­cia recor­re­guda i el temps emprat en com­ple­tar la pista. Si un vehi­cle no es mou de lloc durant 3 segons es passa al següent i, en qual­se­vol cas, no se’ls dóna més de 4 minuts a cadas­cun per a inten­tar arri­bar al final de la pista. Tant el dis­seny dels vehi­cles, com la com­po­si­ció dels cro­mo­so­mes, els pro­ces­sos de selec­ció, repro­duc­ció i muta­ció, etc. estan per­fec­ta­ment expli­cats a la pàgina de The Algorithm del joc.

A més a més, el joc inclou la pos­si­bi­li­tat de pro­var una sèrie de pis­tes no ale­a­tò­ries, crear el nos­tre propi vehi­cle i introduir-​​lo a la pobla­ció ini­cial per veure com evo­lu­ci­ona o modi­fi­car el grau de muta­ci­ons que hi haurà en cada canvi de gene­ra­ció. La veri­tat és que ho he tro­bat molt interes­sant, didàc­tic i diver­ti­dís­sim! De fet, hi ha pocs jocs de zero juga­dors, però m’encanten! :P

{lang: «ca»}