Posts Tagged ‘Programació’

Alliberat jQuery 1.5.1

dilluns, febrer 28th, 2011

El proppassat dia 26 s’alliberà la versió 1.5.1 de jQuery.

jQuery és una llibreria Javascript potentíssima i gratuïta que empren els principals websites.

Ofereix un dinamisme als llocs web que fa uns anys només era possible amb Flash.

Aquesta versió bàsicament soluciona bugs i proporciona algunes noves funcionalitats prou interessants:

  • Suport per a Internet Explorer 9 com a un dels navegadors principals i solució de tots els bugs anteriors per a aquest
  • jQuery.ajax: s’afegeix isLocal per a detectar l’entorn de desenvolupament.
  • jQuery.ajax: mimetype per a poder passar per sobre del tipus mime xhr.
  • jQuery.ajax: xhrFields. Un mapa de nom de camp/valor per a fixar en un objecte nadiu xhr. Per exemple es pot emprar amb withCredentials a true per a fer peticions cross-domain.

 

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Curs de programació en PHP – segona part

dissabte, febrer 19th, 2011

La primera part de l’article és aquí.

Programar és donar les instruccions a l’ordinador sobre què ha de fer i com s’ha de comportar.
Ha de tenir en compte tots els possibles escenaris i totes les possibilitat: controlar les accions de l’usuari com si prem una tecla, com coses que passen al sistema, com ara que no s’hagi acabat l’espai en disc abans d’escriure-hi un arxiu.
Això vol dir que el programador o la programadora haurà d’estar en tot i haurà de pensar en totes les possibilitats. Altrament en algun moment alguna cosa fallarà.
Els ordinadors no saben respondre a coses per a les que no els hem preparat, només per al que prèviament hem programat.

Com és un programa?

Un programa clàssic és un seguit d’instruccions seqüencials, és a dir seguides, com en un llibre, amb iteracions o bucles (per exemple quan el Bart Simpson escriu a la pissarra 100 vegades: no hackejaré la web de l’escola, un programa el que faria és: repeteix 100 vegades: escriu “no hackejaré la web de l’escola”) i condicionals (si passa això fes allò, si no fes això altre).

Un programa és molt similar a un llibre només que a aquells llibres que es van posar de moda quan jo era un bailet que es deien escull la teva pròpia aventura i en que tu podies triar: si esculls enfrontar-te als lladres i salvar a la noia passa a la plana 100, si escull avisar la policia a la 127).

La nostra feina és redactar el llibre (el programa) per a que després el lector (l’usuari) experimenti l’aventura (el programa).

Ara ja t’has instal·lat el WAMP o per separat el servidor web Apache, el PHP i el MySQL, la qüestió és que tens el servidor Web llest per a executar programes PHP.

Si no heu indicat a WAMP que s’iniciï quan arrenqui windows, llavors l’haureu d’executar manualment des del menú de programes.

Llavors us apareixerà una icona a la barra lateral dreta de windows (tray bar), al costat de l’hora. Des d’allí podreu parar, o reiniciar alguns serveis.

Reiniciar el servidor web Apache serà necessari quan canviem un paràmetre de configuració per a que Apache carregui la nova configuració i s’adoni dels canvis.

WAMP 2.1 incorpora el següent programari:

– Apache 2.2.17
– Php 5.3.3
– Mysql 5.1.53 (la versió de 64 bits)
– Mysql 5.5.8 (la versió de 32 bits)
– PhpMyadmin 3.2.0.1
– SQLBuddy 1.3.2

Ara és un bon moment per a explicar com funciona el procés de demanar una plana web a un servidor web.

Les planes web que visitem diàriament, són allotjades en servidors.

Quan nosaltres escrivim al nostre navegador una url, per exemple: http://www.php.net el navegador primer ha de descobrir quina és l’adreça ip d’aquesta plana, és a dir, saber quin servidor li entregarà aquesta plana.

Podem saber quina adreça ip hi ha darrera de www.php.net obrint una finestra ms-dos (a windows) o una finestra de terminal (a Linux i Mac Os X) i teclejant:

ping www.php.net

El número 69.147.83.197 és l’adreça ip.

L’adreça ip és un número únic, i quan un ordinador es vol comunicar amb una adreça ip, tot d’aparells (enrutadors o routers en anglès) des del router ADSL que tenim a casa, fins al que tenen al lloc on és el servidor, saben com fer arribar la informació al servidor, i de tornada cap al nostre ordinador.

Un cop el navegador sap que l’adreça de php.net és 69.147.83.197, llavors s’hi connecta, i demana la plana web que volem.

Hi ha uns servidors que fan la traducció (resolució) del nom www.php.net a adreça ip. Aquests servidors es diuen servidors DNS.

Però una cosa important que us vull comentar és que abans de fer la consulta als servidors DNS l’ordinador mira a un fitxer especial, per si de cas nosaltres volem especificar manualment que un nom d’adreça es resolgui amb una adreça ip concreta.

Això ens serà molt útil més endavant quan programem.

Aquest arxiu es diu hosts. I es troba a les següents rutes:

En el cas de Linux i unix POSIX:

/etc/hosts

En el cas de Mac Os X (10.2 i superiors):

/private/etc/hosts

En el cas de windows l’arxiu es diu:

C:\Windows\system32\drivers\etc\hosts

És important saber que hi ha un nom especial que es diu localhost.

L’adreça localhost es resol com Ip 127.0.0.1

És molt important saber que 127.0.0.1 és una adreça ip especial, que sempre apunta al nostre propi ordinador.

Així si ens connectem des del navegador a http://localhost o http://127.0.0.1 ambdues accions el que faran és demanar una plana al servidor web Apache que tenim instal·lat al nostre ordinador.

En el cas del meu arxiu /etc/hosts tinc definit localhost com 127.0.0.1 i una entrada addicional que es diu dev.codic.cat també a la 127.0.0.1. D'aquesta manera desenvolupo sobre el bloc en local i jo accedeixo amb el navegador posant dev.codic.cat que seguint el que diu l'arxiu hosts resol 127.0.0.1 i per tant va al meu ordinador.

Escriure http://localhost i http://localhost/ té el mateix resultat ja que si no diem res, la plana per defecte que es demana és /

Normalment si es demana la plana / el servidor web envia l’arxiu index.html o index.htm o index.php o default.asp en el cas de servidor IIS de microsoft.

En tot cas això es pot canviar als arxius de configuració d’Apache o IIS (servidor web de microsoft).

 

Us ensenyo a programar en Web perquè la majoria de vegades que programem en PHP ho farem per a Web, i actualment quasi totes les feines són per a Web.

Les planes web no deixen de ser arxius, com llibres, i els navegadors web les interpreten i pinten les coses que li diem que pintin.

Per exemple obriu l’editor de textes, l’eclipse, o qualsevol programa amb el que volgueu programar i copieu aquest codi:

<html>
<head>
<title>La nostra primera plana Web</title>
</head>
<body>
Hola, aquesta és la primera plana web!.<br />
Això és <b>negreta</b>.<br />
Això és <font color="#ff2222">vermell</font>.<br />
Això és un <a href="http://www.codic.cat">hipervincle a Codi Ç</a>.
</body>
</html>

