martes, septiembre 12, 2017

Usando SQL con Advantage de la manera fácil


Una de las grandes carencias del lenguaje XBase es la capacidad de hacer queries (búsquedas) sobre una o varias tablas DBF extraer los resultados y mostarlos todos en una "vista", en XBase hay que hacer ese trabajo a mano, mediante índices, SET RELATION, SCOPES incluso SET FILTER y otras cosas mas. El resultado no siempre se obtiene de la manera mas rápida ni con la menor cantidad de tiempo invertida en la programación, si tuviéramos un SQL, la cosa resultaría mucho mas rápida.

Desafortunadamente el modelo XBase tal cual como lo conocemos ha sacrificado el modelo "relacional" por el modelo "navegacional", dando preferencia a mostrar las tablas en listados en vez de tratar de obtener la menor cantidad de información posible para mostrar en la pantalla, como lo hace SQL.

Si pudieramos tener el poder del modelo navegacional del XBase, de la mano del poder relacional del SQL, sobre nuestros veteranos archivos DBFs, pues otro gallo nos cantaría podríamos trabajar y obtener resultados en menos tiempo y realizar complejísimas búsquedas sobre uno o mas archivos DBF, relacionar sus campos y obtener un resultado rápido y ordenado de un criterio de búsqueda dado.

¿ La solución ?, ADS de la mano del RDDADS de xHarbour.

Lo que vamos a analizar a continuación está disponible tanto con el servidor local como con el servidor remoto de ADS, pero solo puede usarse con el RDDADS de (x)Harbour a 32 bits, lo siento chicos de Clipper, el cliente ADS para Clipper no soporta el uso de SQL. (En los próximos días publicaré un artículo para que todo el mundo le pierda el miedo a (x)Harbour, de la mano con una sorpresa por parte del Equipo Xailer).

Manos a la obra, ¿ qué necesitamos ?:

1) Un (x)Harbour cualquier versión (también funciona con cualquier interfaz grafica: Xailer, FiveWin, VisualxHarbour o Harbour MiniGUI)
2) El RDDADS.LIB y el ACE32.LIB para linkear a nuestro EXE
3) Las DLLs del cliente ADS (ACE32.DLL, AXCWS32.DLL y ADSLOC32.DLL para el servidor local)
4) Un código fuente .PRG con las instrucciones correspondientes.

Modo de preparación:

Antes de meternos en el mundillo del SQL con ADS, tenemos que analizar un poco como es que funciona un motor de datos SQL.

En un sistema gestor de bases datos relacional, como MySQL, SQL Server, y el mismo ADS, el concepto de "BASE DE DATOS" cambia con respecto a lo que conocemos como "BASE DE DATOS" en el modelo XBase. Mientras que en el modelo XBase tradicional erroneamente le llamamos "base de datos" a UN archivo o tabla .DBF, en el modelo relacional una base de datos es una COLECCION de tablas, indices, usuarios, esquemas de seguridad, vistas, procesos almacenados, etc.

En todos los productos basados en SQL, es necesario realizar una CONEXION a la base de datos, esto se hace comúnmente mediante un Middleware como ODBC ó ADO y mediante una serie de instrucciones desde el lenguaje de programación que realizan la conexión primero con el servidor de base de datos y segundo con la propia base de datos, para tener acceso a los datos almacenados en sus tablas.

El modelo cambia un poco dentro de ADS, ya que ADS soporta 2 tipos de conexiones, lo que conocemos como TABLAS LIBRES, es decir archivos DBF o ADTs individuales que manipulamos usando nuestro lenguaje XBase tradicional, o bien un modelo de conexión mas aproximado a lo que es el modelo relacional, que es el modelo basado en DICCIONARIO DE DATOS.

Un DICCIONARIO DE DATOS para ADS es similar a una base de datos de un SQL, es decir, un DD (Diccionario de Datos) guarda referencia a las tablas DBF o ADT individuales, y al mismo tiempo guarda el esquema de seguridad de los usuarios, procesos almacenados, integridad referencial, triggers, replicación y en general todo lo que puedes esperar de un verdadero sistema gestor de base de datos relacional.

Usar DDs con ADS tiene grandes ventajas contra el modelo de tabla libre, como por ejemplo el poder mover la seguridad de la base de datos a ser controlada por propio servidor, en vez de tener que controlarla por programa, el evitarte tener que abrir todos las tablas individualmente una a una, ya que en el modelo tradicional XBase hay que hacer un "USE" por cada tabla que quieras usar, con un diccionario no, simplemente conectas desde tu programa con tu diccionario de datos, y listo, todas tus tablas están disponibles sin necesidad de tener que saber en que directorio las tienes, el DD se encarga de todo.

Pues bien, siguiendo el modelo relacional, para poder utilizar un querys con ADS, lo primero que tenemos que hacer es realizar una CONEXION con la base de datos, si tengo un diccionario de datos no tengo ningún problema, el RDDADS provee de la función ADSConnect60() que me permite "conectar" a un DD desde mi programa xHarbour....

¿ Pero que pasa si no tengo DD y estoy trabajando con tablas libres ?

No hay ningún problema ADS reconocerá como "base de datos" al contenedor de dichas tablas libres, y el "contendor" de las tablas libres es, simplemente la carpeta o directorio del disco duro donde se encuentran alojados los DBFs con sus NTX o CDX o bien los ADTs con sus respectivos ADIs.

¿ Cómo hacemos entonces para "conectar" con una carpeta del disco duro ?

El RDDADS de (x)Harbour provee de la función ADSConnect() mediante la cual podremos "conectarnos" con un directorio del disco duro, simplemente indicando la ruta donde se encuentran nuestros DBF o ADTs dentro del disco duro:

ADSConnect("C:\programas\datos\")

Si queremos saber si ya hay una conexión previamente establecida , utilizamos la función ADSConnection(), de tal forma que podríamos hacer algo como esto:

IF ADSConnection() == 0
ADSConnect("C:\programas\datos")
ENDIF

Ya "conectamos" con nuestra "base de datos" (directorio donde están los archivos), ¿ que sigue ahora ?

El siguiente paso es "preparar" la ejecución del query SQL, para ello vamos a utilizar la función ADSCreateSQLStatement() a la cual pasaremos 2 parametros: el primero es el nombre de un "alias" (si si, a lo Xbase, un alias) para el resultado del query (lo que en SQL se llama "cursor") y el segundo parámetro es el tipo de tabla sobre el cual estamos trabajando, siendo los valores válidos : 1 = DBFNTX, 2 = DBFCDX, 3 = ADTADI, así que la preparación de nuestro query quedaría así:

ADSCreateSQLStatement("mialias",2) // 1= DBFNTX 2 = DBFCDX 3=ADTADI

Y ahora si, podemos ejecutar el Query que nosotros queramos, de acuerdo a las instrucciones y funciones SQL soportadas por el motor SQL de ADS llamado Xtremeline SQL, esto lo haremos mediante la función ADSExecuteSQLDirect():

ADSExecuteSQLDirect("Select nombre, dire, tel from clientes order by nombre where nombre like '%Juan%'")

Ahora viene lo sorprendente: El resultado de este query ¡¡¡¡ SE COMPORTA EXACTAMENTE IGUAL QUE SI FUERA UN DBF !!!!!, de tal forma que tu podrías hacer algo como esto:

mialias->nombre := "Juan Pérez"
mialias->(DBGOTOP())
DO WHILE ! mialias->(EOF())
...
...
...
mialias->(DBSKIP())
ENDDO

¿ Y si quiero "browsear" el resultado de esto ?

Con xHarbour modo consola muy fácil:

mialias->(Browse())

y con Xailer, basta pegar el ALIAS a un objeto DBBrowse:

::oDBBrowse1:SetDBF("mialias")

En ninguno de los 2 casos necesitas cambiar los bloques de código que definen la navegación porque ADS "engaña" a xHarbour mediante el RDDADS, haciendole creer que lo que está visualizando es un DBF y no el resultado de un Query SQL ;-).

Cuando hallas terminado de utilizar este query, pues simplemente haces:

mialias->(DBCLOSEAREA())

Y listo, ya puedes ejecutar otro query de SQL.

El ejemplo completo para (x)Harbour en modo consola sería algo como esto:

Function Main
REQUEST ADS
RDDSETDEFAULT("ADS")

ADSSetFileType(2)
ADSSetServerType(7)

IF ADSConnection() == 0
ADSConnect("C:\programas\datos")
ENDIF

ADSCreateSQLStatement("mialias",2) // 1= DBFNTX 2 = DBFCDX 3=ADTADI

ADSExecuteSQLDirect("Select nombre, dire, tel from clientes order by nombre where nombre like '%Juan%'")

CLS

mialias->(DBGOTOP())
DO WHILE ! mialias->(EOF())
? mialias->nombre, mialias->dire, mialias->tel
mialias->(DBSKIP())
ENDDO

mialias->(DBGOTOP())
mialias->(BROWSE())

RETURN

Los queries pueden ser tan complejos como quieras, pudiendo incluso ejecutar procesos almacenados, puedes incluso realizar proceso "ciegos" como INSERT INTO, UPDATE o DELETE, solo que estas instrucciones no devolverán un cursor y por lo tanto no podras visualizar nada del resultado de estas instrucciones SQL.

He creado un pequeño manual con las instrucciones SQL soportadas por el XtremeLine SQL de ADS junto con sus funciones, este manual lo he extraído de mi libro de Advantage Database Server y de lo puedes descargar haciendo click aqui.

jueves, mayo 25, 2017

De Clipper a (x) Harbour con XEdit

Este artículo me lo han pedido muchísimos programadores de Clipper, y hasta ahora había tenido tiempo de escribirlo con calma, de hecho me ha llevado poco mas de una semana.

Lo que explicaré a continuación es la forma fácil y rápida de migrar tus programas CA-Clipper a (x)Harbour, con las menores molestias posibles, utilizando una herramienta muy interesante : XEDIT.

XEdit es una herramienta hecha en Xailer, de hecho, XEdit es un buen ejemplo de lo que se puede lograr programando con Xailer, pero además es un prototipo de lo que después se convertiría en el IDE de Xailer.

El Equipo de Xailer ha decidido mejorarlo y dejarlo como un producto individual independiente de Xailer para ayudar a los programadores novatos en (x)Harbour en los procesos de compilación y enlazado de sus aplicaciones, tanto para modo consola, como para Windows hechas con FiveWin, así es..... puedes usar XEdit para compilar y enlazar tus programas FiveWin. ;-)

