Incorporado a la VCL a partir de Delphi 7

junio 15, 2007 en Artículos, Delphi

Me parece interesante el artículo/resumen de las nuevas características que nos trae la VCL a partir de Delphi 7. Lo escribe Nick Hodges y puede ser leido en las páginas de Codegear.

Aquí tenéis su enlace:
http://dn.codegear.com/article/34325

Es interesante porque visualmente os muestra algunos de los cambios en la VCL.

Este es un pequeño resumen del contenido del artículo:

* Las aplicaciones VCL activan los temas visuales por defecto.

* Una nueva propiedad en el formulario (TForm.GlassFrame) para permitirnos el efecto cristal propio de Vista.

* Componentes de dialogo para acceder a los cuadros de diálogo de Windows Vista que pueden ser completamente personalizados.

* Uso del component TFileOpenDialog/TFileSaveDialog que muestra la nueva apariencia de Vista en los cuadros de dialogo de “Abrir archivos” y “Guardar archivos” respectivamente.

* El nuevo componente contenedor TFlowPanel, capaz de reajustar los controles contenidos, adaptandose al nuevo tamaño del panel.

* El nuevo component TGridPanel, que contiene caracteristicas propias de una rejilla de paneles, capaces de alojar uno o multiples controles por celda.

* Otro componente: el TCategoryButtons, nos permitirá crear conjunto de botones agrupados por categorias.

* TDockTabSet

* Acceso a la barra SysTray para proveer un icono a nuestra aplicación y mostrar el típico menú de acceso y las ventanas emergentes asociadas al ícono. Un control como TTrayIcon nos permitirá hacerlo fácilmente.

* Tambien el soporte para nuestras aplicaciones de la funcionalidad Intellimouse, en aquellas ventanas que desean ser exploradas mediante esta caracteristica.

Hay algunas anotaciones más. Os aconsejo su lectura atenta ya que posiblemente os permita conocer alguna caracteristica o funcionalidad que desconociais.

A mitad de camino…

junio 15, 2007 en Delphi, Entrada Diario

Han pasado 15 días desde que enlacé la encuesta que tenemos pendiente de resolver. Estamos a mitad de camino y quizás lo que más me está llamando la atención es la falta de participación. :-( ¡Que solo siete personas hasta este momento hayan dado su opinión parece que es un resultado bastante pobre!

Por lo que a mi respecta, solo puedo animaros a participar. :-) De momento gana con un 42% la opinión de aquellas personas que piensan que vale la pena actualizarse.

¿Alguien opina…?

;-)

Tres en Raya para Velneo

junio 15, 2007 en Artículos, Velneo

Como ya comenté en una de las entradas anteriores, Empezar por un juego…, ha sido un buen ejercicio para conocer hasta que punto voy asimilando los conocimientos adquiridos. Es interesante plantearse pequeñas aplicaciones en las que aplicarlos, sin que acabemos perdiendonos en detalles que te ofuscan mas que te permiten avanzar. Yo me propuse implementar el juego del tres en raya desde la perspectiva de Velneo, de forma que pudiera combinar algunos de los conocimientos que enumeraba en dicha entrada.

El resultado lo podeis descargar de vTresEnRaya.zip por si puede ayudar a alguien. A mi me ha servido para comprender el funcionamiento de los eventos, las actualizaciones, el uso de librerias dll y funciones/procesos. Son algunos de los detalles que permite ver. Si el lector de esta entrada no proviene del ambito de Velneo puede descargar gratuitamente el editor de Velneo de su página oficial e instalarlo. El editor lo podéis descargar del siguiente enlace:

Descarga editor de Velneo (libre)

Una vez instalado, la forma mas sencilla de visualizar la ejecución del mapa es lanzar el editor de texto y pulsar el boton correspondiente a cargar un mapa (Abrir). Eso si, debeis previamente copiar la dll en una carpeta del sistema, como Sistem32 para que funcione. Una vez abierto el mapa, basta pulsar la tecla F5 y ejecutareis la aplicación. Es realmente sencillo. :-)

