Primeros pasos tras el curso…

mayo 30, 2007 en Artículos, Entrada Diario, Velneo

Comentaba en una de las entradas anteriores, que hace poco había acabado el curso virtual de Velneo que incluye la compra de la versión profesional. En lineas generales me pareció muy correcto y cuando se finaliza, al menos se tiene una idea bastante general de lo que te puede ofrecer este entorno de trabajo. Es similar a cuando compramos un libro de introducción a un tema, con la diferencia que en este tipo de cursos y el hecho precisamente de tener un tutor que nos oriente, puede facilitarnos ese aprendizaje en menor tiempo.

Sin embargo, tanto los libros como los cursos, nos dejan en ese punto inicial crítico que yo quise remarcar en el título del blog: “Desde cero”. Me explico y si me lo permitiis utilizare un simil del mundo animal: es semejante al momento en el que el polluelo debe de saltar del nido y probar las alas. Es su primer salto. Y la madre no escatima “picotazos” hasta que le hace saltar (es broma lo de los picotazos) porque ¡no va a quedarse toda la vida en el nido!. Los ejemplos que se viven en los cursos, los que se escriben en los libros, los que leemos en las webs, se escriben como lo que son, ejemplos. Se preparan y se buscan para que la persona que los lee no se pierda en detalles menos importantes y se centre en algunos temas concretos.

Así que al referir desde el titulo esa idea de partir desde cero, hacía alusión a los momentos en los que nos preparamos para intentar adaptar esos conocimientos aprendidos a la vida real, cosa que sin duda ya no resulta tan sencilla.

Podemos, como yo ya me lo he planteado, pensar en poner en marcha algun tipo de desarrollo con esta nueva herramienta. Es cuestión de pensar un poco y ver como rentabilizar los recursos que estamos adquiriendo. En mi caso concreto, disponía de la plantilla de gestión y la de tpv. Pues bueno… ¡adelante!. Vamos a ver donde la podemos colocar para poder verla trabajar en el mundo real. Eso nos dará una idea bastante buena de qué problemas vamos a encontrarnos, y nos permitirá conocer con mas detalle las distintas tablas y sus relaciones. En mi opinión puede ser interesante decantarnos por un comercio mas o menos pequeño, que no nos obligue en un primer momento a modificar demasiados puntos de la plantilla original.

Por otro lado, y dado que ya partimos de la experiencia previa de haber trabajado con otras herramientas, parece hasta cierto punto lógico ver si de alguna forma nos podemos valer de ellas en algo. En el caso de Velneo hemos aprendido durante el curso que el entorno puede ser mejorado mediante la instalación de pluggins que nos permitirán funcionalidades nuevas. Es el ejemplo del pluggin v2Excel, que nos permite manipular la hoja de cálculo del Office. Otro ejemplo puede ser el vODBC para la gestión de bases de datos externas a través de ODBC.
La utilización de estos pluggins es realmente sencilla ya que están correctamente documentados y el mecanismo de llamada de las funciones a través de la invocación de los procesos es sencillo. En ese sentido no creo que tengáis demasiados problemas. Estos temas los iremos abordando un poco mas adelante.

Sin embargo, mientras escribía estas líneas y escudriñaba en la funciones o rutinas disponibles desde Velneo, es dificil no echar de menos algunas de las funciones mas habituales a las que estabamos acostumbrados desde un entorno como Delphi. Disponíamos de mayor número de funciones de apoyo. Se me ocurre por ejemplo el area de la manipulación de fechas, pero podríamos extenernos a otras areas.

Si os parece vamos a jugar un rato… :-)

La idea es intentar hacernos nuestro primer pluggin y para ello nos basta abrir el entorno de delphi y crear una librería que nos pueda servir de ayuda como funciones auxiliares. Se trata tan solo de un ejemplo ¿vale?
Nos permitirá saber si realmente es dificil ampliar nuestro entorno con nuevas funciones y de paso, aprovechar algunas rutinas que podamos haber implementado tiempo atras (si fuera el caso).