Si trabajas con XEdit para migrar tus programas de Clipper a (x)Harbour, posteriormente la migración de tus programas a Windows con Xailer te será mucho mas fácil, ya que XEdit comparte muchas de las características de su hermano mayor: El IDE de Xailer, como son: El Gestor de Proyectos, El Editor de código fuente, El Depurador visual (solo para aplicaciones modo Consola, no para aplicaciones Windows, la depuración para aplicaciones Windows solo está disponible en Xailer), El Explorador de DBFs (DBU) y El Editor de SQLite., estos componentes no los voy a explicar en este artículo, pero haz click sobre los enlaces anteriores y obtendrás una descripción detallada de cada uno.

Antes de comenzar debo aclarar que todo lo aquí expuesto está basado en XEdit 5.0.4 de Noviembre 2017, más adelante encontrarás información sobre como obtenerlo.

Bien comencemos.

Los que ya llevamos una temporada trabajando con (x)Harbour sabemos que si bien el compilador es poderoso y versátil, no es nada fácil el proceso de compilación y enlazado de los programas, sobre todo porque tenemos por medio un compilador de C, del cual poco o nada sabemos, y es en este punto es donde el proceso de compilación y enlazado del EXE final se vuelve terrible.

Recordemos como hacíamos un programa EXE en Clipper:

archivo.prg -> archivo.obj -> archivo.exe

Escribimos nuestro código fuente en archivos .PRG, luego con el compilador Clipper compilamos esos archivos .PRG y obtenemos archivos .OBJ, posteriormente tomamos esos archivos .OBJ, y por medio de un enlazador como RTLINK, BLINKER, EXOSPACE etc, uníamos los archivos .OBJ con los archivos de librerías de Clipper (clipper.lib, extend.lib, terminal.lib, dbfntx.lib) y el resultado del proceso de enlazado o "linkeado" era un archivo .EXE.

En (x)Harbour las cosas son "un poquito" mas complejas:

archivo.prg -> archivo.c ->archivo.obj -> archivo.exe

En (x)Harbour tomas tu código fuente en archivos .PRG (el mismo código fuente que tienes en Clipper en este momento, los cambios que tienes que hacer son mínimos), en vez de utilizar el compilador Clipper compilamos con el compilador Harbour (los parámetros de compilación exactamente los mismos que Clipper), pero el resultado de la compilación NO SON ARCHIVOS .OBJ, SON ARCHIVOS ".C", efectivamente, Harbour "traduce" tu código Clipper a código en lenguaje "C", que no es en realidad un código "C" estándar, vamos que si eres experto en "C" y editas el contenido de un archivo resultado de la compilación con Harbour, el código te parecerá mas Ensamblador que "C", esto es porque el código generado es un "PCODE", es decir, un código que solo puede ser interpretado por un motor especial llamado "PMACHINE", la "PMACHINE" para interpretar este PCODE viene en las librerías de Harbour que tienes que enlazar en el archivo .OBJ para generar el archivo .EXE.

Un momento.... entonces sí deben de existir archivos .OBJ en alguna parte del proceso de compilación, ¡ claro que existen !, los archivos .OBJ provienen de compilar el código en "C" para ello necesitas un compilador de C, y aquí es donde empieza la fiesta porque actualmente (x)Harbour es compatible con varios compiladores de "C" como el Microsoft Visual C++ desde la versión 6 hasta la versión 8, el Pelles C, el MingW32 ó el Open Watcom, pero la versión mas popular es la desarrollada para Borland C++, ya que Borland ha liberado al dominio público sin restricciones de uso el compilador Borland C++ Ver. 5.5.

Otra ventaja adicional, es que al generar (x)Harbour código en "C", entonces puedes hacer programas con el lenguaje Clipper que ya conoces para otros sistemas operativos, como Linux, MacOS, OS/2 de IBM, MS-DOS de 32 bits (DR-DOS), eso sí, no serán programas gráficos con ventanas ni nada (Windows forms), serán programas MS-DOS (para modo consola). Para cada uno de estos sistemas operativos existen versiones de (x)Harbour disponibles, obviamente los compiladores de C para estas plataformas son distintos a los usados para aplicaciones Windows.

Retomando el tema, el Compilador de "C" volverá a compilar nuestros archivos generados con (x)Harbour, y ahora sí, generará los archivos .OBJ, posteriormente esos archivos .OBJ hay que "linkearlos" junto con las librerías de (x)Harbour para generar el archivo .EXE final. Todos los compiladores de "C" incluyen su propio enlazador (linker), por lo que no requieres ningún otro producto adicional, así que te puedes olvidar de Blinker, Exospace, etc.

El verdadero problema de generar un EXE con (x)Harbour viene en la parte de proceso de compilación con "C", y es aquí donde XEdit entra en acción.

Así que lo que primero que necesitamos para migrar nuestras aplicaciones es conseguir xHarbour, aunque xEdit soporta compilación con Harbour, también lo puede usar con xHarbour, por otro lado siendo el Borland C++ el compilador de C preferido por los programadores, entonces necesitaremos obtener una versión de xHarbour para Borland C++. Puedes ir directamente a la pagina de  xHarbour.org para descargar la versión para Borland C++.

No hay proceso de instalación, simplemente descarga este archivo .ZIP y desempácalo en una carpeta que se llame de preferencia c:\xharbour (los ejemplos que se mostrarán mas adelante los he construido basándome en esta ubicación).

Luego vas a necesitar el compilador C++ de Borland (ahora Embarcadero Technologies), el uso de este compilador es gratuito, pero no es de libre distribución, tienes que obtenerlo desde la página que Embarcadero ha establecido para tal fin, previo registro. Puedes acceder a la página para obtener el Borland C++ haciendo click aquí.

El archivo que se descarga se llama FreeCommandLineTools.Exe simplemente ejecútalo y realizará la instalación del compilador en la carpeta c:\Borland.

Finalmente debes descargar la ultima version de XEdit de:


Descarga XEdit desde la web de Xailer


Xedit viene con un programa de instalación con lo cual solo tendrás que ejecutarlo e instalarlo en tu disco duro, no hay nada mas que hacer.

A continuación te explicaré los primeros pasos en el uso de XEdit, que deberán ser suficientes para poder compilar cualquier aplicación Clipper actual a 32 bits con xHarbour.

Ejecuta el archivo XEDIT.EXE desde la carpeta donde lo haz instalado, y procederemos a configurar el comportamiento básico de la herramienta:

Selecciona:

Menú Principal / Herramientas / Opciones Generales

Aparece una ventana como esta:


Esta pantalla solo contiene configuraciones básicas que no te afectarán para tu programa, excepto la opcion que dice "Xailer". No es necesario que tengas Xailer instalado, configura los directorios a donde se encuentre XEdit, si es que el sistema no lo ha hecho por default.


Para poder compilar un programa, necesitamos crear un entorno de programación. Un entorno de programación es una configuración especial donde le indicaremos a XEdit las carpetas adicionales y las opciones de los compiladores tanto de xHarbour como de Borland, necesarias de acuerdo a cada necesidad específica, por ejemplo, para compilar una aplicación en (x)Harbour para modo consola se necesitan ciertos parámetros de compilación, mientras que para compilar una aplicación para Windows hecha con FiveWin, se necesitan incluir algunas librerías y definir la ubicación de los archivos de cabecera.

Para crear un entorno:

Menú Principal / Herramientas / Entorno de programación.

Puedes tener tantos entornos de programación como necesites, por ejemplo para xHarbour en modo consola, para FiveWin, para Harbour MiniGUI, etc.

Para agregar un nuevo entorno de programación haz click en el botón con el signo "+" que se encuentra en la parte inferior de la plantalla de configuración de entornos:



Lo que sigue es simple, solo tienes que darle un nombre a tu entorno y si lo requieres puedes copiar otro entorno similar para que no tengas que volver a dar todos los datos:



Una vez que haz dado nombre a tu entorno, procederemos a configurarlo con las opciones que muestran los folders de la pantalla de configuración de entorno de programación:

General:

Sirve para indicar las rutas a los archivos INCLUDE y LIB así como los archivos LIB adicionales que necesita tu aplicación.

En el caso de una aplicacion (x)Harbour para modo consola simple y llana, no sera necesario llenar ningun dato de esta pestaña, si tu aplicación es con Harbour MiniGUI o FiveWin, aquí deberás indicar la ruta a donde se encuentran los archivos de cabecera (include) y la ruta a la ubicación de las librerías adicionales que necesite tu aplicación.

Por ultimo para esta pestaña, deberás indicar EL NOMBRE DE LOS ARCHIVOS .LIB que utilice tu programa, EN EL FORMATO DEL COMPILADOR DE C QUE VAYAS A USAR. En el caso del Borland C++ simplemente se indican los nombres de los archivos anteponiendo un signo de "+" y separandolos por comas.

Este es un ejemplo de la configuración para FiveWin:

 
Compilador xBase:

En esta pestaña configuraremos el compilador de (x)Harbour que deseamos utilizar.

Oficialmente existen 3 versiones actualmente de (x)Harbour, el xHarbour como tal, que como recordarás es un "fork" del proyecto Harbour original, del cual no han hecho muchos cambios ultimamente y 2 versiones de Harbour, la 2.x  la 3.x, ¿ Cual es la diferencia ?.

En su momento un grupo de programadores por diferencia de opinión con otros programadores del proyecto Harbour original, decidieron crear su propia versión de Harbour, con miras a crear un producto comercial al que llamaron xHarbour (eXtended Harbour), e incluyeron en el muchas monerias que no encontrarás en Harbour como las estructuras SWITCH, el manejo de archivos XMLs, los "hashes", etc.

Luego vino la gente de Harbour y dijo.... nos estamos quedando atrás y evolucionarion el compilador a la versión 3 incluyendo muchas cosas de lo que xHarbour tenía, optimizando ademas los nucleos y haciendolo mucho mas rapido que xHarbour, además de tener versión de 64 bits, cosa que xHarbour no tiene.

Regresando a nuestro tema, en esta pestaña tendrás que configurar el compilador de (x)Harbour que desees utilizar:


En la parte superior, en los radio botones puedes seleccionar la versión de (x)Harbour que desees usar, y automaticamente en la parte inferior se añadirán las librerias necesarias dependiendo de la versión que vayas a utilizar. Lo unico que tienes que configurar es la ruta donde está tu compilador de (x)Harbour.