Esta es una imagen del mapa en ejecución:

Imagen del juego del 3 en Raya

Respecto al mapa, estoy seguro que se puede mejorar u optimizar, sobretodo a nivel de ejecución de los distintos procesos que intervienen. Tiempo habrá de matizar algunos detalles que pueden pasar inadvertidos. De cualquier forma, los objetivos que quería cubrir, creo que mas o menos se cumplen ya que el resultado es “aceptable”.

Se pueden sacar algunas reflexiones que parecen interesantes, siempre desde el respeto y la imparcialidad, y sobretodo desde el deseo de ser constructivos. ¿Todos los sistemas tienen su talón de Aquiles?. Quizás el de Velneo haya sido el dejar los formularios de Menu para un proposito para el que posiblemente no fueron diseñados “enteramente”. Esto es tan solo una quimera mía. Veo un formulario de edición de Fichas, que comparte la “problematica” de toda transacción abierta, con una caducidad (timeout) de cuatro minutos, y que permitirá finalmente al servidor deshacer automaticamente la transacción. Esto en mi opinión le deja un poco margen en aquellos desarrollos que el usuario quede a la espera del cliente y su capacidad de decisión. :-) Hay ejemplos en las mismas plantillas que inducen a pensar que esto pesa sobre la conciencia del desarrollador, y el primero que se me ocurre es la misma elección del interfaz del TPV, basado en un menu de Formulario en lugar de un Menu de Edición de Ficha.

Un cliente que tardara mas de cuatro minutos en decidirse en comprar la caja azul o la caja roja hubiera provocado que un formulario normal se hubiera suicidado automaticamente. =:-O Ojo… hablamos de aplicaciones ejecutadas en el servidor de Velneo y de procesos que dejen abierta la transacción (podría ser por ejemplo el alta de un cliente). (*)

Es facil de comprobar para los que tengais instalados el servidor de Velazquez. Basta ejecutar un formulario de alta y modificar algunos campos. Luego esperar aproximadamente 4 minutos y al intentar validar el registro recibiremos un mensaje de error ya que el servidor habrá deshecho la transacción.

¿Eso es malo o bueno? Pues… ummm… parece que según se mire. Desde luego es un buen sistema para evitar que el servidor se sature con peticiones que quedan olvidadas y bloquean registros que pueden ser necesitados por otros usuarios. En un sistema clientes/servidor, como lo es Velneo, es un tema a tener en cuenta y entiendo que no se puede dejar al azar.

(*) Vale… vale… Se que se escucharán algunos siseos y comentarios: siempre hay formas de evitar el timeout de la transacción tales como provocar el alta y convertirla de forma inadvertida en una edición, pero bueno… estamos hablando de los comportamientos lógicos, pues una solución como está obligaría a eliminar el registro si el alta es cancelada, lo cual es algo un tanto extraño.

Mi madre tarda mas de diez minutos en decidir cosas menos urgentes… :-) Así que un formulario de menu, que resulta un invento cojonudo para presentar las opciones de la aplicación, se reintroduce con unos controles que permiten (y perdón por la redundancia) un control bastante mediocre del flujo de la aplicación (1). No podemos mover los objetos dinámicamente, como nos permitiría una gran parte de los entornos. No podemos destruirlos, ni crearlos nuevamente… Nos basta jugar con la visibilidad de los mismos, establenciendo las condiciones adecuadas. Esto es posible hacerlo en un tablero pequeño, con nueve casillas y dos posibilidades por casilla. Si esto fuera el tablero de un ajedrez, aun existiendo la forma de registrar los movimientos y el modus operandi de la lógica del juego, resultaría inviable el uso de la ocultación, como medio de percepción del estado por el usuario. Así que si nuestra aplicación tiene que mover controles en el formulario no cuentes con la V6 de Velneo, o buscas nuevas formas de presentar tu aplicación, lo cual tampoco es malo, pues nos enseña que no siempre tenemos que seguir el camino esperado. :-)