Com podeu observar si executeu plana.html és a dir, si feu funcionar aquest arxiu (això es fa fent doble clic sobre l’arxiu o dient-li al navegador que obri l’arxiu)

veureu que tenim una plana web amb el títol: La nostra primera plana web i on apareix el text que hi ha dins de <body>…</body>, que després de <br /> es genera un salt a la linia següent, que el que hi ha dins de <b>…</b> surt en negreta, i que el que hi ha entre <a href=”http://www.codic.cat”>….</a> és un enllaç cap a http://www.codic.cat
<font color=”#ff2222″>…</font> el que fa és que el text que hi ha entre <font…> i </font> estigui en el color ff2222 que vol dir: intensitat de vermell FF, intensitat de verd 22 i intensitat de blau 22. Aquests són valors exadecimals, bàsicament vol dir que hi haurà a tope de vermell, i una miqueta verd i una miqueta de blau.

Els espais que hi ha que fan que les comandes comencin més cap a la dreta són per a facilitar la lectura del codi, i el fet de programar amb aquests espais es diu indentar.
Quan obrim un bloc, el codi que va dins del bloc l’indentem i així es veu de manera molt clara què forma part del bloc.
La feina d’aprendre HTML l’haureu de fer vosaltres, però és quelcom molt més fàcil que aprendre a programar en PHP.

De tota manera aquí hi ha uns quants exemples amb els que aprendreu HTML a tota velocitat.

Ara anem introduir PHP dins la plana web que hem generat.
Editem l’arxiu plana.html i el deixem així:

<html>
    <head>
        <title>La nostra segona plana Web</title>
    </head>
<body>
        Hola, aquesta és la primera plana web!.
<?php

/* Definim els colors */

$st_conjunt_de_colors = array("vermell"--> "#ff2222",
                              "blau" => "#2222ff",
                              "verd" => "#22ff22",
                              "negre" => "#000000",
                              "gris" => "#777777");

?>
        Això és <strong>negreta</strong>.<br />
<?php
/* Comença el bucle */
foreach($st_conjunt_de_colors as $s_clau-->$s_valor_del_color){
    echo "Això és <span style=\"color: #00de00;\">$s_clau</span>.<br />";
}
?>
Això és un hipervincle a Codi Ç.
</html>
</body>
</html>

Quantes coses noves en unes poques línies!!.
El que hi ha entre /* i */ és un comentari de PHP (remark en anglès).
Serveix per a fer anotacions nostres i PHP ho ignora.

La linia que comença per $st_conjunt_de_colors = array és el que anomenem un array o una matriu.
Un array és una llista que té una correspondència de clau i de valor associat a la clau.
El valor d’una clau pot ser un altre array.

Una de les grans potències que té PHP és la gran quantitat de funcions d’arrais que porta de sèrie.

El que estem definint són claus amb el nom dels colors, i els associem el valor el seu color, i després fem un bucle que recorre l’array i imprimim en format html la clau com a text visible i el valor associat com a color dins del tag d’html font.

La gràcia del PHP és que es pot barrejar amb el codi html i pot generar codi html, i així és capaç de retornar planes dinàmiques. El resultat final és el que s’envia al navegador que veuen les persones que naveguen per la nostra web.

Bé, tornant al nostre exemple, no funcionarà. No funcionarà perquè cal que anomenem l’extensió de .html a .php i que la executi el servidor web.

Això s’aconsegueix posant l’arxiu a la carpeta del nostre servidor web apache.

Si empres WAMP per a windows la ruta per defecte és C:\wamp\bin\http i per a Linux la ruta per defecta (documentRoot) per als arxius que serveix apache és: /var/www

Per a instal·lar apache en Linux feu:

sudo apt-get install apache2

Adreça curta Twitter: http://wp.me/pzeab-1Lp

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Fer fracassar projectes d’IT

diumenge, febrer 13th, 2011

Fer que projectes on s’hi ha invertit milions fracassin no és tan fàcil.

Caldria un destraler de la mida de jordi hereu, joan clos, zapatero o un malvat sense cor com jose maría “ansar”, o un brètol extremadament mentider i egoista com alberto ribera de ciudadanos.

Però en situacions normals no serà fàcil que fracassin els projectes d’IT, doncs els programadors que els han d’executar són professionals llargament formats amb el pas dels anys, que han invertit moltes hores de proves, temps d’estudi, investigant els detalls de la tecnologia, diners en llibres, que sacrifiquen part del seu temps personal per a mantenir-se al dia a les darreres tecnologies i així no quedar obsolets i poder oferir les millors solucions a qui els contracta. Però a més de tot això també són magnífics psicòlegs, perquè on el client demana un pal amb una roda de patí, saben veure que el que volen en realitat és una bicicleta (o un psiquiatra).

Llavors, perquè fracassen els projectes?. Perquè s’endarrereixen els terminis, perquè acaben sent molt més cars que no s’havia previst?.

En un moment anem a aquest punt però primer deixeu-me exposar la piràmide de metodologia clàssica.

En la metodologia clàssica de desenvolupament de projectes , hi ha uns quants rols definits: Programador, Analista Programador, Analista Orgànic, Analista Funcional, Cap de Projecte.

Els programadors, són els que ocupen la base de la piràmide. N’hi ha molts i són els qui fan la feina.

Després d’un temps de programar, dos anys o tres, els caps han vist si té aptituds, i si presenta una bona capacitat d’anàlisi, de síntesis de la informació, si és capaç d’organitzar la informació, i de redactar documentació, aquesta persona pot fer algunes tasques d’Analista.

Llavors tenim un Analista Programador.

Si durant uns dos anys aquesta persona es desenvolupa bé fent d’Analista Programador i té aptituds, pot començar a fer d’Analista Orgànic.

Un Analista Orgànic analitza la informació, i prepara documentació orgànica o tècnica. Amb una analisi orgànica els programadors saben com han de fer les coses tècnicament (noms de camps de la base de dades, mida, tipus de dades, claus… llenguatge de programació, etc…).

Després d’uns dos anys de fer d’Analista Orgànic, si s’ha entès bé amb els equips de programadors que depenien de les seves anàl·lisi, i la persona demostra aptituds com entendre la gent, partir els problemes en petites solucions individuals, si sap tractar amb la gent, se’l promou a Analista Funcional.

L’Analista Funcional es reuneix amb els clients (majoritàriament ho fa el Cap de Projectes o l’Analista acompanya el Cap de Projectes), els demana què volen, i a partir del que li expliquen amb paraules planeres, fa les preguntes adients i redacta una documentació explicant el que es vol fer i com es farà (sense els detalls tècnics que corresponen a l’Analista Orgànic).

L’Analista Funcional normalment acostuma a dirigir un petit equip de 3 a 5 programadors.

I finalment si se n’ha sortit bé amb les tasques d’Analista Funcional, se li detecten qualitats per a la planificació fins i tot de diversos projectes alhora, guiar equips i formar-los, negociar amb proveïdors i clients, caràcter, fermesa, empatia i dots de líder, aquesta persona passa a ser Cap de Projectes (CP / JP / PM – Project Manager).

