Friday, December 31, 2010

Lectures del 2010

Aquest blog està viu des del febrer de 2010 i des d'aleshores he fet 100 posts. M'havia proposat un o dos a la setmana i més o menys ha estat així. En el que sí que he estat rigorós ha estat en la recopilació de lectures, i això em dóna dades força interessants.

Moltes vegades no recordes què és el que vas llegir fa uns mesos, i tenir un registre ajuda molt. De fet pensava que havia passat molt més temps des de que vaig llegir Anatema o Tokio Blues.

Fent un inventari numèric veig que he llegit 25 obres, de les quals 13 eren còmics.
Han estat més de 7000 pàgines, de les quals 1500 eren de còmic.
Només 4 coses en anglès i 1 en català.
Només 4 obres tècniques.

El que m'ha semblat més exagerat és que de les 25 lectures, només 5 eren meves. El 80% del que llegeixo és prestat. Això està bé per així tinc més diversitat, però hauré de posar una miqueta d'ordre en les compres que faig.

Del que he llegit vaig a fer un ranking (que només em serveix a mi).

Millor novel·la: Repartit entre Anatema i Juego de Tronos. Genials.
Millor còmic: Yago o Juego de Manos, però tampoc em van tornar boig.
Millor llibre tècnic: Clean Code. Revelador.

I també dels pitjors:

Pitjor novel·la: Tokio Blues. No guardo un bon record.
Pitjor còmic
: ... el deixarem desert
Pitjor llibre tècnic: UML para programadores Java. Pèssima traducció i títol enganyós.

Esperem que l'any vinent també estigui ple de salut i lectures.

Bon any a tothom!!!

Wednesday, December 29, 2010

El perill del iPad

El regal de Nadal de la meva empresa (omatech) ha estat un iPad, com el de totes les empreses que valen la pena (no?). El cas és que a falta d'un ús més meditat li deixo als meus fills per jugar.
Aquest matí el meu fill de 5 anys m'ha demanat un joc nou. L'he descarregat un de gratis del App Store i ell a continuat. Al cap d'una estona em diu "Papa, mira tot el que he instal·lat". S'havia instal·lat més de 5 jocs de pagament (i encara no sap llegir).

Sembla que un cop poses la clau de pas del App Store, la recorda durant una estona i no la torna a demanar. Això ha permès que anés instal·lant jocs sense demanar-li res, perque jo ja havia introduït la clau de pas en instal·lar el joc gratuït. La broma, per sort, no ha arribat a 20€.

Ara ja he après que si li has de deixar l'iPad a algú has de tenir unes precaucions. No hi ha manera (o jo no la conec) de dir-li que oblidi la clau. Sembla que l'únic que es pot fer és no posar tarja de crèdit o protegir la instal·lació i desinstal·lació d'aplicacions. Això últim es pot fer des dels Ajustaments, en la opció General, Restriccions.

Vigileu amb la maquineta.

Tuesday, December 28, 2010

Recuperació de un DVD amb Linux

Fa uns sis anys vam comprar una videocàmara de SONY que grava directament en petits DVD regravables. D'entrada em va semblar una bona idea per què d'aquesta manera el pas a l'ordinador semblava més fàcil. Des del primer dia ha estat una odissea.

Un cop omples un DVD regravable petit l'has de "finalitzar" per poder-lo fer servir fora de la càmara. Quan el finalitzes et genera els menús i tot i té l'estructura de directoris d'un DVD normal (amb el VIDEO_TS, els .VOB, els .IFO, etc.)

El cas és que més d'una vegada m'ha passat que un cop finalitzat ja no el puc veure. Per culpa d'algun petit defecte al disc, resulta del tot inútil. Aquesta vegada tenia el vídeo familiar del dia de Nadal i vaig investigar una mica més.

Fent servir el meu Linux no podia copia els fitxers amb un cp, però sí que funcionava el ls, així que vaig provar una alternativa per copiar.