TIP: Hay muchas versiones de Harbour, muchas versiones de Xailer o de FiveWin, y en muchas ocasiones hay determinadas versiones del compilador que funcionan con tal o cual versión de otros productos, un consejo práctico: coloca la versión de Harbour compatible con tu herramienta en el mismo directorio donde tienes tu herramienta principal, esto te ahorrará muchos dolores de cabeza en el futuro.


Compilador de C:

(x)Harbour puede usarse con distintos compiladores de C, los mas populares: El Borland C++ porque fue con el que empezó todo y MinGW porque es un compilador de C totalmente open source, le sigue el Pelles C porque es gratuito y compatible con el Microsoft C++.

Quiero hacer aquí un paréntesis para mencionar que aunque no utilices el compilador de C de Pelles C, es conveniente descargarlo porque te ofrece 2 herramientas que si programas en FiveWin o MiniGUI te serán de gran utilidad:

El editor de recursos, que si estas acostumbrado a usar el Borland Resource Workshop y que no funciona en sistemas operativos de 64 bits, lo puede sustituir perfectamente a 32 bits y 64 bits.

El compilador de recursos PORC que además de ser muy rapido, opitimiza perfectamente el ejecutable final.

Puedes descargar el Pelles C haciendo click aqui

Dependiendo del compilador de C que vayas a utilizar las opciones se cargan automaticamente, solo tienes que establecer la ruta donde se encuentra tu compilador, en este ejemplo he seleccionado el compilador C++ de Borland:


Quedan 2 pestañas por analizar que no utilizaremos en esta primera aproximación a XEdit:

Compilador de recursos: Se utiliza en caso de que quieras usar otro compilador que no sea el del C++ nativo que vayas a usar, por ejemplo el PORC de Pelles C.

Enlazador: Similar a lo anterior, si no quieres usar el enlazador (linker) de tu compilador de C++ puedes usar esta pestaña para configurar otro distinto.

Una vez que hemos creado nuestros entornos de programación, hemos terminado con el proceso de configuración, ahora llegó el momento de comenzar a migrar nuestros programas a 32 bits.

Antes de comenzar, tenemos que entender como trabaja XEdit.

XEdit trabaja en base a "proyectos", un proyecto no es mas que una carpeta del disco duro que a su vez tiene subcarpetas donde se guardan los distintos componentes de la aplicación, por ejemplo el código fuente va en una carpeta, los archivos de cabecera .ch en otra, se hace otra para los archivos de recursos .rc, y así sucesivamente.

Para crear un proyecto nuevo:

Menú principal / Archivo / Nuevo Proyecto....

Puedes crear carpetas nuevas para tus proyectos desde la ventana donde se te pide que le des un nombre al proyecto, personalmente lo que yo hago es crear una carpeta llamada PROYECTOS debajo de la carpeta XEDIT2 y ahí voy creando subcarpetas para guardar cada proyecto.

Creemos pues la capeta "PRUEBA1" y pongamosle el mismo nombre a nuestro proyecto.

La configuración de cada proyecto se guarda en archivos XPJ (Xailer/Xedit ProJect) que no son mas que archivos .XML con información sobre el proyecto que estamos usando.

Pulsamos el botón de ACEPTAR y aparece esta ventana, que configura las propiedades del proyecto:


Aquí indicaremos si queremos crear un EXE, una LIB o una aplicación WEB (de momento no disponible), una descripción del aplicativo que estamos desarrollando, misma que se "pegará" al EXE final, deberemos indicar el nombre del archivo de salida, en este caso prueba1.exe y MUY IMPORTANTE debemos indicar el ENTORNO DE PROGRAMACION, previamente creado, que vayamos a utilizar para compilar este programa, en este caso "FW xHB", también deberemos indicar el nombre del módulo principal, pero de momento dejaremos en blanco este espacio, presionemos el botón ACEPTAR para guardar los cambios (puedes volver a esta ventana posteriormente desde Menú Principal / Proyecto / Propiedades del proyecto).

Al presionar el botón Aceptar XEdit te pondrá el siguiente mensaje de aviso:



Indicándote que se van a crear subcarpetas para guardar los distintos componentes de tu aplicación, simplemente haz click en el botón "SI".

Ya estamos listos para hacer un pequeño experimento, vamos a crear un pequeño .PRG de ejemplo y a compilarlo usando xEdit.

Seleccionaremos:

Menu Principal / Archivo / Nuevo / PRG.

Veremos en el editor de código fuente que aparece una pestaña nueva con el nombre MODULE1.PRG, escribiremos lo siguiente y guardaremos este código fuente :



Como verás es un programa Clipper puro y duro, con instrucciones básicas de modo consola.

Llegó el momento de compilar este programa, simplemente selecciona:

Menu Principal / Proyecto / Compilar
ó presiona Ctrl+F9.

Los mensajes del compilador los verás en la parte inferior de la ventana del editor de código:



Si la última línea es 1 Files, X Warnings, 0 Errors .... ¡ Felicidades ! haz logrado compilar tu primer programa a 32 bits.

Para ejecutarlo, haz doble click sobre él en el explorador de Windows y verás aparecer una ventana de MS-DOS con esto:



Para compilar mas de un .PRG, tienes que hacer lo siguiente:

Copia todos los .PRG que vayas a compilar a la carpeta SOURCE, y luego selecciona:

Menu Principal / Proyecto / Añadir Fichero al proyecto

Selecciona todos los .PRGs que necesites, realiza esta misma operación si tienes archivos .CH que desees integrar en tu sistema, estos los deberás colocar en la carpeta INCLUDE de tu proyecto.

Si en alguno de tus programas utilizas una FUNCTION MAIN() entonces en las propiedades del proyecto (Menu principal / Proyecto / Propiedades del Proyecto) en la opción de MODULO PRINCIPAL selecciona el PRG que tiene la función MAIN(), si no tienes función Main en algunos de tus programas, entonces selecciona el .PRG que arranca tu aplicación.

Para compilar todos los programas simplemente presiona Ctrl + F9.

Si estás programando con FiveWin, entonces hay que cambiar algunas cosas y añadir otras:

Los .PRGs para un programa con FiveWin se agregan al proyecto de la misma manera que como se hace para un proyecto para xHarbour modo consola.

Para integrar los recursos gráficos (archivos .RC, .BMP, .ICO, CUR, etc.) al proyecto XEdit, procederemos la siguiente manera:

Primero tenemos que crear un archivo de recursos vacío, esto se hace usando el Gestor de Recursos de XEdit, para activarlo selecciona:

Menu principal / Ver / Gestor de recursos

Y aparecerá la siguiente pantalla:



Presiona el botón que tiene hoja en blanco, del lado izquierdo de la pantalla, ese botón sirve para crear un archivo de recursos .RC vacío, aparecerá una ventana para dar nombre al archivo de recursos, esta pantalla te sugiere el nombre del .RC, en este caso será el mismo nombre que el de tu proyecto, pero mi sugerencia es: dale el mismo nombre que el archivo .RC que utilizas en tu programa FiveWin, esta operación creará un archivo RC vacío, pero quedará registrado el nombre del RC en las propiedades del proyecto para que al momento de compilar XEdit lo incluya en los archivos que deben ser enlazados para generar el EXE final.

DESPUES de crear el RC vacío, puedes copiar todos tus recursos a la carpeta RESOURCE de tu proyecto XEdit, y XEdit hace el resto, compilará y enlazará los recursos dentro de tu programa .EXE, es MUY IMPORTANTE que primero crees el .RC vacío, ya que si copias primero los recursos a la carpeta RESOURCE y luego creas el .RC con el Gestor de Recursos entonces TE VAS A CARGAR TU .RC, con todos los diálogos, cursores y bitmaps que tenga pegados adentro, así que el que avisa no es traidor, estás advertido.

Aprovechando que estamos hablando del tema de los recursos, la siguiente información te puede ser útil: ¿ sabías que puedes programar XEdit para "lanzar" cualquier aplicación que quieras desde el menú principal ?, esta característica es sumamente útil para enlazar por ejemplo tu editor de recursos como una opción del menú del Xedit, y no tener que ir navegando por todo el disco duro para encontrar el EXE adecuado, yo por ejemplo tengo configuradas las herramientas que más uso la opción HERRAMIENTAS del menú principal:


Para agregar herramientas, que pueden ser no solo archivos .EXE sino también archivos de ayuda .CHM hacemos lo siguiente:

Menu Principal / Herramientas / Configurar Herramientas

Aparece la siguiente pantalla, presiona el boton AÑADIR y luego selecciona el archivo .EXE o .CHM que quieras añadir al menú:



¡ y listo !, haz agregado una herramienta a tu menú, la cual se ejecutará de manera automática cada vez que la selecciones del menú.

Ahora bien, si el compilador de recursos de Borland te está dando problemas con el tamaño de los archivos .RC o con los bitmaps muy grandes o de muchos colores, también puedes cambiar el compilador de recursos para usar otro que dé menos problemas, para saber como lee mi artículo: Cambiando el compilador de recursos, dentro de este mismo blog, si compilas tu programa FiveWin con XEdit, puedes usar los trucos ahí mencionado, recuerda que XEdit es muy similar al IDE de Xailer.

Retomando el tema de FiveWin con xEdit, otra cosa importante son las librerías adicionales que suelen llevar los programas FW, para empezar las 2 básicas: FIVEHX.LIB y FIVEHC.LIB.

Para la gestión de librerías (archivos .LIB) Xedit posee un gestor de librerías, para acceder a el:

Menú Principal / Proyecto / Propiedades del Proyecto y seleccionar del árbol:LIBRERIAS


Aparece una pantalla similar a esta:


Pulsando el botón AÑADIR, podrás agregar las librerías que quieras incluir en tu proyecto, por default XEdit te incluirá que las de xHarbour y Borland C++, y tu podrás seleccionar las adicionales que necesites haciendo click en el checkbox, en este caso he añadido las 2 librerías de FiveWin. También es posible definir el orden de linkeado, subiendo y bajando las librerías con los botones que tienen flechas.