(Nota: hi ha un altre subtipus que es diu Cap d’Equip o Team Leader, que ve a ser un Cap de Projectes descafeïnat, sense masses coneixements ni autoritat a l’organigrama, i que s’encarrega de dirigir un petit equip de Programadors o Analistes Programadors).

És a dir, per disposar d’un Cap de Projectes o d’un bon Analista Funcional calen entre 8 i 10 anys.

Aquest model era útil en els temps en que els ordinadors valien una fortuna, utilitzaven sistemes propietaris i llenguatges de programació i bases de dades que no podien aprendre’s si no estaves dins d’una empresa i portaves molt de temps estudiant-los.

Això no vol dir que aquesta piràmide de la metodologia clàssica sigui la ideal.

Hi ha programadors extraordinaris que valen un imperi, però que no serveixen, ni els agrada ni els interessa, per a fer Anàlisis Funcionals o parlar amb els clients.

No és raonable no fer servir aquest Talent, i és una ximpleria encasellar-los en funcions laborals rígides i en feines que probablement no els agraden, o fer que no puguin programar simplement perquè són tan bons que mereixen ascendir. No té sentit.

Però el que sí que té molt bo la metodologia clàssica de Desenvolupament de Projectes de Programari (Software) és que t’assegurava que un Analista Funcional o un Cap de Projecte tenien una formació suficient i les aptituds i les capacitats necessàries per a fer la seva feina.

Diguem que aquest lent procés d’escalar per la piràmide actuava de filtre i deixava fora dels llocs més delicats les persones que no en tenien la capacitat, ja fos humana, tècnica o comercial.

Sota el paraigües dels rols de la metodologia clàssica hi ha hagut la picaresca de moltes empreses de serveis (outsourcing), que com quan més amunt en la piràmide més es cotitzava, feien passar Analistes Programadors per Caps de Projecte per tal de facturar més per la hora, o programadors novells o inexperts per programadors Sènior (mínim amb 5 anys d’experiència) .

Un altre problema dels programadors que treballen en consultores fent outsourcing és que van de client en client, d’empresa en empresa, programant el que saben, però ningú els ensenyava res i ningú els corregeix els errors que cometen perquè ja són en un altre client, així que van repetint els mateixos errors empresa rera empresa. Si treballessin amb un bon Cap de Projectes aquest els formaria i els corregiria els errors de codi, disseny de bases de dades, etc…

Pel·lícula "OfficeSpace" traduïda com "Trabajo basura", absolutament imprescindible per a comprendre la vida dels programadors mal gestionats i com les empreses perden diners a cabassos

També existeix l’estafa barroera que es va posar de moda gràcies a la ignorància dels empresaris consistent en que algú que es venia com Cap de Projecte “gestor” i no tècnic, tot menystenint els tècnics proclamant que saber programar implicava no tenir cap habilitat per a dirigir equips o prendre decisions comercials. Solien dir “jo no sóc un cap de projecte tècnic, jo sóc un gestor. Els Caps de Projecte no haurien de saber programar, si en saben és que no són uns bons Caps de Projecte. Són els programadors qui han de saber programar”.

Lògicament tots els projectes on foten l’urpa aquests bon vivant fracassen, i els programadors acaben fent de Cap de Projecte i treballant 12 hores al dia i els caps de setmana gratis mentre els falsos Caps de Projecte menteixen creativament per amagar als seus caps els autèntics motius del fracàs del projecte. Aquests projectes solen acabar amb alguns programadors injustament acomiadats, amb una demanda contra l’empresa per part del client per incompliment de contracte o amb el fals Cap de Projecte abandonant l’empresa a mig projecte per a anar a enfonsar projectes una altra empresa però cobrant més.

Vendre la manca d’habilitats (skills) com si fossin una avantatja!.

Això vindria a ser com dir que un entrenador de futbol no ha d’haver estat futbolista.

L’exemple és prou gràfic. Si no ha estat futbolista no sabrà el que passa al camp, el que és rebre un cop, el que ofega entrenar 7 dies a la setmana sense un dia per estar amb la família, el desgast dels viatges en autobus de 14 hores, el que és una sobrecàrrega muscular, els nervis de jugar en un camp hostil, quina és la bona manera de fer les passades, no sabrà el que és jugar en una posició que no és la teva, amb pluja, etc…

Un exemple que vaig crear fa temps és el d’un Director d’Hospital que no sigui metge.

Doncs si no és metge i només “gestiona” pressupostos difícilment els metges podran fer-li entendre que cal un aparell de raigs X, o que cal substituir un aparell de ressonància que emet radiació letal!.

Això també ha fet molt de mal.

Com tot a la vida, hi ha mals metges, mals advocats, i mals Caps de Projecte (en realitat no mereixen dir-se així, però com no hi ha cap títol que acrediti que ets un bon Cap de Projecte fan passar bou per bèstia grossa).

És a dir, que per a tenir resultats ben professionals, calen bons professionals!. I costa molt de formar bons professionals.

I si no els sabem distingir ens la colaran i els nostres projectes aniran com el cul.

Avui en dia, amb Internet i els ordinadors generalitzats, un bon programador amb una bona idea, pot crear un projecte per si sol.

El Talent permet diferenciar-se i una sola persona pot fins i tot fer que una companyia que anava a desaparèixer avanci la competència i obtingui beneficis milionaris.

Ara imagineu Leo Messi, Xavi Hernández i Andrés Iniesta guiats per un entrenador mediocre, que no en té ni idea, però que vol fer creure tothom que en sap, i empra l’arrogància, crea terror i promou la manca de diàleg per a intentar dissimular les seves mancances.

Però tornem al model clàssic.

Si tens una persona que porta 8 anys preparant-se per a preparar documentació, per a compilar els requeriments en apartats que facin clara i entenedora la feina que han de desenvolupar els programadors i tan ben definida que no hi hagi lloc a dubtes sobre el que es fa, el que no, i com es fa, que si el client demana un canvi, no hi hagi dubte de que és un error seu i l’hagi de pagar com el que és: un canvi de requeriments; si tens aquesta persona, no repetiràs la feina dues vegades, per que fa la seva feina ben feta.

Per que el que fa fracassar els projectes no són aquells programadors que porten anys formant-se i que són els únics que fan hores extres gratuïtes o que treballen dissabtes i diumenges sense cobrar per complir un plaç que no han establert o que s’ha desvirtuat per un canvi/ampliació de requeriments que no paga el client.

El que fa fracassar el projecte és que tot aquest Talent dels programadors és en mans de persones que no tenen ni idea.

Persones que es diuen “gestores” que no saben jugar a futbol. Persones absolutament júniors o encara menys, amb molt poca experiència al món laboral, i sense les aptituds que té qualsevol Analista Funcional.

Llavors, com es vol que els projectes no fracassin?.

A la mitologia clàssica Aquiles conduïa els seus soldats a la victòria. Lluitava amb ells. Era un crack de les tècniques de lluita (programació).

