EssentialFox 2004
Inicio

Pre Conferencias

Sábado Mañana

Sábado Tarde

Domingo Mañana

Domingo Tarde

Lunes Mañana

Lunes Tarde

Galerías

 

... a Conferencias

 
Anuncios






 
© PortalFox

EssentialFox 2004

Reporte de la Conferencia DevEssentials 06.06.2004 – Sesión tarde

Por Amby

La tarde comienza con una sesión sobre el Visual MaxFrame Professional creado por Drew Speedie, (Microsoft Most Valuable Professional) uno de los actuales expertos en VFP más reconocidos a nivel internacional, por su amplio dominio de la herramienta, sus innumerables artículos y participaciones en Conferencias…. Y por su rapidez al hablar… ¡Qué rápido habla Drew! … les cuento una pequeña anécdota…Yo estaba advertida de su rapidez al hablar, su apellido Speed (Velocidad), le viene muy bien… pero bueno, me atraía un poco el tema y fui a probar suerte…de lo que me alegro, fui a las tres sesiones y quedé encantada. Para colmo de bienes, en esta sesión sobre Visual MaxFrame Professional, Drew Speedie tuvo la cortesía de preguntarme si le entendía, o si debía hablar más despacio J, “Va todo bien, muchas gracias”, le dije J 

Pues bien, el Visual MaxFrame Professional (VMP) es un framework escrito en VFP por el propio Drew y otros integrantes de su equipo. Es una aplicación orientada a objetos para crear aplicaciones VFP.

VMP está creada para ser utilizada por:

  • desarrolladores de aplicaciones VFP que no tengan su propia aplicación framework y puedan aprovechar todas las ventajas de utilizar el VMP
  • experimentados desarrolladores de Kox2x que comprenden los modelos de objetos y eventos en Visual FoxPro y quieren evitar crear su propios componentes reutilizables para sus aplicaciones.

Visual MaxFrame Professional NO es un “generador de aplicaciones” – no se puede utilizar para crear automáticamente formularios de entrada de datos basados en un diccionario de datos. Si lo desea, puede crear su propio asistente empleando los formularios base  y otros componentes de la aplicación VMP.

Visual MaxFrame Professional SI es una “aplicación framework” el desarrollador puede subclasear las clases del VMP en sus propios objetos personalizados. VMP es comprensible, flexible, le permite decidir el nivel de personalización que desea utilizar. Proporciona formularios base Listos para utilizar (Ready-to-use)

VMP no es POO puro, en algunos casos conserva las construcciones nativas de VFP, como es el caso de los menús, que no se han modificado y conservan la misma estructura de los menús desde FoxPro 2.0.

VMP permite desarrollar aplicaciones con las siguientes arquitecturas:

-         1-capa (código y datos VFP)

-         2-capas (código VFP y datos remotos)

-         n-capas (cualquier presentación de capas, incluyendo una aplicación de escritorio VMP, VMP objetos de negocio en el medio y cualquier base de datos)

Es más, VMP permite cualquier combinación de estas estructuras.

Ningún framework puede trabajar perfectamente para todos en todas las aplicaciones, por lo que los creadores de VMP han preparado el framework lo más abierto posible para personalizar y complementar según las necesidades de cada desarrollador. Drew dice que, en cuanto se tienen en cuenta condiciones particulares, el framework pierde su esencia general, y el objetivo para el que es diseñado. Por eso, VMP permite crear clases a partir de formularios base (SCX) o clases base (VCX), tampoco impone su propio diccionario de datos, ya que, como he dicho antes, no es un generador de aplicaciones, así que puede utilizar su propio diccionario o el de terceros.

Para conocer más sobre este interesante y muy útil framework  ver el sitio http://www.visionds.com/vmpsite/

Allí encontramos, entre otras muchas cosas, la información del producto, les recomiendo especialmente el Help y Tutoriales, paso a paso de esta aplicación, que están fantásticos, cada elemento de código está debidamente documentado, con toda la información necesaria para que el usuario menos experto en VMP se haga con sus ventajas.

Esta aplicación, sus demos, tutoriales, etc, está en idioma inglés;… pero!! Está preparada para que el IDE aparezca en muchos idiomas, uno de ellos el español, cuyas traducciones estuvieron a cargo de Alex Feldstein, (Microsoft VFP MVP)

Ante una pregunta que comenzaba con “… y yo podría con VMP lograr…” la respuesta de Drew fue SI,… sin importar lo que viene detrás…porque el desarrollador sigue siendo el dueño de su código y es libre de personalizar a su antojo, utilizando o no las herramientas de VMP.