Existen mas trucos y herramientas disponibles con XEdit, pero ahora te toca a tí descubrirlas. El programador de Clipper que quiera migrar a xHarbour, encontrará en XEdit LA HERRAMIENTA que le facilitará el proceso de migración, además de que si en un futuro decide desarrollar aplicaciones para Windows usando Xailer, pues ya tendrá un buen trecho andado, porque el IDE de Xailer y XEdit comparten muchas herramientas comunes.

El programador de FiveWin también encontrará en XEdit un valioso aliado, conozco muchos programadores que todavía compilan sus programas con archivo .BAT o .MAK desde una ventana de MS-DOS o todavía utilizan el EDIT de MS-DOS o el NOTEPAD para escribir sus programas, con XEdit podrán automatizar mucho de ese trabajo, con el consabido ahorro de tiempo, tendrán un editor de código profesional, así como otras herramientas interesantes todas integradas en un mismo lugar, además de que podrán probar "un poquito" sobre como se desarrolla usando Xailer.

Espero que con este tutorial muchos de ustedes se animen a darle las gracias al nuestro viejo y querido Clipper y que se adentren en el mundo de la programación a 32 bits.

miércoles, abril 15, 2009

Sybase crea nuevo foro de soporte para xHarbour

Estupendas noticias para todos aquellos que usamos Advantage Database Server en nuestros desarrollos con (x)Harbour.

Sybase, los nuevos dueños de Advantage Database Server, han creado un nuevo foro de soporte para (x)Harbour.

Después de insistir bastante por parte de muchos usuarios de ADS con (x)Harbour, Sybase iAnywhere ha cedido a la presión y nos ha regalado un lugar en su grupo de noticias (newsgroup) para soportar ADS con xHarbour.

Tomando en cuenta que el cliente ADS para (x)Harbour fue creado por los mismos programadores de xHarbour, es un gran avance por parte de Sybase el reconocer a (x)Harbour como una plataforma seria y creciente de desarrollo.

Para acceder a los foros de Advantage Database Server con (x)Harbour, puedes utilizar un "news reader" como el Outlook Express o el Mozilla Thunderbird, el nombre del servidor es:

devzone.advantagedatabase.com

No requiere autenticación y ahi puedes encontrar grupos en distintos idiomas y lenguajes de programación para Advantage Database Server.

También puedes acceder a la página de soporte de ADS para realizar la conexión con el servidor de noticias en http://devzone.advantagedatabase.com.

Y finalmente si quieres tener acceso por web a los foros la pagina Newswhat te ofrece un acceso directo a los foros de ADS.

miércoles, abril 08, 2009

De vacaciones de Pascua

Les informamos que nuestras oficinas estarán cerradas del Jueves 9 al lunes 13 de abril del presente.

Volveremos a prestar nuestros servicios a partir del día 13.

Felices pascuas !!!!

sábado, abril 04, 2009

Nuevo "servicio" XBase Guru

Gracias a nuestro proveedor de estadísticas MOTIGO, puedo saber muchas cosas interesantes sobre la gente que visita Objeto Persistente.

Una de las características mas interesantes de MOTIGO es su sección de FUENTES DE TRAFICO, donde me da un listado de las consultas que mis lectores hacen en Google y otros buscadores y que finalmente los traen a Objeto Persistente.

He visto que muchas de esas preguntas se repiten semana tras semana y no son difíciles de constestar, así que he decidido abrir un nuevo servicio llamado Xbase Guru.

En este nuevo blog, voy a responder a las preguntas MAS INTERESANTES y MAS FRECUENTES que me llegan por medio de las fuentes de tráfico de Motigo sobre programación en Xbase, ya sea Clipper, Xailer, (x)Harbour, FiveWin, y en general las preguntas que entren dentro de mi ámbito de "expertise".

No voy a dar un curso, no voy a explicar como hacer sistemas completos ni voy a explicar nada a detalle, tampoco voy a responder preguntas particulares ni voy a enviarles respuestas privadas a nadie, simplemente te daré las pistas para que tu continúes tu investigación y que puedas soluciona tu problema de programación, como lo saben todos los que han tomado curso conmigo: yo no les regalo pescados, yo les enseño a pescar.

Por supuesto hay una sección de comentarios (moderada) para cada comentario en los cuales podrás pedir mas información.

No prometo que el blog se actualice diario ni mucho menos, pero sí que cada semana habrá preguntas contestadas, quizá 3 o mas de un solo golpe.

Esta semana las preguntas contestadas son:

Convertir DBF a XLS con Clipper 5.x
Soporte de SQLite con Xailer
Documentación de xHarbour
Lenguajes de programación mas usados
Crack para Xailer

Si tu quieres preguntar algo y quieres que responda en Xbase Guru, simplemente ve a Google, o a cualquier buscador y teclea lo que quieras preguntar, y si en las respuestas sale un link a OBJETO PERSISTENTE simplemente haz click ahí y listo, tu pregunta me llega y yo la contesto.

Espero que este nuevo servicio sea de su agrado, visitanos en www.xbaseguru.blogspot.com

lunes, marzo 30, 2009

Prodigy Infinitum aumenta su velocidad, Buenas noticias para Advantage Database Server

El servicio de Internet ADSL de Banda Ancha de Telmex en México: Prodigy Infinitum va a aumentar su velocidad de acceso a la red en los próximos días, las nuevas velocidades serán:





Infinitum 512AnteriorNueva
Vel. Bajada512 kbps784 kbps
Vel. Subida128 kbps256 kbps




Infinitum 1000AnteriorNueva
Vel. Bajada1024 kbps1536 kbps
Vel. Subida128 kbps384 kbps




Infinitum 2000AnteriorNueva
Vel. Bajada2048 kbps3072 kbps
Vel. Subida256 kbps512 kbps




Infinitum 4000AnteriorNueva
Vel. Bajada4096 kbps6144 kbps
Vel. Subida768 kbps1024 kbps

Como siempre el aumento de velocidad será paulatino y de momento no está disponible en todo el país, ya sabes, las principales ciudades (México, Guadalajara y Monterrey) y algunas otras localidades.

Para verificar la nueva velocidad es necesario apagar y encender el modem/router y luego puedes verificar la velocidad en www.speedtest.net este sitio tiene un velocímetro de internet bastante confiable.

La buena noticia para los usuarios de Advantage Database Server, es que con las nuevas velocidades de Infinitum, el acceso al Advantage Internet Server se hace mucho mas eficiente, al estar dentro de la misma red (la de Prodigy Infinitum) la velocidad de respuesta es como si estuvieras dentro de una LAN de 10 mbps, perfectamente manejable, lo que te permite conectar sucursales remotas con tus archivos DBFs con una velocidad muy buena, sin necesidad de VPN ni de instalar nada del lado del cliente, solo tu servidor ADS que ya tiene incluido el Advantage Internet Server.

Prueba estos demos que se conectan a nuestra base de datos en la Ciudad de México, la respuesta debe ser bastante buena ya que nuestra conexión de 6 megas de bajada y 1 de subida.

jueves, marzo 26, 2009

Nombre Código: XaC5

"Xa" se convertido en el prefijo genérico que últimamente el equipo Xailer le ha dado a sus productos.

Así por ejemplo tenemos XaDbu, el nuevo DBU hecho en Xailer, el XaScript (merece la pena hecharle un vistazo, te soluciona un montón de problemas), y bueno XEdit, que sugerí en el Open House de Madrid que se renombrara como XaEdit porque existe en la distribución de xHarbour.com un producto similar que no tiene nada que ver con la herramienta de compilación hecha por el Equipo Xailer.

Hace unos días decidí comenzar un proyecto nuevo llamado XaC5 (pronunciese: "Sexy Five"), pero antes de tirarme a la piscina decidí primero ver si tenía agua, y por lo mismo fuí a pedir ayuda al padre de la criatura, mi admirado Paco "CanalFive" García (de ahí el C5), quien después de que le pasé un medio botón mal hecho y mal pintado hecho por mí, para mostrarle como hacer controles en Xailer, se puso a jugar, y en menos de 24 horas, me manda por correo esto:



Click aquí para descargar EXE y código fuente del ejemplo anterior.

Ni mas ni menos que su control RibbonBar ahora funcionando perfectamente en Xailer !!!! y luego para rizar el rizo, me manda el código fuente y veo que apenas ha tocado el código original hecho para FiveWin para que funcionara en Xailer, es mas, en vez que poner cosas, ha quitado, y es que esto del API de Windows, en conjunto con la nueva capacidad de Xailer de crear tus propios controles y tus propios DLLs es tremendo.

Lo anterior pasó de jueves para viernes, y bueno no contento con eso, el sábado por la tarde viene Paco y me manda esto:



Click aquí para descargar EXE y código fuente.

Vamos que el chico ha tenido tiempo libre en el puente del Día del Padre y se ha pasado el control OutlookBar y lo ha hecho también nativo en Xailer. En la imagen anterior ves el control OutlookBar metido dentro de un Panel de Xailer.... ¡ Y se queda tan ancho !.

Lo mejor no ha sido eso, sino la extraordinaria simplicidad para integrarlo en un código fuente de Xailer:

METHOD FormInitialize( oSender ) CLASS TForm1
local cPath := CurDrive() + ":\" + CurDir() +"\"

WITH OBJECT ::oOLBar := TOutlookBar():Create( ::oPanel1 )

:SetBounds( 300, 300, ::oPanel1:nWidth, 8 + 9*32 )
:AddItem( "Contactos" ,".\bmps\contacto.bmp")
:AddItem( "Tareas" ,".\bmps\tareas.bmp" )
:AddItem( "Notas" ,".\bmps\notas.bmp" )
:AddItem( "Correo" ,".\bmps\correo.bmp" )
:AddItem( "Calendario" ,".\bmps\calendar.bmp")
:AddItem( "Lista de carpetas",".\bmps\carpetas.bmp")
:AddItem( "Accesos directos" ,".\bmps\accesos.bmp" )
:AddItem( "Diario" ,".\bmps\diario.bmp" )
:nAlign := alBOTTOM

END

RETURN Nil


Todavía no es posible diseñar visualmente desde el IDE el control, de momento su integración en Xailer es muy similar a como se hace con un OCX normal.

El siguiente paso es retocar la clase para que pueda procesar los eventos de un TControl de Xailer y posteriormente ser integrada dentro del IDE para que tenga su propia pestaña en la sección de controles del IDE.

Y quien sabe, quizá mas pronto de lo que piensas tendremos los "famosos" controles de Paco en la nueva versión 2.0 de Xailer.... y quizá hasta vengan ya incluidos sin costo adicional..... nunca se sabe.....