I els seus homes el seguien sense dubtar-ho perquè sabien que sabia el que es feia, i no els conduïa a una derrota pel motiu de ser un ignorant sobre assumptes de guerra.

A la pel·lícula Troia mostren un Aquiles que sabia lluitar, sabia defensar-se, sabia metodologia sobre com s’havia de defensar el grup i era disciplinat.

La pràctica condueix a la mestria, i el Talent s’ha d’aconseguir amb dur esforç.

Ara imagineu-vos un montilla dirigint un exèrcit. Què passaria?.

Dir el que s’ha de fer des de reraguarda és fàcil. I aquest mal cap pot tocar el dos si les coses es posen peludes.

Però arremangar-se i fer que les coses funcionin requereix: 1. Voluntat 2. Habilitat (skills) 3. Esforç

Llavors, tenim empreses multinacionals que paguen sous de 30.000 € bruts anuals als seus programadors, si és un equip de 10 programadors 300.000 € bruts anuals, és a dir, tenen 300.000 € bruts anuals en Talent programador, però després posen aquest talent en mans de “gestors” sense experiència.

A la batalla, generals sense formació ni experiència guien les tropes d’elit al fracàs i a la seva aniquilació, que en el món d’IT es concreta en que els millors toquen el dos i van a empreses on els deixin treballar bé.

Normalment però abans han perdut moltes amistats i la seva vida social és una merda perquè es deixen la pell a la feina tractant de compensar el que d’altres espatllen amb la seva mala gestió o colant canvis de requeriments quan el projecte és a mig fer pel simple motiu que aquests gestors no fan els deures.

Avui en dia, la piràmide clàssica no és molt utilitzada, i tenim programadors multidisciplinars que quan convé fan d’Arquitectes de Sistemes, de Cap de Projectes, d’Analista Funcional (o en els cassos més humiliants de Dissenyador Web. Programar i fer servir el photoshop normalment és com ser de Green Peace i treballar a un escorxador. Requereix qualitats diferents i el que és bo en una cosa acostuma a odiar l’altra)

Però tenim un single point of failure, un punt d’error on falla tot. I és que els projectes són dirigits per persones que no tenen ni idea de què dirigeixen.

No saben res tècnic, però tampoc saben prendre requeriments. Així que els projectes són conduits al fracàs, al sobre cost, i els desenvolupadors es cremen i marxen.

Posats a escollir, sempre és millor que dirigeixi un equip o un projecte, algú sense dots tècniques però sí amb humanes que escolti i valori els tècnics, ja que si els escolta aquests el guiaran cap a la manera bona de treballar.

Els tècnics, siguin on siguin de la piràmide, estimen la seva feina, li dediquen moltes hores a perfeccionar-se i volen fer bé les coses.

Ens sentim orgullosos del que sabem fer i de com ho fem, i necessitem sentir-nos orgullosos de la nostra feina.

No hi ha una manera millor de fer plegar un equip que fer-li fer malament les coses.

Seria com forçar que un escultor genial que fa obres extraordinàries, treballi amb mals materials, males eines, amb menys temps del necessari i forçar-lo a fer xapuces. Intolerable!.

En el món dels informàtics hi ha de tot: professionals bons, normalets, amb inquietuds, per qui només és una feina… encara que majoritàriament abunden els qui estimen la professió.

Però per a saber distingir-los i guiar-los adientment cal molta competència i know how a nivell directiu.

I si es treballa per projecte, o per sprints com a la metodologia Scrum, val més que inverteixis en que els Product Owners siguin bons professionals, ben formats i amb experiència, perquè altrament estàs desaprofitant aquell Talent i cremant-lo.

I és que la majoria dels projectes d’IT fracassen, perquè els qui recullen els requeriments no els prenen bé (incomplets o erronis), perquè el client dóna un coneixement funcional erroni o incomplet, esbiaixat, i després van passant canvi sobre canvi, xapussa sobre xapussa i sempre tractant de mantenir els mateixos costos i terminis.

La majoria de cops el client no sap el que vol, molts ni tant sols saben en detall com funcionen processos crítics del seu departament, però això no els priva d’engegar projectes on s’han d’informatitzar.

I si el responsable d’una àrea, el client, no té el coneixement del que fa la seva àrea funcional, llavors ningú el té i el programador no ho podrà endevinar.

En aquests casos els informàtics només poden fracassar. De la mateixa manera que un arquitecte no pot construir una casa a mida pel client, si el client no sap quantes portes vols, si vol una o dues plantes, si hi ha d’anar ascensor per algú amb problemes de mobilitat, etc… i si a sobre el client canvi de parer constantment i es nega a pagar el sobrecost d’enderrocar les parets fetes, refer els plànols i tornar a començar la secció.

En tot cas és just que el client despistat pagui el sobrecost de les coses que van recordant (sobre la marxa) que porta la seva àrea i que s’han de reflectir al projecte. (Nota: encara que ho expressi amb humor és inadmissible que un responsable d’àrea no sàpiga què fa o què ha de fer el seu producte, servei o àrea).

Així que si voleu que els vostres projectes d’IT no fracassin, contracteu bons professionals. Digueu no a la incompetència.

Els bons programadors són importants i et salvaran el cul si tot ho altre falla i no hi ha metodologia, però un bon Cap de Projecte amb un equip de programadors Junior els acabarà formant i es preocuparà de que treballin amb metodologia.

Les persones que recullen els requeriments és clau que siguin bons professionals amb experiència. Altrament faran refer funcionalitats als programadors, desfer moltes hores de feina, i cremarà els tècnics perquè algú que fa d’analista funcional sense tenir ni idea no entén res de res. A més reportarà errors (bugs) que no ho són, si no que són canvis de requeriments encoberts de requeriments que no van passar al seu dia o van passar explícitament així, reportaran bugs que no són bugs si no funcionament estàndard del navegador o amb explicacions vagues i incompletes, sense captures de pantalla, etc…

I si el valor afegit de la seva “gestió” és reenviar emails, val més que contractis a una becària o becari i els posis al servei dels programadors per a que reenviï els emails.

Estalviaràs diners i problemes.

Diguem no a la incompetència.

Perquè els directors no han d’oblidar que el desenvolupament de programari és una feina artesana. Com els sastres.

Els programadors fan els vestits a mida per als seus clients (programes), però no hi ha res més ximple que posar a algú que no és sastre a destorbar la feina dels sastres, i que no els deixi prendre mides a ells i els doni mides parcials i incorrectes, els les canviï després que ja han dissenyat el patró i tallat la tela, els digui com han de treballar o els empenyi a estar més hores al taller quan resulta que la feina no es pot entregar a temps precisament perquè el no sastre no deixa fer bé la feina als artesans programadors.

I quan dic artesans ho dic de manera estrictament literal.

El programador ha de conèixer aspectes del maquinari, com la velocitat a la que pot escriure en disc, o desenvolupar estratègies per a superar aquest límit, calcular quantes instruccions pot executar el servidor per segon, extrapolar quants usuaris concurrents (alhora, que ara estem a Internet i la web s’accedeix globalment) suporta la web, optimitzar els colls d’ampolla per superar aquests límits, fer consultes a la base de dades que ben fetes triguen 0,01 segons però mal fetes poden bloquejar el servidor durant quatre segons (i 50 també!)… es construeix amb molt de talent i coneixent els detalls de les màquines, els sistemes operatius i els llenguatges de programació!!! I també els seus límits.

