De la mano del Dr. Bob

octubre 30, 2009 en Ado Express & DataSnap, Artículos, Delphi, Entrada Diario, Noticias, Noticias Delphi, Videos

Bob Swart, o Dr. Bob que es como comunmente le conocemos, dejaba conocer desde la tribu de Delphi, la posibilidad de descargar un nuevo documento en el que el tema central son los datos y DataSnap. Este documento de mas de 50 páginas, unido a la guía de Rad Studio 2010, tambien con un numero similar, puede descargarse libremente, con el único requisito de rellenar un pequeño formulario.

Ambos estan en formato pdf.

“Delphi 2010 DataSnap: Your data – where you want it, how you want int”

Rad Studio 2010 – Product Review Guide

Este es el enlace a la pagina de Embarcadero

http://www.embarcadero-info.com/in_action/radstudio/db.html

Delphi 2010 DataSnap, tus datos, donde quieras y como quieras.

Bienvenida cualquier iniciativa  :-)

+1

Un día con los mayores (2)

octubre 5, 2009 en Ado Express & DataSnap, Artículos, Delphi, Entrada Diario, framework, Taller práctico

Veamos cual es el siguiente paso…

En este segundo capítulo vamos a para dar un paso más en la construcción del  framework de Ian, creando la estructura del mismo, un esqueleto vacío en el que todavía no vamos a tener en cuenta ni a concretar nada que haga referencia a la lógica real de los datos sino que todavía nos movemos en un nivel abstracto, con acciones que pertenecen al mundo de las ideas como: Guardar, Descartar, Confirmar, etc.

Algunas unidades que van a formar parte de esta estructura, las podéis imaginar como el molde que “ayuda” a un pastelero a que sus figuritas de mazapán sean lo mas similares posibles de una a otra. Ese es el caso de la clase TBrowser y de la clase TDialogo, que van a ser ese molde sobre el que vamos a crear las ventanas que pertencen al interfaz de nuestro usuario.

Molde de pasteleria para hacer galletas... Y digo intencionalmente “ayuda”, ya que en la vida real, la propia lógica de los datos y de las relaciones entre las entidades, hacen que estos esquemas sean simplemente una guía, algo así como esos trajes unitalla, y nos obliga en alguna que otra ocasión a ser, nosotros mismos, quienes tengamos el suficiente sentido comun para que no acaben siendo una celda que nos encorsete y axfisie. Intetaremos, en un momento posterior retomar esta idea y comentarla para que se pueda ver con mas claridad.

Pero vamos a empezar por el principio, como hace Ian Marteens en los primeros capítulos del bloque C del curso. Lo primero de todo es iniciar nuestro proyecto, seleccionando la opción File -> New -> VCL Forms Application – Delphi for Win 32, que creará el nuevo proyecto. Podemos guardarlo con el nombre que queramos. Yo he guardado la unidad de proyecto como “Mayores.dpr” y la unidad principal como UPrincipal, dentro de una estructura de carpetas que he creado para alojar el proyecto.

Creando el proyecto...

Cada cual organiza los módulos como cree conveniente y no creo que haya nadie que diga ni Estructura de carpetas...que tienes que crearlo todo en una sola carpeta ni que tienes que estructurarlo en cien mil.  Será de esas cosas en las que cada uno tenga su propia opinión. A mi particularmente no me gusta tener un solo directorio por lo que he creado una pequeña estructura.

Una carpeta por ejemplo para todos los archivos que son propios del proyecto y que forman parte del framework. Otra para unidades auxiliares (común) que podrían ser compartidas por otros proyectos por ser recursos de caracter general, como rutinas de evaluación (del dni, de la cuenta bancaria, de cálculo de días de vencimientos en giros, rutinas para saber si un dia cae en festivo o que se yo, si el año es bisiesto y nos trae un dia de mas, etc…).  También podríamos guardar todás las unidades compiladas de nuestro codigo fuente (dcus) en una única carpeta y el ejecutable en otra. Para ello tenemos en las opciones de proyecto donde vamos a activar las rutas que estimemos convenientes. Esta es la imagen:

Creando el proyecto...

Y ya que estamos aquí, aprovechando que tenemos el editor de opciones abierto, activaremos el control de versiones. En alguna de las entradas siguientes puede valernos para añadir unas rutinas que nos permitan actualizar de forma sencilla el ejecutable de nuestra aplicación.

Creando el proyecto...

