Arg! Java i PPC Linux

Escrit per Aaloy a 31 de July , 2005 a les 11:11 p.m.

Doncs això, avegades és desesperant. Se suposa que tenc una maquinota i va molt més lent que la màquina que tenc a la feina. A més l'Eclipse es mor a la mínima. Quan vaig comprar el PPC la veritat és que m'esperava més rendiment i m'esta defraudant.

M'estic plantejant sèriament comprar una màquina nova per al desenvolupament Java i destinar el G5 a tasques no relacionades amb la programació amb Eclipse i Java. La veritat és que va molt bé com a servidor, he fet algunes proves amb Postgres i tira molt bé, el problema és no poder desenvolupar en condicions... No és que desenvolupi a casa, però m'agrada investigar i provar coses que a la feina no tenc temps de provar i és desmoralitzant veure que no puc avançar al ritme que m'agradaria per mor del maquinari.

Les màquines de nucli dual de Dell estan molt bé de preu, o els de Miró, que tenen Compaq AMD Duron, en ambdos casos amb pantalla TFT de 17" inclosa per menys de 1200 Eur IVA inclòs. Estaria bé poder fer una comprarativa de rendiment d'aquestes màquines. La versión 5 del JDK té port per AMD 64 bits i també en tenen moltes de les distribucions Linux, en concret Debian i Ubuntu, així que no em faria res poder provar aquestes maquinetes. Ara tot és saber d'on treure 1200 Eur :O

0 comentaris, 0 trackbacks (URL) , Tags: Java


Velocity

Escrit per Aaloy a 31 de July , 2005 a les 10:45 p.m.

Ahir vaig estar llegint-me la documentació de Velocity un sistema de plantilles fet en Java i que es pot integrar dins aplicacions clàssiques o web. La integració dins una aplicació de consola ha estat trivial, sols seguir l'exemple de la documentació. L'únic entrebanc que m'he trobat ha estat amb la part del loggin. Velocity fa servir per defecte el logger del projecte Avalon, projecte que està tancat. Així que m'he disposat a canviar de logger pel més habitual Log4j i aquí han començat els problemes, ja que Velocity està prepart per fer servir Category com a mecanisme per establir el tipus de log (info, debug, warn, ...) i les noves versions de Log4j han abandonat aquesta via i sols utilitzen el logger. Això ha fet que m'estigués barrallant una bona estona amb tot això, primer per descobrir que em faltava el l'Avalon LogKit i després per substituïr-ho per Log4j. Finalment l'exemple ha quedat així:


/*

  • Copyright 2000-2001,2004 The Apache Software Foundation.
  • Licensed under the Apache License, Version 2.0 (the "License");
  • you may not use this file except in compliance with the License.
  • You may obtain a copy of the License at
  • http://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS,
  • WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  • See the License for the specific language governing permissions and
  • limitations under the License.

*/ import org.apache.velocity.app.Velocity; import org.apache.velocity.VelocityContext; import org.apache.velocity.Template; import org.apache.log4j.; import org.apache.log4j.Logger; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; import java.io.; import java.util.ArrayList;

/

  • This class is a simple demonstration of how the Velocity Template Engine
  • can be used in a standalone application.
  • Fent servir log4j com a logger. *
  • @author Jason van Zyl
  • @author Geir Magnusson Jr.
  • @author aaloy
  • @version $Id: Example.java,v 1.4.8.1 2004/03/04 00:18:29 geirm Exp $ */

public class Example

