Pronto para valorar…

marzo 11, 2009 en Advertencia, ¿Sabías que...? [Delphi], Consejo, Delphi, Enlace interesante, Entrada Diario, Noticias, Noticias Delphi

Demasiado pronto para valorar el libro de Marco Cantú. Pero si que os comento que lo que llevo leído, que es exactamente los dos primeros capítulos, (concretamente 83 páginas), donde se aborda con bastante detenimiento el tema de Unicode, me parece muy interesante. Quizás lo valoraría con un adjetivo superlativo, de ser un tema que me afectase directamente. No creo que sea el caso, al menos de momento ni tengo en cartera ni guardada bajo un bolsillo ninguna aplicación que pueda necesitarlo.

Delphi 2009 Handbook

Sin embargo, supone un cambio importante en el entorno de desarrollo y al tiempo que leo el libro, intento calibrar el impacto que va a suponer en mi forma de programar. A medida que voy descubriendo su lectura veo y empiezo a comprender que no es un tema menor, por mucho que nuestro entorno de desarrollo nos oculte (como hace siempre) esos detalles de las conversiones implicitas. Podemos tener problemas si hemos confiado en la longitud de las cadenas de texto, si en aplicaciones implementadas en versiones anteriores, se valen del recuento de la longitud de los strings para el apoyo de condiciones. Tambien podríamos tener problema en la conversiones de ordinal a caracter y como ese punto, quinientos detalles mas que a primera vista pasan desapercibidos. Los tipos string, char ya nos son por defecto Ansistring sino Unicode. Incluso ni siquiera son exactamente igual la estructura interna de una cadena AnsiString pasando de Delphi 2007 a Delphi 2009. Y rizando el rizo, incluso el dfm, que almacena los valores en tiempo de diseño de los formularios, usan unicode, por lo que pueden no ser compatibles en determinadas condiciones.

Me apetece seguir profundizando. Es muy interesante y estoy deseando abrir el tercer capítulo que habla con mas detenimiento de las conversiones y los problemas.

La llamadas a las funciones del Api de Windows ahora hacen referencia a las que hacen uso de Unicode (recordad que habían dos versiones una AnsiString y otra Unicode) y que Delphi, en versiones anteriores, declaraba o exportaba la primera. Ahora por defecto es al contrario.

Y tambien aparece en el horizonte la posibilidad de utlizar UTF-8 y UTF-16, con una batería de funciones que permiten la conversión en un sentido u otro.

En fin… un cambio de cierto calado y que pienso deberíamos conocer. Y sobre el libro, lo leído hasta el momento, me parece magnifico. Estoy deseando sacar tiempo para proseguir su lectura. Os lo recomiendo.

:-)

Seguiré comentado, si os parece, lo que me parezca interesante de lo que vaya leyendo y descubriendo.

Delphi 2009 Handbook – Marco Cantú

febrero 20, 2009 en Delphi

Hoy he recibido el paquete que contenía el libro de Marco Cantú, “Delphi 2009 Handbook“, publicado también por la editorial bajo demanda Lulu.com. Ha tardado algunos días porque he elegido la opción más económica de entrega :-) pero finalmente, esta noche, al tiempo que estoy escribiendo esta entrada, lo voy ojeando.

No se si recordáis que en una entrada anterior, comentaba que habia adquirido también otro de sus libros en condiciones parecidas: “Delphi 2007 Handbook”. Solo que el anterior solo tenía 255 paginas, frente a las 400 pags. de la versión 2009.

Y ambos escritos en Inglés, (al menos para leerlos me defiendo).

Por cierto, no se si alguien se dio cuenta de que frente a otras versiones de Delphi, que tuvimos “abundante” documentación tanto por parte de autores en lengua castellana, como Francisco Charte o Ian Marteens, o traducciones de Marco Cantú o de otros escritores de habla inglesa, en las versiones actuales, es dificil encontrar algo. De Delphi 2007 no recuerdo ningún título en español (y creo que tampoco en inglés a escepcion del libro de Cantú)… Del 2009 menos aun…

Me ha costado decir eso de “abundante” y por esa razón lo he puesto entre comillas. No. No es tan abundante la documentación que tenemos y yo creo que es licito que los programadores hispanos reclamen que su dinero tenga el mismo valor que el de un inglés, un alemán, un italiano o un chino. Pero es mi opinión, por favor y seguro que hay un montón de gente en desacuerdo.

Ahhhh…. Recuerdo que la crisis es igual para todas las empresas del mundo y por si alguien no se ha dado cuenta estamos en otra puñetera crisis. Así que si vender una escoba se ha hecho una tarea complicada, Es hora de que las vendan ya con manual de instrucciones en castellano, como cualquier hijo de vecino que quiere vender y quiere que le compren no solo en España sino tambien en muchos paises de Hispanoamerica. ¿A que soy cansino?. :-) Pues hay gente que por uno le entra y por otro le sale. :-)

Pero se me ha ido el santo al cielo. Yo hablaba del libro de Cantú. Estoy deseando meterme de lleno en la lectura de su libro. Es un buen escritor y por lo que ya he ojeado, parece muy interesante. En su web existe un indice de los capitulos y el precio del mismo no es disparatado (35 €uros). + Gastos de envio.

Si os parece, compartiremos cosas que parezcan interesantes de su lectura.

Algunas ventajas… (¡si eres capaz de recordarlas!) – Parte III

junio 22, 2008 en Artículos, Código, Delphi, Entrada Diario, Sintaxis

Recordando la entrada anterior, en la que me cuestionaba la oportunidad de haber dotado una estructura clásica de nuestra programación, como puede ser la del registro (Record), de aspectos que podían acercarla notablemente a las clases, me llevó a profundizar un tanto sobre los motivos y ciertamente, tras la lectura de uno de los capítulos del libro “Delphi 2007 Handbook” de Marco Cantú, encontré que se aludían básicamente motivos de rapidez en la ejecución del código, por la forma en que se gestiona el acceso y la carga de la memoria en ambas estructuras. Los registros tienen menor coste en su gestión. Una variable local de registro, por poner un ejemplo, se gestiona en memoria desde la pila, motivo suficiente para que su coste sea menor que el soportado por una instancia de una clase que se ubica en una dirección de memoria y se gestiona desde el sistema de memoria (Memory Manager).

El ejemplo que pone M. Cantú para comentar como se sobrescriben los operadores creo que es claro y sencillo. Creo incluso que es el utilizado por todos los escritores conocidos para comentar estos aspectos. ya que la clase TPunto se presta como anillo al dedo para operaciones como cálculos de distancia asimilados en operadores básicos, como la suma (+), por poner el mas generalizado.

Ya sabéis que yo siempre me complico la existencia y cuando vi que ya me habían cogido el ejemplo del punto, ¡mierda! -exclame lamentándome- ¡ahora cual voy a coger yo…! Supuso que tuviera que activar las pocas neuronas libres y sanas que me quedan para inventarme algo que me sirviera para explicar cualquiera de los operadores redefinidos. Así que os pido perdón de forma anticipada si el ejemplo no es demasiado bueno ni claro. Se me ocurrió que una estructura de registro pudiera guardar tres precios distintos, que pudieran ser utilizados para calcular un total. Lo típico para no estrujarme demasiado la cabeza: Total es igual a cantidad por precio… jejeje :-)

Y en este caso, hoy llevaba en mente comentar uno de los menos conocidos, que era el operador Explicito, que nos permite convertir un registro a un tipo definido previamente, mediante una conversión explicita. En el caso del ejemplo de Marco Cantú, convertía un registro TRecordPoint, en su formato de texto, mediante la conversión string(C) siendo C la estructura de registro mencionada. El resultado de la conversión era un mensaje en el que se escribían las coordenadas del punto.

En nuestro caso, la conversión nos permitirá acceder a los métodos de una clase… de forma que solo sea creada una instancia de la misma, inspirandome en el patrón singleton, salvando las diferencias de que esto es un ejemplo patatero y para ir por casa.

Veamos…

Podemos empezar definiendo los tres tipos de tarifa.

Tarifa = (fbasica, fDoble, fTriple);

y la estructura que va a utilizarla y que nos devolverá la instancia de la clase creada. Este array nos permitirá acceder a los objetos cuando deseemos liberar la memoria que han reservado.

 TArrayTarifa = Array[Tarifa] of TTarifa;

Ahora la estructura del registro…

  TTarifaRecord = record
  private
    ListaTarifas: TArrayTarifa;
  public
   class operator Explicit(var ATarifa: TTarifaRecord): TTarifaSimple;
   class operator Explicit(var ATarifa: TTarifaRecord): TTarifaDoble;
    class operator Explicit(var ATarifa: TTarifaRecord): TTarifaTriple;
    procedure Inicializar;
    procedure Eliminar;
  end;

A ver que se nos ocurre para el primer operador Explicit

class operator TTarifaRecord.Explicit(var ATarifa: TTarifaRecord): TTarifaSimple;
begin
    if ATarifa.ListaTarifas[fBasica] = Nil then begin
      Result:= TTarifaSimple.Create;
      Result.Precio:= PrecioBasico;
      Result.NombreTarifa:= 'Tarifa básica';
      ATarifa.ListaTarifas[fBasica]:= Result;
    end
    else
      Result:= TTarifaSimple(ATarifa.ListaTarifas[fBasica]);
end;

Fijaros que para que el código funcione correctamente, previamente debemos invocar el método inicializar que nos permite asignar a Nil la estructura interna del array, que debe albergar una referencia a la instancia creada. En este caso concreto y para que se vea que puede ser hecho de varias formas, he asignado manualmente cada uno de los elementos del array pero lo propio podría haber sido el uso de [for] para recorrer el array, mediante una variable local de tipo Tarifa que es una enumeración y por lo tanto puede ser definidos los valores minimo y máximo mediante funciones como High o Low. En el método Eliminar, por el contrario, utilizaremos una nueva funcionalidad propia de esta versión de Delphi, que es otra de las novedades, y que reside en el uso de [for __ in _____ do] para recorrer el array.

Veamos que hace Inicializar.

procedure TTarifaRecord.Inicializar;
begin
  ListaTarifas[fBasica]:= Nil;
  ListaTarifas[fDoble]:= Nil;
  ListaTarifas[fTriple]:= Nil;
end;

Y finalmente, podemos ver la novedad de su uso, en el método Eliminar.

procedure TTarifaRecord.Eliminar;
var
  Item: TTarifa;
begin
  for Item in ListaTarifas do begin
     if Assigned(Item) then begin
       Item.Free;
     end;
  end;
  Inicializar;
end;

Y ahora ya, solo nos queda inventarnos un ejemplo donde podamos combinar su uso y probar que funciona correctamente.

procedure TForm1.Button1Click(Sender: TObject);
var
  c: Integer;   //cantidad
  t1, t2, t3: Double;    //total
begin
  //inicializamos a nil el array
  tf.Inicializar;

   c:= 5;

   t1:= c * TTarifaSimple(tf).Precio;
   t2:= c * TTarifaDoble(tf).Precio;
   t3:= c * TTarifaTriple(tf).Precio;

   //visualizamos el primer momento
   Edit11.Text:= FormatFloat('0.00', t1);
   Edit21.Text:= FormatFloat('0.00', t2);
   Edit31.Text:= FormatFloat('0.00', t3);

   //vamos a por el segundo momento
   //asignamos los precios a cero en las tres tarifas
   TTarifaSimple(tf).Precio:= 0;
   TTarifaDoble(tf).Precio:= 0;
   TTarifaTriple(tf).Precio:= 0;

   t1:= c * TTarifaTriple(tf).Precio;
   t2:= c * TTarifaDoble(tf).Precio;
   t3:= c * TTarifaSimple(tf).Precio;

   //segundo momento deberia tomar valores 0 en las tres
   //dada la asignacion anterior
   Edit12.Text:= FormatFloat('0.00', t1);
   Edit22.Text:= FormatFloat('0.00', t2);
   Edit32.Text:= FormatFloat('0.00', t3);

   //y para finalizar comprobaremos el nombre de la tarifa...
   EditNombreTarifa1.Text:=  TTarifaSimple(tf).NombreTarifa;
   EditNombreTarifa2.Text:=  TTarifaDoble(tf).NombreTarifa;
   EditNombreTarifa3.Text:=  TTarifaTriple(tf).NombreTarifa;

   //aqui deberia eliminar los objetos creados
   tf.Eliminar;
end;

Respecto al uso de la construcción [for... in] podemos decir que se asimila al concepto de iterador que ya hemos usado anteriormente desde el código que hemos compartido (¿recordais el ejemplo del buscador de ficheros? Alli por ejemplo comentábamos su uso, que nos acercaba a uno de los patrones básicos de programación) . En este caso, C# introdujo la idea de esta construcción y Net Framework la ha promovido con la interfaz IEnumerator. Pero en nuestro caso, con Delphi 2007, la construcción se encuentra ya implementada en las estructuras básicas y puede ser usada en los caracteres de un string, en conjuntos, matrices y objetos que soporten GetEnumerator, que nos dara paso a que pueda ser usado en nuestra propias clases creadas.

En una próxima entrada hablaremos del operador Implicito y de algunos de los clásicos, esperando que no se me ocurra otra extravagancia como la aportada como ejemplo ;-) Lo importante al fin y al cabo es divertirse… :-)

Descargar el ejemplo: Aquí

OF TOPICCCCC :-)

¡Felicidades a la Selección Española de Futbol, la selección de mi país por el paso a las semifinales de la Eurocopa… ! ¡Increible! ¡Qué partidazo frente a Italia!

Plas!!! Plas!!! Plas!!!

Nos hemos quitado una espina que teníamos clavada desde hace un montonazo de años
Creo sinceramente que ha ganado el mejor.

Ya era hora que también nos sonriera la suerte!!!!!!!!!!!!!!
:-)

Delphi 2007 HandBook – Marco Cantú

enero 6, 2008 en Delphi, Entrada Diario, Noticias, Noticias Delphi

Abrimos el año rebuscando entre los enlaces disponibles, alguna información sobre las útimas publicaciones que hagan referencia a Delphi 2007, con la idea de ir evaluando nueva documentación disponible, y he encontrado finalmente, en las entradas de Salvador Gomez una que nos habla de uno de los últimos libros de Marco Cantú. La entrada la podéis leer en: http://salvador.oversistemas.com/2007/09/nuevo-libro-de-delphi-de-marco-cantu.html

Y si quereis hojear el contenido del libro, existe en la web del escritor una tabla de contenidos:
http://www.marcocantu.com/dh2007/Delphi2007HandbookToc.pdf

Mas detalle sobre el libro y su compra: Delphi 2007 Handbook

Delphi 2007 Handbook

Lo que mas me ha llamado la atención de todo esto, es el nuevo sistema de publicación y edición de contenidos bajo demanda, que se ofrece desde LuLu.com y que a poco que nos mostremos observadores, se le adivina una proyección muy interesante (casi diría yo espectacular): si hasta ahora podía ser un impedimento los costes de edición que obligaban a disponer de un mínimo de ejemplares por tirada, y que de alguna forma obligaba a sopesar mucho todo el proceso de publicación por los costes elevados que éste suponía, ahora mismo se empieza a desvanecer con el nuevo sistema algunos de los inconvenientes que existían: la idea es “Tú escríbelo que ya lo comprarán y no te preocupes por más…“. La editorial, se encarga de la edición de los libros a medida que son pedidos, por lo que no existe un requisito mínimo de ventas que garantice la viabilidad de la operación. Así que me huelo que este nuevo sistema va a tener mucho interés y va a ayudar a que muchos escritores puedan publicar sus libros con independencia de que sean o no interesantes a las editoriales.

Así que si buscamos en la sección de Delphi, en Lulu.com ya aparecen algunas obras, principalmente de Delphi 2006:

http://stores.lulu.com/store.php?fOwnerClassName=group&fOwnerID=2351

Esperemos pronto tener disponibles algunos títulos en castellano también.