Bé, si l’empresa és milionària i no li preocupa la competència sí que es pot treballar així.

Avui en dia ens trobem amb nous paradigmes, un d’ells és que molts joves saben molt més que els seus professors en algunes àrees. Si els membres s’un equip saben molt més que qui els mana i aquest els obliga a fer les coses malament, l’empresa perdrà l’equip.

Es pot tenir un Cap de Departament no tècnic si té unes magnifiques qualitats humanes i de planificació i escolta els tècnics.

Però és devastador que qui pren els requeriments i demana explicacions sobre com estan els desenvolupaments, és a dir qui actua com Analista Funcional i com Cap de Projecte (els product owners a la metodologia scrum) no tinguin ni idea del que fan.

També és un problema que persones que no saben de programació prenguin decisions, o deixin de prendre decisions necessàries, sobre com es treballa amb els repositoris de codi (CVS, Subversion, Git…), quins servidors de desenvolupament hi ha i qui els pot gestionar, quins entorns hi ha (desenvolupament, integració, pre-producció, producció/explotació), quina metodologia es fa servir per a les pujades o per a la programació del codi…

Tot sovint els equips es trobaran treballant sobre els mateixos recursos (arxius de codi, procediments emmagatzemats de la base de dades…) bloquejant-se i trepitjant-se els uns als altres, amb branques desactualitzades… i les pujades a producció seran infernals, llargues, feixugues, plenes de problemes, fent que l’empresa perdi diners en estar parada la web (o generant errors) i cremaran els bons professionals que només tracten de fer bé la seva feina.

En moltes empreses de consultoria i de Desenvolupament a mida de Programari els que la lien són els comercials. Com ells cobren bonus en funció de la quantitat de projectes que venen, i tampoc tenen ni idea de res, venen coses impossibles, amb terminis esbojarradament curts o molt per sota del seu cost d’execució real, i un cop signat el contracte cobren i desapareixen deixant el marró al Cap de Projecte i a l’equip.

Una altra tècnica que fan servir els mediocres és fer reunions constantment, que esdevenen trampes per a monopolitzar el temps dels Caps de Projecte potents que podrien canviar les coses.

Des de la seva posició a negoci, imposen fer reunions que consumeixen hores salvatgement i impedeixen avançar en àrees importants.

I és que ja sigui per a recollir requeriments, per a redactar documentació, per a programar, per a dirigir un projecte, per a tenir cura de l’equip… cal tenir temps per a dedicar-li.

Valdria més sacrificar un programador Sènior i, després de pactar-ho, demanar-li que faci de product owner (metodologia Scrum) i reculli els requeriments.

Serà fotut per a ell si li agrada programar, però tindrà la satisfacció que els seus companys poden treballar molt a gust amb els requeriments ben especificats i que la feina surt bé i més ràpid. Farà documents funcionals clars i ben redactats i no els passarà ni una als clients, perquè sap que la badada consentida del client, vol dir hores de feina extra i frustracions per als seus companys.

Per a evitar situacions com les que he descrit jo proposo que les empreses tinguin clar tot això que he dit, contractin bons caps i analistes funcionals, i facin avaluacions de 360 graus.

A les avaluacions de 360 graus, els treballadors, individualment, parlen amb una persona de recursos humans de la seva confiança i avaluen els seus caps i altres aspectes de com funciona la companyia. Lògicament la persona de recursos humans ha d’estar molt ben preparada, perquè si no encara generarà més frustració. Es tracta d’escoltar la informació clau que ens diu la gent, ja que ens aportarà una informació valuossíssima sobre on està fallant la companyia i quins són els comandaments intermedis que fan que les coses no funcionin.

Adreça curta Twitter: http://wp.me/pzeab-1KT

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

PHP: smarty : solució html_select_date encoding utf-8

divendres, gener 28th, 2011

El sistema de plantilles (templates) smarty ofereix la possibilitat de generar automàticament uns controls combo box per a seleccionar dates (dia, mes, anys).

Els mesos són mostrats en funció de la configuració d’idioma indicada al servidor.

Gener, Febrer, Març, Abril, Maig, Juny, Juliol, Agost, Setembre, Octubre, Novembre, Desembre

Com podem comprovar Març conté un caràcter ce trencada ç.

Aquest caràcter, que també apareix en portuguès,  es mostrarà com un caràcter estrany en el combo de selecció.

Passarà el mateix amb qualsevol idioma que contingui algun caràcter no estàndard en el nom del mes.

Per a solucionar-ho forçarem el tipus de codificació (encoding) com a UTF-8.

Això ho farem dient:

{html_select_date|utf_8_encoding

display_days=false

display_years=false

...

}

Enlloc del simple