Me ha resultado muy interesante este primer contacto con VMP. Ahora, no me despido de Drew, porque tenemos la siguiente sesión sobre instanciar y destruir formularios, una de las sesiones que espero con más interés… luego de tanto café, me voy a buscar un refresco…

Lo que nunca te ha contado tu madre sobre instanciar / destruir formularios (What Your Mother Never Told You About Instantiating/Destroying Forms) por Drew Speedie

Bueno, pues este título es más que atractivo, es casi enigmático, vamos a ver….

Instanciar y destruir formularios es aparentemente un proceso muy directo – El evento Init es el encargado de inicializar mientras que el evento Destroy se encarga de destruir el formulario. ¿Ya está? No, que va, hay mucho más que esto.

Desafortunadamente es muy fácil dañar la secuencia normal de eventos para inicializar formularios, con resultados que son muy difíciles de depurar.

Lo primero que quiero decirles es que por gentileza de Drew Speedie, podremos contar con todo el artículo correspondiente a esta sesión, traducido al español y contaremos con todos los ejemplos que fueron presentados. Gracias Drew!! Sin duda serán de gran utilidad.

Por el momento intento comentar algunos de los aspectos que más llamaron mi atención y me parecen básicos para enfocar este aspecto y dejarles al menos una pista de sobre qué estuvo el tema. En estos días que tanto hablamos de VFP 9.0, este es un tema que no está para nada afectado por la nueva versión, incluso, la gran mayoría de los ejemplos son prácticamente reproducibles en cualquier versión, con excepción de los casos donde se utiliza la función BINDEVENT(), nativa desde VFP 8.0

Las bases de LISAG (Load-Init-Show-Activate-GotFocus) y QRDU (QueryUnload- Release- Destroy- Unload)

Secuencia nativa de eventos al instanciar:

1.      Evento Form.DataEnvironment.OpenTables (Tablas/vistas en el Entorno de datos DataEnvironment no están en uso USE() o abiertas)

2.      Evento Form.DataEnvironment.BeforeOpenTables (Tablas/vistas en el Entorno de datos DataEnvironment no están en uso USE() o abiertas)

3.      Evento Form.Load (Tablas/vistas en el Entorno de datos DataEnvironment  están en uso USE() o abiertas)

4.      Evento Init de cualquier objeto cursor en DataEnvironment

5.      Evento Form.DataEnvironment.Init

6.      Evento Init de cada miembro del formulario que es instanciado

7.      Evento Form.Init

8.      Evento Form.Show

9.      Evento Form.Activate

10.  Evento When del primer control del formulario en el orden de tabulación (tab order)

11.  Evento Form.GotFocus

12.  Evento GotFocus del primer control del formulario en el orden de tabulación

Secuencia native al destruir

Si el formulario se cierra hacienda clic en "X" en la esquina superior derecha o la opción Cerrar en la esquina derecha del título.

1.      Método Form.Release

2.      Evento Form.Destroy

3.      Evento Destroy para cada uno de los miembros del formulario.

4.      Evento Form.Unload (Tablas/vistas en el Entorno de datos DataEnvironment  están en uso USE() o abiertas)

5.      Evento Form.DataEnvironment.CloseTables (Tablas/vistas en el Entorno de datos DataEnvironment no están en uso USE() o abiertas)

6.      Evento Form.DataEnvironment.Destroy

7.      Evento Destroy para cada cursor en el DataEnvironment

Si se cierra el formulario por una llamada a  THISFORM.Release(), por ejemplo, desde un botón Aceptar el primer paso es en evento Form.QueryUnload, luego se suceden los eventos del 2 al 7 como se ha mostrado antes.

Y no olvidemos el orden de instanciar que es de adentro hacia fuera en los contenedores, es decir el último Init es el del formulario o conjunto de formulario, para destruir pasa lo contrario, de afuera hacia dentro.

Bueno, todo va bien; pero… si un formulario tiene establecidas las propiedades DEClass y DEClassLibrary (disponibles desde VFP 8.0), entonces cambia, el objeto DataEnvironment se instancia completamente antes del Form.Load

Entonces… empiezan los problemas poco intuitivos que se pueden presentar, algunas cosas a saber son:

-         diferencia entre los eventos que ocurren en dependencia de la forma en que se cierre el formulario,

-         diferencias en lo forma de colocar los comandos SETs que se afectan por sesión privada de datos, si se utiliza la clase DataEnvironment y sus propiedades

-         Las llamadas a métodos del formulario desde métodos del DataEnvironment llamados antes del Form.Load son ignoradas

-         Las llamadas a métodos del formulario desde métodos que se llaman antes del Form.Load disparan estos métodos SI están definidos ena clase form de la que hereda el formulario actual. Uffff qué enredo, ¿no? Pues, sí, y todo queda debidamente demostrado con ejemplos.

-         Si en los eventos en el DataEnvironment, que se disparan antes del Form.Load se miran los valores de las propiedades del formulario y todas son .F., pero si mira los valores en la clase padre, son los deseados.

¿Dónde está el alcance de los comandos SET en Sesiones privadas de datos? Pues, la respuesta es… depende! Y depende de si se utiliza DE o no. A  criterio del autor, es más consistente y fácil de mantener, el no uso del DataEnvironment; pero, en tiempo de diseño recomienda utilizar DE para:

-         arrastrar los cursores desde el DE para instanciar los grids

-         arrastra los campos para adicionar controles cuyos ControlSource ya estarán definidos y se puede obtener ya la etiqueta correspondiente, en dependencia de lo que exista en el cursor.

-         Establecer el ControlSource de cada control desde la ventana propiedades, seleccionando del control combobox con los cursores actuales.

Pero… en tiempo de ejecución recomienda abrir las tablas manualmente, garantizando el control de errores correspondiente e individual para cada una.

Drew nos alerta sobre los peligros y consecuencias a veces imprevisibles que conlleva el alterar la secuencia natural de los eventos.

Ej. Colocar al final del Form.Init esta línea de código

THIS.cmdOK.SetFocus()

Esto va a provocar que la secuencia no sea LISAG, sino LIAGIS, porque, cuando el Init encuentra esta línea va directo a hacer el Activate para poder dar el foco al comando OK, y luego sigue la secuencia normal del Show. Vimos otros ejemplos en este tema.

De forma análoga Drew se refirió a los aspectos y problemas que se producen a la hora de destruir el formulario. Para que un objeto sea liberado / destruido correctamente todas las referencias externas al mismo, deben ser liberadas. Si no son eliminadas las referencias a los objetos contenidos, el contenedor no es liberado, si el contenedor es un formulario, pues no se puede liberar.

Ejemplo:

ORCleanup1.PRG crea 2 dos instancias de ORCleanup1.SCX para mostrar el problema

1.      DO ORCleanup1

2.      En la Instancia 2 del formulario, selecciono cualquiera de los checkboxes de abajo para guardar la referencia a un miembro del formulario en la instancia 1.

3.      Intento cerrar la instancia 1del formulario: Hago Clic en el botón OK, la "X" en la esquina superior derecha o en Cerrar en la esquina superior izquierda.  La instancia 1 del formulario no se deja cerrar debido a que le cuelga una referencia.  

4.      Cierro la instancia 2 del formulario.  En cuanto se cierra la instancia 2, se cierra la instancia1, porque el Destroy ya se había disparado, solo estaba esperando porque fueran liberadas las referencias externas a sus objetos.

Seguimos viendo más ejemplos que matizan los problemas que se suceden al no tener en cuenta las referencias de objetos.

Sobre el caso particular de _Screen.ActiveForm, nos comenta que conociendo cuando THISFORM se convierte en _Screen.ActiveForm, nos permitirá hacer cosas muy útiles empleando las referencias de objeto. Pero… cuidado, que si el formulario activo contiene uno o más controles ActiveX, _Screen.ActiveForm puede devolver la referencia al control y no al formulario activo.

Pues… aquí terminamos, hay mucho más en el escrito que vamos a traducir y  según Drew Speedie, hay mucho más de lo recogido en la presentación y el escrito, por lo pronto, me queda muy claro que he disfrutado mucho de esta sesión, que he aprendido mucho y que este es un tema al que voy a recurrir, lo primero será traducirlo y probarlo todo en el menor tiempo posible, Gracias nuevamente Drew, sencillamente genial!!

Bueno, me voy a ver algo de diseño de Bases de datos, desde la mano de un experto, Andy Kramek, esto aquí es de lujo pasas de un experto a otro.

Diseño de Bases de datos (o cómo hacerlo bien, la primera vez) Designing a database (or how to do it right, first time) Andy Kramek (Microsoft Most Valuable Professional cada año desde 1998 y Microsoft Certified Professional en Visual FoxPro)

Continuamente se ven cambios en la elaboración de la base de datos. Puede ser una DBC para una nueva aplicación o para agregar un módulo o nueva funcionalidad a una aplicación existente.

Antes de siquiera comenzar a pensar en definición de tablas, normalización de datos e integridad referencial, necesitamos estar seguros que la base de datos refleja el modelo correcto  de la situación real que se necesita programar. No importa si utilizará bases nativas de VFP, SQL Server o cualquier otra. Esta es la base para el éxito de cualquier Base de datos.

La aplicación de algunas reglas nos permite hacerlo bien, desde el inicio. Andy parte por los conceptos iniciales, hace distinción entre dato, que es con lo que una base de datos tiene que tratar e información, que es con lo que trata la aplicación que utiliza la base de datos… pero… ¿qué es y para qué es una base de datos? Una base de datos ha de cumplir dos funciones:

-         debe controlar el proceso de almacenar información

-         debe asegurar la consistencia del dato con su definición

Sobre los tipos de aplicaciones que utilizan bases de datos para utilizar información, Andy nos dice, que son infinitos; pero se pueden dividir en tres:

-         Sistemas de líneas de negocio (gran cantidad de entrada de datos y muchos usuarios interactuando),

-         Sistemas de Administración de información (análisis de datos y preparación y preparación de informes),

-         Sistemas de almacenamiento de datos (procesamiento de datos).

Los datos son de diferentes tipos:

-         Esenciales –Son significativos para la aplicación que utiliza la base de datos. No pueden ser derivados, deben ser introducidos de forma explícita. Los cambios sobre ellos deben ser controlados.

-         Proceso - Son significativos para la aplicación que utiliza la base de datos; pero  pueden ser derivados de otros datos ya presentes en la Base de datos.

-         Soporte – No son significativos; pero dan soporte a la aplicación y deben ser introducidos explícitamente.

Los patrones de estructuras de tablas son: plano, tablas relacionales, tablas reflexivas (jerárquicas), tablas verticales (pares de atributo/valor)

Para los patrones relacionales existen:

1.- Tabla única

2.- Tabla de extensión.- relación Uno a Uno

3.- Tablas con relación Uno a Muchos

4.- Tablas con relación Mucho a Uno

5.- Tabla con relación Muchos a Muchos (es necesaria una tabla intermedia)

6.- Tabla con relación auto-referencial

Todos estos casos fueron ejemplificados.

Luego pasamos a las reglas. Las reglas pueden ser:

-         de Bases de datos (concernientes al almacenamiento de datos, las reglas de integridad de los datos),

-         de Negocios (interpretación de la información, son implementadas en la capa intermedia) y

-         de Validación (gobiernan la admisibilidad de los datos en el contexto de la aplicación).

Casi al final, nos dice Andy, que lo más importante es seguir un orden secuencial desde el inicio, para diseñar y normalizar una base de datos, se puede resumir en:

-         Identificar el tipo de sistema

-         Modelar el sistema y los procesos claves.

-         Identificar los orígenes de datos para los procesos (esenciales, procesos o suporte)

Andy nos deja literatura para complementar este estudio:

1.- Data Model Patterns: Conventions of Thought

por David C. Hay; Published by Dorset House, 1996 (ISBN: 0932633293)

2.- Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design

por Michael Hernandez; Published by Addison-Wesley, 2003 (ISBN: 0201752840)

3.- Data Access Patterns: Database Interactions in Object-Oriented Applications

por Clifton Nock; Published by Addison-Wesley, 2003 (ISBN: 0131401572)

Ya se que está en inglés; pero es lo que hay.

Han terminado las sesiones; pero no la jornada de hoy. Nos queda un panel con algunos ponentes, espero que sea interesante.

Panel de discusión sobre tecnologías de Microsoft - con algunos ponentes de DevEssentials 2004 – sesión extra

Se encontraban presente casi todos los ponentes, en el panel o en el público, la idea era que los expertos respondieran a un grupo de preguntas preparadas previamente por los asistentes a la Conferencia DevEssentials 2004.

Los presentes cubrieron los 3 temas del evento: Visual FoxPro, SQL y .Net.

Sobre las nuevas tecnologías de Microsoft relacionadas con .Net, se retomaron las opiniones y temas relacionados con Yukon y Widbey. Cada panelista dio su valoración sobre las ventajas y desventajas del paso a tecnología .Net, apreciándose diversos puntos de vista, tal y como nos pasa a nosotros en los foros, en la Conferencia los expertos enfocan el tema de .Net desde ángulos diferentes, sobre todo, era fácil distinguir la herramienta de trabajo de cada uno.

Algunas de las cuestiones fueron la curva de aprendizaje, la posibilidad de reutilizar código y otras.

Tony Feltman (MVP y prestigiosa conferencista) dijo que depende mucho de lo que paguen los usuarios por las nuevas características que se pueden aportar. Dice que hay experiencia de años acumulada en VFP, mucha más que en otras plataformas, algunos de los presentes llevan 15 años trabajando con Fox y el .Net es muy joven todavía.

Andy Kramek (MVP y especialista en Diseño de Bases de datos) apunta que depende de los objetivos de la aplicación, los recursos del usuario y que al final era una decisión de compromisos,…como siempre.

Comentaron sobre el IDE de VFP 9.0  y aunque a algunos les gusta como está y a otros les hubiera gustado verlo diferente, todos coincidieron que las nuevas características aportadas en la versión 9.0 favorecen la productividad.

Sobre lo mejor de VFP 9.0 también hubo opiniones diversas, les dejo breves comentarios:

Tony Feltman: IntelliSense en campos memo

Richard Hundhausen (experto en .Net): Soporte extendido para SQL

Doug Henning: Posibilidad de anclar (dock) las ventanas de usuario.

Rick Shummer: Todo lo que me haga más productivo, me ayude a recordar los nombres de variables y propiedades, el IDE, etc

Luego vino una pregunta más distendida, cada uno contó algo bien interesante sobre lo que se sentía orgulloso de haber logrado o descubierto, algunos, como Doug Henning, reconocieron que muchos de sus descubrimientos más interesantes habían sido de pura casualidad.

Comentaron sobre las clases y métodos de .Net, algunos consideran que son excesivas y otros como Tamar Granor, consideran que en VFP, muchas de las clases y métodos nativos son ignoradas por los desarrolladores, que utilizan solo una parte de ellos.

Luego… pues luego, la verdad es que ni se cómo empezó todo; pero estaban hablando del trabajo en las comunidades de desarrolladores.

Rick Shumer habló de las horas que dedica a escribir artículos, preparar conferencias y atender a las preguntas en los foros y que viendo tanta gente que acudía a las conferencias, podía resumir con un ¡Gracias por venir!

Doug Henning tuvo palabras de aliento y dijo: ¡Sigan adelante!

El resto de los del panel también tuvo frases de apoyo y aliento; pero yo ya no les escuchaba, me di cuenta de que era la oportunidad que necesitaba para divulgar nuestro trabajo en la comunidad de desarrolladores de VFP de habla hispana, preparé unos garabatos y con bastante miedo escénico y temor a que me traicionara el inglés pedí la palabra cuando terminaron de opinar los panelistas.

Mi comentario fue de forma general el siguiente (lo pude reconstruir gracias a las notas que me había preparado)

Amby: “Quisiera pedir disculpas por mi imperfecto idioma inglés, espero que puedan entenderme.

Hablando de las comunidades de desarrolladores me encuentro representando a los desarrolladores de VFP de habla hispana, que se encuentran distribuidos en España, Latinoamérica, EEUU y otros muchos países del mundo.

Represento especialmente a PortalFox, sitio web en idioma español, con más usuarios y mayor actividad e información de VFP en idioma español. Desde PortalFox se organizó la traducción del IDE y archivos de la Ayuda de VFP 8.0, lo cual ha sido de gran ayuda para todas aquellas personas que no pueden leer en inglés. Hemos realizado, además, traducciones de numerosos artículos de prestigiosos autores, muchos de los cuales, aquí presentes, nos han dado su autorización y les estamos muy agradecidos. Gracias a ellos y a las traducciones que se publican en PortalFox, esa información está disponible para los desarrolladores de habla hispana.

Si Alex quiere comentar algo más…” (me refería a Alex Feldstein, Microsoft VFP MVP y unos de los expertos con mayor prestigio en nuestro foro).

Alex Feldstein: “El problema que existe en las comunidades de habla hispana, y pasa lo mismo en portugués, es la falta de literatura, No hay libros en español ni portugués. Por otra parte la situación de los países latinoamericanos no permite la presencia de muchos desarrolladores en estos eventos y para España resulta también muy costoso. Por lo que las traducciones, son la forma de hacer llegar la información”

De nuestras intervenciones se derivaron otros comentarios de algunos presentes que se interesaron en algunos detalles del proceso de traducción, así como la traducción de artículos. Hubo felicitaciones por el trabajo realizado, deseos de éxitos y nos invitaron a seguir adelante con nuestro trabajo.

Lo más bonito fue lo que vino después, a partir de ese momento y hasta el final del evento, varios ponentes tuvieron la gentileza de acercarse para ofrecer sus trabajos para ser traducidos.

La noche fue larga… tuvimos conversaciones con Ken Levy – Product Manager de VS Microsoft, esta conversación, por su importancia la reportamos aparte.

¡Qué día! Me fui muy feliz a descansar… Mañana nos vemos en el tercer y último día de sesiones.

Espero que les haya resultado de utilidad,

Saludos,

Ana

www.amby.net

 


Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2007 PortalFox. Todos los derechos reservados.