{ static Category logger = Logger.getLogger(Example.class.getName()); public Example(String templateFile) { BasicConfigurator.configure(); // Now set its priority. logger.info("Proves ...."); logger.debug("Iniciant"); try { /* * setup / logger.debug("Carregant les propietats"); Velocity.init("velocity.properties"); logger.debug("Propietats carregades"); //Velocity.init(); / * Make a context object and populate with the data. This * is where the Velocity engine gets the data to resolve the * references (ex. $list) in the template */

        logger.debug("Carregam el contexte");
        VelocityContext context = new VelocityContext();
        logger.debug("Contexte carregat");
        context.put("list", getNames());
        /*
         *  get the Template object.  This is the parsed version of your 
         *  template input file.  Note that getTemplate() can throw
         *   ResourceNotFoundException : if it doesn't find the template
         *   ParseErrorException : if there is something wrong with the VTL
         *   Exception : if something else goes wrong (this is generally
         *        indicative of as serious problem...)
         */

        Template template =  null;
        try 
        {
            template = Velocity.getTemplate(templateFile);
        }
        catch( ResourceNotFoundException rnfe )
        {
            logger.debug("Example : error : cannot find template " + templateFile );                
        }
        catch( ParseErrorException pee )
        {
            logger.debug("Example : Syntax error in template " + templateFile + ":" + pee );
        }
        /*
         *  Now have the template engine process your template using the
         *  data placed into the context.  Think of it as a  'merge' 
         *  of the template and the data to produce the output stream.
         */
        BufferedWriter writer = writer = new BufferedWriter(
        new OutputStreamWriter(System.out));
        if ( template != null)
            template.merge(context, writer);
        /*
         *  flush and cleanup
         */
        writer.flush();
        writer.close();
    }
    catch( Exception e )
    {
        System.out.println(e);
    }
}
public ArrayList getNames()
{
    ArrayList list = new ArrayList();
    list.add("ArrayList element 1");
    list.add("ArrayList element 2");
    list.add("ArrayList element 3");
    list.add("ArrayList element 4");
    return list;
}
public static void main(String[] args)
{
    //Log myLog;
    Example t;
    Example.logger.info("Arrancant");
    //myLog = LogFactory.getLog(Example.class);
    //myLog.info("Iniciant");
t = new Example("example.vm");
//myLog.info("Acabat");
}

}

El arxiu de plantilla està agafat directament de l'exemple de velocity així que m'estalvio de posar-ho.

Els arxius de configuració que he fet servir són

log4j.properties

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%p [%t] [%c] %C{1}.%M(%L) | %m%n
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n


velocity.properties
runtime.log = velocity_example.log
runtime.log.logsystem.class=org.apache.velocity.runtime.log.SimpleLog4JLogSystem
log4j.logger.org.apache.velocity.runtime.log.SimpleLog4JLogSystem=DEBUG

Pel rootLogger he anat a sac, però s'ha d'anar alerta si feim servir aquesta configuració en un altre tipus d'entorn, una aplicació J2EE per exemple, la quantitat d'informació que surt enlenteix molt la posada en marxa de l'aplicatiu.

Amb tot això ja tenc mig enllestit el primer projecte que em permetrà tenir la base de futurs desenvolupaments: Struts, Velocity, JSP2 i Hibernate ja funcionen plegats i sols falta que l'aplicatiu faci alguna cosa de profit, com escriure a la base de dades quelcom interessant, però encara no he decidit quina miniaplicació fer.

Em falta ara integrar una parell de d'utilitats d'interfície d'usuari (ja tenc el calendari i l'editor de texts), menús i posar un mini-exemple d'Ajax. A l'inici tot això duu una feinada, costa molt lligar-ho tot i fer un mini projecte així, però una vegada fet servirà de base a futurs desenvolupaments. Esper poder-ho penjar per aquí aviat.

0 comentaris, 0 trackbacks (URL) , Tags: Java


De vacances

Escrit per Aaloy a 29 de July , 2005 a les 1:12 a.m.

Bé, pareix que el canvi de responsabilitat a la feina té algunes coses bones: menys stress i mens responsabilitat. Això fa que em pugui agafar quinze dies de vacances seguits. Feia ja un grapat d'anys que no podia fer-ho i mira, em fa certa i·lusió. Aquest estiu ens visita el meu padrí jove, de València. Fa també un bon grapat d'anys que no el veig i em fa ganes. El fotut d'això, però és agafar les vacances a l'estiu: s'està tan bé a l'oficina amb l'aire condicionat! A més tradicionalment als negocis turístics els mesos d'estiu són mesos tranquils pels departaments de programació. Tot el que no s'hagi posat en marxa ja no s'hi posa, i es bona època per poder fer feina sense presió. Tenc un grapat de coses pendents a fer aquest estiu, i com no pot ser d'altra manera la majoria quedaran fora fer. Si no hi ha manera de trobar ningú a l'estiu! Tothom és de vacances! Amb un poc de sort potser m'arribaran els dos llibres que vaig comanar a Amazon:
  • Professional Java Development with the Spring Framework
  • Ant: The Definitive Guide, 2nd Edition