Luego existen algunos detalles que quedan bien resueltos en el formulario de edición de Fichas y que no me acaban de gustar en el formulario de Menu. Hablo concretamente del control del orden z de los objetos. En un formulario de edición de Fichas, existe adosado al mismo, una rejilla en la que se visualizan los distintos controles que aparecen y el orden en la lista se corresponde tambien con la condición de visibilidad o solapamiento. Debería haberse planteado un sistema similar en los formularios de Menú. Hubiera sido más práctico que el actual sistema de marcar el orden de forma manual mediante la pulsación del objeto, que en mi opinión no es un sistema comodo de trabajo.
:-(

Por otro lado, y razonando sobre el bloqueo de los registros en el inicio de la transacción, el uso de formularios de Menu parece mas adecuado para seguir el sistema de “coge el dinero y largate antes de que te pillen…” El sistema buscará la mejor forma de iniciar la transacción y que está dure el menor tiempo posible. Cuanto menos dure, menos conflictos existirán y por ende, menos problemática. Parece lógico: Un menu de edición de fichas va ligado a una tabla determinada, por definición. Un formulario de menú NO. Así que será la ejecución de los procesos ligados a el, los que inicien la transaccion y la finalicen, de forma que se cumple en principio esa primera parte del teorema, quedando a juicio del implementador la duración. Yo creo que se entiende, ¿no?

Podeis ver algo mas de información sobre el sistema de bloqueo de registros utilizado por Velneo en su web, a nivel de foro o en alguna entrada de su blog:
http://blog.velneo.com/web/p.pro?vdis=4&p=30700

Aun así, y a pesar de estos comentarios que a primera vista inducirían a tener una visión negativa, nada más lejos de la realidad. El peso de un formulario de Menu sobre la aplicación es bastante pequeño y siempre existen formas de minimizar algunos efectos negativos. Que no se pueda mover un control en tiempo de ejecución no debería ser un problema insalvable, de la misma forma que tampoco lo debería ser que una transacción tuviera un tiempo límite de vida. Basta entrar en el foro y descubrir como día a día se encuentran patrones que permiten plantear los problemas desde otra óptica y eso me parece muy positivo. :-)

No existen sistemas perfectos. Todos son mejorables y cada cual tiene sus pros y sus contras. En próximas entradas intentaremos analizar y reflexionar sobre algunos aspectos muy positivos que también nos descubre.

(1) Si se comparan algunos controles existentes en un menu de edición de ficha frente a los mismos insertados en un menu de formulario, como por ejemplo una casilla de edición, veremos claramente que es algo mas restringida la funcionalidad del mismo en este segundo caso. La gente que provenimos de otros entornos, a menudo enfocamos los controles y disponemos del foco libremente mediante código. Se puede simular pero se echa en falta… :-( Para compensar, en Velneo disponemos de la sincronización de controles que nos permite sin codigo la actualización de algunos objetos como rejillas o variables asociadas a controles del formulario. En fin… reconozco que la palabra “mediocre” es un tanto injusta, ya que el problema no es realmente que existan problemas en el cambio de foco sino que echamos de menos algunos recursos de los que disponemos en otros entornos a nivel de formulario de Menú.

Actualización…

junio 14, 2007 en Delphi, Entrada Diario

Perdonar mi ignorancia pero hoy, al abrir el entorno de Delphi 2007, he visto con sorpresa que existía una actualización pendiente…

¿Pero como…? ¿Qué se actualiza…?
¿Esto que es nuevo…? =:-O

Así que como un niño lleno de curiosidad, le he dado no sin cierto run-run al mensaje emergente y tras un buen rato de ver evolucionar la barra de progreso del actualizador, ha finalizado sin problema…

Cuando ha finalizado no he podido mas que exclamar:

-¡Anda la leche! (es una expresión pueblerina que denota asombro, con caida de babas inclusive…)

:-)