{html_select_date
Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Canviar la configuració d’encoding per defecte a Eclipse

divendres, gener 21st, 2011

Hi ha una opció una mica amagada, per a establir la configuració per defecte de l’encoding a Eclipse.

Jo us recomano que feu servir sempre UTF-8.

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Curs de programació en PHP

diumenge, gener 2nd, 2011

Aquest és un petit curs per a aprendre a programar des de 0.

No tothom és capaç d’estructurar la ment i les idees i ser capaç de crear programes, però amb aquest petit curs podràs descobrir si t’agrada i n’ets capaç.

Dedico aquest curs a la Eli i a la Yazmina, dues persones amb moltes ganes d’aprendre i voluntat i capaces.

Introducció: Posant nom a les coses

Què vol dir programar?. De seguida hi arribarem, però primer hem de comprendre coses com què són els ordinadors.

Molt simplificat els ordinadors són uns ginys, que mitjançant uns valors d’entrada, proporcionen uns resultat. Per exemple, enviant-los 1+1 proporcionen un resultat de 2.

Els ordinadors realment funcionen amb impulsos elèctrics, que es transformen en uns i zeros. Si els voltatges són positius representen un 1, en cas contrari un 0.

Imaginem-nos un gran magatzem.

Hi ha una sèrie d’entrades de càrrega i descàrrega que poden ser portes d’entrada (càrrega), de sortida (descàrrega) o d’entrada i sortida (input/output dirien en anglès).

Dins d’aquest gran magatzem hi ha un operari, que seguint instruccions d’un paper, agafa els paquets que li donen per les portes d’entrada, els manipula i els desa als prestatges del magatzem o bé els retorna per una porta de sortida.

Aquest operari és el cervell de l’ordinador o CPU (Central Processing Unit). Les prestatgeries equivaldrien a la memòria. I les portes d’entrada/sortida del magatzem a les portes d’entrada/sortida de l’ordinador (els ports USB són ports d’entrada sortida, el port VGA on connectem el monitor és un port de sortida, etc…)

Com més ràpid és el processador, més feina pot fer per segon. La velocitat dels ordinadors la mesurem en Megahertzos o avui en dia en Gigahertzos.

Les instruccions s’executen als ordinadors marcades per un tic de rellotge de quartz, que són molt i molt precisos, una mica s’executen seguint el ritme dels tambors de les galeres, cada cop de tambor (clic de rellotge), una instrucció.

El prefix Mega vol dir 1.000 i Giga 1.000.000, i un hertz és una oscil·lació o tick del rellotge per segon, per tant un Gigahertz són un milió d’operacions per segon.

Un ordinador a 2 Ghz hauria de ser més ràpid que un a 1 Ghz. Però no sempre és així. Els nous models fan les operacions cada cop més ràpid, i una ordre que pot tarda 5 clics de rellotge en un ordinador més antic, pot trigar un sol clic de rellotge en un ordinador modern. Per tant ens podem trobar que un ordinador modern a 1 Ghz sigui més ràpid que un ordinador més antic a 2 Ghz.

Per últim, un ordinador amb dual core, seria com dir que al magatzem hi treballen dos operaris independents, per tant, un sol paquet el recullen, el processen i l’entreguen a la mateixa velocitat, però si hi ha més d’un paquet, els dos operaris despatxen dos paquets en el mateix temps que un ordinador amb un sol nucli o core en processen un.

Els ordinadors només fan el que prèviament els hem dit. Els operaris segueixen les instruccions per a manegar els paquets amb una llista d’ordres, i aquesta llista d’ordres és el que anomenem un programa.

Programar és dir-li a l’ordinador què ha de fer mitjançant un llistat d’instruccions que anomenem programes.

Nivells en programació

Les instruccions que segueix l’operari de la fàbrica (el processador) no són com les nostres.

L’operari no entén “recull la caixa i deixa-la a la taula”. L’operari de l’exemple entén instruccions més senzilles com ara:

– Dóna una passa endavant

– Fira 90 graus a la dreta

– Hi ha algun objecte davant?

I encadenades com:

1. Dóna una passa endavant

2. Hi ha algun objecte davant?

3. Si hi ha un objecte recull l’bjecte

4. Si no hi ha un objecte torna al pas 1

En això consisteix la feina del programador. En crear programes, o sia llista d’ordres, per a que l’ordinador (l’operari) faci el que volem.

Per això els programadors han de tenir en compte tots els possibles problemes.

Per a programar utilitzem llenguatges de programació.

Els llenguatges de programació són similars als llenguatges que parlem els humans en diferents països: n’hi ha de diferents amb diferents estructures gramaticals.

Depenent de si el llenguatge que emprem és més similar al que entén l’ordinador (passa, passa, hi ha alguna cosa?, passa, agafa, gira 180 graus, passa, passa, hi ha la taula? desa a la taula…) o més similar al que entenem els humans (porta la caixa a la taula) parlem de llenguatges de baix nivell, nivell mig o alt nivell.

Els llenguatges de baix nivell són els que se semblen molt al que entén la màquina.

Els d’alt nivell són els que se semblen molt al que parlem els humans.

En principi en un llenguatge d’alt nivell no sabem ben bé què fa la màquina per sota, mentre que en un llenguatge de baix nivell controlem tots el que fan els seus components.

Un exemples més real de programació en codi màquina, que és el de més baix nivell seria:

ETIQUETA_INICI:
	push	ax
	push	bx
	push	dx
	xor	ax,ax
	mov	dx,TIMER1_CNT
	in	al,dx
	or	al,al
	jnz	ETIQUETA_ES0
	xor	ax,ax
	out	dx,ax
	mov	dx,TIMER0_CNT
ETIQUETA_ES0:
	mov	bx,ax
	mov	ax,_dt_ymppr
	sub	ax,bx

L’objectiu d’aquest codi és veure que no enteneu res.

Si enteneu aquest codi deixeu de llegir que vindré jo a que em doneu classes si és que la Nasa no us contracta i us deixa una estoneta lliure.

El més interessant és la línia que diu jnz ETIQUETA_ES0. jnz és una de les instruccions bàsiques que mira si la última operació matemàtica ha retornat 0, (jnz significa jump if not 0, és a dir, salta a la etiqueta si no és 0).

Respireu, sé que és complicat. L’objectiu no és comprendre aquest codi si no veure la diferència entre baix nivell i alt nivell.

En un llenguatge de baix nivell tenim cura i treballem amb totes les peces internes de l’ordinador.

Per exemple, unes petites memòries (ax, dx, cx, ex) que serveixen per a fer les operacions bàsiques com mov ax, dx que vol diu mou el valor que hi ha a la memòria dx a la memòria ax.

Com aquestes memòries tenen molt poca capacitat, 8 bytes en el cas de ax, cx, el que fa que només puguem tenir valors entre 0 i 255, hem de vigilar quan fem sumes, que no ens passem per tal no obtenir resultat erronis.

Programar en ensamblador o en altres llenguatges de baix nivell és complicat, és molt difícil controlar un error, i un programa per a un tipus d’ordinador no servirà per a un altre ordinador o un mòbil.

Per això avui en dia molt pocs programen en baix nivell, i queda reservat per a alguns enginyers que fan controladors (drivers) on la velocitat és crucial o bé no hi ha una altra manera de fer-ho que emprar certs components de la màquina.

La majoria de gent avui en dia programa en llenguatges d’alt nivell, on no t’has de preocupar de quines peces hi ha per sota.

Exemple de llenguatges d’alt nivell són: PHP, Java, microsoft .NET.

Un llenguatge de mig nivell (entre la màquina i els humans) és el C.

El llenguatge de baix nivell és l’ensamblador (el de mov ax, dx) que és el mes semblant al que parla la màquina (0 i 1 en realitat).

Compilar o interpretar

Precisament, perquè l’ordinador només entén 0 i 1, necessitem algun programa que transformi els nostres programes en que es poden llegir i entendre al llenguatge que entén la màquina, que s’anomena codi màquina o codi binari.

L’ordinador només entén uns – voltatge positiu o zeros.

Al principi els programadors programaven amb uns i zeros, però era òbviament molt difícil de mantenir programes d’aquesta manera.

Trobar errors i fer modificacions era una feina realment complicada.

Per això es van crear els compiladors.

Els compiladors agafen un programa fet en un llenguatge d’alt nivell, mig o baix, i el transformen en codi màquina, que és l’únic que l’ordinador finalment entén.

Però no tots els programes es compilen.

Hi ha uns llenguatges que es diuen interpretats. Això vol dir, que enlloc de compilador, hi ha un intèrpret que en temps real tradueix el llenguatge de programació a codi màquina.

Els llenguatges interpretats mai són tan ràpids com els que es compilen per aquest motiu, perquè l’intèrpret els tradueix sobre la marxa i ha de fer les traduccions del llenguatge a codi màquina.

Diem que interpreta el codi en temps real o on-the-fly (al vol).

PHP és un llenguatge interpretat. Això fa que certament no sigui tan ràpid com el codi en C compilat, però el fet de ser interpretat ofereix alguns avantatges com el fet que un codi en PHP funciona en un Linux, en un Windows, en un Mac, en un Solaris… simplement és qüestió de crear intèrprets per als ordinadors (o mòbils) que sigui i tots els programes escrits en PHP ja funcionaran.

Per exemple, parem atenció a aquest codi en PHP:

<?php
 echo 'Hola Catalunya!\n';
?>

Aquest codi imprimirà per pantalla el missatge Hola Catalunya en qualsevol ordinador amb PHP instal·lat en que l’executem.

No és genial?. :-)