Segons veig m'haurien d'arribar entre dia 2 i dia 9. Esperem que sigui més aviat que tard i tengui temps de pegar-los una bona llegida abans de començar a fer feina una altra vegada. Potser els hauria haver de demanat per correu urgent, però em sap greu pagar més pels transport que pels llibres i tot i això la broma em surt per prop de 60 Eur. L'Spring és un bastiment que darrerament està agafant molta força, segons es diu és més potent que l'Struts, el bastiment MVC que faig servir actualment. El llibre ha sortit fa poc i promet ser un bon tutorial i una bona referència del bastiment, esper que sigui així. Tot i això no crec que canviï cap a Spring per ara: encara estic començant a controlar Struts i m'estim més dominar un poc més la tecnologia que tenc entre mans abans de decidir si és factible o bo canviar-la per una altra. Per ara els experiments a casa i amb gasosa. El que segur que aprofitaré tant a la feina com a casa és l'Ant. Tothom en xerra molt bé d'aquest llibre i supòs que em servirà per millorar el coneixement que tenc d'aquesta potent eina. Ara per ara l'esteim fer servir per accelerar el procés de compilació/distribució/recàrrega de les aplicacions Java que feim. Ha resultat ser molt més còmode l'opció de l'Ant que els plugins que hi ha tipus Lomboz o MyEclipse que se n'encarreguen dels procés de distribució. Amb el poc domini que tenc ara de l'Ant al manco ja em puc permetre de fer que els arxius build.xml que acompanyen a alguns exemples s'adaptin un poc més a les meves necessitats. Per exemple, copiant l'arxiu .war al directori on tenc instal·lat el Tomcat. A tot el món que envolta el Java hi ha molt per llegir i aprendre, potser massa i tot, i la majoria de coses interessants es fan al voltant del codi obert: Struts, Hibernate, Ant, Quartz, Spring, Axis i Drools, per aquest ordre tenen per ara la meva atenció. Alguns com Struts i Hibernate ja els faig servir en aplicacions de producció, els altres tenen molts números per acabar integrats en alguna de les aplicacions que esteim fent. Hibernate és un dels bastiments que més m'està agradant fer servir. El llibre Hibernate in Action es fantàstic, no ja per que explica del bastiment, com pel que explica dels problemes del model orientat a objectes quan es passa al model relacional. A més de tot això ens ha servit per descobrir algunes petites meravelles que potser no hagués descober fins molt més tard amagades dins la Web. Una d'aquestes petites meravelles és la capacitat que té de crear camps calculats dins la definició de l'arxiu XML de mapeig de les taules. Això fa que el POJO que es genera a partir d'aquest arxiu tengui el camp calculat com a una propietat més i que se pugui fer servir en les sentències HQL. L'altra meravella està també relacionada amb l'HQL, Hibernate et permet utilitzar un objecte com a contenidor del resultat d'una consulta. Així si esperam que una consulta tengui tres camps (numèric, data, cadena) podem crear una classe amb aquests atributs i utilitzar-la per a que Hibernate ens retorni una llista d'objectes d'aquesta classe com a resultat. Això estalvia moltes línees de codi i molts errors, ja que deixam de tractar amb matrius d'Object. Resolt el problema de la persistència, amb la part d'Ajax (XMLRequest) que cada cop agafa més empenta i amb un conjunt de javascripts de codi obert potentíssims pel maneig de calendaris i edició de texte, veig cada cop més viable l'objectiu de realitzar vetaderes aplicacions web, riques en expresivitat i fines en requeriments de client. L'aplicació que estam desenvolupant a la feina comença a ser-ne un bon exemple. Estam substituïnt clients pesats (fets en Access) d'accés a les bases de dades per navegadors web sense que hi hagi pèrdua de rendiment a l'hora d'interactuar amb l'aplicatiu, i el que és millor, sense que a l'usuari li doni la sensació de que "abans podia fer més coses", més aviat passa tot el contrari. Crec que totes aquestes novies capacitats de la web, totes les tecnologies i bastiments emergents han fet tornar a revifar el mercar dels desenvolupadors. Darrerament hi ha moltes ofertes per a programadors web, moltes per fer servir Java, menys per fer servir .net. Potser és el moment de plantejar-se algun canvi ...