Elegimos nueva libreria y tras un rato tecleando veamos que obtenemos:


library firstlib;

uses
Windows,
Messages,
SysUtils,
Dialogs,
calendario in ‘calendario.pas’ {frmFecha};

function Max3(Num1, Num2, Num3: Integer): Integer; stdcall;
begin
   Result:= Num1;
   if Num2 > Result then Result:= Num2;
   if Num3 > Result then Result:= Num3;
end;

function MensajeAlerta(const ATipo: Smallint): Integer; stdcall;
begin
   Result:= ATipo;
   case ATipo of
      0: ShowMessage(

    ’Mostramos un calendario en una ventana modal.’+#13#10+
    ’Pulsar en una dia del mismo con un doble click.’+#13#10+
    ’La variable FECHA asignada a la casilla de texto’+#13#10+
    ’visualizará el valor’);

      1: ShowMessage(

    ’Vamos a mostrar un cuadro de dialogo.’+#13#10+
    ’El usuario elige el directorio correspondiente +#13#10+
    ’Y la variable ARCHIVO asignada a la casilla de texto’+#13#10+
    ’visualizará el valor’);

        else
             Result:= -1;
   end;
end;

function GetStrDate: PChar; stdcall;
var
   MiFecha: TDateTime;
   s: String;
   res: Array[0..MAX_PATH] of Char;
begin
   frmFecha:= TfrmFecha.Create(nil);
   try
         frmFecha.ShowModal;
         MiFecha:= frmFecha.fFecha;
   finally
         FreeAndNil(frmFecha);
   end;
   s:= FormatDateTime(‘dd/mm/yyyy’, MiFecha);
   StrCopy(res, PChar(s));
   Result:= res;
end;

function GetFileName: PChar; stdcall;
var
   Dialogo: TOpenDialog;
   s: String;
   res: Array[0..MAX_PATH] of Char;
begin
   Dialogo:= TOpenDialog.Create(nil);
   try
   if Dialogo.Execute then
        s:= Dialogo.FileName;
   finally
        FreeAndNil(Dialogo);
   end;
   StrCopy(res, PChar(s));
   Result:= res;
end;

{$R *.res}

exports
  Max3, MensajeAlerta, GetStrDate, GetFileName;

begin
end.

No reflejo aquí el código de la unidad “calendario.pas” para no extenderme demasiado. Esta unidad será requerida por la librería para mostrar un calendario que nos permitirá elegir una fecha del mismo. Básicamente, tenemos un total de 3 funciones “utiles”:

Max3: Devuelve el mayor de los tres números que se han pasado como parámetros.
GetStrDate: Devuelve una cadena con la fecha elegida por el usuario.
GetFileName: Devuelve una ruta hacia un fichero.

Podéis descargar la librería desde este enlace: firstlib
Y en este otrol vínculo está el codigo fuente de la misma: codigo

Ahora ya es tiempo de abrir el entorno de Velneo e intentar enlazar nuestra librería para que pueda ser usada desde el mismo. Para simplificar, elegimos nuevo proyecto vacío. Una vez que se ha seleccionado la ruta en la que guardamos el proyecto, la ventana principal nos muestra el mínimo contenido que es generado por defecto en la ventana de estructura de datos y que se corresponde con la tabla VMAESTROS. Es decir que ya tenemos un proyecto sobre el que probar nuestra librería.

Veamos…

Tenemos que importar un objeto libreria por lo cual, llamamos a la opción Nuevo Objeto, bien desde los botones de la barra superior o bien desde el menu de la aplicacion (Objetos -> Nuevo -> Objeto) que nos conducirá a la siguiente ventana.


Galeria de Objetos de Velneo

Y desde alli, tras seleccionar con el doble click sobre el objeto librería de funciones (dll), podremos disponer de una ventana donde especificar todos los datos de las funciones de la dll, asi como el nombre de la misma y el estilo.

