Sunday, May 8, 2011

Estic llegint: JUnit in Action

JUnit in ActionDe Vicent Massol amb Ted Husted, 2003. Publicat per Manning. 384 pàgines

He tingut l'oportunitat de llegir aquest llibre pràctic sobre JUnit i, com li passa a la majoria de llibres molt tècnics, se li nota massa el pas dels anys.

JUnit ha canviat moltíssim a la versió 4, i també ho ha fet Java a partir de la versió 5, així que moltes de les coses explicades ja no tenen sentit. És difícil anar passant les pàgines del llibre destriant allò que realment és interessant i no està obsolet. Sí que pots aprendre coses amb el llibre, però es fa difícil de llegir.

Està bé veure:
  • Com funciona internament JUnit
  • En quin directori cal posar els tests
  • Els diferents tipus de test
  • La diferència entre proves unitàries i proves d'integració
  • Una revisió del procés de desenvolupament
  • La diferència entre mocks y stubs
  • Eines per construir mock objects (encara que una mica obsoletes)
  • Ús de Jetty per fer proves de servidor
  • Proves amb Base de Dades (encara que coneixent les eines que dóna Spring Framework, el capítol era poc útil)
També hi ha molta cosa no aprofitable o que falta, com les maneres de provar EJB (ha canviat del tot l'especificació i les eines), la millor manera de fer servir les annotations i les test suites amb JUnit 4 o les llibreries addicionals que es poden fer servir amb JUnit.

La segona edició del llibre sembla que corregeix alguna de les obsolescències que he comentat. He pogut llegir dos capítols gratuïts que tenen publicats els de Manning i n'hi ha molta cosa interessant. Per exemple al capítol 19 explica llibreries que es poden fer servir, com Hamcrest, Unitils, Mycilla, DbUnit, FEST o JUnit-addons. També revisen EasyMock i Mockito per construir mock objects, però no als capítols gratuïts.

Un llibre difícilment recomanable avui en dia. La segona edició fa millor pinta, però aquest tipus de llibre queden obsolets amb molta facilitat.

Wednesday, May 4, 2011

Java, Oracle, NLS i tests

Aplicació Java amb Oracle 11g. En dos entorns diferent una consulta amb ORDER BY dóna resultats en ordre diferent. El problema està, evidentment, en la configuració del NLS.

El driver JDBC d'Oracle, la versió purament Java (la versió thin), no fa servir la variable d'entorn NLS_LANG des de la versió 10g. En comptes d'això dedueix els valors de NLS de l'idioma del sistema operatiu. La manera de canviar l'idioma consisteix en passar els següents paràmetres a la VM:
-Duser.language=en -Duser.country=EN

Arrencant amb aquest valors l'ordenació anava bé, per que agafava el NLS_LANGUAGE, NLS_TERRITORY, NLS_SORT i NLS_COMP als valors que esperàvem. Experimentant una mica, vaig veure que amb NLS_SORT si poses BINARY és el més eficient, però si vols que ignori majúscules i minúscules pots fer BINARY_CI i si vols que ignori accents pots fer BINARY_AI. Però això no és l'important.

El cas és que no volíem haver de llençar les nostres màquines virtuals amb paràmetres especials, així que vam mirar de configurar-ho directament a l'aplicació.

La teoria diu que -Dparam=valor és el mateix que des del Java System.setProperty("param", "valor"), però no és així pel que fa a la resolució del NLS. I vam trigar molt en descobrir-ho. En aquest cas el que realment l'interessa és el "default locale" i no aquestes variables d'entorn (que només es fan servir per definir el default locale. Així que tal i com apunten en aquest tutorial de java, el que cal és fer cridar a Locale.setDefault(). En el nostre cas Locale.setDefault(Locale.ENGLISH).

Com això ho volíem fer des de Spring hem pogut aprofitar el que comentava algú al fòrum de Spring.

Ara ja no depenem dels paràmetres d'inicialització.

Conclusions:
  • Les proves automàtiques t'ajuden a trobar els errors ben aviat
  • La configuració de NLS amb Java és un mal de cap

Tuesday, May 3, 2011

Una proposició de Google

D'ençà que vaig posar la LinedIn les meves dades en anglès vaig rebent ofertes de feina de l'estranger. Reps un missatge d'algú que vol que t'afegeixis a la seva xarxa de contactes professionals i al final és per una proposta laboral. I jo que no estic buscant feina.

Doncs l'altre dia vaig rebre un missatge d'una empleada de Google per afegir-me a la seva xarxa. Quins nervis: Google s'havia fixat en mi! Em va dir que hi havia una oferta de feina de “high profile” i que semblava que podia encaixar però necessitava veure un currículum meu. Vaig preparar un curri en anglès tan ràpid com vaig poder i li vaig enviar, pensant que em descartaria directament.

Però no. Em va enviar detalls de l'oferta, indicant les tasques a desenvolupar, i semblava molt interessant. L'oferta era per Munic, Dublín o Zúrich (a Londres no hi havia places). Hi havia una oferta per Sistemes i una altra per Software, les dues molt xules.

Aleshores em va demanar que em puntués del 0 al 10 en diferents coses (llenguatges, sistemes operatius, etc.), essent un 10 que hagués escrit un llibre sobre el tema. Amb les meves puntuacions em va convocar per una entrevista per telèfon i vam quedar.

Em va preguntar que si tenia un Blog técnic, i quan li vaig dir que era en català em va dir “then, it doesn't matter”. No era una entrevista, era un examen. M'anava a fer preguntes respecte aquells punts que jo m'hagués puntuat més alt i els que ella cregués. I jo sense connexió a Internet!

Vaig començar bé amb les preguntes de base de dades, i vaig continuar molt tranquil amb Java i amb Linux. Però em va plantejar un parell de problemes i una pregunta teòrica que em van descol·locar. No, no m'enrecordo del cost del Quicksort (potser que fos log(n)?

Després d'unes deu preguntes em va dir que es posarien en contacte amb mi en tres dies, i si passava aquesta entrevista tindria una altra amb un enginyer, i si la superava la següent seria a Dublin.

Als tres dies, molt amablement, em va dir que havia estat un plaer xerrar amb mi però que actualment no tenien una plaça que encaixés. Snif.

Ja veus quina tonteria. Em vaig sentir molt content i orgullós uns dies. Al poc temps vaig veure que Google anava a incorporar 26.000 nous empleats a la seva plantilla.

Per poder fer que una gran corporació es fixi en tu:

  • Apunta't al LinkedIn i amplia la teva xarxa de contactes (si no em tens, ja saps)
  • Posa el teu perfil de LinkedIn en anglès
  • Si vas fluix d'anglès, posa-li remei
  • Agafa bon coneixement teòric d'informàtica (una carrera ajuda)
  • Agafa bon coneixement d'un llenguatge com Java o PHP
  • Agafa bon coneixement de Linux
  • Si fas un blog tècnic, fes-lo en anglès

Ha estat una experiència.