0 comentaris, 0 trackbacks (URL)


Desenvolupant amb Java

Escrit per Aaloy a 10 de July , 2005 a les 3:45 a.m.

L'anada a Londres va ser productiva. És bo poder parlar d'informàtica i programari lliure amb gent de la teva mateixa empresa, encara que sigui de països diferents. L'estada a Londres va coincidir amb la proclamació d'aquesta ciutat com a seu dels jocs olímpics del 2010, no ho vaig notar gaire de totes maneres, si no fos perquè ho posava els diaris ni ho hagués notat.

Em va anar d'unes hores no trobar-me amb l'embolic de l'atemptat. Vaig passar per una de les estacions afectades damunt les cinc de la tarda. Està clar que estadísticament això no és significatiu, ja que com jo milers de persones hi passaren el dia anterior, però fa pensar que davant una situació com aquestes tothom és una víctima indefensa. No arribaré a entendre mai el perquè d'aquestes barbàries i menys que es faci en nom d'un Deu. Això em referma amb el meu agnosticisme.

Aquests dies he estat jugant amb l'entorn Java i el G5. Pareix que la única alternativa viable per ara és fer servir el Netbeans 4.1. A l'Eclipse no hi ha manera de tenir un resaltat de sintaxi decent per jsp i molt menys l'ajuda i completat. Els pluggins no acaben de funcionar, ni JBooss ni Lomboz ni tampoc el de Sysdeo per fer anar el Tomcat des de l'entorn.

Al final he optat pel Netbeans que encara que no té un depurador tan potent com el de l'Eclipse ni tants de pluggins al manco funcina en el 90% de coses que vull fer: programació de POJOs, JSP i configuració d'arxius XML.

El que sí he notat és que ni Eclipse ni Netbeans es duen gaire bé amb el Tomcat 5.5. No sé si és la configuració especial que tinc o què, però la veritat és que el Tomcat 5.0.30 és molt més ràpid a l'hora de carregar i recarregar una aplicació que la versió 5.5, i no estam parlant de dècimes de segons, la diferència pot ser de varis minuts :O

Així que per ara desenvoluparé amb Netbeans i Tomcat 5. He configurat l'entorn per a que ho admeti, així que ara per ara ja sols em quedarà configurar el tema del JNDI i Hibernate. Ja tenc enllestida la part d'Struts i EL. En la part d'EL és curiós veure que els assistents de Netbeans encara venen amb la versió anterior de JSP i hi ha que personaltizar la capçalera de l'arxiu web.xml per a tenir accés a l'especificació JSP 2.0.

Per mi és important tenir activa la opció del Expression Languaje, ja que fa que no sigui necessàri posar codi java dins la capa de presentació. Amb això i el Velocity, la propera llibreria que vull mirar me crec que ja tendré la part de presentació llesta.

Una altra cosa que he notat per ara és que l'entorn de desenvolupament Java no està pensat per a PowerPC, o al manco no per als Macs que funcionen amb Linux. No sé si és la Fedora que està carregant molt la màquina o què, però la veritat és que hi trob molta diferència entre la màquina que faig servir a la feina, un Dell a 3 GHz i 1 Gb de RAM i el meu G5 de doble processador a 2 GHz. Guanya de molt la màquina Dell i a més puc fer servir el darrer JSDK. Pel que vull fer a casa el PPC ja em va bé, però si tingués que desenvolupar aplicacions Java a casa per viure tendria que passar a màquina AMD o Intel. Això sí la pantalla d'Apple no la canvio per la TFT que tenc a la feina, està clar que els preus no són comparables ;)

De totes maneres crec que en alguns departaments de programació encara es fa feina amb màquines velles o pantalles CRT de 17". No ho acab d'entendre jo a això: un programador que fa feina amb pocs recursos vol dir que perd molt del temps esperant a a que acabi una compilació, moguent una finestra d'aquí cap allà perquè no té espai per veure el depurador i el codi a la vegada, etc. Suposem que es perd mitja hora diaria amb això, i suposem que el cost mig és de 30 Eur/hora, els càlculs són molts bons de fer i surten al voltant dels 3600 Eur de pèrdua anual per l'empresai.

Si aquesta perdua d'invertís en bon material, que suposem que anam canviant cada dos anys, tindriem un guany adicional de 5200 Eur, més i tot en funció del que es pugui treure per l'equip antic. Ara multipliquem-ho per 10 programadors: 52.000 Eur!!! Divertit, veritat?

0 comentaris, 0 trackbacks (URL) , Tags: Java


G5 amb Fedora Core 4

Escrit per Aaloy a 05 de July , 2005 a les 10:17 p.m.

Finalment sols he pogut instal·lar la Fedora Core 4 al G5, tota la resta de distribucions que he provat basades en Debian han fet figa a l'hora d'instal·lar. Pareix que hi ha un bug al kernel que junt amb els canvis que ha fet Apple als nous models fa que la màquina es quedi penjada a la instal·lació. Gràcies a Guillem per suggerir-me que provàs la Fedora, vàren ser hores de descàrrega, però al manco el tigreton ha passat a millor vida i ara i tenc el pingüí. De totes maneres la Fedora no és massa estable que diguem, té alguns errors greus a la instal·lació i en el manegi posterior de paquets. Al final vaig optar per instal·lar-ho tot i tirar de yum per a la resta d'aplicacions que m'interessaven. Damunt PPC la única màquina virtual que va més o manco bé és la d'IBM, una JDK 1.4.2 per pSeries que es pot descarregar del seu web. El JDK de 64 bits no funciona i no hi ha rastres del JDK 5. Vaig provar el nou eclipse 3.1 i funciona amb el JDK d'IBM (el que hi ha amb la Fedora no és gens estable), tot i això no hi ha cap pluggin que funcioni com toca, ni el JBOSS ni Lomboz ni el propi projecte de desenvolupament per Web d'Eclipse. Això fa que m'hagi quedat sense resaltat de sintaxis per JSP, HTML i XML, tota una putadeta. Això ha fet que em tornàs a mirar el Netbeans 4.1, ja ho duu tot inclòs, encara que anyoraré alguns plugins per Hibernate o per la gesitió de BD. No tenc massa temps per dedicar-me a programar darrerament, però estic fent un esforç per posar-me al dia en tecnologia Java i Web. Com sabeu he passat a fer de cap de projecte per l'empresa per la que faig feina i vull saber de primera mà que hi ha. A més de l'anàlisi i la gestió del projecte m'agrada poder-hi poder ficar cullarada, saber què costa realment fer les coses. Hem montat un CVS i això fa que sigui possible fer totes aquestes coses sense interferir massa amb la resta de desenvolupadors. Avui vespre parteixo cap a Londres a una reunió del comité d'Open Source de l'Empresa. No sé si serà la darrera vegada que hi podré ser, coses del meu cap! :( Tot i això aprofitaré per fer una presentació de tot el que feim en tecnologies de codi obert. Els darrers mesos hem posat en marxa moltes coses: cvs, servidors, bases de dades, wiki, cacti, bacula, etc. És difícil cuantificar el cost de productes comercials equivalents, el que sí està clar és que no seria ni tan barat ni tan fiable. Ara a més tenim un coneixement profund de com tenim instal·lades les coses. Ara a veure com se porten per Londres. Això d'arribar a la una del vespre i amb EasyJet no m'agrada gaire, que jo em perd a ca nostra!

0 comentaris, 0 trackbacks (URL)