Amb un dd vaig copiar el disc byte a byte a un directori, ignorant els errors, creant una estructura ISO del disc (s'ha de fer com a root):
sudo dd conv=noerror,sync if=/dev/dvd of=/media/OS/dvd.iso

Va trigar moltíssim i, de fet, crec que la comanda és incompleta. Vaig haver d'avortar la còpia per que estava generant més megas dels que realment hi ha al disc. Però al final el fitxer .iso semblava vàlid i el vaig poder aprofitar.

Un cop amb el .iso, vaig crear un directori i el vaig muntar allà:
sudo mkdir /mnt/disk
mount -o loop disk1.iso /mnt/disk

Després vaig fer servir el programa dvd:rip per extreure els capítols del DVD (de la imatge iso en aquest cas).

Amb els .avi extrets vaig veure algunes escenes que s'havien espatllat. Per editar-ho he fet servir el editor de video Pitivi i ha estat molt fàcil.
He pogut salvar un bon moment.

Friday, December 24, 2010

Estic llegint: Buddy y los Bradley

Buddy y los BradleyDe Peter Bagge. 1998. Publicat per Ediciones la Cúpula. 79 pàgines.

Inicialment el dibuix no em cridava gens (caricatures molt exagerades i articulacions impossibles al estil més underground) però després els personatges i les històries m'han fet força gràcia.

Són històries més o menys curtes dels Bradley, una familia a l'estil Simpson, molt catòlica, un pare sempre enfadat, una mare que fa que tot funcioni, un fill i una filla adolescents i un nen.

Algunes de les històries són molt divertides. M'ha agradat molt una que va de la religió i el Nadal. Hi ha un moment en que Buddy té una conversa seriosa amb el seu pare i li pregunta si creu en Déu. El seu pare li acaba dient que no l'importa, que té moltes altres preocupacions i que per a que pensin en això ja tenim al Papa i als capellans. I li diu que sobretot, mai, mai de la vida, li porti la contraria a la seva mare en aquest tema. M'ha fet molta gràcia.
Aquesta història i la de la platja radioactiva les he trobat molt divertides.

Dels Bradley (o de Buddy en solitari) sembla que hi ha moltíssims àlbums. Sembla que hi ha una sèrie "Odio" i una altra "Mundo Idiota" (aquest no sé si també és de Buddy). Potser més endavant llegirem alguna altra cosa.
Ha estat un altre préstec de l'Albert.

Monday, December 20, 2010

Estic llegint: Test-Driven Development by Example

Test-Driven Development by ExampleDe Kent Beck. 2003. Publicat per Addison-Wesley. 213 pàgines

Una gran introducció al desenvolupament dirigit per les proves (TDD). Em venia molt de gust llegir un llibre de TDD on s'expliqués pas per pas i amb exemples la mecànica de fer les proves abans del codi i en aquest sentit aquest llibre és perfecte, i no massa llarg.

L'autor ens explica les virtuts de desenvolupar codi fent primer les proves, però sense centrar-se en una eina de proves en particular. Explica tots els conceptes associats (Mock objects, Fixtures, etc.) i fa els exemples en Java i Python.

No té sentit preguntar si fa servir JUnit 4 o TestNG, per què el que importa és el com es fan les proves, el procés, i no pas la tècnica que fa servir.

Al final fa una molt breu explicació dels patrons que fa servir i de tècniques de refactorització, però no és el fort del llibre.

Em quedo amb el missatge de "red/green/refactor" com a estrategia per treballar, i amb el consell de que per obtenir un "green" (que els tests passin) pots fer trampes (fake it), per que quan refactoritzis per treure duplicats ja s'arreglarà. Les tres tècniques bàsiques: fake it, obvious implementation i triangulació.

Un altre missatge que m'ha quedat clar és que considera que el temps total de desenvolupament no es veu perjudicat, sinó que et tornes capaç d'escriure el doble de codi en el mateix temps.

Thursday, December 16, 2010

Peter Pan informàtic?

Fa molts anys, quan vaig deixar una feina, algú em va donar un consell: "Com més lluny de la tecnologia, millor".
Ho deia amb la millor de les intencions. Realment, en el sector informàtic, els que cobren més diners són els que estan més lluny de la tecnologia, fent gestió.

Això té dues implicacions. La primera és que la majoria dels estudiants d'Informàtica el que volen fer un cop deixen la carrera és "estar el més lluny de la tecnologia". Se saben la lliçó. D'aquesta manera és difícil trobar perfils tècnics de qualitat, encara que vulguis pagar bé, per què s'han anat desfent pel camí.

La segona implicació que jo veig és que hi ha una sensació de que estar a prop de la tecnologia és dolent. Aquells que es mantenen propers, no han volgut créixer. Són uns Peter Pan. Així que un cop arribes a un lloc de gestió, rebutges tot el que tingui a veure amb la tecnologia. Per si de cas.

És clar que és impossible fer una bona gestió si a més a més estàs amb el dia a dia. No crec que sigui bo tampoc que un Director General estigui administrant una base de dades, gestionant un Firewall o codificant un algorisme. Això també crec que és un error.

A mi em sembla que estar a prop de la tecnologia quan evoluciones dintre de la carrera professional d'informàtic és bo. Potser no podràs estar per tot, ni podràs fer la feina que fan els professionals que gestiones, però serà més fàcil de gestionar.

Si vam triar una carrera tècnica, d'alguna manera ens agradava, no? Jo crec que del que es tracta és de mantenir el que una amiga anomenava "trempera tecnològica". Crec jo.

Wednesday, December 15, 2010

Adéu Enrique Morente

OMEGA - Enrique MorenteNo sóc un gran seguidor del flamenc, però algunes coses que he sentit m'han agradat molt. Fa uns anys va caure a les meves mans un disc d'Enrique Morente que vaig trobar absolutament genial: OMEGA (1996). És un disc fet en col·laboració amb Lagartija Nick (un grup de rock de Granada), musicant poemes de Federico García Lorca i amb algunes versions de Leonard Cohen. No és un disc fàcil d'escoltar, però és un dels meus discs favorits.
Adéu Enrique Morente

Wednesday, December 1, 2010

Estic llegint: Marshal Law

Marshal LawDe Pat Mills i Kevin O'Neill. Anys 1980. Publicat per molts. moltes pàgines

Em sap molt de greu. Quan algú et deixa un còmic (o un llibre) dient-te que t'agradarà per què a ell li va agradar molt, i al final a tu no t'agrada gens, em sap greu. I és el que m'ha passat amb aquest Marshal Law. De fet, no me l'he pogut acabar de llegir.

I què té per que no m'hagi agradat? Tot i que el dibuixant és el mateix de La lliga dels homes extraordinaris i el guionista és el mateix de Slaine, els còmics de super herois no acostumen a agradar-me. L'estètica del personatge és més aviat sado-maso i l'estètica global tampoc no m'ha agradat. Però no és només qüestió d'estètica.

Cal tenir en compte que és un còmic dels vuitanta i una de les seves "virtuts" és que conté una crítica contra els super-herois, mostrant un personatge que és una mena de policia/caçador d'homes emmascarats.

Té molts elements de còmics que he llegit amb posterioritat, i potser és tracta del moment en el que faig la lectura que ja no em semblen noves les idees, però és possible que ho fossin en el seu moment. Crítica dels super-herois (mostrant-los amb els seus defectes) ja la vam veure a Watchmen. Policies de super-herois els hem vist a Top 10. I altres coses com casoris de super-herois també s'han vist en diferents sèries (recordo la pel·lícula dels 4 fantàstics).

Dels cinc àlbums que em van deixar vaig llegir-me només dos (la sèrie regular publicada per fòrum i un altre) i val a dir que tant l'argument com el dibuix (al començament horrible) van anar millorant a mesura que anava avançant, i fins i tot podria haver-me agradat al final.

Monday, November 15, 2010

Els comentaris al codi menteixen

Quan vaig començar en el món de la programació creia que un bon codi era aquell que estava ben documentat, amb comentaris. Quan vaig descobrir el Javadoc vaig pensar que era un gran invent i, fins i tot, vaig fer servir en un projecte una eina de validació que m'informava si havia algun mètode sense comentari. Amb el temps em vaig anar adonant que menys del 5% dels mètodes tenien comentaris que aportessin alguna cosa: la majoria eren parafrasejats del nom del mètode o texts absurds per evitar que es disparessin les alertes de que faltava el comentari.

Al llibre de Clean Code hi ha una anàlisi molt interessant dels comentaris al codi. En Robert C. Martin fa una afirmació categòrica: Els comentaris menteixen. Al més pur estil House.
Els programadors no tenen temps per mantenir els comentaris. Si els comentaris no estan bé el codi pot funcionar igual de bé, i no alertarà el compilador d'aquest fet. I com no pot haver control més enllà de la voluntat, amb el temps els comentaris s'allunyen tant de la intenció original que arriben a ser perjudicials.

L'oncle Bob proposa desenvolupar el codi de manera que sigui molt expressiu. Fer servir noms de mètodes i de variables molt clars, i variables intermitges si s'escau. El codi ha de ser prou clar. Si cal un comentari, mira com pots canviar el codi per que no sigui necessari.

Tots els comentaris són dolents per definició, doncs? No. Segons el llibre Clean Code, quis serien els comentaris acceptables?
De vegades és necessari explicar per què fas servir una estratègia concreta, o per aclarir. Els comentaris de coses per fer (els TODO) també són molt útils. I també són útils els JavaDoc de les API públiques. Però no facis més comentaris dels que puguis mantenir.

Com a comentaris dolents posa un bon grapat d'exemples. Llegint-los te n'adones que de vegades has estat autor d'algun d'aquests: Comentaris redundants, comentaris absurds als getters i setters, comentaris per farcir, el que estàs rumiant (per que no ho tens clar), l'històric dels canvis (ja tens l'eina de control de versions), indicador de final de clau (o el END en altres llenguatges), marcador d'on comencen els mètodes d'un determinat tipus, codi comentat per que no es fa servir, ...

Trobo molt útil, com a reflexió, pensar dues vegades abans de posar un comentari al codi.

Per cert, em van passar un enllaç sobre comentaris divertits al codi. N'hi ha per partir-se.

Sunday, November 14, 2010

Estic llegint: UML para programadores Java

UML para programadores JavaDe Robert C. Martin. 2004. Publicat per . 245 pàgines

Quan vaig veure aquest llibre a la prestatgeria d'una amiga li vaig demanar per llegir-lo. UML i Robert C. Martin em van semblar arguments prou forts com per a dedicar-li el meu temps. Després de la lectura no puc fer una altra cosa que desaconsellar-lo. I per dues raons.

Una traducció horrible

Quan llegeixo un llibre en anglès no entenc el 100% de les paraules. La majoria les agafes pel context i desprès de moltes repeticions acabes buscant-les al diccionari i aprenent alguna cosa nova. A més, els llibres tècnic no acostumen a portar moltes paraules noves. Quan veus algunes traduccions al castellà veus com clarament es justifica l'esforç de llegir en anglès.

En aquest llibre hi ha text, diagrames i codi. De vegades alguns dels elements del codi o dels diagrames els tradueixen i d'altres no. De vegades tradueixen codi que és d'alguna llibreria coneguda. De vegades en la mateixa porció del codi declaren alguna cosa en anglès però la referencien en castellà. Altres vegades et trobes traduccions massa literals. Has de fer contínuament una traducció al anglès del que vas llegint per mirar d'entendre què és el que va voler dir l'escriptor original.

I els traductors, de la ETSI d'informàtica de la Universitat de Valladolid, segur que ho podien fer molt millor. Quan veus el resultat final no pots pensar en una altra cosa que, o no han tingut temps, o no han tingut prou motivació.

Al començament del capítol 5, "Casos de uso", a la pàgina 60, podem trobar un exemple del text difícil de llegir que comentava:
«Los casos de uso son una idea maravillosa que ha sido sobrecomplicada ampliamente. Repetidas veces he visto equipos sitting and spinning en sus intentos por escribir casos de uso. Típicamente ellos thrash en temas de forma más que de fondo (substance).»

Un títol enganyós
Pot ser sóc massa ingenu en pensar que el llibre havia de tractar d'UML només pel títol. De fet el mateix autor (o això he entès a la traducció) es pregunta si val la pena un altre llibre d'UML desprès del meravellós UML Distilled de Martin Fowler (molt recomanable i curtet. No puc dir res de la traducció UML gota a gota). I és que aquest llibre dedica molt poques pàgines a UML.

Realment és un llibre de desenvolupament Java fent servir tecnologies àgils (més proper a l'Extreme Programming). Parla de proves unitàries, Test Driven Development i principis de disseny orientat a objectes. Dedica menys de 60 pàgines a UML i després el va aplicant una mica en els exemples.

Havent llegit d'altres de l'oncle Bob, els exemples d'aquest i la presentació d'UML resulten un complement força interessant. El codi que mostra i la manera com va aplicant les tècniques també val la pena. És una llàstima que la traducció faci que et quedi un regust amarg.

Wednesday, November 10, 2010

Java, orientació a objectes i la llosa del PL/SQL

Al capítol 6 del llibre Clean Code l'autor fa una reflexió sobre la diferència entre pensar en dades i pensar en objectes. Quan penses en dades t'interessa exposar les dades i et dóna el mateix el comportament. Quan penses en objectes, t'interessa exposar el comportament i amagar les dades tot el que puguis. Són oposats.

El Java és un llenguatge que et permet desenvolupar perfectament sense aprofitar de cap manera els beneficis de la orientació a objectes. Pots fer un programa perfectament procedural. De fet, molt del codi que vaig trobant és eminentment procedural. Poc a poc vaig trobant alguna aplicació de patrons, o com a mínim de disseny Orientat a Objectes, però no tant com hauria.

I me n'adono d'un altre perill. Als entorns on la base de dades Oracle és present és molt fàcil que una part del codi s'hagi desenvolupat en PL/SQL. És fàcil que hi hagin triggers i també que es facin servir procediments i funcions. Fins i tot que una part de la lògica d'accés a dades estigui encapsulada en aquest llenguatge.

Ja hem vist que pensar en estructures de dades i pensar en objectes comporten models mentals oposats. I és molt probable que els desenvolupadors que s'encarreguen del PL/SQL siguin els mateixos que s'encarreguen del Java, i quan toquen el Java és molt difícil que deixin la inèrcia de pensar en procedural.

En aquest sentit penso que el PL/SQL és una llosa pel bon desenvolupament Orientat a Objectes. Com a mínim cal tenir en compte aquesta dificultat, i el programador de PL/SQL ha de tenir clar que ha de fer un esforç especial amb la Orientació a Objectes.

Monday, October 25, 2010

Pardal de Java: per a nous processos de selecció

L'altre dia al Zoo vaig veure un candidat perfecte per a desenvolupador Java. Deu ser júnior. I atenció, que em sembla que és espècie protegida!

Pardal de Java

Thursday, October 21, 2010

Proves unitàries amb JUnit 4 i Spring Framework 3

La darrera vegada que havia treballat amb JUnit i Spring les versions que feia servir era JUnit 3 i Spring 1.2, i era la versió 1.4 del Java. Com han canviat les coses!

Amb la introducció de les annotations al Java 5 s'han pogut simplificar molts aspectes de la codificació i s'ha adoptat immediatament a la majoria dels frameworks existents.

Ara, gracies a les annotations, JUnit 4 és molt més senzill. Ara no cal extendre d'una classe, ni que els mètodes de prova tinguin noms determinats. Ara, fer que un mètode sigui processable per JUnit és tan fàcil com afegir-li l'anotació @Test. Quan afegeixes aquesta anotació per primera vegada a un projecte d'Eclipse i li fas un Ctrl+1 (quick fix) et suggereix automàticament "Add JUnit 4 library to the build path". I un cop afegida la llibreria i definit el test ja pots executar com "JUnit Test" (o Alt+Shift+X, T). (Per cert, va gé aprendre els millors shortcuts d'Eclipse).


@Test
public void testFindDrugById() {
Drug drug = drugDAO.findDrugById(80000L);
assertEquals("Drug get is not equal", drug, paracetamol);
}



Recomano llegir la introducció de 60 segons a JUnit 4 i el llibre de receptes de JUnit.

Fer servir Spring amb JUnit era molt farragós, sobretot la part de llegir l'applicationContext.xml i la resta de fitxers de configuració, però a partir de Spring 2.5 és molt fàcil.

Si afegeixes a la classe les anotacions @RunWith(SpringJUnit4ClassRunner.class) i @ContextConfiguration, JUnit anirà a buscar un fitxer de configuració amb el mateix nom de la classe acabat en -context.xml, just en el mateix directori on es troba la classe de test.

Si vols tenir una miqueta més de control dels fitxers de configuració, pots afegir l'anotació indicant-li els fitxers que vols carregar:

@ContextConfiguration(locations = { "classpath:myapp-context.xml", "classpath:myapp-service.xml" })

Un cop tens configurat això pots definir qualsevol atribut amb el mateix nom que el bean del XML i amb l'annotation @Autowired i ja t'ho injecta automàticament. O si vols agafar els beans directament de l'applicationContext pots fer-lo servir també:


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class TestDrugDAO {

@Autowired
private ApplicationContext applicationContext;

@Test
public void beforeEveryTest() {
drugDAO = (DrugDAO) applicationContext.getBean("drugDAO");



Ara resulta molt més fàcil però sempre hi ha bones excuses per no fer proves unitàries, no?

Sunday, October 17, 2010

Estic llegint: Juego de Manos

Juego de ManosDe Jason Lutes. 2005. Publicat per Ediciones La Cúpula. 156 pàgines.

La millor novel·la gràfica que he llegit en molt de temps. I ha resultat una completa sorpresa, per què és la primera obra del mateix autor de Berlín, que ja havia comentat aquí i que no m'havia agradat massa.

Una de les dificultats de Berlín era la quantitat de personatges que tenia i que alguns resultaven difícils de diferenciar, i una altra el rerefons de la història que no m'acabava de seduir.

Juego de Manos no és tan pretensiós sinó que només vol explicar una petita història. Una història d'un prestidigitador fracassat amb uns records que el turmenten. En el seu camí es troba amb uns pocs personatges fascinants.

El dibuix, la composició, la narrativa visual, els personatges, la història, la profunditat, ... M'ha encantat.

Friday, October 15, 2010

Estic llegint: ¡Qué presente impresentable!

¡Qué presente impresentable!De Quino. 2005. Publicat per Lumen. 134 pàgines

Vaig descobrir a Quino i Mafalda gràcies a la meva amiga Mònica fa molts d'anys i, tot i que havia vist algun àlbum posterior de Quino i havia llegit alguna historieta, no havia llegit cap llibre.

Ara que he pogut llegir aquest (gràcies a l'Albert) la sensació és molt trista. M'ha semblat molt negatiu, derrotista, fatalista, ... amargat. Un home mirant-se el melic i lamentant-se. Només veient la part negativa de tot. M'ha fet molta pena, la veritat. He pensat, pobre home!

Aquest àlbum conté una col·lecció d'histories que ocupen una o dues pàgines, moltes amb una sola vinyeta. Algunes d'aquestes histories estan agrupades per temàtiques (més o menys): ecologia, religió, música, política, etc.

Només una historieta m'ha fet somriure. Algunes m'han agradat i m'han semblat brillants, però amb molta tristor.

Aquell enginy i aquella agudesa de Mafalda ha desaparegut completament. Això sí, els dibuixos em semblen genials.

Thursday, October 14, 2010

Estic llegint: Clean Code

Clean CodeDe Robert C. Martin. 2009 Publicat per Prentice Hall. 431 pàgines

D'aquest mateix autor m'havia llegir Agile Software Development: Principles, Patterns, and Practices i m'havia semblat increïble. Per la seva manera d'explicar, pels exemples, per l'enfocament pràctic i per l'inspirador que resulta. Ja només el títol d'aquest llibre em resultava suggerent. I no m'ha defraudat gens ni mica.

D'Uncle Bob (com es coneix l'autor aquest) ja havia escrit abans Artesania del programari i es que li vaig seguint la pista.

Clean Code dóna un seguit de consells per tal de desenvolupar codi net i mantenible, i es centra molt en el TDD (Test Driven Development). Dóna tècniques per com organitzar les funcions, quins noms cal donar a les variables, com estructurar el codi, com formatejar-lo, com fer servir els comentaris i com fer el tractament d'excepcions.

Hauria estat bé que fos un llibre més genèric de codificació, però és de Java. Fins i tot algunes de les tècniques que explica es basen en l'ús d'Enums, que van ser afegits al Java 5. Fa un parell de casos pràctics molt interessants, on segueix les tècniques de refactoring per aplicar els principis que recomana.

De tota manera cal ser una miqueta crític amb el llibre. De vegades es torna una miqueta dogmàtic i n'hi ha algunes coses amb les que simplement no estic d'acord. Però la seva postura ha de ser aquesta. De fet al començament parla de que ell defensa la seva escola de pensament, però que poden haver d'altres i igual de vàlides.

El millor de tot és l'actitud que defensa davant la codificació. Una actitud de responsabilitat. De profesionalitat. Haver de tenir en compte que aquestes línies que estàs codificant ara qui les haurà de mantenir segurament seràs tu mateix. No conformar-se amb veure que funciona, sinó veure que també s'entén.

Clar, tots aquests consells en un món de consultories i out-sourcing (o, fins i tot, off-shoring), queden una miqueta diluïts. En aquests mons no cal pensar en el manteniment sinó en els terminis i el proper projecte. Take the money and run. Els que gestionen proveïdors externs han volgut ignorar aquest fet durant molt de temps, i els que l'han practicat els ha sigut molt còmode. Crec que a la nostra feina li vindria bé una miqueta de professionalitat.

Clean Code és un altre llibre gentilesa d'Omatech.

Wednesday, October 13, 2010

Estic llegint: The League of Extraordinary Gentlemen. Volume II

The League of Extraordinary GentlemenDe Alan Moore i Kevin O'Neill. 2003. Publicat per America's Best Comics. 228 pàgines

La segona part de la Lliga dels Homes Extraordinaris segueix amb els mateixos personatges que va portar el primer volum, personatges de novel·les d'aventures com Allan Quatermain, Jekyll/Hyde o el Capitá Nemo, i segueix tot orbitant al voltant de salvar Anglaterra d'algun enemic.

El dibuix, personalment, no m'entusiasma, però potser era la millor tècnica per representar la història i l'època de la narració.

M'ha semblat molt curiós el format i els extres. Han volgut fer veure que és una revista per adolescents i inclouen anuncis ficticis, un joc de taula impossible de guanyar (en una pàgina desplegable), un submarí de papiroflèxia (impossible de fer també), una pàgina per pintar, a més a més de les portades de l'edició en comic book (els llibrets petits enganxats amb grapa).

De la mateixa manera que va fer amb Watchmen, l'autor afegeix al final de tot un relat molt extens. En aquest cas es tracta d'una suposada descripció de viatges que va fer la protagonista, Miss Wilhelmina Murray, a terres com Shangri-La, les muntanyes de la bogeria (Te-ke-li-li!) o el país a l'altra banda del mirall. Haig de reconèixer que aquest relat ha pogut amb mi i no l'he pogut acabar. Potser el meu anglès no arriba tan lluny.

M'ha agradat, però no m'ha entusiasmat, i m'ha fet gràcia recordar una conversa que vaig tenir amb l'encarregat d'una botiga de còmics a Edinburgh. Jo sostenia que Watchmen m'havia agradat molt, però que V de Vendetta no m'havia agradat gaire. L'home fins i tot es va enfadar. Defenia V de Vendetta com una obra molt millor que Watchmen i deia que La Lliga dels Homes Extraordinaris era millor encara. Crec que la seva visió a l'hora de valorar les obres de Alan Moore té molt en compte quant es centra en el món britànic. V de Vendetta és 100% anglesa i La Lliga és totalment britànica. A ell li sumaven uns factors que per mi no han comptat.

Aquesta és una altra obra de la biblioteca de Javi. Gràcies.

Si teniu intenció de llegir el còmic no seguiu a partir d'aquí, perquè explico el final.
Spoiler. Spoiler. Spoiler.

La història potser està molt millor que la de la primera part. Afegeix més personatges i aconsegueix que passin coses entre ells, però al final m'ha sorprès que no es tractés de res més que d'una relectura de la Guerra dels Mons de H. G. Wells.

Sunday, October 10, 2010

Projecte Web Maven a Eclipse

Maven és una eina interessant per gestionar les dependències d'un projecte Java i per automatitzar algunes tasques del seu seguiment. Amb les darreres versions recomanen seguir el paradigma de Convenció millor que Configuració (traducció lliure de Convention over Configuration). Permet que adaptis els teus projectes com tu vulguis quan a directoris i demés, però et recomanen una manera de fer-ho. Si segueixes les convencions, els teus fitxers de configuració queden mínims.

La integració de Maven amb Eclipse ha estat sempre un tema delicat, però cada cop està millor el tema. El que no aconseguia mai era fer que un projecte web fet amb Maven funcionés amb el WTP (Web Tools Platform), el mecanisme estàndard d'executar projectes Web dintre d'Eclipse. Sempre havia de construir el War i desplegar-lo al contenidor de torn (JBoss o Tomcat) fora de l'Eclipse.

Per fi he trobat unes indicacions de com fer servir Eclipse WTP amb Maven.

Tuesday, October 5, 2010

Estic llegint: Silver Surfer - Parábola

Silver SurferDe Stan Lee i Moebius. 1988. Publicat per Forum (Planeta-DeAgostini). 64 pàgines.

Feia molt de temps que volia llegir aquest clàssic del còmic de super-herois, on es donen la mà el més afamat guionista americà amb tot un símbol del còmic europeu.
Stan Lee és el creador (o co-creador) de personatges com Hulk, Iron Man, Daredevil els X-Men o Spiderman. Darrerament fa un cameo a totes les pelis Marvel de super-herois.
Moebius és l'altre nom de Jean Giraud, conegut per obres com Blueberry o el Incal, i per dissenys de producció de pel·lícules com Tron, Abyss, Alien o El quinto elemento.

Llegir el guió de Stan Lee, amb frases grandiloqüents fent-ho tot terriblement transcendental, em resulta molt divertit. Els dibuixos de Moebius m'han agradat molt, però la temàtica no és d'allò que més m'agrada.

Potser el més interessant són els comentaris que el propi dibuixant fa al final de la obra, on explica tot el procés creatiu i com es va haver d'adaptar a la manera de treballar americana. O com valora Moebius el fet que el dibuixant sigui el propi rotulista de les seves obres.

M'ha resultat curiós veure com ha evolucionat la tecnologia de producció del còmic. Veus els colors que s'aconseguien abans i els d'ara, i s'agraeixen els canvis. També m'ha fet gràcia veure un text amb un tros de typpex.

Tenint en compte que el còmic de super-herois no m'agrada i que el personatge de Galactus el trobo horrible, no l'he trobat una "obra magnífica", però està força bé. S'ha de llegir.
Per cert, aquesta vegada he comptat amb la biblioteca del Javi. Gràcies.

Friday, October 1, 2010

Estic llegint: NYX. El regulador (1. Ambrosía)

NYX. El reguladorDe Corbeyran i Marc Moreno. 2002. Publicat per Rossell. 48 pàgines.

En un món post-apocalíptic en el que la corrupció política ja no és tolerable, s'ha creat un cos oficial per assassinar als polítics conflictius: els reguladors.
Amb aquest argument... que vols que et digui.

Cal reconèixer que el dibuix és molt interessant: les perspectives, els edificis, totes les arquitectures... I la figura humana super allargada em recorda, no sé per què, al dibuix d'Alfonso Azpiri.

El que m'ha resultat molt interessant descobrir una editorial nova, Rossell. Caldrà fer-li un seguiment, per què cal reconèixer que la edició és molt bona. Un altre àlbum de la biblioteca de l'Albert.

Wednesday, September 29, 2010

Estic llegint: Berlín, ciudad de piedras (libro uno)

Berlín, ciudad de piedras (libro uno)
De Jason Lutes. 2003. Publicat per Astiberri. 216 pàgines.

Aquesta obra ens mostra, d'una forma molt documentada, el Berlin de 1929, fent servir una historia d'amor com a principal fil argumental. És el primer volum d'una trilogia en la van apareixent diferents personatges que es van afegint a la història del periodista i l'estudiant.

M'ha resultat curiós el fet de que no es mostren creus gamades però sí banderes amb la falç i el martell. Visualment m'ha sobtat.

He tingut una dificultat inesperada en la lectura, que no és la primera vegada que em passa en un còmic. Alguns personatges els confonc. Els seus trets físics i els seus contexts són tan similars que no sé quan es tracta d'un o de l'altre. Em va passar per primera vegada amb "El triángulo secreto" de Didier Convard i altres. Quan hi ha tants personatges imagino que és molt complicat dotar-los de trets singulars.

Una altra obra de la biblioteca de l'Albert. Tot i que m'ha agradat, no crec que li demani la segona part.

Monday, September 27, 2010

Estic llegint: Yago

Yago
De Ralf König. 1998. Publicat per Víbora Comix i Ediciones La Cúpula. 200 pàgines.

Partint de la base històrica de que en temps de William Shakespeare a les representacions teatrals el papers de dona els representaven homes, l'autor ens presenta una troupe teatral de "locas", on fins i tot el propi Bill apunta maneres. L'autor va fent servir moltes referències a l'obra de l'escriptor anglès i crea una obra entretinguda, ben lligada i molt, molt divertida.

Aquest és una còmic de capçalera pels lectors gays, i des d'una lectura hetero haig de dir que m'ha agradat molt, encara que en algunes ocasions massa explícit. Tot i així, molt recomanable.

M'han encantat els nassots que pinta el Ralf. Moltes gràcies, Albert.

Sunday, September 26, 2010

Sobrecarregat

Amb una arrencada com Déu mana, uns encàrrecs pendents de la UOC i el començament de les classes, he tingut temps de respirar i poc més. Bé, respirar i llegir.
Tinc entrades pendents a l'Estic llegint: Yago, Berlín, ciudad de piedras, Silver Surfer, Clean Code i alguna més. Espero que en una setmana hagi actualitzat l'inventari de lectures i pugui fer alguna altra aportació friky.
Encara som per aquí.

Tuesday, September 14, 2010

Tunel SSH fent servir PuTTY

De vegades necessites accedir a un port en una màquina de la qual només t'han donat accés SSH. No hi ha problema: pots fer servir un túnel (també anomenat port fowarding, tunneling o tunnel).

Has de fer que tot el trànsit cap a un port d'una altra màquina passi encriptat per la connexió SSH. Tu operes sobre un port de la teva pròpia màquina i totes les peticions són transmeses per SSH fins al port de la màquina sobre la que has fet SSH.

Posem pel cas que al servidor servidorsegur només té obert el port 22 de SSH amb l'usuari username, però que necessitem connectar-nos a la seva base de dades Oracle que està al port 1521. Suposem que a la nostra màquina tenim el port 1521 lliure.

Per línia de comandes Linux podríem fer el següent:
ssh -L 1521:localhost:1521 username@servidorsegur -N

El paràmetre -N li diu a ssh que no volem executar comandes per ssh, només fer el túnel (si és que no necessitem executar cap comanda a la shell).
Un cop feta aquesta connexió ja podem connectar-nos a la base de dades com si fos una base de dades local al port 1521. Actualitzaríem el nostre tnsnames.ora per tenir localhost:1521.

Si el port 1521 local el tinguéssim ocupat podem fer servir un altre local, per exemple el 3000. Faríem:
ssh -L 3000:localhost:1521 username@servidorsegur -N

I a la base de dades ens connectaríem per localhost:3000.

Amb Windows podem aconseguir el mateix amb PuTTY. Només cal configurar Connection->SSH->Tunnels i afegir el port de la màquina remota (source port) i el destí (localhost:Número de port).

SSH Tunnel with PuTTY

Monday, September 6, 2010

Java i HTTPS

Cada vegada que haig d'accedir a una URL per HTTPS des de Java tinc els mateixos maldecaps. I per connectar-me a HTTPS vull dir una cosa tan senzilla com fer:
URL url = new URL("https://servidor.com/");

Si la URL a la que vols accedir és d'un servidor ben conegut, segur que els seus certificats han estat emesos per una Autoritat Certificadora coneguda per Sun (ara Oracle) i tot anirà a la primera. Si no és el cas i es tracta d'un certificat emès per una entitat relativament petita, o fins i tot un certificat autosignat, comencen els problemes.

Cal saber que els certificats arrel que manega la màquina virtual java (si no s'especifica el contrari amb -Djavax.net.ssl.trustStore), es troben a un fitxer anomenat cacerts que es troba a java.home/lib/security. Si tens més d'un Java instal·lat el primer que has de saber és quin estàs fent servir. I que el PATH i el JAVA_HOME siguin correctes.

L'eina per explorar i modificar aquest repositori de claus és el keytool que ve amb el Java. Per llistar els valors de cacaerts, per exemple, cal llençar la següent comanda des del directori correcte (noteu que el password per defecte és changeit):
keytool -list -v -keystore cacerts -storepass changeit -storetype jks

Si l'emisor dels certificats no és dels "coneguts", no hi serà al cacerts. Així que si és alguna cosa com la Fábrica Nacional de Moneda y Timbre o l'Agència Catalana de Certificació et toca obtenir els certificats i instal·lar-los amb el keytool. Hi ha molts tutorials de com obtenir i instal·lar certificats.

Si el que tens és un certificat autosignat, el que necessites és que Java no el validi. No és molt segur, però de vegades no tens més remei. Aquesta pàgina d'exemple mostra com desactivar la validació de certificats en Java.

Finalment anoto uns enllaços que he trobat interessants:

Thursday, September 2, 2010

Estic llegint: Quotidianía delirante

Quotidiania delirante
De Miguelanxo Prado. 2003. Publicat per Norma editorial. 186 pàgines.

Havia llegit algunes de les històries d'aquest àlbum a la revista El Jueves, però em feia mandra comprar un àlbum recopilatori (i gens econòmic). Per fi una ànima caritativa me l'ha deixat i l'he pogut gaudir.

Són històries curtes, d'unes quatre pàgines, on l'autor de A Coruña es riu de tot el que pot: professors, religió, hisenda, ecologistes, funcionaris, masclistes, yankis, taxistes, ...

En general totes les històries m'han agradat, algunes molt. El que passa és que llegir un recopilatori d'històries curtes a mi se'm fa pesat. El millor, m'imagino, seria anar-lo combinant amb altres lectures i ho vas llegint més espaiat. Prenc nota pel proper recopilatori.

Sembla que hi ha una aplicació per iPhone al AppStore per veure algunes històries d'aquest àlbum amb una miqueta d'animació (un format que han batejat com iMotion Comic). Al mateix enllaç podeu veure un vdeo de demostració. Jo no li veig la gràcia.

Tuesday, August 31, 2010

Massa literal

A un hotel d'El Perelló, Tarragona, de presència massiva de l'idioma francès, a moltes portes podies trobar un cartell amb el text en anglès "prohibited the step".
From lost to the river.
Prohibited the step

Friday, August 27, 2010

Oracle UTL_HTTP i ACL a la 11g

Tenia un bug molt xungo a l'Oracle en el que obtenia el següent missatge d'error:

ORA-24247: network access denied by access control list (ACL)


Després d'investigar una miqueta veia que es produïa en obrir una connexió HTTP fent servir el package UTL_HTTP. I això funcionava perfectament a la 10g. El més fort és que fent servir un procediment anònim funcionava i amb un procedure no.

Això funciona:
declare
l_http_req utl_http.req;
begin
l_http_req := utl_http.begin_request ('http://alapamui.blogspot.com/', 'POST');
utl_http.end_request(l_http_req);
end;
/

Això no funciona:
create or replace procedure test_http is
l_http_req utl_http.req;
begin
l_http_req := utl_http.begin_request ('http://alapamui.blogspot.com/', 'POST');
utl_http.end_request(l_http_req);
end;
/

begin
test_http;
end;
/

Investigant una miqueta més, resulta que a la 10g un usuari amb permisos per executar UTL_HTTP podia accedir a qualsevol URL, però a la 11g han incorporat un mecanisme més fi basat en ACL (Access Control Lists).

A la web de ORACLE-BASE hi ha una explicació de com funcionen els accessos a xarxa a la 11g. En el meu cas he tingut prou amb el següent:

BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => 'alapamui.xml',
description => 'Alapamui ACL',
principal => 'ALAPAMUI',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);

COMMIT;
END;
/

BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => 'alapamui.xml',
host => 'alapamui.blogspot.com',
lower_port => NULL,
upper_port => NULL);

COMMIT;
END;
/
Si el que cal és accedir a una pàgina per HTTPS, cal configurar també els certificats a l'Oracle o obtindreu un error com el següent:

ORA-29024: Certificate validation failure


Els certificats a l'Oracle s'enregistren en una cosa que li diuen Wallet. Si no disposeu de l'Oracle Wallet Manager podeu enregistrar els certificats fent servir la comanda orapki.

Tuesday, August 24, 2010

Estic llegint: Anatema

Anatema
De Neal Stephenson. 2009. Publicat per Ediciones B. 720 pàgines.

Es tracta d'una novel·la de ciència ficció, pel mateix autor de Snow Crash i de Criptonomicón. Ambientada en un altre planeta, Arbre, on després de milers anys d'història la societat està dividida entre uns monjos que viuen tancats en els seus concentos (com monestirs) i els que viuen extramurs. Aquests monjos, que els hi diuen avotos, no tenen res a veure amb la religió i el seu accés a la tecnologia és molt limitat. Mentrestant, fora, tenen els seus cismex, transbors i fins i tot, el Retículum.

Neal Stephenson planteja tot un món nou, molt semblant a la Terra, i en aquest escenari planteja l'aparició d'una nau espacial alienígena.

Pel camí fa un grapat de reflexions sobre filosofia, religió, matemàtiques, tecnologia, botànica, química, música i, fins i tot, enologia (de vins).

M'ha encantat el concepte dels loritas, els seguidors de Sante Loras. Consideren que a partir de determinada data ja s'han formulat tots els teoremes i que cada cosa nova que apareix ja l'havia dit algú altre abans. Acumulen tot el coneixement i cada vegada que surt una nova idea s'encarreguen d'identificar quin antic pensador ja havia formulat el mateix. Molt bo.

Amb tanta terminologia inventada i tant de joc amb el grec i el llatí, segur que la traducció no ha estat gens fàcil. I s'ha de dir que el resultat és excepcional, a càrrec de Pedro Jorge Romero (que té el seu blog).

Les 300 primeres pàgines m'han semblat absolutament genials. És on presenta tot el món i els personatges. D'entrada costa una miqueta entrar, però et vas acostumant als termes i ja resulta fàcil desxifrar les frases. Anar descobrint els noms que li han anat donant a Arbre a coses com el teorema de Pitàgores, el món de les idees de Plató o la Navalla d'Occam, resulta també força estimulant.

Després d'aquestes 300 pàgines es va transformant en space opera i té alguns moment que es fa pesat (ja li passa al Neal Stephenson).

Per cert, em va fer gràcia trobar-me un pròleg del Miquel Barceló (un antic profe meu), ja que és el responsable d'aquesta col·lecció. (He trobat una antiga entrevista al Miquel que val la pena mirar).

Aquest llibre té una pàgina web amb continguts molt interessants:
  • Podeu llegir en anglès algunes pàgines del llibre
  • Hi ha vídeos amb entrevistes a l'autor
  • Hi ha un trailer del llibre (no havia vist mai res semblant). Per cert, no recomano veure el trailer abans de llegir la novel·la, per què li posaràs cares als personatges i crec que és més divertit deixar jugar la teva imaginació.
  • Hi ha una secció de música espectacular. A la novel·la es parla que es poden fer demostracions matemàtiques amb música, jugant amb els harmònics. Doncs a la web del llibre podeu trobar experiments musicals (cantats) on justament fan això. Impressionant.

En castellà podeu trobar una altra ressenya d'Anatema amb la que coincideixo totalment.

No és una lectura fàcil, però sí que és molt recomanable. Conec moltes persones que han hagut de deixar a mitges Criptonomicón (més de les que em pensava). La meva experiència és que la lectura de Neal Stephenson de vegades cansa, però la recompensa final paga la pena.

Per cert. A la majoria de les ressenyes descriuen la Anatema com "una novel·la de ciència ficció especulativa". Jo no havia sentit aquest terme abans. De fet, la primera vegada que l'he sentit ha estat dins del llibre, quan els protagonistes comentes les pel·licules (que li diuen motus) que veuen extramurs. Cada dia s'aprenen coses noves.

Tuesday, August 17, 2010

Manning i Lucene

Al meu primer projecte informàtic vaig fer servir un motor de recerca textual i des d'aleshores és un tema que m'ha atret molt. Fa més de quatre anys vaig descobrir una llibreria Java de codi obert per fer cerques sobre documents, Lucene, i em va fascinar. Fins i tot vaig implementar en Java un petit cercador/indexador sobre els meus documents, que fins i tot extreia les descripcions de les imatges, les etiquetes dels mp3 i el text dels pdf.

Vaig llegir-me un llibre, Lucene in Action, de l'editorial Manning i em va ajudar molt. L'any passat vaig veure que els mateixos autors anaven a treure la segona edició, i confiava poder fer servir Lucene de forma professional, així que vaig decidir comprar-lo. Però encara no l'havien escrit!

Els de Manning tenen un programa molt interessant anomenat MEAP (Manning Early Adopter Program). Pots comprar llibres a un preu molt més reduït, amb la possibilitat de comprar-los en format paper o electrònic, i vas rebent les diferents edicions prèvies que fan els autors. També tens uns fòrums on pots opinar i conversar directament amb els autors mentre encara estan fent l'obra.

Ja sabem que, al sector de la informàtica, el llibres tècnics són obsolets quan arriben als prestatges de les llibreries. Disposar d'aquesta agilitat m'ha semblat una idea estupenda (que segur que la tenen moltes altres editorials, però que jo no coneixia).

Quan em vaig subscriure al programa per Lucene in Action el març de 2009 vaig rebre un esborrany d'alguns capítols en format PDF. Vaig rebre altres actualitzacions i ha estat una llàstima no poder-me ficar més a fons al fòrum.

Ahir vaig rebre la meva còpia en paper i no sabeu la il·lusió que m'ha fet.

Friday, August 13, 2010

Sherlock Holmes, la pelicula. Pffff

Vam veure la pelicula Sherlock Holmes protagonitzada per Robert Downey Jr. i Jude Law i la sensació es estranya.

Per una banda és una pel·lícula força entretinguda, amb ritme i plena d'acció. Molt ben feta.

Per altra banda no te res a veure amb el personatge que va crear Arthur Conan Doyle i te força incongruències.

No és que jo sigui molt fan del personatge de Sherlock Holmes, però sí que m'ha interessat el personatge. De fet, les meves pel·lícules preferides de Holmes no són les més ortodoxes (El jove Sherlock Holmes i La vida privada de Sherlock Holmes, del genial Billy Wilder).

Actualment la millor recreació que trobo és la de la sèrie House. Un metge hàbil en la seva feina, però un misantrop, jonki, misogin, que viu al 221B i que té un amic al que no respecta que es diu W...ilson. Fins i tot la productora va fitxar pel personatge a un actor britànic, en Hugh Laurie, que dóna pel físic del detectiu victorià. I només s'inspiren en el personatge...

A la pel·licula ni s'han aproximat. La productora (o qui hagi estat) ha volgut "americanitzar-ho" tot al màxim, com es va fer en el seu dia amb La lliga dels homes extraordinaris (que pintava Tom Sawyer?). Fins i tot a la trama de Sherlock Holmes surt un ambaixador nordamericà i parlen de dominar els Estats Units, "que havien estat una colònia britànica".

Trobem un Sherlock atleta, expressiu, atret per una dona, sense cap referència a cap addicció, i ens presenten un argument purament d'acció, mes propi del 007 que d'una altra cosa.

Em vaig sentir com quan un amic trekkie em comentava la darrera pel·licula de Star Trek. Tot i que els guionistes han tractat, deliberadament, de trencar completament amb la trama original, n'hi ha coses que als trekkies els fa mal: els salts a velocitat warp o la relació sentimental de Sr. Spock.

Jo també vaig sentir traït el personatge de Sherlock Holmes, per molt que la pel·licula fos entretinguda. Altres patinades al guió com les referències a explosius activats per ones de ràdio em van ajudar fer-me una opinió: la pel·licula de Sherlock Holmes et pot agradar... si no et fa mal.

Ara veig que hi ha una nova sèrie de televisió que es diu Sherlock. Com que és de la BBC crec que tindrem més sort. Ja veurem.

Monday, August 9, 2010

Eines: Spotify

SpotifySpotify és un programa per escoltar música en streaming (no cal que tinguis descarregat res), i és legal!. Hi ha una modalitat de pagament i una altra d'ús gratuït, i em sembla que ara també hi ha una modalitat que et deixa escoltar músic un número determinat d'hores al dia.

La modalitat gratuïta funciona com la ràdio: de tant en tant et van ficant publicitat. És com si estiguessis escoltant música del teu MP3, triant el que tu vulguis, i de tant en tant et surt un anunci. Si et molesten els anuncis, sempre pots accedir a la modalitat de pagament.

Fins fa poc, per poder-ho fer servir havies de tenir una invitació d'algú que ja fos usuari, però crec que ara ja no cal.

És ideal per compartir música amb els companys, o per crear llistes de cançons entre els amics, i compartir-les. També resulta molt fàcil posar un enllaç a alguna cançó sense haver d'enviar res (ni haver de buscar el vídeo de YouTube corresponent).

Hi ha moltíssima música, des de Xesco Boix fins a Radiohead, tot i que no és tot. Dels coneguts, per exemple, no he trobat The Beatles ni Garth Brooks.

És interessant la modalitat Ràdio, que tries estils de música i èpoques i et va posant música.

Funciona amb Linux perfectament, tot i que s'ha d'instal·lar amb Wine. Vaig tenir un petit problema amb els links des de Firefox, però el vaig resoldre molt ràpid.

Per a mi ara és una eina de treball imprescindible.

Wednesday, August 4, 2010

Seqüències d'Oracle (2 de 2)

Ja vam comentar què eren les seqüències d'Oracle i els problemes que podien donar, així que avui mirarem de veure què podem fer per sobreviure-hi.

Els principals problemes de les SEQUENCES són que no estan directament associades a una taula i que pot ser que generin números que ja existeixen i donaran errors de clau duplicada.

Com a tot, el millor és adquirir bones costums, que això evita molts mal de caps.

El millor, en la meva opinió, és tenir una seqüència diferent per cada taula que necessiti, i que siguin fàcilment identificables. A mi em resulta molt útil associar a cada taula un nom curt entre 2 i 4 lletres, i anotar aquestes associacions a alguna banda. Després els índexs, les restriccions, les claus i tot el que tingui a veure amb la taula, tindrà aquest nom curt com a part del nom. Així tot és fàcilment identificable.

Per exemple, si tenim les taules EMPLEATS i DEPARTAMENTS, els hi donarem els noms curts EMP i DEP, i les seves seqüències associades seran SEQ_EMP i SEQ_DEP.

Aquesta associació la podem mantenir a una taula de metadades MET_TABLES(table_name, short_name), per exemple. Així fem nosaltres la feina que no ens fa l'Oracle automàticament.

A una anterior empresa vaig muntar un script (despendoleitor.sql, li dèiem) que omplia aquesta taula de metadades amb dos columnes més: max_value i current_seq. La primera columna l'omplia amb el SELECT MAX(*) per cada taula i la segona amb el valor que retornaria un NEXTVAL de la seqüència associada (obtingut directament des de USER_SEQUENCES).

Amb aquestes dades farcides el que fèiem era detectar si havia seqüències amb valors per sota del màxim i, en aquests casos, fèiem un DROP i un CREATE de la SEQUENCE amb un valor per sobre del màxim.

Tot això està molt bé però esborrar i recrear les seqüències fa que quedin invàlids tots els PL/SQL que les fan servir, i recompilar-los pot suposar una estoneta.

La manera d'evitar-ho consisteix en fer un ALTER de la seqüència per modificar l'INCREMENT BY, fer-li un NEXTVAL, i restaurar-li l'INCREMENT BY que tenia. També desactivem el CACHE abans de fer el NEXTVAL i desprès el restaurem, però això no seria tan important.

Per tal d'aconseguir-ho hem fet un petit procediment PL/SQL i aquí el teniu:
CREATE OR REPLACE PROCEDURE sequence_updater(
p_owner IN VARCHAR2
,p_sequence_name IN VARCHAR2
,p_last_number IN NUMBER
)
IS
v_last_number NUMBER;
v_increment_by NUMBER;
v_cache_size NUMBER;
v_new_increment NUMBER;
v_last_value NUMBER;
v_aux NUMBER;
BEGIN
SELECT last_number, increment_by, cache_size
INTO v_last_number, v_increment_by, v_cache_size
FROM all_sequences
WHERE sequence_owner = p_owner
AND sequence_name = p_sequence_name;

v_new_increment := p_last_number - v_last_number;

IF v_new_increment != 0 THEN
EXECUTE IMMEDIATE 'ALTER SEQUENCE '|| p_owner ||'.'||p_sequence_name
|| ' INCREMENT BY '|| v_new_increment ||' NOCACHE';
EXECUTE IMMEDIATE 'SELECT '|| p_owner ||'.'
|| p_sequence_name ||'.nextval FROM DUAL' INTO v_aux;
EXECUTE IMMEDIATE 'ALTER SEQUENCE '|| p_owner ||'.'||p_sequence_name
|| ' INCREMENT BY '||v_increment_by ||' NOCACHE';

LOOP
EXECUTE IMMEDIATE 'SELECT '|| p_owner ||'.'
|| p_sequence_name ||'.currval FROM DUAL' INTO v_last_value;
EXIT WHEN v_last_value >= (p_last_number - 1);
EXECUTE IMMEDIATE 'SELECT '|| p_owner ||'.'
|| p_sequence_name ||'.nextval FROM DUAL' INTO v_last_value;
END LOOP;

IF v_cache_size != 0 THEN
EXECUTE IMMEDIATE 'ALTER SEQUENCE '|| p_owner ||'.'
||p_sequence_name || ' CACHE '|| v_cache_size;
ELSE
EXECUTE IMMEDIATE 'ALTER SEQUENCE '|| p_owner ||'.'
||p_sequence_name || ' NOCACHE';
END IF;
END IF;

END sequence_updater;
/

Vam intentar posar aquest codi en un esquema que fos DBA i actualitzar totes les seqüències de tots els esquemes, però no ens funcionava i no sabem per què. Només ens ha funcionat si cada esquema té el procediment. Crec recordar que al PL/SQL existeix la manera de crear procediments que s'executin amb els drets del propietari o amb els drets del que l'executa. Potser podríem investigar per aquí. De moment sí que funciona si el crida el propietari.

La crida és una cosa tan senzilla com:
EXEC SEQUENCE_UPDATER('NOM_DE_TAULA', 'TAB_SEQ', 3824);

Després d'una exportació d'una base de dades en execució es pot obtenir el valor de totes les seqüències i preparar un script que cridi al SEQUENCE_UPDATER. Imagino que amb el data pump també es pot fer una exportació de només les seqüències, però crec que serà més ràpid l'execució del script.

Després de muntar el nostre script vam trobar un altre script que feia el mateix a la web de PSOUG. En aquest cas li diuen reset_sequence (està cap al final de la pàgina).

Amb aquest nou procediment i aquestes bones pràctiques s'hauran acabat molts mal de caps amb les seqüències de l'Oracle.

Primera part: Seqüències d'Oracle (1 de 2)

Sunday, August 1, 2010

Seqüències d'Oracle (1 de 2)

Al mon de les bases de dades és habitual necessitar la generació automàtica claus: algun mecanisme que generi números diferents per identificar cada registre. Els coneixedors d'Access poden associar aquest concepte amb els autonumèrics. (què faig jo parlant d'Access i bases de dades en un mateix paràgraf?).

Al mon de la teoria de Base de Dades a aquestes claus no semàntiques es coneixen com a surrogate keys i, tot i que tenen detractors, es fan servir a tot arreu.

Cada fabricant de base de dades ha implementat aquesta funcionalitat de forma diferent. Informix té els SERIAL, Microsoft SQL Server els IDENTITY i MySQL té l'atribut AUTO_INCREMENT. Hi ha una comparació de mecanismes de generació de claus força interessant, que també explica cóm proposa l'estàndard que s'hauria d'implementar (que les anomena IDENTITY).

El que més s'allunya de l'estàndard és Oracle. Té un element extern a la taula que genera els números, la SEQUENCE, que s'ha de fer servir per obtenir els valors abans de fer un INSERT amb l'operador NEXTVAL.

Res obliga a fer servir una SEQUENCE determinada amb una taula, o no fer servir cap. Per aquesta raó és fàcil que es donin casos anòmals. Pot succeir que la taula T(id, camp) contingui registres amb els valors per id 1, 12, 23 i 53, i que la seqüència que s'acostuma a fer servir per les seves insercions tingui el valor 24 per què, per exemple, algú ha inserit el valor 53 sense fer servir la seqüència. Podrem fer insercions fent servir la seqüència fins que s'arribi al valor 53, que ens donarà un error al trobar un valor duplicat.

Aquesta descorrelació entre SEQUENCES i valors a les taules és més freqüent del que sembla, i no té una solució general. De fet, aquest problema es pot produir si has fet una exportació d'una base de dades mentre estava en activitat, ja que primer exporta les metadades (i les seqüències ho són) i després les dades i fa les dues operacions amb bloquejos diferents.

A més a més Oracle no permet fer un modificació directa del valor que vols que retorni la seqüència, la qual cosa ho complica tot encara més, ja que hauràs d'esborrar la seqüència i tornar-la a crear i pot ser que descompilis procediments, paquets i disparadors.

A la segona part veurem tècniques per sobreviure a aquests problemes amb les SEQUENCES.

Segona part: Seqüències d'Oracle (2 de 2)

Thursday, July 29, 2010

Estic llegint: La dictadura de la incompetència

La dictadura de la incompetència
De Xavier Roig. 2008 (5a edició gener 2009). Publicat per La Campana. 193 pàgines.

Em van deixar aquest llibre dient-me que resultava molt revelador. Que explicava moltes coses de economia i de política de Catalunya força interessants.

M'ha resultat fàcil de llegir i molt interessant. Tot el contingut és (malauradament) força vigent, donat la data en la que va ser escrit, excepte quan parla amb detall de la crisi econòmica.

L'autor és del sector de les tecnologies i escriu (o escrivia) al diari Avui, i la seva prosa és molt assequible, esquitxada d'acudits per facilitar l'entrada d'algunes realitats.

Analitza l'educació, el funcionariat i els polítics. Explica que la majoria dels polítics que configuren els parlaments espanyol i català eren funcionaris abans de dedicar-se a la política, a diferència d'altres parlaments més equilibrats. Defensa el capitalisme democràtic basat en la competència, i ho fa d'una forma molt didàctica. Critica el sistema electoral de les llistes tancades, que només beneficia als partits polítics. Tot plegat fa una bona repassada a la manera de fer dels catalans en matèria de política i economia. I de vegades produeix esgarrifances.

Molt recomanable.

Monday, July 26, 2010

Bobby McFerrin a TV3

Diumenge, per casualitat, vam veure un tros del concert que va fer Bobby McFerrin amb l'Orfeó Català al Palau de la Música Catalana (i que també està editat en CD). No havia vist un directe seu des del Circlesongs i em vaig quedar bocabadat. El que més em va agradar és que el meu fill també es va quedar hipnotitzat, totalment captivat per la música i el joc que feia el cantant amb el públic.

Veig, a la web de música clàssica de TV3, que repeteixen el concert la matinada del dissabte 1 d'agost. A veure si li puc gravar.

Bobby McFerrin és molt més que el Don't Worry Be Happy. Al YouTube pots trobar moltíssimes genialitats. Aquí hi ha un vídeo en el que fa una demostració de l'escala pentatònica (una escala musical de cinc notes en comptes de set) i com la coneixem tots de forma inconscient.

Syntax Highlighting del codi font al blogger

Al post anterior volia posar el codi font amb colorets, amb ressaltat de sintaxi, de la mateixa manera que es pot veure en qualsevol editor modern. Amb el tallar-i-enganxar de l'Eclipse pots portar-te el resaltat a un editor de texts (Word o OpenOffice.org Writer) per què per dintre exporta RTF, però després això no funciona bé en un pàgina Web.

Vaig buscar força i veig que hi ha tres tipus de solucions (potser hi ha més):
  1. A partir del codi font generar un codi HTML autònom que puguis posar a la teva pàgina Web.
  2. Generar un codi HTML juntament amb un CSS. Això pot ser problemàtic en un Blog si no vols tocar la plantilla.
  3. Fer servir un JavaScript que faci el highlight en temps d'execució.
Hi ha moltes solucions interessants de cadascuna de les tres opcions. Finalment, gràcies al David, he trobat una pàgina que conté un llistat dels millors ressaltadors de sintaxi per a la web. N'hi ha de molt potents i per tots els llenguatges.

La solució que he triat és de les primeres, un codi HTML autònom que es diu Highlight (l'onzè de la llista) i que té versió on-line i també es pot instal·lar. Jo he fet servir la versió online i funciona molt bé també per trossos de codi. De Color Theme he triat Typical i ha quedat força bé.

Pel format del blog he hagut d'editar el codi generat per reduir la mida de la font (a 8pt) i per afegir a l'estil de l'etiqueta <pre> l'opció per què pugui fer scroll horitzontal si no hi cap en una línia: overflow: scroll;.

Opino que ha quedat força bé però en un altre moment provaré alguna solució de les del JavaScript, que hi ha una de Google i un parell basades amb jQuery.

Wednesday, July 21, 2010

Xifrat i desxifrat entre Java i PHP

Se'ns va presentar la necessitat d'implementar un xifrat (encriptació no figura al diccionari) de dades des d'una aplicació Java que després s'havia de desxifrar des d'un PHP.

En teoria els algorismes de xifrat són genèrics i independents del llenguatge de programació. En la realitat sempre hi ha sorpreses. Ja vaig haver de patir per una altra interoperabilitat similar entre PL/SQL i Java, així que anava avisat.

Per xifrar i desxifrar des de Java es fa amb la Java Cryptography Architecture (JCA). Cal indicar l'algorisme i el tipus de padding, i sel·leccionar i una clau i un vector d'inicialització.

Per fer-ho des de PHP cal fer servir el mòdul mcrypt. En funció del sistema operatiu cal revisar que estigui instal·lat el mòdul (revisant el phpinfo) i mirar quins ciphers i modes són actius.

Caldrà triar un algorisme de xifrat que sigui vàlid als dos entorns i nosaltres vam triar compartir el resultat en format hexadecimal. També és important triar la mida de la clau i del vector d'incialització. Per encriptació de 128-bits la clau ha de ser de 16 bytes i per 256-bits de 32 bytes.

El problema entre els dos llenguatges és com tracten el padding, el farcit de caràcters fins arribar a la mida de cadena correcta. Mcrypt sempre farceix amb \0 (null) i no pas amb espais.

Jugant amb trims i NoPaddings de Java s'aconsegueix la màgia. Nosaltres vam triar encriptació amb AES de 128 bits.

El xifrat a Java es fa així:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
...
private String padString(String source) {
char paddingChar = ' ';
int size = 16;
int padLength = size - source.length() % size;

for (int i = 0; i < padLength; i++) {
source += paddingChar;
}

return source;
}

public String encrypt(String text) {
String encrypted = null;
try {
cipher = Cipher.getInstance("AES/CBC/NoPadding");
} catch (Exception e) {
logger.error("Error creating cipher instance", e);
}

try {
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
if (cipher != null) {
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] res = cipher.doFinal(padString(text).getBytes());
encrypted = asHex(res);
}
} catch (Exception e) {
logger.error("Error ciphering", e);
}

return encrypted;
}


El desxifrat a PHP el fem així:
function decrypt($param) {
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$key128 = '0123456789ABCDEF';
$iv = 'FEDCBA9876543210';
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key128, hex2bin($param), MCRYPT_MODE_CBC, $iv);
$decrypted = trim($decrypted);
return $decrypted;
}