Ejemplos de los controles los puedes descargar en los links indicados anteriormente, por obvias razones no he puesto el código fuente en su totalidad, porque aún le falta mucho por refinar, no en el aspecto operativo, porque el control está totalmente terminado y es funcional, pero para integrarlo al IDE aún hay trabajo por delante y lo mas seguro es que el código fuente actual cambie bastante una vez que se haya integrado el control al IDE.

De momento, a esperar hasta la versión 2.0 de Xailer.... mas pronto de lo que piensas.

miércoles, marzo 18, 2009

El modo "hibrido" de Xailer.

No cabe duda que el busca encuentra, y así es mi amigo José Manuel Serrano, de Proser Informática, tengo poco mas de 8 años de conocerle y aunque no es un personaje "público", prefiere mantener un tranquilo anonimato, es uno de los programadores de Clipper /(x)Harbour con mas nivel que conozco.

Básicamente el se dedica a los puntos de venta, desde diseñar gabinetes para montar un TPV (todos los que vende son diseños suyos), diseñar y construir la electrónica de los mismos (los visores digitales que llevan sus equipos los diseña él), la electrónica del TPV, que básicamente por dentro son simples PCs, hasta el SOFTWARE para la terminal.

Siempre trabajando en Clipper, ha buscado y le ha dado la vuelta a las limitaciones que el mismo lenguaje le presentaba bajo los distintos sistemas operativos, su TPV hoy en día sigue siendo uno de los mas vendidos de España, y aun está en MS-DOS, y algún intento ha hecho de pasarlo a Windows.

El caso es que José Manuel, siendo una persona a la que le gusta la investigación, le ENCANTA que de vez en cuanto le deje alguna cosilla "para enredar", como dice él , y siempre me sorprende con algún descubrimiento interesante, y esta vez, me ha dejado sorprendido.

¿ Que descubrió el amigo José Manuel esta vez ?, pues que Xailer puede ser utilizado para compilar programas para consola (MS-DOS) y casi nada, también descubrió que se pueden utilizar todas las herramientas de Xailer (gestor de proyectos, debugger, datasets, motor de informes, etc) en un programa de consola puro y duro y que además, y por si fuera poco, era posible combinar componentes en MS-DOS con componentes Windows y hacer que convivieran una ventana de consola con un formulario de Windows.

Lo sorprendente es como llegó a descubrir esto.... por simple lógica.... el proceso mental lo desconozco, pero según me explicaba, era algo mas o menos así:

El XEdit es un gestor de proyectos para compilar programas (x)Harbour para modo consola, ya sea programas simples, o con interfaz gráfica, como con FiveWin, básicamente el XEdit es el mismo IDE de Xailer sin algunas herramientas, por lo tanto, es de esperar que el IDE de Xailer haga lo mismo que el XEdit.

Si el XEdit tiene un gestor de proyectos y genera programas EXE, luego el IDE de Xailer, al ser algo mas completo, tendría que poder hacer lo mismo.... Pues probemos.... así que metió unos trozos de código en Clipper puro y duro en el IDE de Xailer, compiló y ........ ¡ no pasó nada !.... de regreso a la mesa de dibujo.....

Se había olvidado de linkar la librería de la terminal consola de xHarbour.... la linkó y ¡ ahora sí que funcionó el invento !, tuvo una aplicación corriendo en modo consola, compilada con el IDE de Xailer.

El resto fue seguir investigando el tema de la integración y descubrió que podía llamar también a "ventanas" de Windows desde su programa MS-DOS.

En el Open House de Madrid, me mostró lo que había descubierto y ahora yo se los transmito para todos los usuarios de Xailer, presentes y futuros.

ADVERTENCIA: Usen esta información con reservas, es un trabajo bajo investigación y actualmente en desarrollo, no hemos probado que todo funcione como debe, pero seguimos investigando. No me hago responsable de que algo no funcione ni garantizo que todo un programa Clipper funcione.

Necesitas para empezar la versión 1.9x de Xailer y el (x)Harbour para Xailer que puedes descargar de www.xailer.com. Obviaremos los detalles de la instalación, y pasemos directamente a los hechos.

Debes crear un proyecto nuevo con Xailer, se te pedirá nombre del proyecto, yo aconsejo crear una carpeta exclusiva para este proyecto y guardar el proyecto en la carpeta recién creada, Xailer automáticamente crea un .PRG con el mismo nombre del proyecto, que no está visible en el editor de código fuente, pero si das doble click en el gestor de proyectos lo abrirá en el editor.

Cuando creas un proyecto nuevo, Xailer escribe para tí el módulo de carga, que siempre es algo parecido a esto:

Procedure Main()

Application:cTitle := "demohibrido"
Application:Run()

Return


Xailer asume que siempre vas a tener un formulario Windows como tu módulo principal, pero es posible "desviar" la llamada a un formulario, simplemente escribiendo OTRA función DENTRO DEL MISMO PRG, así que nuestro modulo de carga modificado queda como sigue:

Procedure Main()

Application:cTitle := "demohibrido"
Application:Run()

Return


Function MsDos()

RETURN nil


Al detectar otra función dentro del mismo PRG del módulo de carga, Xailer asumirá que el módulo primero a ejecutar es dicha función, y modificará el código del PROCEDURE MAIN para hacer la llamada a este nuevo código, de tal forma que el MAIN se "automodifica" quedando así:

Procedure Main()

Application:cTitle := "demohibrido"
MsDos()
Application:Run()

Return

Nota como Xailer solo ha incluido la llamada a la función "MsDos()".

Y eso es todo amigos, tu programa Clipper MS-DOS va metido dentro de la función MS-DOS y todo el programa correrá dentro de una ventana MS-DOS, veamos por ejemplo como quedaría un típico menú de Clipper usando esta técnica:

Function MsDos()
LOCAL nDemo := 1
SET COLOR TO W+/B
CLS
@ 0,0 SAY "Demo del modo híbrido de Xailer" COLOR "W+/R"
DO WHILE .T.
@ 5,5 PROMPT "Demo de Get en MsDos"
@ 6,5 PROMPT "Abrir archivo DBF"
@ 7,5 PROMPT "Imprimir informe"
@ 8,5 PROMPT "Salir"
MENU TO ndemo
SAVE SCREEN
DO CASE
CASE ndemo = 1
DoMsDosGet()
CASE nDemo = 2
DoOpenDbf()
CASE nDemo = 3
Informe()
OTHERWISE
EXIT
ENDCASE
RESTORE SCREEN
ENDDO

RETURN nil


Código Clipper puro y duro.

Ahora solo tienes que hacer un par de cambios en el proyecto, así que desde el Menú Principal / Proyecto / Propiedades, selecciona la opción Librerías y agrega la terminal de modo Texto GTWIN.LIB:



Y si quieres utilizar el Debugger de Xailer en este pequeño proyecto, entonces selecciona [x]Harbour y agrega "incluir información del Debugger":



Si deseas usar el Debugger de Xailer, no te olvides de marcar los "puntos de ruptura" en tu código fuente o bien, incluir en el código una llamada a la función AltD() para activar el Debugger.

Y ahora simplemente compila y ejecuta tu programa deberás ver algo como esto:



Hay que notar algunas cosas del ejemplo anterior:

Xailer tiene un comando MENU, por lo tanto, entrará en conflicto con el MENU TO de Clipper, para evitar este conflicto, tuve que poner la definición del comando de Clipper manualmente ANTES de llamar la función, y así evitar conflictos entre el MENU de Xailer y el de Clipper. (ver en el ejemplo anexo).

En la siguiente imagen se muestra el depurador de Xailer trabajando sobre la ventana MS-DOS:



Nota como todas los objetos nativos de Xailer (Application, Printer, AppData y Screen) están visibles y activos, nota también como al ir ejecutando línea por línea el debugger ejecuta las instrucciones en la ventana de MS-DOS, guardando incluso los valores de las variables definidas en tu función (por ejemplo la variable nDemo).

Como mencioné anteriormente, todos los componentes de Xailer están disponibles para este programa, porque lo que es posible por ejemplo utilizar DataSets definidos a mano, no visualmente, y también es posible utilizar Formularios y controles de Xailer mandados llamar desde el programa MS-DOS:



Es recomendable si vas utilizar formularios de Xailer en el modo híbrido que cuando los llames lo hagas como :ShowModal(), de lo contrario el flujo del programa vuelve a la ventana de MS-DOS y el programa continúa ejecutándose dejando abierto el formulario.

Y como están disponibles TODOS los objetos con los que cuenta Xailer para el programa en MS-DOS, entonces puedes utilizar el motor de informes de Xailer, y exportar tus informes directamente a Excel o a PDF:



Como verás las posiblidades de esta técnica pueden ser muy interesantes, he hecho un pequeño demo del modo híbrido que puedes descargar haciendo click aquí, incluye el proyecto para Xailer 1.9x, (de momento con la versión 2.0 no hemos podido hacerlo funcionar), por su puesto el código fuente, y el programa EXE ya compilado con Xailer, por si quieres probarlo y no tienes Xailer a la mano para compilar los fuentes.

Debo insistir, esta técnica ESTA EN PRUEBAS, hasta ahora funcionando bien, pero tenemos que hacer mas pruebas para garantizar que un programa Clipper pueda ser compilado al 100% con Xailer y aprovechar sus ventajas, de momento podría ser una ruta fácil para migrar tus programas a 32 bits y luego ir paulatinamente incluyendo ventajas gráficas.

lunes, marzo 16, 2009

WinASP, aplicaciones Internet buenas, bonitas y baratas.

Jorge Mason es sin duda uno de los programadores de lenguajes Xbase con mas nivel que conozco.

Le he visto hacer cosas muy interesantes en aquellos viejos tiempos del FiveWin, y pese a que desde algunos años está totalmente inmerso en el mundo de los desarrollos Web, no nos hemos perdido la pista.

Hace algunos ayeres, Jorge diseñó una cosa que quizá se adelantó a su tiempo: El WinASP.

¿ Que es WinASP ?

WinASP es un servidor Web.....

¿ y ?

hay muchos....

Si, hay muchos servidores WEB, pero ninguno que yo conozca que "interprete" código xHarbour "incrustado" dentro del código HTML.

Si conoces un poco de tecnología ASP (Active Server Pages), sabrás que usando el Internet Information Server, puedes montar un servidor ASP, ese servidor ASP es en realidad un "interprete" de código que tomará paginas web que llevan dentro codigo en Visual Basic Script, lo interpretan, ejecutan las acciones programadas y el resultado de esas acciones es convertido en código HTML y enviado a un equipo cliente.

Lo que ha hecho Jorge es crear SU PROPIO SERVIDOR WEB, que te permite hacer publicaciones de hojas HTML estáticas, o bien de páginas web "dinámicas" que pueden acceder a datos archivo .DBF o de SQL usando ODBC ó ADO y todo programado con el lenguaje xHarbour que ya conoces.

La instalación es super simple, solo desempacas el archivo comprimido y listo, nada de cosas del registro de Windows, ni instalar DLLs, ni nada de nada, ejecutas el programa EXE WinASP y no tienes que hacer nada más, solo te das cuenta de que está corriendo porque ves un icono en la barra de tareas de tu Windows.

Ya estas listo para trabajar, lo unico que tienes que hacer es crear archivos de texto con la extensión .XPS, que son archivos "medio" en HTML, medio en xHarbour, veamos el siguiente ejemplo:

<%
if !eof()
for n = 1 to nLineas
cClass=onnone(n,"rowlist","row")%>



<%=cClass%>" nowrap><%=tohtml(nRegistro+n-1)%>

<%=utrim(Empresa)%>&uid=<%=uid()%>" class="nav" title="Actualizar registro ..."><%=tohtml(Empresa)%>
<%=cClass%>" nowrap> <%=tohtml(Rut)%>
" nowrap> <%=tohtml(Dv)%>
" nowrap> <%=tohtml(Giro)%>
" nowrap> <%=tohtml(Nombre)%>
" nowrap><%=tohtml(Direccion,50)%>
" nowrap> <%=tohtml(Comuna)%>
" nowrap> <%=tohtml(Telefono)%>
" nowrap> <%=tohtml(Fax)%>
" nowrap> <%=tohtml(Postal)%>
" nowrap> <%=tomail(Email)%>
" nowrap><%=tohtml(Url,50)%>
" nowrap><%=tohtml(Notas,50)%>


<% skip
if eof()
exit
end if
next
end if
use
%>

En el ejemplo anterior he marcado con colores las distintas secciones del código para que te des una idea de como funciona WinASP, el código anterior contruye una tabla, mezclando tanto instrucciones HTML como instrucciones en xHarbour, nota que el codigo en xHarbour va metido entre <% %>, y que incluso dentro del codigo HTML puedes llamar a funciones usando la estructura <%=funcion()%>.

El WinASP te permite manejar "sesiones" es decir, conserva los datos de variables que hayas definido para cada usuairo accesando a tu sistema, con esto puedes controlar cosas como el tiempo que el usuario haya estado conectado a tu Web, el tiempo que ha estado sin hacer nada, etc.

Por otro lado también te permite trabajar con varias cosas al mismo tiempo, una especie de multi-tarea, puedes por ejemplo realizar una descarga de un archivo, y mientras seguir trabajando con el servidor como si nada, ya que el servidor no deja de atender peticiones.

Después de hacer algunas pruebas con el este fin de semana, me he dado cuenta de que es un herramienta bastante robusta, soporta bastantes conexiones simultaneas (yo probé con 50) y su velocidad de respuesta es estupenda.

La interfaz de WinASP es muy simple y está desarrollada con FiveWin, todo el manejo de sockets y el interprete de código xHarbour está desarrollado en xHarbour puro y duro, y si no quieres usar la interfaz Windows para configurar el servidor, basta cambiar valores en un archivo .INI, cuenta además con una serie de funciones que te facilitan la vida si no conoces mucho de HTML o de conexión SQL.

Lo que echo de menos en WinASP es soporte para Advantage Database Server, pero comentado con Jorge sobre esto me dice que se podría hacer sin mucho problema, pero sería una mejora "bajo pedido" y que solo funcionaría con un servidor remoto, ya que la licencia del servidor LOCAL de ADS claramete explica que no está permitido su uso en aplicaciones WEB.

El costo del producto es bastante razonable, 250 dólares por una versión totalmente funcional, y 500 dólares por la versión que incluye el código fuente (esta desde luego es tu mejor opción sobre todo si te gusta aprender), en realidad no me parece caro para todo lo que hace.

Jorge ha montado un ejemplo COMPLETISIMO en su web (www.htcsoft.cl), es una gestión comercial totalmente programada en WinASP, este mismo ejemplo con código fuente te lo entrega cuando adquieres tu licencia del producto. Tengo que admitir que usando este ejemplo como plantilla de desarrollo estás haciendo aplicaciones Web con xHarbour en mucho menos tiempo del que te imaginas.

Para acceder al demo "on-line" ve a la pagina de HtSoft, selecciona la opción DEMO del menú superior, cuando accedas al sistema , deja en blanco el espacio del password del usuario y listo tendrás acceso a ver todo lo que puedes hacer con el WinASP.

Si estás buscando publicación de datos en Web con xHarbour, no busques mucho, WinASP te da una solución justo a la medida de tus necesidades y a un buen precio.

jueves, marzo 12, 2009

Xailer en Facebook

Nunca he sido un "creyente" del tema comunidades por internet o "redes sociales", como prefieran llamarle y no por temor, sino porque realmente no tengo tiempo de hacer todo lo que hago todos los días como para ponerme a divulgar mi vida en Internet.

Hasta que llegó un momento en que a fuerza de recibir tantas invitaciones de "XXX te ha invitado a ser su amigo en Facebook", y de que en mi último viaje a España me encontrara que hasta en las obras de teatro hacen chistes con "te dejo mi Facebook" me convencí de ver que se trataba el invento.

Así que fuí a Facebook.com, cree mi cuenta, no di ninguno de mis datos, es mas, mi dirección de correo no es la que aparece ahí (digo por si alguno pretendía llenarme de virus por el messenger) y de buenas a primeras..... booom, en menos de 5 minutos había contactado con por lo menos 10 compañeros de universidad..... ¡ ost.....ras, esto sí que funciona !.

Luego me puse a buscar gente de mi familia y ....puuuumba.... de mis 17 primos por parte de madre, 11 tienen cuenta en Facebook.

En el transcurso fueron saliendo compañeros de la escuela primaria, antiguos colaboradores, algún ex jefe, mas de una ex-novia (que buena se ha puesto An....... jejejeje, mejor me callo la boca) además de muchos amigos que he hecho en todos los viajes donde este tema de la programación me ha llevado. En total llevo 51 amigos encontrados en Facebook, y tengo en espera como otros 20.

Después de jugar un par de días con Facebook me di cuenta del enorme potencial que tienen las redes sociales en internet, había yo oído mucho del fenómeno, lo había incluso visto en la serie de TV "La Internet" de Discovery Channel pero realmente no me había dado cuenta de enorme alcance que puede llegar a tener una red social tanto para encontrar gente como para promover ideas.

Investigando en Facebook un poco mas allá de la red social, me encontré con los GRUPOS, que son, para los que no están familiarizados con Facebook, una especie de "clubes" donde se pueden apuntar simpatizantes del tema que da título al grupo, así pues hay grupos de admiradores de Mafalda, o grupos sociales como "Di NO a matar focas para vestir zorras", uno de los mas me ha gustado ha sido: "Internet Explorer solo sirve para descargar FireFox".

Buscando mas me encontré con un grupo de progradores de Harbour, otro de simpatizantes del lenguaje Clipper - Harbour - Dbase y Xbase en general, y bueno eso me decidió a crear un grupo en Facebook para simpatizantes de Xailer, el grupo se llama: Xailer Fans.

Creé el grupo hace como 2 semanas mas o menos y al día de hoy nuestro joven grupo ya tiene 34 miembros, me encontrado con la grata sorpresa que los padres de la criatura: Ignacio y Jose, están apuntados al grupo, pero también hay un montón de programadores cuyos nombres quizá te suenen conocidos... Jorge Mason, Jose Luis Capel, Israel Solís, Vikthor Tomas, Rafa Carmona, Quim Ferrer..... ufff no sigo porque son demasiados, y sí efectivamente son aquellos que alguna vez nos conocimos trabajando en FW.

El hecho de que alguien se haya unido al grupo no necesariamente significa que están trabajando con Xailer, de hecho alguno de ellos me ha comentado que solo está ahí por curiosidad para ver como va progresando la herramienta, y en algún momento decidirse si se cambia o no, otros definitivamente han dejado de programa en Xbase y lo hacen en otra cosa pero están ahí por "nostalgia" o por convivir con los amigos.

El caso es que TODOS SON BIENVENIDOS a nuestro grupo en Facebook ( y lo digo abiertamente en este espacio porque me enteré que hay alguien que dice por ahí que los que trabajamos con Xailer "discriminamos a la gente por la herramienta que usan", cuando la simple mención de "cualquier otra cosa" o el desacuerdo con las opiniones en cierto foro es causa de expulsión inmediata).

Es demasido pronto para decirlo, pero espero que el grupo crezca, estamos poniendo enlaces a herramientas interesantes que puedes usar para programar con Xailer, y hay gente que nos esta regalando imagenes de pantallas de sus aplicaciones hechas con Xailer, hay un foro de discusiones abierto, y el típico "MURO" donde todos pueden escribir algo.

Aunque no programes con Xailer, te recomiendo la experiencia de unirte a una red social, nosotros escogimos Facebook contra Tuenti, Hi5, MySpace o Twitter porque me da la impresión que es la red que mas suscriptores tiene, y bueno, si estás por ahí ya inscrito puedes apuntarte a nuestro grupo.

Si quieres unirte al grupo, o simplemente, como yo, ver "de que va" una red social, entonces puedes irte a www.facebook.com, dar un par de datos y en menos de lo que te imaginas estas encontrandote con viejos amigos, para unirte al grupo de Xailer en Facebook, simplemente en la pagina principal de Facebook, del lado derecho, busca el enlace "Grupos", y busca Xailer Fans.

miércoles, marzo 11, 2009

95 mil páginas vistas en Objeto Persistente !!!!

Hoy revisando el contador de estadísicas de OP (Objeto Persistente) me he dado cuenta que desde que comencé a bloggear hace casi 5 años, se han visto 95,000 páginas de los comentarios publicados por este servidor en PO.

Eso quiere decir, que cada año tenemos mas o menos 19 mil paginas, que mensualmente se ven 1,583 y que el promedio diario es de 52 visitantes a OP.

Llegaremos a los 100 mil calculo yo para mediados de año, en unos 3 meses habremos alcanzado los 100 mil visitantes a Objeto Persistente.

Las estadísticas de este sitio las puedes encontrar dando click aquí.

Las estadísticas de este blog son traidas a ti por cortesía de a MOTIGO WebStats

martes, marzo 10, 2009

Advantage Database Server OPEN HOUSE

Los Open House que hemos venido realizando para Xailer ha sido un tremendo éxito y ahora, siguiendo la misma filosofía y porque ustedes lo pidieron ......

¡ Open House para ........



Fecha: Sábado 21 de Marzo, de 10 am, como siempre hasta que el último usuario quiera irse (la ultima vez estuvimos hasta las 8 de la noche).

Evento GRATUITO

Si vienes al curso básico de Xailer los días 18, 19 y 20 de Marzo, aprovecha y quédate un día mas, merece la pena.

ADS es toda una base de datos relacional que tiene toda la funcionalidad que puedes encontrar en otros productos como MySQL, SQL Server, Informix u Oracle, pero utilizando DBFs como archivos de almacenamiento y con soporte de indices CDX o NTX, o bien usando su propio formato de almacenamiento, el archivo ADT.

Con ADS tienes:
  • Integridad referencial
  • Acceso via internet a los datos
  • Transacciones
  • Encriptamiento y seguridad
  • Soporte de imagenes en campos memo
  • Acceso a datos DBF con SQL o con comandos tipicos Xbase
  • Proceso almacenados y triggers sobre archivos DBF
ADS funciona perfectamente con (x)Harbour y todas sus GUIs y hasta con Clipper a 16 bits. También ofrece soporte para prácticamente cualquier otro lenguaje de programación.

Los asistentes al Open House recibirán un CD con una licencia de demostración de Advantage Ver. 9.1 y nuestro manual en español para usuarios de (x) Harbour y Clipper con la información necesaria para poder utilizar ADS.

También rifaremos una licencia completa Advantage Database Server - SDK para desarrollador que es un servidor COMPLETO ADS para 2 usuarios, con soporte de todas las características y sin limite de tiempo de uso ni restricciones, este producto tiene un precio de $ 400.00 USD y estaremos rifando uno entre los asistentes.

Como siempre el evento es GRATUITO, solo les pido que RESERVEN SU LUGAR nos quedan MUY POCOS LUGARES DISPONIBLES.

Para reservar : Enviar correo electrónico a info@ciber-tec.com o bien llamar al teléfono 01 55 5560 0158.

¡ Les esperamos !

domingo, marzo 08, 2009

¿ Que tal durmió ? - 2

Me preguntaron:

¿ Se celebró el Open House de Madrid ? o no hubo Quorum.....

Y respondo:

¡ Por su puesto que se celebró el Open House !, cuando hay compromiso de hacer las cosas y trabajas con gente responsable, se cumple lo ofrecido, yo prometí estar en el Open House de Madrid y ahí estuve.

El segundo día del Open House fue mas concurrido que el primero, en total hemos sido poco mas de 13 asistentes en los dos días, tienes las fotos en el siguiente comentario.

Y ya que me lo recuerdas.... Seguimos sin noticias del IDE de FiveWin..... y es día 8 de Marzo... poco mas de 2 meses y naaa de naaa....

Como diria House: Odio tener razón.

Para rizar el rizo recibí un correo del mismísimo Antonio Linares, que seguramente recibió mas de uno de ustedes, anunciando la versión FWH 9.02, lo sorprendente que otros "disidentes" y "expulsados" también lo recibieron.... ¿ será que nadie se actualiza ?..... y si mal no recuerdo en enero vimos la versión 9.01 ¿ no ?.

Por cierto, Xailer ya tiene grupo en FACEBOOK, buscar: Xailer Fans.

jueves, marzo 05, 2009

De regreso del Open House en Madrid.

Ya lo sé, ya lo sé prometí 4 artículos mensuales en el blog, en Febrero no hubo nada, pero tranquilos que ya estoy de vuelta con muchos artículos bajo el brazo que iré publicando conforme vaya terminándolos.

Estuve ausente el mes de febrero por nuestros tradicionales cursos en San Sebastián (Donostia) del 22 de Enero al 1 de Febrero, llegué unos días antes porque me hacía ilusión asistir a una tradicional fiesta donostiarra: La tamborrada del día de San Sebastián el día 19 de Enero.

La nueva oficina de Geroa .... uffffff.... preciosa, estupenda, elegante, sofisticada, vamos a la altura como siempre, nuestra nueva sede para cursos: Oartsoaldea con unas instalaciones pa' morirse de la envidia, vamos que como dice JM García, esta año nos superamos.

Este año en nuestros cursos presentamos la manera de hacer aplicaciones WEB con Xailer, el truco es muy similar a como se hace con el modo híbrido que comentaremos mas adelante, en este momento estamos desarrollando una serie de clases para apoyar el desarrollo rápido de aplicaciones CGI usando Xailer y todos sus componentes de programación.

Después de los cursos, a los cuales asistieron además del personal de Europa, los amigos Leandro y Manuel de Venezuela, y después de la sidrería, un ciclón en Donosti donde vimos volar perros, farolas, semáforos y después del intrépido rescate de una damisela en apuros por parte de nuestro campeón JM García, el siguiente punto en el viaje como siempre: Madrid.

Este año tenía las ganas, pero no mucha intención de pasar unos días en Madrid, con el tema de la crisis y el Euro por la nubes el presupuesto se reduce y los días extras que suelo tomarme también, sin embargo gracias a la empresa Megas Internet que me solicitó una asesoría en programación en (x)Harbour, el viaje a Madrid se hizo realidad.

Con el presupuesto recortado, entonces lo mejor fue olvidarse del avión y usar el tren.... el resultado: maravilloso, tenía muchos años de no viajar en tren, si mal no recuerdo la última vez que lo hice fue un viaje de Valencia a Madrid, hace como 5 años en un increíble (para mí) tren Alaris. Esta vez fue un Alvia y un trayecto de 5 horas que se pasan volando porque el tren es comodísimo, tienes una cafetería, te ponen películas, y tienes un contacto eléctrico debajo del asiento para ir trabajando con tu laptop (y mucha gente lo hace), lo único que le falta para ser perfecto sería tener internet a bordo, pero eso se soluciona gracias a los servicios 3G de Vodafone de prepago, por solo 108€ (69€ del modem usb con tarjeta SIM + 39.00€ del servicio ilimitado por 15 días), para personas como yo, que tenemos que estar conectados casi todo el tiempo, es fenomenal, no es un gasto, es una inversión, además el modem me va a servir en futuras visitas y solo tengo que pagar el servicio de conexión.

Realmente tenía muchísimas ganas de ir a Madrid por una cosa: El Open House de Xailer.

Y vaya que mereció la pena, Jose e Ignacio están dejando niquelada la versión 2.0 de Xailer, el amigo José Manuel Serrano me mostró el modo "hibrido" de Xailer, y Bingen y Juajo, me dejaron patidifuso con el control que tienen de FastReports con Xailer y eso que me perdí medio día del Open House porque tuve que atender asuntos personales por la mañana del sábado.

Pero vayamos por partes:

Viernes, con un frío que pelaba (2 grados centígrados en la calle) lluvia intermitente y alerta de nevada en Madrid, comenzamos el Open House que prácticamente fue para mí y otros 2 colegas, vaya lujo, tener al padre de la criatura para preguntarle todo lo que yo quería..... bien bien bien.

Gracias Ignacio por aclararme un montón de dudas que tenía con respecto a DataSets, como te comenté le he metido mano al ADSDataSource y estoy en vías de dejarlo fino.

Por otro lado lo mejor del día: El modo híbrido de Xailer.

....pero .....

¿ Qué es el modo híbrido de Xailer ?

El buen amigo José Manuel Serrano, que cómo le gusta enredar en sus ratos de ocio, descubrió que ¡¡¡¡ Xailer acepta la compilación de programas para MS-DOS puro !!!!.

Es decir, que tu tomas tu programa Clipper como lo tienes, abres tus PRGS con el IDE de Xailer, haces unos cambios en los módulos de arranque de Xailer (son 2 líneas de código) y agregas la librería de la terminal consola a tu proyecto Xailer y ....... voila !!!!!, te sale un programa en MS-DOS compilado con Xailer.

Vaya gracia, pero si ya existe el XEdit para compilar programas en modo consola con xHarbour... ¿ Para que quiero compilarlos con Xailer ?

Pues muy simple, porque con Xailer puedes hacer uso de todas la herramientas del IDE, depurador incluído, así es, puedes usar el depurador gráfico de Xailer para hacer debug de tus programas (x)Harbour en modo consola.

Lo mas sorprendente no es esto, lo increíble es que puedes mezclar código MS-DOS con código Windows y hacer un programa "hibrido" es decir, que dentro de un mismo achivo EXE vayan trozos de código en MS-DOS y trozos de código que utilicen los recursos gráficos de Xailer, como los formularios, controles, DataSets, motor de informes, etc.

Esta técnica sería útil por ejemplo para migrar rápidamente un programa Clipper MS-DOS a xHarbour 32 bits: Creas un proyecto en Xailer, haces las modificaciones al módulo de carga, que como comenté es simplemente añadir 2 líneas de código tal cual se explica en Xailer.Info, ya que el código permanece sin cambio, sin embargo, el problema de los informes MS-DOS quedaría en el aire, ya sabemos que las impresoras gráficas, laser o inyección de tinta no se llevan precisamente bien con los reportes hechos con Clipper, y las impresoras USB definitivamente no van, pues bien, usando el modo híbrido de Xailer, puedes hacer tu interface en Ms-DOS y luego, dentro del mismo EXE, usar el motor de informes de Xailer para generar bonitos reportes gráficos que se ejecutarán en cualquier impresora Windows, y además exportarlos a PDF o a Excel directamente, ya que motor de reportes de Xailer te permite hacer la exportación directa.

De momento el modo híbrido está en período de experimentación, es "uselo bajo su propio riesgo", estoy preparando un artículo con un ejemplo para ver mas en profundidad como se puede sacar mayor provecho de esta característica de Xailer.

Sábado, día 2 del Open House, un día estupendo con sol que invitaba a un paseo por Madrid, aún a 10 grados centígrados con un viento helado, pero yo tenia un compromiso personal por la mañana y me uní a los participantes por la tarde, como siempre un gustazo ver a Bingen, Juanjo, Paco Viru, JM García, a David (no me llama, no me escribe, no me habla), amigos de toda la vida.

Pero pasemos a lo interesante del Open House:

Xailer 2.0:

¡ OMG ! Xailer 2.0 tiene nuevas características operativas que lo hace muy apetecible para el desarrollador de software, se han añadido nuevas características y mejorado otras tantas, veamos:

En el editor de código se añadió el IntelliType, es decir, tu tecleas una función de xHarbour en el editor de código de Xailer, y te aparece un Tooltip con la sintaxis correcta de la función, he estado probando esta característica personalmente durante las 2 últimas semanas y ahorra muchísimo tiempo al no tener que ir a buscar información a la ayuda de xHarbour.

Por sugerencia de Jose Manuel Serrano, se agregó un atajo muy interesante en el inspector de objetos, un simple Ctrl+* sobre una propiedad en el inspector de objetos, genera en el editor de código una expresion del tipo objeto : propiedad := valor en el inspector, realmente muy interesante.

Por otro lado la versión 2.0 d Xailer permite crear DLLs que realmente funcionan (otros productos no pueden generar DLLs), los DLLs de Xailer pueden contener tanto código como recursos, y por supuesto formularios, una DLL creada en Xailer solo puede ser usada por programas Xailer, ya que depende del Runtime de xHarbour, así como de las funciones "base" de Xailer, que van dentro del programa EXE, pero presenta una ventaja adicional:

!!!!! Te permiten crear componentes visuales para Xailer !!!!!

En la versión 1.9x se proporcionó información de como crear tus propios componentes gráficos con Xailer, para la versión 2.0, y de la mano de ambas tecnologías, la creación de Dlls y la capacidad de crear componentes visuales, puedes crear tus propios controles e INCLUIRLOS EN LA BARRA DE HERRAMIENTAS DE Xailer, tal cual se explica en estos artículos de Xailer.info

Otra característica nueva de Xailer 2.0 es la herencia visual.... eso si que es una PASADA, cuando Ignacio lo explicó se me fue la mandíbula al suelo:

Escenario: tienes varios formularios que básicamente contienen los mismos controles, y es algo tedioso tener que diseñar y rediseñar y rediseñar un formulario que ya hiciste antes simplemente porque necesitas quitar o poner controles adicionales, la herencia visual consiste en crear un formulario "base" y heredar de el otros "sub formularios", agregar o quitar los contorles que necesitas y listo, menos trabajo para el programador. Al ser una característica de la programación orientada al objeto, los cambios que hagas en el formulario base, son heredados automáticamente a los subformularios.... simplemente IMPRESIONANTE.

La herencia visual también puede servir para cambiar el tipo de formulario, por ejemplo puedes crear un formulario estandar de Xailer, y en vez de heredarlo de la clase TForm, heredarlo por ejemplo de TFolderPage e incrustar ese formulario directamente en una pestaña de un folder, en fin, las posibilidades son amplias.

FastReports:

Para cerrar el día, Bingen y Juanjo nos presentaron la integración de FastReports con Xailer.

FastReports es un poderoso generador visual de informes que originalmente nació para el mundo Delphi pero que puede usarse sin ningún problema con (x)Harbour.

FastReports, no tiene nada que envidiarle a otros productos similares como Crystal Reports o List & Label, excepto la complejidad de instalación, ya que es un solo DLL que tiene que ir en la misma carpeta donde va tu EXE, tampoco les envidia el tamaño porque la DLL solo mide 3 megas y mucho menos el precio, la versión completa con soporte para (x)Harbour es de solo 300€, y puedes distribuirlo libremente con todas tus aplicaciones.

Sergey, Spirin un estupendo programador ruso, quien hizo una clase que te permite "conectar" FastReports nativamente con (x)Harbour, con lo cual tienes control absoluto de la DLL de FastReports por medio del motor de objetos de (x)Harbour.

La DLL contiene tanto el diseñador visual, como el motor de vistas previas, además el diseñador visual soporta conexiones a DBFs, o a tablas SQL via ADO, las cuales pueden ser "alimentadas" al diseñador de FastReports en tiempo de ejecución desde el código fuente Xailer.

Por otro lado, el motor de vista previa se alimenta de los datos que TU LE ENVIES DESDE CODIGO FUENTE, pero lo mas sorprendente es que la DLL de FastReports puede "extraer" datos de tu programa EXE, es decir, desde tu reporte FastReports puedes llamar y ejecutar cualquier función o variable que esté definida en tu programa Xailer.

El motor de vista previa es totalmente configurable desde tu programa y exporta a 11 formatos distintos entre los que se encuentran por su puesto Excel, Word, JPG, PDF, correo electrónico, etc. cada motor de exportación se puede manipular individualmente lo que te permite exportar directamente los reportes sin necesidad de pasar por la vista previa.

Bingen y Juanjo han mejorado la clase de Sergey para que pueda "interpretar" los datasets de Xailer y poder presentarlo dentro del diseñador visual de FastReports para que puedas elegir los campos directamente de un DataSet de Xailer.

También han creado toda clase de informes distintos, desde los tipicos listados, hasta cosas mucho mas complejas como la impresión de cheques bancarios, o reportes con imágenes guardadas en campos BLOB de la base de datos..... simplemente increíble.

Estas son algunas fotos del evento:



Bonita foto de los asistentes tomada por JM Garcia:



Y una vista general de la presentación:





Como me comentó el amigo José Luis Capel.... no vale la pena comparar a Xailer con otros productos gráficos para (x)Harbour porque ninguno tiene nada que hacer frente a él, ni FiveWin (que por cierto..... casi 3 meses y del IDE nada de nada.... Odio tener razón) , Visual xHarbour es lo mas aproximado pero aún está a AÑOS de llegar a tener lo que Xailer tiene hoy en día. La comparación mas justa de Xailer sería con productos mas grandes, como Visual Basic. Delphi, etc, porque hoy por hoy Xailer ya es un producto grande.

Hay que mirar siempre hacia adelante, y equipo de Xailer esta haciendo muy bien las cosas, FELICIDADES.

miércoles, enero 28, 2009

¿Qué tal durmió ? - 1

Imitando a mi admirado Germán Dehesa voy a tomar prestado el nombre de su pie de columna en el Periódico Reforma de México, la cual usa para "recordarnos" cosas importantes que no tenemos que olvidar porque a veces tenemos muy poca memoria.

Ha pasado mas de UN MES sin noticias del Visual FiveWin..... Eso si, ha salido la FW 9.01 con mas botones con bitmaps .....

va a ser que yo tenía razón....

miércoles, enero 21, 2009

6 y 7 de Febrero Xailer Open House en Madrid

Pues ahora si ya tenemos la fecha exacta para el Open House en Madrid será los dias Viernes 6 y sábado 7 de Febrero del 2009.

Existen varios atractivos por los que compensa asistir al evento, porque a diferencia de los Open House que tenemos en México, este será un poco diferente.

Duración: Serán 2 Open House en realidad, uno el día 6 de Febrero, viernes, y si no puedes asistir a este porque tu trabajo te lo impide porque es en día laborable o bien porque te tienes que desplazar a Madrid si vienes de fuera, tendremos otro con el mismo temario al día siguiente Sábado 7 de Febrero.

Contenido: Al igual que en los Open House de México no pretendemos dar un curso de Xailer, sino que la gente nueva vea todo lo que se puede hacer y como hacerlo y la gente que ya medio se ha mojado los pies con Xailer, sacarle de las dudas que tenga, en el Open House de Madrid tendremos hasta donde el tiempo lo permita un pequeño curso introductorio para que la gente vea mas o menos los cambios que implica moverse de cualquier otra herramienta de programación ya sea basada en xHarbour (FiveWin, Clip4Win, MiniGUI, etc.) o algún Visual-algo a Xailer, te podrás llevar algún ejemplo básico totalmente funcional que te ayude en los primeros pasos con Xailer, y alguna cosilla mas.

Por su puesto el Open House no es solo para usuarios nuevos o futuros de Xailer, si ya eres un usuario "convencido" también eres bienvenido para que nos dejes saber lo que piensas del producto, lo que te gustaría que se incluyera, etc. la retroalimentación es muy importante tanto entre autores, como entre usuarios y es lo que buscamos en los Open House, además este Open House es especial porque tendremos a los autores del producto para preguntar lo que quieras.

Presentación Estelar: Xailer 2.0 con sus nuevas características: InteliType, compilación MultiHilo, creación de DLLs, generador visual de informes, intregración de componentes de terceros (OCX de modo visual), y por su puesto una muestra de todas estas nuevas características.

Especial: Los asistentes recibirán un descuento especial del 20% en el precio de Xailer si deciden comprar una licencia solo por el hecho de asistir al Open House, encima el evento ES GRATIS.

Y finalmente, después de que se me cayó un avión en La Guardia, y de que mi maleta se quedó perdida 2 días entre Nueva York y Barcelona, de que me robaron ropa y unos regalos que traía y de que por fin logré llegar a España, tendré mucho gusto en asistir al Open House, así que por allí nos veremos.

Huy, se me olvidaba, el Open House será en la zona de Tres Cantos, en las instalaciones de Proser Informática de mi buen amigo José Manuel Serrano.

Tres Cantos está a 20 km del centro de Madrid, se puede llegar MUY FACILMENTE desde cualquier zona en transporte público, por metro hasta Nuevos Ministerios, y de ahí el tren de Cercanías que va a COLMENAR VIEJO te deja en la estación TRES CANTOS, también se puede tomar el tren de Colmenar en la estación ATOCHA. El tiempo de viaje desde Nuevos Ministerio a Tres cantos es de aproximadamente 40 minutos.

Si vienes de fuera hay excelentes opciones de hospedaje a precios muy económicos, personalmente me hospedaré en el hotel Holiday Inn Express de 3 Cantos, tarifa: 70€ por noche + impuesto, desayuno incluido, su principal ventaja es que esta a solo 1 calle de la estación del tren, si necesitan reservación en este hotel, por favor haganmelo saber porque nos hacen un descuento corporativo en la cadena Holiday Inn.

Recuerda, el evento es gratuito, pero tienes que reservar tu lugar haciendo CLICK AQUI