Lo he vuelto a cerrar y he pensado para mi:

-Ni idea que se actualizaba.

Retomar temas pendientes…

junio 13, 2007 en Entrada Diario

Esta noche no me ha quedado mas remedio que dedicarla al mantenimiento del equipo. :-) Tarde o temprano nos es necesario dedicar unas horas a estas labores porque siempre vamos con prisas y hay ciertas tareas que no pueden ser relegadas a un segundo plano.

Así que hoy ha sido uno de esos días en los que se pone a punto nuestras herramientas de trabajo. Se limpia aquella basura que se va generando durante las jornadas de trabajo y se revisa que todo quede en condiciones.

Ya… ¡Ya se que da pereza…! :-)

Es el momento de hacer las copias de seguridad de todo lo que sea susceptible de guardarse. En ese punto debemos ser muy quisquillosos y toda precaución es poca. Me viene a la cabeza unas lineas de codigo fuente que pensaba haber utilizado en las entradas del blog y que finalmente no he podido reproducir por haberse distraido, obra y gracia de los últimos formateos al equipo de sobremesa. Creo que todos pasamos a lo largo de nuestra corta o larga vida de informático (o programador) por situaciones similares. :-( Y normalmente, solo en esos momentos nos damos cuenta de lo verdaderamente importante que es el respaldo informático. Seguro que teneis un montón de anecdotas que contar sobre este tema.

En mi caso, creo que me di cuenta de ello de forma accidental. Aunque sabemos lo importante que es, no acababamos de percibirlo hasta que se sufre en las propias carnes. :-) Recuerdo perfectamente esa noche, mientras reparaba uno de los equipos, en esas horas intempestivas propias de tantos días. La idea era crear la copia de seguridad mediante Ghost 2003 y depositarla en un disco serial ata de 200 gbs, comprado a tal efecto unos meses antes. El disco ya almacenaba importante cantidad de información. :-( Una caja externa me servía de conexión al equipo a través del puerto usb. El fin de la historia fue tambien el fin del disco, tras caerse accidentalmente hasta el suelo… en una de esas extrañas piruetas que a veces se inventa el azar o la ley de murphi. Hoy es un hermoso pisapapeles, sin oficio ni beneficio… :-)

Además de las copias de seguridad, es el día apropiado para pasar el antivirus a todo el sistema… Por cierto, no hace mas de un par de semanas, que me vi obligado a desinstalar ZoneAlarm ante la preocupante caida en el rendimiento de mi equipo de trabajo. Inexplicablemente, desde la última actualización, el arranque del sistema se convirtió en un autentico sufrimiento, que desapareció con la instalación de un nuevo producto. Anecdoticamente y por si alguien quiere probarlo, descargué un antivirus personal gratuito: AVG Antivirus y la verdad es que va muy bien. Posiblemente vuelva a reinstalar ZoneAlarm, mas que nada por la inversión que hice en su compra, pero de momento y a tenor de los resultados, sigo con el gratuito.

Así que he tenido tiempo de sobra, mientras veía avanzar las barras de progreso de todas estas herramientas, para pensar y analizar que cosas tengo pendientes, sobretodo a nivel de esta bitácora.

Uno de los temas pendientes mas espinosos para mi, era la serie inacabada de ModelMaker, abandonada cuando se ponía interesante y util…, puesto que se iban a abordar el tema central de los diagramas de clases, que es verdaderamente el corazón de la herramienta. :-( En una de las carpetas de mi disco, está el ejemplo que implementé para abordar el artículo y que hace las veces de pepito grillo recordandome la fechoría. Así que de alguna forma, hago acto de contricción y me propongo retomarla, abordando directamente el codigo fuente del ejemplo desde estas páginas.

Quizás os pregunteis porque quedó inacabada… Si os digo la verdad existen dos razones: Una directamente relacionada con el vencimiento de la demo con la que estaba trabajando, tras unos meses de intenso trabajo y sin poder escribir una linea. Así que perdí el hilo y a la vuelta, cuando pude retomarlo ya ni sabía por donde proseguir sin tener que repasar y revisar todo de nuevo. :-(

Por otro lado, aunque me gusta la herramienta en si, solo la veo util en la primera fase del desarrollo y no tanto para volcar todo él mediante ella. Yo por lo menos creo que me sentiría algo incómodo.

Es decir, que a pesar de que ModelMaker, como herramienta de trabajo es fantástica en esa primera fase de diseño de la aplicación, o bien para el estudio o analisis de una clase o componente, por la potencia que te aporta a la hora de aspectos como el “refactoring”, (si es que se decide cambiar partes del diseño), o la misma información ofrecida en la creación de los diagrámas de clases, que enriquecen tu visión global de todo el desarrollo… exige un uso intensivo de la misma, para que realmente puedas sacar partido de ella…

Es mas… las últimas versiones de Delphi, ya incluyen el tratamiento de la información del modelado de clases sin necesidad de ninguna herramienta adicional. Se integra en el mismo entorno mediante ECO Framework.

Intentaremos retomar, al menos, el ejemplo y comentarlo. Si no desde un Boletín, al menos desde algunas de las próximas entradas.

Empezar por un juego…

junio 6, 2007 en Entrada Diario, Velneo

En estos días apenas he podido escribir nada. Y os confieso que no es porque no tenga ganas, sino por falta de tiempo material para hacerlo. :-( Aun así, mantengo la idea de avanzar en mi conocimiento de Velneo: Es un trabajo de día a día, bastante rutinario, releyendo los tutoriales que he podido encontrar en la web oficial de la empresa e intentando buscar ejemplos de muchos conceptos que, aunque teoricamente comprendes(o por lo menos crees comprender), luego al ser aplicados al código concreto no sabes si lo estas haciendo correctamente o no.

Intento ser lo mas objetivo posible en todas estas valoraciones. De hecho, en el poco tiempo que me queda, estoy preparando un pequeño ejemplo para compartir con la comunidad de Velneo que espero sirva a alguien además de a mi mismo. Yo lo estoy utilizando con el único fin de reflexionar internamente sobre los problemas que puedo encontrar y de paso familiarizarme con la heramienta. He elegido un pequeño juego para empezar a aplicar los pocos conocimientos que voy afianzando: El tres en Raya. De momento lo he colgado en el foro publico de la comunidad para que la gente me corrija con los comentarios que tenga a bien y más adelante, en los próximos días lo colgaré de estas entradas junto a los comentarios y reflexiones que haya podido razonar durante su preparación.

No lo he elegido por ninguna razón particular. Simplemente por que era manejable dado que se interrelacionan pocas casillas (9) y las reglas quedan claras. No existe otra razón. No obstante, he intentado que abarcara algo mas que el mero juego y que se relacionaran multiples elementos vistos en los tutoriales.

Comentamos los requisitos que voy a pedirle:

-Que identifique a un usuario y comprueba que existe en la tabla de jugadores
(uso de la función Pedir dato)
-Que se ejecute el juego sobre un formulario de menu que tiene mayor problema con el control del foco.
-Que se registren algunos datos del juego en tablas añadidas a tal efecto.
-Que se utilice una libreria externa (la que encapsula la lógica del juego).
-Que se utilice el deposito de objetos para recuperar algun estilo (he usado el estilo de formulario azul) y tambien procesos y funciones.

En fin… que he intentado poner de todo un poquito, como en botica… jejeje

Nada mas por hoy. :-)

Ahh… podéis mejorar la lógica del juego para que sea un poco mas listo y no pierda nunca (o casi nunca)… Yo solo he añadido el análisis mínimo para que se pudiera probar el juego.