Rellenamos las casillas adecuadamente, quedando finalmente tal y como nos muestra la ventana:



Ahora no vamos a abordar algunos detalles interesantes sobre las librerias. Si os parece los dejaremos para las siguientes entradas, donde comentaremos que es eso de “stdcall” o los puntos que pueden ser un tanto problematicos en el uso de librerias. Yo por ejemplo he remitido una consulta técnica a Velneo para preguntar sobre cómo gestiona la reserva de memoria el entorno en el caso de cadenas terminadas en nulo o PChar, de cara a evitar cualquier goteo de memoria. Es posible que tenga que rectificar algun detalle de la libreria. Desde Delphi, como ya comentaremos, suele ser habitual reservar memoria desde la función y eliminarla con una llamada desde la misma aplicación que carga la librería. En este caso, he utilizado un array de char para alojar el retorno de la función.

Desgargar el siguiente mapa y lo podéis probar: vlibreria.zip

Bienvenidos a Velneo desde cero

mayo 28, 2007 en Entrada Diario

Hoy empieza una pequeña andadura para esta modesta página. Como veis, va a dar sus primeros pasos y aunque ahora son titubeantes en esta nueva area (Velneo), imagino que llegará el día en el que pueda caminar de forma segura y con pasos firmes. La intención con la que nace es únicamente narrar mi acercamiento a Velneo, desde Delphi, que es mi actual herramienta de trabajo, y compartir con quien quiera adentrarse en su lectura, mis primeros pasos. Estas páginas y yo mismo, partimos desde cero, como reza el título. Es nuestro Velneo desde cero.

Antes de escribir estas líneas reflexioné sobre la posibilidad de abrir un nuevo blog, pero ¿que quereis que os diga? :-) Despues de pensar los pros y los contras, encuentro que muchos de los conceptos que pueda abordar, tanto en uno como en otro, rozan una línea imaginaria, común a las dos herramientas. Os pongo un ejemplo: Si en Velneo abordo un comentario sobre las plantillas de negocio, quizás aporte a persona que me lea desde Delphi una idea que no había valorado desde la lógica de sus desarrollos. Así mismo, y desde la optica contraria, si desde delphi abordo la creación de utilidades mediante la generación de librerias, pueda verse favorecido el programador de Velneo que nunca las ha utilizado y piensa que son algo inalcanzable para el. Se me ocurren muchos detalles más, pero quizás lo mejor es que el tiempo acabe dando forma a todos estos razonamientos.

Falta decir que debido a estos cambios, he tenido que modificar los scripts de php de WordPress para distinguir mejor las distintas categorias, insertando imagenes que permitan visualizar mas facilmente el contenido del post. Eso facilitará la busqueda. Habrán más cambios en la estructura de la página, pero eso lo iremos abordando sobre la marcha, a medida que sean necesarios.

Sin más…, lo que digo siempre: Sed bienvenidos. Estais en vuestra casa.

Tomar la vida un poco menos en serio…

mayo 17, 2007 en Entrada Diario

Uno no puede estar serio todo el día con cara de ladrillo. :-) No. No…No seais tontos.

Hay que sonreir y tomarse la vida un poco menos a la tremenda. A fin de cuentas, es demasiado corta para andar siempre enfurruñado. ¿no creeis? Me viene a la cabeza el día de ayer. Estaba pensando en lo a gusto que me reí en las clases de los mayores, que de cuando en cuando, tienen muchas caidas que uno no puede menos que reirse.

No todo va a ser programación. Entre las actividades mas relajantes de la semana, ademas de salir a correr un rato (un poco de deporte al aire libre nunca viene mal) o la escritura de los comentarios en los blogs (algunos de poesia), son las clases de informática a personas mayores, en el centro social de mi pueblo. Son un par de tardes a la semana. En ocasiones también acuden niños con alguna discapacidad, aunque no es demasiado habitual. Mas o menos, vengo trabajando con ellos desde hace aproximadamente tres años.

Pues bueno… Que sean mayores no significa que sean tontos. Son mas pillos que “bonicos”. :-) Para ellos adaptarse a las nuevas tecnologias es un reto pero si se tiene un poco de paciencia y se les da un poco de confianza, se acaban adaptando. Aunque luego pasados tres días olviden todo lo que se dijo jejeje y uno tenga que comenzar de nuevo.

Me reía porque ayer me vino uno de ellos, cargado con un maletin rojo en el que traía un portatil de no menos de 19 pulgadas. Era un autentico monstruo con el xp vista, comprado en un hipermercado por tan solo 700 euros. No pude menos que felicitarlo.

-¡Hombre!… ya lo compraste… me alegro. ¿Y eso que al final te decidiste por un portatil? -le pregunté quizas esperando que su respuesta fuera por motivos como: poder llevarselo al campo, o bien a casa de sus hijos-.

- No.. no -me dijo él- Verá… es que me dijeron que así podía entrar a Internet, tal y como hacemos en las clases

A lo cual, yo rápidamente repliqué :

-¡Pues no te hubiera hecho falta un portatil!. ¡Desde cualquier pc te hubieras podido conectar…!

-Ya… (respondió sonriendo). Lo que pasa es que el otro no me cabe en el coche.

El buen hombre se iba con el coche, calle por calle, hasta que encontraba señal de adsl disponible y cuando veía una señal sin el candado ahí aparcaba…

No pude menos que estar riendome un buen rato… Debo de estar formando verdaderos monstruos.

jejejeje

:-D

Acabando tareas pendientes

mayo 16, 2007 en Entrada Diario

Acabar las tareas pendientes es un ejercicio saludable. :-)

Hace un rato, cosa de veinticinco minutos mas o menos, he entregado a Jose Luis Freire el artículo pendiente sobre la creación de aplicaciones modulares. Aproximadamente son unas 14 páginas (incluidas algunas imagenes) donde he intentado compartir con vosotros esas ideas comentadas en las últimas entradas del blog.

Por lo que hemos podido comentar, dado que este mes ya ha cubierto los articulos del boletín de delphi, posiblemente sea publicado a partir del mes que viene, en una o varias entregas.

Os incluyo un enlace a la aplicación generada, por si teneis curiosidad por verla en ejecución. Las fuentes me imagino que las podreis descargar desde El Rinconcito de Delphi cuando se publique el artículo.

Otra cosa:
Si la descargais, tened en cuenta de que debéis indicarle la ruta al fichero dbdemos.gdb que habitualmente está en el directorio:
c:/Archivos de Programa/Archivos Comunes/BorlandShared/Data/

Como se indica en una ventana emergente, podeis copiar la ruta al fichero ini creado a tal efecto, en la seccion correspondiente.

[CONEXION]
DATABASENAME= c:/Archivos de Programa/Archivos Comunes/BorlandShared/Data/dbdemos.gdb

Descargar ejecutable

Obras son amores…

mayo 10, 2007 en Entrada Diario

…y no buenas razones, que dice el refrán. Así que he pensado en retocar un poco el ejemplo, que referí en entradas anteriores como framework, con el fin de simplificarlo y que se aprecien mejor las relaciones entre los módulos, y entregarlo a Jose Luis Freire para su publicación en el Boletín. Lo que no se todavía, es si llegaré a tiempo para este número ya que todavía estoy retocando las fuentes.

El ejemplo, como ya comenté anteriormente, está basado en unos artículos publicados en Developer Express sobre buenas técnicas de trabajo. He vuelto a buscar el link a dicha página pero ya no aparece por lo que imagino que ha sido movido a otro lugar de la web. Este era el enlace original:

http://www.devexpress.com/Support/BestPractices/VCL/SAP/index.xml

He querido respetar la idea original, manteniendo la misma nomenclatura usada para no desvirtuarlo.

Inicialmente, se apoya en varios de sus componentes: el TdxNavBar, como ventana lateral que puede ser escondida, dejando una pestaña que la restaura si es cerrada, y en la parte superior del area cliente, un contenedor de barras basado en el TdxBarManager.
El efecto final es un interfaz bastante moderno y agradable (al menos esa es mi opinión).

Si además, son combinados con una rejilla de datos de la Suite Exprexs Quantumgrid v5, los resultados y la eficacia es muy alta, aunque gana para mi gusto en demasiada complejidad, por el uso de estos componentes que requieren bastantes horas de aprendizame, y no siempre compensa. El grid de esta suite de componentes es un ejemplo de ello, sobretodo cuando te sales de las operaciones habituales.

Os voy a incluir dos imagenes de un framework de pruebas que extiende esta idea, para que se aprecie mejor el interfaz:

Rejilla de datos


Ficha de edición

Esta pequeña muestra que hice a partir de dicho ejemplo, trabajaba con los componentes de dbExpres, siguiendo los esquemas mostrados por Ian Marteens en los capítulos de Datasnap y Midas, accediendo a una base de datos mediante Firebird 1.5. Y funcionaba bastante bien.

En el que ahora nos ocupa no vamos a hacer uso de los componentes de Developer Express, para que pueda seguirse directamente desde las versiones de Borland Developer Studio y Delphi 2007 sin tener que recurrir a componentes externos. El efecto visual también es aceptable y así evitamos dependencias externas que nos compliquen posteriormente la vida.

Podéis verlo en esta imagen:

Framework artículo

Para sustituir el componente TdxNavBar, he utilizado TCategoryButtons, incluido ya en el BDS 2006, que permite agrupar por categorias. Asímismo, el componente TActionMainMenuBar, ha sustituido, como contenedor de barras, al componente TdxBarManager. Sin embargo, el esquema es similar y lo verdaderamente importante serán las relaciones entre los distintos módulos.

Otra cosa: He preferido aislarme de todo lo relacionado con Datasnap para este ejemplo, por no complicarlo con algo que realmente no era necesario para explicar el framework. Por dicha razón, el acceso a datos lo he realizado a través de los componentes de la paleta de Interbase, de forma que fuera lo más sencillo posible y accediera a una de las bases de datos de ejemplo que trae Delphi.

Si quereis echar un vistazo al diagrama de clases original, sobre el que fue extraido el ejemplo que comentaremos. Visualizar/descargar pdf diagrama.

Nos vemos en el Boletín.

Boletín extraordinario: “Encuentro Delphi 2007 y Delphi PHP”

mayo 8, 2007 en Entrada Diario

Con fecha de hoy, El Rinconcito, ha lanzado un numero extraordinario dedicado expresamente al Acto de Presentación de Delphi 2007 y Delphi for PHP en España.

Por mi parte he colaborado activamente en relatar cómo lo viví (además ¡que iba a decir yo…!) y se ha hecho un gran esfuerzo desde la redacción de escritores y colaboradores para que lo pudierais tener. Jose Luis Freire tiene este mes doble trabajo :-) pero tambien pienso que la Comunidad se merece este esfuerzo.

Quiero agradecer expresamente a Danysoft y a Jose Luis Castaño, como Director de la misma , la cesión de las diapositivas, imagenes y del material técnico necesario para armar el boletín. Como ya sabeis, Danysoft se ha convertido en el representante de CodeGear para España y Portugal y su colaboración activa en un acto tan anecdotico como lo pueda ser este Boletín, ya de por si me parece reseñable, fruto sin duda de un nuevo talante. Al menos yo lo veo así.

Dado que la descarga del boletín se hace via mail, para que os sea mas comoda su recepción, los que no esteis suscritos al mismo tendreis que registraros, ya que la descarga libre la tendreis disponibles dentro de un mes, y no creo que entonces tenga tanto sentido.

Recibid un saludo,

Salvador Jover