A la imatge el fitxer hola.php executat en el meu Linux. En un ordinador amb windows produeix la mateixa resposta.

Els llenguatges interpretats també s’anomenen de vegades llenguatges de script (script és un guió en anglès).

Perquè PHP?

Per diversos motius.

PHP és un programari lliure, això vol dir que el podem utilitzar sense pagar res, és molt potent, ve preparat amb moltes llibreries per a fer moltes coses com connectar-se a bases de dades, comprimir en format zip, etc… i està orientat a treballar en web.

Facebook per posar un exemple, utilitza PHP, així com la majoria d’empreses líders d’Internet.

Segons la Wikipedia el 75% dels servidors Web d’Internet utilitzen PHP com a llenguatge de programació.

PHP s’integra amb els principals servidors web.

Per tant, per aprendre a programar en PHP necessitarem instal·lar en el nostre ordinador un servidor web, per exemple Apache, també i PHP.

Podem instal·lar un programa com ara Wamp, que inclou en un Apache, MySql, i PHP.

Per programar ens podem instal·lar un programa com Notepad++ que és gratuït i posa colors a les instruccions PHP. Hi ha altres IDE (entorns de desenvolupament) més potents, però ja ho anirem veient. Poc a poc.

De moment instal·lem Wamp i Notepad++.

Ho normal és que necessiteu la versió de 32 bits: http://www.wampserver.com/en/dl32.php

Adreça curta Twitter d’aquest article: http://wp.me/pzeab-1It

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

PHP: Conèixer les constants definides per l’usuari

dijous, novembre 25th, 2010

Si tenim un programa gran, on es defineixen moltes constants, ens pot interessar saber quines són.

Per a això executarem aquest codi:

$const = get_defined_constants(true);
print_r($const['user']);

Amb això aconseguirem totes les constants que han estat definides pel nostre programa, i no es mostraran les que incorpora PHP.

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Localitzar errors a les Exception de PHP

dilluns, novembre 15th, 2010

Podeu debuguejar els errors dins del catch de les Exception:

throw new Exception("Exception a l'arxiu ".__FILE__.' línia '.__LINE__.', class '.__CLASS__.' funció '.__FUNCTION__.': '.$e->getMessage());

Si no programeu amb classes treieu la part de __CLASS__.

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Sql per a cercar dins de procediments emmagatzemats (stored procedures), funcions…

dimecres, octubre 27th, 2010

Un amic m’ha passat aquesta consulta per a MySql que permet buscar dins el codi dels procediments emmagatzemats i funcions de Mysql.

SELECT ROUTINE_NAME, ROUTINE_SCHEMA, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%text%'
ORDER BY ROUTINE_NAME

La consulta Sql és realment ràpida i per a res satura el servidor MySql, per molt que hi hagi moltes taules, grans, i moltes funcions i procediments, però si encara la voleu fer córrer més ràpid la podeu acotar per routine_schema.

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Solució problema Internet Explorer 7 i getAttribute setAttribute

dijous, agost 5th, 2010

Detallo aquí com solucionar un problema molt incòmode, que és la capacitat d’accedir a la propietat ACTION d’un formulari amb Internet Explorer 7, ja sigui mitjançant qualsevol d’aquests mètodes:

var s_adreca = document.formulari.getAttribute('action');
var form = document.getElementById('formulari');
document.getElemenyById('formulari').setAttribute('action') = 'http://www.codic.cat';
document.formulari.action = 'http://www.codic.cat';
document.forms[0].action='http://www.codic.cat';

Mentre que funciona amb qualsevol altre navegador: Chrome, Firefox, Opera o fins i tot internet explorer 8.

Encara que trobareu moltes webs que parlen d’un bug a Internet Explorer 7 no és ben bé així.

Segur que dins els vostre codi teniu una variable de tipus INPUT , probablement HIDDEN que duu el nom (name) d’ ACTION.

<form id="form" action="penca.php">
  <input name="action" type="submit" value="afegir" />
</form>

Aquesta és una paraula reservada que fa conflicte en el cas d’internet explorer 7, i la solució és tan simple com dir-li ACCIÓ o de qualsevol altra manera enlloc d’ACTION.

Enlloc de:

// Enlloc de:
<input type='hidden' name='action' value='afegir'>
// Emprar accio i no acció (millor sense accents per a evitar problemes UTF-8 i altres joc de caracters):
<input type="hidden" name="accio" value="afegir" />

Els apòstrofs dobles i tancar el tag simple amb / formen part de la especificació xhtml.

Aquí cobreixo alguns aspectes sobre xhtml que, si programes, necessites saber.

A la web WebDev he trobat un truc per recuperar el valor del form tot i aquesta desafortunada coincidència:

var form = document.getElementById('form');
var action = form.getAttributeNode('action').value;

Al fòrum de siteexperts.com hi ha diverses aproximacions:

<script type="text/javascript">

    alert(document.forms[0].action); // és un objecte

    alert(document.forms[0].action.value); // mostra "Hola", no l'action del formulari com "penca.php"

    alert(document.getElementsByTagName("FORM")[0].getAttribute("action")); // és l' INPUT, no el FORM 

</script>
Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Crear un procediment emmagatzemat en MySql que retorni paràmetres

Dimarts, agost 3rd, 2010

Els procediments emmagatzemats (stored procedures) poden tenir paràmetres d’entrada IN i paràmetres de sortida OUT.

Per a definir aquest procediment empraríem un codi SQL com ara aquest:

CREATE PROCEDURE `codic_envia_mail`(IN `S_PLANTILLA` VARCHAR(50), IN `I_USUARI` INT, IN `S_TIPUS` VARCHAR(5), IN `I_CODI` INT, IN `S_PARAM1` VARCHAR(50), IN `S_PARAM2` VARCHAR(50), IN `S_PARAM3` VARCHAR(50), OUT `I_MAILPK` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN

Els paràmetres d’entrada són les dades que li passem al procediment, i els paràmetres de sortida són els que ens permeten recuperar amb una altra comanda SELECT les dades que ha preparat el procediment.

En la imatge superior es passen 7 paràmetres d’entrada i un de sortida @I_MAILPK.

A nivell de codi PHP i ZendDb cridaríem el procediment i recuperaríem la variable de sortida amb un codi similar a aquest:

$s_variable_de_sortida = '@I_MAILPK';
try {
    $o_sel=dbHandler::getAdapter()
    ->query("CALL codic_envia_plantilla('{$s_plantilla}', {$i_usuari}, '{$s_tipus}', {$i_codi}, '{$s_parametre1}', '{$s_parametre2}', '{$s_parametre3}', {$s_variable_de_sortida})");
    // Recuperar la variable de sortida. Pe: @I_MAILPK
    $o_sel2=dbHandler::getAdapter()
        ->query("SELECT {$s_variable_de_sortida}");
    // Nota: Encara millor si feu servir la substitució amb ? ja que llavors és ZendDb qui filtra possibles caracters problemàtics
    $o_sql = "CALL codic_envia_plantilla(?, ?, ?, ?, ?, ?, ?, {$s_variable_de_sortida})";
    $o_sel=dbHandler::getAdapter()
	-->query($s_sql, array($s_plantilla, $i_usuari, $s_tipus, $i_codi, $s_parametre1, $s_parametre2, $s_parametre3));

    // Recuperar la variable de sortida. Pe: @I_MAILPK
    $o_sel2=dbHandler::getAdapter()
        ->query("SELECT {$s_variable_de_sortida}");

    if ($o_sel2->rowCount() > 0){
        $st_dades = $o_sel2->fetch();
        $i_resultat = $st_dades[$s_variable_de_sortida];
        return true;    // S'ha executat bé, sortim de la funció retornant true
    }
    else
    {
        // El procediment no ha retornat cap valor dins la variable
        // així que no ha anat bé
        return false;
    }
} catch (Exception $e) {
    // Hi ha hagut una excepció (Exception)
    throw new Exception('Excepció enviant el correu: '.$e->getMessage());
}

Els prefixes $s_ $i_ ens indiquen quin tipus de variable és:

$s_ string, cadena de caracters
$i_ integer, número sencer
$b_ boolean, valor booleà true/false >0 o 0/null/blanc
$st_ structure, estructura, com ara un array
$o_ object, objecte per exemple de base de dades

La variable de sortida a MySql porta l’ensaïmada o arrova davant.
Podem utilitzar altres notacions com $r_ per als arrays, etc.. però és important de cara a la llegibilitat del nostre codi sempre emprar la mateixa notació.
Emprar aquests prefixes ens estalviarà errors de programació, per exemple sumar cadenes amb números.

Un exemple de programació sense ZendDb i dos paràmetres de sortida:

mysql_query = "call sp_GetUsers('ProjectName',@ErrorNumber, @ErrorMessage)";
$result = mysql_query('select @ErrorNumber, @ErrorMessage');
$row = mysql_fetch_assoc($result);
print_r($row);

Com veieu sense indicar els prefixes resulta força menys intuitiu.

Per a més exemple de crides IN/OUT sense ZendDb podeu veure:

http://www.herongyang.com/jdbc/MySQL-CallableStatement-Procedure-Parameters.html

http://www.tek-tips.com/viewthread.cfm?qid=1441148&page=10

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Javascript Debugger per a Firefox (complement)

dissabte, juny 26th, 2010

Si programeu en web, segur que tindreu el complement per a Firefox Firebug, però hi ha un parell d’eines que us vindran molt bé.

Una el complement Javascript Debugger.

Una altra utilitat que us resultarà magnífica és l’eina per a programadors integrada a l’Opera, butterfly (papallona).

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Trucs per a Eclipse

diumenge, maig 16th, 2010

Us passo uns truquets per a ser més eficients programant en l’entorn eclipse:

1) Si escriviu el nom del model i premeu les tecles CTRL i ESPAI es mostren els mètodes del model per a completar automàticament

NomModel::[CTRL + ESPAI] Mostra els mètodes del Model

2) Prèmer el botó dret del ratolí sobre el mètode i seleccionar Open declaration o prèmer F3 fa el mateix efecte: ens porta a la funció en qüestió

3) Posar el començament del nom de la variable i CTRL + ESPAI auto completa

4) Prémer CTRL i passar el ratolí per sobre del nom de la funció, fa que aparegui subratllada, com un hipervincle, i si hi cliquem ens hi porta directament.


5) Si no teniu el projecte definit com PHP, premeu amb el botó dret sobre el projecte, Configure i Add PHP support. Això us proporcionarà control d’errors del codi PHP.

6) CTRL i punxar amb el mouse sobre el nom de variable (subratllada) ens porta a la primera aparició de la variable dins la funció.

7) Es pot ordenar la llista de mètodes/funcions de la nostra classe/arxiu, encara que a l’arxiu original apareguin desordenades, amb el botonet d’orderna a dalt a la dreta.

8) Activar la notació de colors per a comandes SQL, Procediments Emmagatzemats (stored procedures), funcions…

Primer indiquem que volem instal·lar nou programari:

Seleccionem el repositori Galileo.

Seleccionem les eines de desenvolupament per a Bases de Dades.

9) CTRL + H per a obrir la finestra de cerca a arxius (File Search)

10) CTRL + SHIFT + R per a obrir la finestra d’anar a un recurs (a algunes versions d’Aptana CTRL + T)

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Notepad++ editor per a programadors

Dimarts, maig 4th, 2010

Notepad++ és un editor Programari Lliure, per tant completament gratuït, que té unes qualitats que el fan una eina imprescindible per a qualsevol programador/a.

No només es pot comparar sinó que supera a d’altres eines comercials.

Destaco algunes de les seves qualitats:

– És Programari Lliure

– És disponible en Català

- Té un assistent per a completar les instruccions de diferents llenguatges (auto-completion en anglès): PHP

– Indica molt visualment i agradable, la indentació de les línies

– Ressalta la sintaxi i de manera personalitzable

– Es poden personalitzar els colors i molts aspectes de l’aparença externa

– Permet crear macros

– Crea còpies de seguretat dels arxius amb els que treballem

– Permet cercar i substituir expressions regulars

– Salt de línia (word-wrap, per a quan les línies no hi caben en pantalla)

– Es pot emprar des d’un clauer USB, sense instal·lar-lo (opció no emprar %APPDATA%)

Us en mostro una captura de pantalla de la seva aparença editant un arxiu XML, que és l’arxiu .project que guarda la configuració de l’editor Eclipse:

Adjunto una captura de pantalla de la configuració, on haureu d’afegir les opcions de suggeriments de completar funcions (auto-completion)

Una mostra de com mostra el codi (estructura, espais, colors):

El podeu descarregar de la seva web:

http://notepad-plus.sourceforge.net/ca/site.htm

L’adreça directa de descàrrega és:

http://sourceforge.net/projects/notepad-plus/files/notepad%2B%2B%20releases%20binary/

Truc: Si premeu amb el botó dret i moveu la rodeta del mig del ratolí podeu canviar fàcilment i ràpida d’arxiu entre els que teniu oberts:

Un altre truc:

Si premeu la tecla ALT, podeu seleccionar, amb el ratolí, un quadrat de text, i en escriure se substitueix tot el quadrat:

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Programació en PHP: Instal·lació d’Eclipse per a Windows

diumenge, març 21st, 2010

Aquest petit vídeo explica, en Català, com instal·lar l’entorn de programació Eclipse a Windows per a programar en PHP.

La idea és anar donant un seguit instruccions sobre com programar en PHP.

Podeu descarregar l’IDE d’Eclipse des de la pàgina de descàrregues d’ IDE Eclipse.

Podeu descarregar el Java Runtime Environment – JRE des d’aquí.

Adreça curta d’aquest article:

http://wp.me/pzeab-1fI

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy