31 de gen. 2009

Dojo, una gran opció per aplicacions client.

Vull compartir amb vosaltres la experiència de la darrera aplicació que he desenvolupat.
Ha estat una aplicació web d'ús intern per l'ajuntament de Celrà.

La aplicació com veureu en les imatges de més avall és relativament senzilla i no presenta cap complicació en sí; la aplicació vindria a ser la nova versió d'un "adp" de Microsoft Access i per tant les funcionalitats ja estan molt definides a excepció d'afegir que en dos tipus entitats s'han de poder adjuntar fitxers.

La tasca que se'm havia encomanat, era acabar la aplicació que havia començat un antic company de feina i no va poder acabar la aplicació ja que va plegar.

Com molts programadors fan, vaig agafar la aplicació que em va deixar el meu company i en vaig reescriure moltes parts, i vaig acabar els punts que no estaven completats.

Us haig de confessar que no tenia ni idea de la aplicació que s'habia de substituir.

Arriba el dia que vaig a ensenyar la maqueta del que havia estat fent, i vaig veure que hi habien alguns aspectes no els havien acabat de convèncer i arrufaven un xic el nas.
Ells llistats, ara s'havia de passar pàgina, i fins ara en la aplicació actual tot és un llistat, on tranquil·lament llisten 22.000 registres.
Els formularis de crear i modificar una entitat, volien que fossin una finestra centrada en la mateixa pàgina.

Un xic preocupat de com havia d'afrontar la situació, vaig recordar que temps enrera havia estat fent proves amb un framework de javascript que tenia objectes "grid"(taula) per a grans volums de dades,... el Dojo, i si vaig fer unes proves i al final vaig decidir apostar per aquest framework de javascript.

I aquestes algunes pantalles de la primera versió que els he muntat i que sembla que han agradat bastant.





Per acabar, us comento les tecnologies escollides a la part servidora han estat:
Com a llenguatge de programació he escollit php 5.x
Per a un desenvolupament més ràpid, àgil i orientat a objectes m'he ajudat d'aquests frameworks: el Zend Framework i PhpDoctrine.
Com a motor de base de dades Mysql 5.

En la part servidora per tal de millorar la execució del php he instal·lat les llibreries d'eAccelerator, que en alguns casos m'han donat millores de més d'un 50 % en el temps d'execució.

Quercus i Zend Framework, la cosa no funciona.

Fa moltes dies que havia d'haver publicat aquesta entrada, però he estat molt ocupat amb les pràctiques del Cap i ja no pensava.
Bé, la qüestió es que no m'ha funcionat. No he pogut fer funcionar una aplicació desenvolupada amb Zend Framework amb el "Quercus".
He provat també el Kohana, i el problema és el mateix, hi ha una serie e classes i métodes que encara no estan implementats.
He escrit un missatge al fórum de "Quercus" i de moment sembla que no interessa a gaire gent.
http://forum.caucho.com/?q=node/224
La dedució que n'he tret de tot això, és que "Quercus" està bastant lluny de ser considearda una opció per entorns empresearials.

2 de des. 2008

Jetty php

Fa uns dies que vaig comentar que faria aquest article. A continuació us detallo com fer que el Jetty interpreti els "scripts" de php.

El primer que hem de fer és descarregar-nos el Jetty, ho podem fer des d'aquest enllaç:
http://dist.codehaus.org/jetty/jetty-6.1.14/jetty-6.1.14.zip
Un cop descarregat, el descomprimim al disc dur.
Per poder executar fitxers de php necessitarem el "Quercus", una implementació 100% java del php.

El descarreguarem de http://quercus.caucho.com/download/quercus-3.2.1.war
Un cop al disc, renombrem el fitxer quercus-3.2.1.war a php.zip,
descomprimim el fitxer i copiem la carpeta php a jetty-6.1.14/webapps.
Ens situem a dins de la carpeta del jetty i executem la següent comanda.

java -jar start.jar



obrim el navegador i posem la següent adreça http://localhost:8080/php/ .
Ara hem de veure el següent:



Bé, ja hem aconseguit fer funcionar un script de php dins un entorn d'execució java.

Ara el pròxim pas, es fer que funcioni la connexió a una base de dades, per aquest article escollirem el mysql.
El primer que farem és aturar l'execució del Jetty, per fer-ho des de la consola on hem executat java -jar start.jar premerem les tecles Ctrl+c.

Per poder fer funcionar el mysql en un projecte java necessitem el connector jdbc de mysql, que el podem descarregar del web de mysql:
http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.0.8.zip/from/http://mysql.rediris.es/
Un cop al disc, el descomprimim i copiem el fitxer mysql-connector-java-5.0.8-bin.jar a la carpeta jetty-6.1.14\webapps\php\WEB-INF\lib
Creem el fitxer jetty-6.1.14\webapps\php\WEB-INF\jetty-env.xml amb aquest contingut:



jdbc/MyDataSource


jdbc:mysql://localhost:3306/prova
root
alex





Aquí heu de configurar les dades de connexió a la base de dades segons el vostre cas.
Editem el fitxer fitxer jetty-6.1.14\webapps\php\WEB-INF\web.xml i hem d'afegir això


jdbc/MyDataSource
javax.sql.DataSource
Container


database
jdbc/MyDataSource


a la part final abans del tancament de web-app.
Ara crearem el nostre escript que es connecti a la base de dades amb unes instruccions bàsiques.
Creem el fitxer jetty-6.1.14\webapps\php\prova.php*


$host="localhost";
$database="prova";
$username="root";
$password="alex";
$db = new PDO("mysql:host=$host;dbname=$database", $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM area";
$sth = $db->prepare($sql);
$sth->execute();
$rows = $sth->fetchAll( PDO::FETCH_ASSOC );
print_r($rows);


*Heu de posar els tags d'inici i fi de php, el blogger no me'ls deixa escriure.

Tornem a executar java -jar start.jar
i obrim el navegador a http://localhost:8080/php/prova.php
En el meu cas veig:













En els pròxims dies publicaré com fer que funcioni el zend framework en aquest entorn.

1 de des. 2008

Pampalluguejos ubuntu

Una cosa molt molesta que m'he trobat al treballar amb Ubuntu, ha estat que quan ha d'emetre un senyal sonor, per exemple quan borres i no queda res per borrar, és que Pampallugueja la pantalla.

Per treure aquesta funcionalitat s'ha de obrir el menú "Sistema >preferències > So"

A la finestra que surt, s'ha d'escollir la pestanya "Sons", i al llistat d'opcions i veureu a "alerta visual", doncs en aquesta s'ha de canviar el valor per "inhabilita".

15 de nov. 2008

Jetty i ecplipse

Es pressuposa que tenim un projecte web de java creat amb eclipse.
les versions amb les quals treballo són.
Eclipse 3.4
Jetty -6.1.14

Si volem donar d'alta com a "runtime" el jetty el que s'ha de fer és el següent.

File > properties

Escollim"targeted Runtimes" al llistat de la esquerra de la finestra que ens apareix,
després fem clic al botó "new" i ens apareix una altra finestra on veurem un enllaç de color blau que posa "Download additional server adapters", premem aquest enllaç i en la finestra que ens apareix escollim "Jetty Generic Server Adaptor" i premem el botó "next" i fer la resta de passes.

Anem a posar en marxa el projecte.
Seleccionem el projecte i fem clic al boto dret del mouse, del menú contextual hem d'escollir:
Run as > Run On server
Ens sortirà, d'entre varies el Jetty, l'escollim i omplim la casella que ens demana on tenim la nostra instal·lació.

Pròxim article relacionat: Jetty+php

30 d’oct. 2008

Tornar objectes buits amb asp



Class ImplContenidorDao
Public Function getContenidorPerCodi( codiContenidor )
Dim sql, rs, elContainer, resposta

sql = "SELECT * FROM re_contenidor WHERE codi ='" & codiContenidor & "' and arxiu = 0"
Set rs = conBd.query( sql )

If not rs.eof Then
Set elContainer = createobject("Scripting.Dictionary")
elContainer.Add "tipus", trim(rs("tipus"))
elContainer.Add "codi", trim(rs("codi"))
elContainer.Add "adreca", trim(rs("adreca"))
elContainer.Add "municipi", trim(rs("municipi"))
Set getContenidorPerCodi = elContainer
Else
Set getContenidorPerCodi = nothing
End If

End Function
,...
End Class

Dim ContenidorDao : Set ContenidorDao = new ImplContenidorDao

'------------------------------------------------------------------------------------
Dim idContenidor, rsContenidor
idContenidor = Utils.vigilaPost( Request.QueryString("idContenidor") )
Set rsContenidor = ContenidorDao.getContenidorPerCodi( idContenidor )
If rsContenidor is Nothing Then
Response.write("No he trobat res!!!")
Else
Response.write("Trobat")
End If

26 d’oct. 2008

Openoffice.org 3

Corregeixo el que vaig escriure fa uns dies ja que des de dijous ja es pot descarregar de Softcatalà.org la nova versió en català de l'OpenOffice.org
La adreça és:
http://www.softcatala.org/wiki/Rebost:OpenOffice.org



Com molts ja sabreu ha sortit una nova versió de la suite d'ofimàtica OpenOffice.org .
Bé, en català de moment no ha sortit de forma estable, però en podem descarregar una versió de proves:
http://www.corrius.org/ooo3/OOo_3.0.0_081009_Win32Intel_install_ca.exe

Us heu d'instal·lar el diccionari, sinó no podreu corregir els vostres documents. Per fer-ho aneu a aquesta adreça:
http://extensions.services.openoffice.org/project/dict-catalan
us descarregueu el diccionari fent clic a la imatge de "Get it!".
Un cop al disc dur, feu doble clic al fitxer i s'executarà el gestor d'extensions de l'OpenOffice, premeu d'"Acord" i "Accepta" i ja està.
Una consideració, per tal que funcioni correctament, heu de tancar qualsevol dels programes que tingueu oberts de l'OpenOffice, inclòs l'"Inici ràpid".

Us deixo un enllaç a la web de l'ajuntament de Barcelona, on hi ha manuals sobre l'OpenOffice

http://w3.bcn.es/XMLServeis/XMLHomeLinkPl/0,4022,339756680_370128421_1,00.html