dimecres, 24 d’octubre de 2012

L'esquema de l'aplicació a realitzar

Estic remodelant el meu escriptori com ja comentava en articles anteriors. La veritat, poques coses m'agraden més que la informàtica, seguit de prop, per les arts marcials. M'agrada tant el hardware com el software, i m'agrada fer experiments en ambdós coses. Tot i això he trobat una mica de temps per fer el que serà l'esquema que tenia en ment de l'aplicació, per a diferents platafornes mòvils. Accedir al "servei web" creat en un altre post. Per començar he creat la versió d'escriptori. He triat fer-ho en delphi, per que feia temps que no el tocava. He posat un botó per fer les accions, un grid (TStringGrid) o im XMLDocument (TXMLDocument):




Les accions les executarem en apretar el botó (més que res està posat per facilitar el debug). Tampoc he posat nom convenient als components ni res, per què total hi havien quatre i no era massa difícil distingir-los. Ni tampoc he triat una conversió molt elegant de l'XML al grid, ho he fet a mà. Pot ser, i només pot ser, la solució elegant havera segut passar-ho a un ClientDataSet i d'ahí a un DBGrid, però fer-ho així ara em costaria més el fregall que l'escurada.
El procediment que he triat és el següent:
1. Obric l'arxiu
2. Prepare el Grid: capçalera, nombre de files...
3. Navegue per l'estructura de l'xml fins arribar a l'arbre de  de personatges
4. Una vegada arribat, vaig posant en cada fila el contingut de cada node personatge

Recordem que l'estructura de l'xml era:
<xml> 
    <resposta>
        <personatges>
           <personatge>
               <id>1</id>
               <nom>Ruper</nom>
               <classe>Mag</classe>
               <nivell>10</nivell>
           </personatge>
          .... 
         </personatges>
    </resposta>
 </xml>

Ara anem al codi font:

1. Obrir l'arxiu:
          XMLDocument1.LoadFromFile('http://localhost:1000');
Simple, eh?
2. Preparar el Grid:
           i:=1; //Comptador de files
          StringGrid1.ColCount:=4;
           //Cells[Columna,Fila], ho fan a l'inrevés
           StringGrid1.Cells[0,0]:='id';
           StringGrid1.Cells[1,0]:='nom';
          StringGrid1.Cells[2,0]:='classe';
          StringGrid1.Cells[3,0]:='nivell';
3. Navegar per situar-se en el node de personatges:
       _ixmlNode:= XMLDocument1.DocumentElement;//xml
       _ixmlNode:=_ixmlNode.ChildNodes.First; //resposta
       _ixmlNode:=_ixmlNode.ChildNodes.First; //personatges
        //posem una fila per cada més una de    capçalera
       StringGrid1.RowCount:= _ixmlNode.ChildNodes.Count+1;
       _ixmlNode:=_ixmlNode.ChildNodes.First; //El primer personatge
4.Naveguem per tots els personatges, i posem els valors corresponents al GRid:
     repeat
       StringGrid1.Cells[0,i]:=_ixmlNOde.ChildValues['id'];
       StringGrid1.Cells[1,i]:=_ixmlNOde.ChildValues['nom'];
       StringGrid1.Cells[2,i]:=_ixmlNOde.ChildValues['classe'];
       StringGrid1.Cells[3,i]:=_ixmlNOde.ChildValues['nivell'];
       _ixmlNode:=_ixmlNode.NextSibling(); //visite el següent node
       inc(i);
     until (_ixmlNode=nil)


Per tal de facilitar la comprensió, posaré tot el codi font de l'event de fer click:


I ací teniu el resultat en apretar el botó (recordeu que el servidor creat anteriorment amb el node.js deuria d'estar en marxa):


dimecres, 10 d’octubre de 2012

Remodelació de l'escriptori

El lloc de treball és tant important com la resta de factors a l'hora de millorar la productivitat. És per això que tinc el bloc una mica abandonat, estic d'obres, estic remodelant el meu escriptori. De moment  ja pareix un lloc professional , i això que encara no és tot ;) Promet pujar fotos i especificacions una vegada estiga complet ;)

divendres, 5 d’octubre de 2012

Més nou o més car no significa millor

Ja du dies pegant-li voltes a fer una remodelació del meu escriptori, és un ordinador de febrer del 2010 que em vaig muntar a peces. Havia pensat canviar les meues gràfiques:

Havia pensat en comprar-me una super model, crec que m'explique bé. Comence a mirar benchmarks i m'he quedat bocabadat. Resulta que eixes dos targetes són ATI HD 5850. Òbviament, ja estan descatalogades. El model superior 6850, també descatalogat, rendeix aproximadament la meitat (és a dir que necessitaria 4 targetes i canviar la placa base per a tindre el mateix rendiment).  De diners, de moment no anem a parlar. Aleshores em plantetge que em va costar : 230€ la primera i uns 100€ la segona refurbished. 330€. Anem a veure que tenim ara per 330€. Primera aproximació, dos de la (en teoria ) actualització d'esta versió, la 7850, costarien uns 380€. La millora teòrica és entre un 5 i un 20%. En la pràctica, especialment en jocs, si gastem DX9/10 és menys d'un 5% i DX11 si qeu arriba al 20%. De moment, esta opció queda descartada (gastar-me 200€, si aconseguira col·locar de segona mà les velles per 90€). Una altra opció és una de les més potents: 7950 (uns 300€) o una 7970 (uns 400€), totes amdós em donarien amb una targeta un rendiment similar a les dos que ja tinc, només en jocs en directx11 (tenint en compte que com a molt jugaré una hora al mes, i últimament ni això, i no no sé quin serà el proper joc...)... Val, això podria deure's a què les targetes han eixit malament (les noves versions, la veritat és que la millor generació ha segut la 5XXX). El problema rau, en que si mire d'actualitzar el processador tinc pràcticament el mateix problema, tinc un AMD Phenom IIx4 965. Ara podria augmentar-lo a un x6 (6 nuclis) però si en aplicacions ja em fa prou fluid, en jocs, que jo sàpia, cap fa ús dels 4 que té, per tant tampoc no notaria la millora. I com a nota curiosa, el hardware que tinc és de febrer del 2010 i en octubre del 2012 què siga difícil d'actualitzar (no per noves versions sino per rendiment)... em pareix una estafa. A banda, que el processador continua venent-se per 40€ menys del que em va costar (em costà 140 i ara val uns 100). És a dir, que o bé els fabricants ens estafen, o ací passa algo...

dilluns, 1 d’octubre de 2012

Odie Java

Doncs això, odie Java. Quins són els motius? Bàsicament el rendiment... Acabe de posar eclipse en el que considere un "pepino" d'ordinador:
AMD Phenom II 965 3,8 Ghz (Overclock)
4 GB de RAM
Windows 7 64 bits
ATI HD 5850X2 Crossfire (açò no val per a molt en quant a l'eclipse però bé, per vacil·lar).
I el cas que no he notat molta millora respecte al portàtil dels posts anteriors un Turionx2 1,6Ghz amb 2 GB de RAM  en windows XP.
Va a pedals, hi ha un lag d'entrada molt important. Pot ser que siga per un altre cas, però ni el entorns de desenvolupament comercials més importants en l'actualitat (Visual Studio i Delphi) van més què decentment, però l'eclipse, no hi ha manera.


De tota manera, algú podria dir, pots gastar una altre editor/entorn (a una mala es pot gastar el vi),  però el rendiment no és només en quant als entorns de desenvoupament, sino als programes, van realment lentos i consumeixen massa recursos per al que gasten. Com a anècdota, en android no va tant mal, igual per què la màquina virtual que gasten és més lleugera.

Però no anava a escriure tot un post només pel rendiment ;) El motiu principal que no m'agrada, és pel funcionament d'entrada eixida. Ja no hi ha cadenes de bytes per a representar cadenes de caràcters (char *), ni tant sols String, a la que et descuides tot són Read(Write) Buffer, Adapter, Stream...  Això fa que siga molt difícil provocar i controlar desbordaments de buffer (overflow), fent que siga molt més segur que els llenguatges convencionals. Però moltes vegades et faça pensar que estàs fent, almenys a una persona que ve de programar a baix nivell en ASM. Anem a il·lustrar-ho, en VB 6 per exemple es podia accedir als components d'una Grid per les coordenades:

object.TextMatrix(rowindex, colindex) [=string]
Grid.TextMatrix(0,0)="hola";

Per fer algo paregut en Java (en aquest cas, el SDK d'android):

String[] items = new String[] { "Hola")

};
ArrayAdapter<String> ad = new ArrayAdapter<String>(
                getApplicationContext(), android.R.layout.simple_list_item_1,

                items);


 gridview.setAdapter(ad);


No sé com ho veureu, però jo ho veig d'un engorrò...