Volvemos a nuestra unidad principal, que hemos convenido en llamar UPrincipal.pas, ya que tenemos que cambiar algunas de las propiedades en el inspector de objetos. El estilo de nuestro formulario principal va a ser el correspondiente al de la ventana principal de las aplicaciones MDI, por lo que asiganremos la propiedad FormStyle con el valor fsMDIForm. Ian además, activará las propiedades ShowHint a true y el tamaño de inicio de nuestra aplicación en Maximizado (wsMaximized). Así que procedemos a ello, tras nombrar la unidad siguiendo un patron de eliminar el prefijo “U” que fue usado al guardar (hacemos que la propiedad Name tome el valor de Principal).

Todas estas cosas, estos detalles, no cobran importancia ahora. El que tengamos mas o menos  estructurados los módulos, que asignemos correctamente los nombres de los objetos o dejemos cada cual segun del humor con el que nos alcemos, el que no sigamos patrones para nominar las distintas unidades, el olvidar asociar la adecuada documentación segun la etapa de nuestro desarrollo o simplemente el no realizar los debidos analisis de requerimientos confiando en nuestra experiencia y buena estrella, puede ser algo banal o puede ser una soga que se ate a nuestro cuello desde los primeros pasos del mismo.  :-)

Más adelante, vamos a necesitar al menos dos módulos de datos. No vamos a crear ahora mismo los componentes que formaran parte de los mismos y que nos permitirán conectarnos a la fuente de datos. Simplemente, añadimos un módulo de datos (datamodule) para la capa cliente, que llamaremos “UDatos.pas” y otro para el conjunto de datos que accedera a nuestro servidor, “USQLDatos.pas”.

Es decir, hacemos File -> New -> Other -> [Delphi Project -> Delphi Files -> Data Module]

Creando los modulos de datos...

Asi que en este punto ya tenemos casi todo… :-)    ¡Qué más quisierais!

¡No, si yo tampoco me lo creo! :-)   No hemos hecho más que comenzar. Tenemos una archivo de proyecto, una unidad principal que va a responder al esquema de aplicaciones mdi y dos modulos de datos. Y TIENEN QUE EJECUTARSE EN UN ORDEN YA DETERMINADO. Primero la unidad que nos va a permitir conectar con la fuente de datos (USQLDatos.pas). Luego el modulo de datos (TDatamodule) que representa la conexion del cliente (UDatos.pas) y finalmente, el interfaz, nuestra ventana principal, que tendra una relación de “amistad” o “conocimiento” con UDatos, ya que se vale de el para acceder a las distintas peticiones de nuestro usuario.

Esto tiene un sentido que no es dificil de comprender. Tened en cuenta que no estamos separando las capas y que tanto el acceso a los datos del servidor como el que representa al cliente, forman parte de la misma aplicación, dentro de lo que pudiera ser el modelo que representa tradicionalmente a la arquitectura cliente-servidor. En un desarrollo multicapa, el modulo que puede dar servicio al acceso a datos estaría escuchando en algun punto accesible a la aplicación cliente y serviria de intermediario entre esta y el servidor. Por tal razón respetamos el orden y crearemos los distintos módulos según ese esquema. Y van a existir durante toda la vida de nuestra aplicación.

Veamos como quedan dentro de las opciones del proyecto:
Cómo quedan las unidades...

Hemos dicho que nuestra aplicación va a responder al modelo MDI y realmente no hemos dicho demasiado sobre ello. No se decir si me gusta mas o menos, pero sí es cierto que tiene algunas pequeñas ventajas que pueden ser resaltadas. Una aplicacion SDI se organiza mediante ventanas que ocupan un espacio no determinado sobre el escritorio y aunque sigue existiendo una ventana principal esta puede llegar a ser ocultada por el resto de ventanas que se crean en tiempo de ejecución. Así que puede hacerse necesario que controlemos la posición y el tamaño de las mismas. En el modelo MDI, la ventana madre o principal siempre queda visible cuando está activa (una preocupación menos que nos la resuelve el propio sistema)l, y organiza en su interior las ventanas “hijas” creadas. Todos conocemos de sobra esos modelos porque lo hemos vivido con Delphi tanto uno como el otro. El modelo mdi facilita o nos permite desprecuparnos sobre detalles como la posición de las ventanas hijas (en este caso más aun ya que siempre es creada maximizada), permite organizarlas y acceder a ellas facilmente.

En el framework de Ian Marteens, las ventanas hijas, representarán la búsqueda inicial del usuario, y se plasmarán sobre una rejilla que mostrará el resultado de la misma.Inicialmente, puede estar vacía de datos (es lo que recomienda Ian con muchos sentido común) y la elección del usuario sobre los parametros de busqueda, crea el conjunto de registros con los que trabajará en ese momento nuestro usuario. El framework le permitiría saltar de una ventana a otra, de clientes a proveedores, de facturas a pedidos hasta que se decide editar o insertar (manipular datos), momento en el que va a participar una ventana modal que va a contener los datos del registro que ha seleccionado el usuario. Esta ventana modal tendría el estilo de ventana “fsNormal” y sería descendiente de la clase TDialogo, que ya ha sido nombrada en lineas superiores.

Hay desarrolladores que no son partidarios de los enfoques modales en la edición de las fichas. Yo veo que es una solución muy práctica, que te da un mejor control sobre el proceso de edición. Sin embargo, se podrían poner algunos “peros” que pueden ir apareciendo a medida que se desarrolla nuestro proyecto y que tienen que ver con los prerrequisitos que la garantizan y que pueden necesitar adicionales ventanas modales para satisfacerlos. ¿Cual es la cantidad máxima que nos vamos a permitir? ¿O bien relajamos las condiciones y nos valemos de un trigger para elaborar algunos procesos que puedan ser necesarios previamente? ¿Obligo a crear el artículo previo a la edición del documento de venta,  le doy la opción de crearlo en ese momento o postergo la creación al disparo del trigger, una vez grabado el registro?  Son temas que no siempre resultan sencillos ya que la decisión puede depender de otros factores ajenos a la propia aplicación.

En la tercera parte del framework, vamos a meternos en harina y disfrutar de los razonamientos que se descubren en las relaciones de herencia entre las clases TAncestro, TBrowser y TDialogo. Lo vamos a ver ya, en nada, a la vuenta de dos o tres días (si en ese tiempo no me atacan los indios de nuevo el servidor).  ;-)

Es muy tarde. Las dos y cucu… En fin. Tengo que descansar.

Ahhh Para acabar, olvidaba poner la dirección de los cursos de Ian Marteens por si alguno puede estar interesado. En mi opinión, y aunque el contenido ahora mismo no este actualizado con la última versión de nuestros entornos, la metodologia que utliza trasciende a una versión concreta. Somos muchos los programadores de Delphi que hemos aprendido en las páginas de sus libros, ya que no tienen desperdicio.

Nosotros solo vamos a ver un pequeñisimo extracto del framework por lo que, podeis acceder en este link si deseais mas información sobre los mismos.

http://www.intsight.com/training.html

JSon y el vellocino de oro…

septiembre 25, 2009 en Ado Express & DataSnap, Enlace interesante, Entrada Diario

Ahhh Perdon… ¡Qué esto no tiene nada que ver con los Argonautas!

:-)

Como estos días va a escucharse  y leerse este termino que ya os sonará “JSon”, que es el acrónimo de (JavaScript Object Notation – Notación de Objetos de JavaScript),  vamos a colocar el enlace para que sepamos de que va:

http://www.json.org/json-es.html

Como veis, tiene que ver con el formato de intercambio de datos y con Datasnap, que soporta ahora este formato de texto que como se explica en el link es completamente independiente del lenguaje, lo cual nos da un grado alto de compatibilidad.

Acabo de recibir el link por correo, hace unos minutos (Manuel es un verdadero sabueso para esto de encontrar direcciones interesantes ) y tras ojearlo (cosa que os recomiendo) vais a tener bastante claro de que va esta historia.

Gracias Manuel.

Disponibles los videos del último seminario web hispano

septiembre 24, 2009 en Ado Express & DataSnap, Delphi, Entrada Diario, Noticias, Noticias Delphi, Seminario web, Videos

Parece que no nos equivocábamos. :-)

No han pasado ni seis días y ya tenemos disponibles los vídeos del último seminario. Ni falta hace decir que es así como se hace Comunidad. Comunidad con mayúsculas.

No tengo mucho mas que decir en ese sentido, ya que me parece importante la gestión eficaz del contenido. Y por eficaz se entiende, por supuesto, saber que el tiempo importa y que tiene que llegar en un “tiempo” razonable, valga la redundancia. Así que podéis imaginar que me alegra mucho ver que ya tenemos disponibles los vídeos. De hecho, mientras estoy escribiendo estas letras los estoy descargando, para verlos un poco más tarde con tranquilidad.

Este es el enlace a la web de Andreano Lanusse en Embarcadero, donde están disponibles para la descarga o para que puedan ser visionados desde la misma:

Seminario web 18/09 Delphi 2010

¡Comunidad!. ¡Comunidad!. ¡Comunidad!. Seguimos luchando para que sea una comunidad fuerte. Eso sí, cada uno en su papel y sabiendo qué puede y qué no puede aportar. Yo en ese sentido, lo tengo claro y no me avergüenza decir que nunca tendré la capacidad de esos gurús que ya existen y que todos conocemos. Tampoco es algo que me preocupe o me quite el sueño. :-) Mi granito de arena esta en este lado de la barrera, en la comunicación, que también es otra forma de ayudar.

Yo, como muchos programadores, somos profundamente egoístas al querer una comunidad fuerte, porque sabemos que, si nuestra herramienta está ahí, en la punta del huracán, tirando del carro tecnológico, nuestro futuro se vuelve más esperanzador.

Es puro y sano egoísmo. ¿No os parece?  ;-)

Un día con los mayores (1)

septiembre 14, 2009 en Ado Express & DataSnap, Artículos, Delphi, Entrada Diario, framework, Taller práctico, Videos

De estas últimas semanas, la mayor parte del tiempo se me ha ido en dos puntos que tienen relación con la serie que vamos a compartir.  ¡Es verdad!: El tiempo se  escapa de nuestras manos. La expresión es fugaz como el tiempo hace justicia y con razón, porque no podemos hacer nada por retenerlo. Nos queda simplemente el consuelo de que haya servido para algo, que tenga un buen fin. Algo es algo… :-)

Una parte de ese tiempo, pues lo he pasado desmontando literalmente el ejercicio 13 de la serie C de AdoExpress, perteneciente a los cursos que dirige Ian Marteens desde sus servicios profesionales. Desmontar significa eso… :-) Desmontar… Dejar estrictamente lo que realmente vamos a necesitar para entender como se relacionan las unidades que forman parte del framework. Así que he tenido que empezar a plantearme que cosas eran necesarias y cuales prescindibles… :-(   ¿Y sabeis una cosa?  Es muy dificil elegir porque cuando empiezas a recorrer las lineas de código te da pena quitar una tras otra ya que todo forma parte de un ejemplo muy básico pero tambien muy didactico, del que se van descubriendo detalles capítulo a capítulo, acompañado de la ácida pluma del escritor. Muchos de nosotros hemos aprendido multitud de conocimientos que nadie te enseña. Es una de las cosas que hacen de Marteens, una persona querida (valorada) por muchos programadores de esta comunidad.

Ya… ahora esta en el mundo de Net. Bien… ¿Y…?

Alguna vez he recibido correos de otros compañeros comentando que hasta Marteens había abandonado la barcaza y que tarde o temprano se hundiría (Delphi), motivo por el cual parece que desaparezca de un plumazo su contribución y nada mas lejos de la realidad. Al menos yo pienso así. Porque en una comunidad en la que hasta hace nada, encontrar un buen libro de programación era mas dificil que subirse a un taxi en un día de lluvia… :-)   han quedado varias “Caras ocultas” que han ayudado a muchos programadores a entender el mundo de las bases de datos. Y sobretodo a exigirse intentar hacer las cosas bien. Sin olvidar que una de ellas se hizo disponible para todo el mundo (“La cara oculta de Delphi 4″), cosa que le honra.

Pero volvamos al tema de los recortes…

Todo lo que hacía referencia a la normalizacion de las cadenas, es decir, un entramado de funciones y tablas que permitían búsquedas en las que podiamos escapar de las “odiosas” tildes :-) , fue una de las primeras cosas a las que le tuve que meter la tijera. Lo siento. :-( Luego vino el drag&drop, que permitía dentro de una ventana arrastrar un registro de otra tabla relacionada. La interfaz creada para heredar la impresión desde un formulario base de la rejilla de busqueda general de registros. Y tambien la ventana modal de selección de busquedas… Son cosas que aunque importantes, complementan el curso. Y algunos detalles mas… No. Yo creo que se entiende que la intención de estas entradas no es reproducir el ejercicio en si, sino simplemente compartir algunos puntos que a mi me han parecido importantes de el y que pienso puedan ayudar a compañeros que no han tenido la oportunidad de conocerlo.

¿Y por qué no desde la parte remota?

Pues no creais que no me lo planteé porque el capítulo D del curso aborda con claridad toda la parte que hace referencia a los servidores remotos y a la creación de aplicaciones multi-capa, que realmente es el objetivo final… pero realmente, eso es algo que  puede ser abordado en otro momento y puede necesitar otro enfoque, no solo por ser mas complejo, que lo es, sino habida cuenta de que DataSnap cambió con la llegada de Delphi 2010. Además, os comento que el framework es funcional 100% y yo mismo (no hace falta que me lo cuente nadie) he trabajado con una aplicación que actualmente se basa en el, (con los cambios que se hicieron necesarios por necesidad de la logica de la aplicación), y nunca se hizo necesaria esa capa adicional. Queda disponible, en el sentido de que incluso de haber sido necesaria,  el framework permite la separación de las capas con relativa facilidad, por lo que tampoco fue una cosa que nos haya llegado a obsesionar (hago refencia a mi compañero en el trabajo, Manuel, al que alguna vez cité en entradas anteriores).

Y respecto al ejemplo que nos ocupa, pensé en cambiar las tablas del ejercicio pero despues de quitarlas, me dije a mi mismo…

-Pues vaya tontería si las tablas que puedas crear van a ser muy similares…  :-)

Así que de su ejemplo, convertí el cliente en un beneficiario (un usuario de un centro de personas mayores) y añadí algunas entidades relacionadas con esta. Actividades, suscripciones, centros, dejando la tabla de direcciones y paises intacta y tambien algunos de los tipos definidos.

Aquí teneis un diagrama en el que se muestran las relaciones:

Este era el segundo punto, al que hacia referencia en las primeras lineas de la entrada. Parte de mi tiempo, en las ultimas semanas se fue en este diagrama y en intentar que recogiera algo mas. Y ese algo mas, lógicamente no era el diagrama en si, sino la sana ocurrencia de que pudiéramos crearlo con otra de las herramientas de Embarcadero, DBArtisan, y de paso, pudiera ser mejor conocida por la comunidad. Así que me llevó su tiempo experimentar con ella, (acostumbrado como estaba a usar SQL Manager for SQLServer de EMS o el Administrador Corporativo de SQLServer), incluso caducó la trial y tuve que solicitar que incrementasen unos días la licencia para que me diera tiempo a grabar el vídeo. Os prometo que fue una odisea.

A mi no me disgustó para nada la herramienta de Embarcadero, similar en la funcionalidad a las que podais encontrar en el mercado. Necesité unos días para acostumbrarme a ella pero una vez en ese trabajo, encontré algunos puntos muy buenos que valoré positivamente. Uno de ellos, era por ejemplo que podría permitirme trabajar con varias bbdd, sin necesitar diversas utilildades. Ahora SQLServer. En un futuro casi con seguridad Firebird e Interbase. La cosa pinta bien, que dicen muchos compañeros. No soy el único que piensa que Embarcadero está aportando algo mas, o al menos puede hacerlo, merced a sus herramientas de gestión de datos.

¡Dios mio!… que mal que se me da esto de grabar. :-) Odio los videos :-)

En estos dos (que casualmente tuve que partirlos para subirlos a youtube tras varias horas de intentos nulos) se ve como se crean un par de tablas con DBArtisan y os presento el ejemplo. No obstante, os he dejado los dos scripts ya generados para crear la base de datos e introducir un par de registros.

Parte 1

Parte 2

Aquí podéis descargar el script sql:

Objetos
Datos

Esta es una imagen de la aplicación, que todavía está sin finalizar ya que la voy cogiendo por las noches, a ratitos, a base de cafés y de pasar sueño… :-)  Todavía quedan bastantes detalles. De hecho, incluso falta por implementar en el script sql algun trigger, que he dejado por falta de tiempo, para las siguientes entradas.

Lo dejamos aquí. La idea es que el primer fin de semana de Octubre pueda tener preparada la segunda parte, en la que abordariamos uno de los módulos del framework. Intentaremos compaginar algo de video con las entradas, con la idea de que sea lo mas didáctivo y práctico posible, que a fin de cuentas es lo que todos esperamos. Ese es el enfoque de la serie, a modo de taller práctico y poco mas.

Me resta solo, al igual que hice al final del video, dar las gracias a Ian y pedirle que disculpe los errores que puedan resultar de estas entradas, ya que por encima de la buena voluntad de querer hacerlo bien, está mis propias limitaciones.

Seguimos en quince días.