Pon filtros en tus programas

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

En mis programas Windows utilizo un interfaz propio que he llamado FSDI — full simple display interface — del que publiqué varios artículos en mi blog cincomundos y que puede ser descargado junto con el código de Colossus que tengo publicado en GitHub.

Este interfaz FSDI consta basicamente de:

  1. Una barra lateral de acciones, que permite elegir las acciones a realizar con los datos mostrados.
  2. Una rejilla de datos configurable que muestra tipicamente los datos de un fichero DBF.
  3. Una fila de pestañas, que permite elegir la ordenación de los datos de la rejilla.
Interfaz FSDI en Fester, mi programa de gestión de comparsas de moros y cristianos.

El problema de este interfaz es que es demasiado rígido. Normalmente muestran todos los datos del DBF salvo que en un índice se haya incluido una condición. Para añadir flexibilidad a los datos a mostrar podemos incluir opciones de filtrado.

La opción de filtrado despliega un menú con todas las opciones de filtrado y la opción de eliminar el filtro. Normalmente el filtrado lo realizo por todos los campos que son clave ajena de la tabla, así como por algunos valores o rango de valores propios de la tabla como fechas, campos de marcas, etc. Antes de realizar el filtro se permite elegir el valor a filtrar mediante un diálogo auxiliar.

Acción y menú de opciones de filtrado.

En Harbour se puede definir filtros sobre un DBF usando la sentencia dbSetFilter([<bCondition>], [<cCondition>]) y definiendo las condiciones mediante codeblocks. Lo bueno de los filtros es puedes realizar otras acciones sobre las tablas como puede ser cambios de índice o búsquedas, y simplemente estas acciones se realizarán sobre los datos filtrados.

Un problema que podemos tener al definir filtros es que realicemos una acción en bloque sobre la tabla, por lo que deberemos llevar cuidado de quitar el filtro y luego reponerlo. Para guardar el contenido del filtro podemos usar las funciones dbFilter() y para eliminarlo dbClearFilter().

Una acción importante, desde mi punto de vista, cuando creamos un filtro es que el usuario debe tener conocimiento visual de ello, es decir, debemos decirle a nuestro usuario que hay un filtro activado. En mis programas hago esto de dos formas:

  1. Añadiendo el nombre del filtro al nombre del mantenimiento en la barra de opciones.
  2. Cambiando el color de la etiqueta de la opción de definición de filtros a rojo.

Una vez se elimina el filtro, mediante la misma opción de filtrado todos estos elementos visuales desaparecen.

La posibilidad de definición de filtros sobre tablas es una opción existente en Harbour que podemos incluir de manera sencilla en nuestros programas, lo que nos permitirá añadir una gran flexibilidad a los mismos. Es importante que cuando apliquemos filtros lo hagamos de manera que el usuario vea claramente que hay un filtro activo, y no le lleve a confusión.

Noticias de Harbour — diciembre 2017

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

En los últimos meses tenemos varias novedades sobre Harbour que te presentamos a continuación:

¿ Conoces alguna novedad sobre Harbour, su entorno de programación, artículos sobre el lenguaje, código fuente, etc. que merezcan ser publicados ? Escribeme a [email protected] y lo publicaré en el próximo boletín sobre Harbour.

Videos de las conferencias de la 1ª Reunión de Harbour Magazine

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

En la reunión que realizamos en Novelda grabamos todas las conferencias. Bueno, todas no porque se acabó el disco de la cámara justo al final de la charla de Manu Expósito, por lo que la conferencia de Manuel Calero no la pudimos grabar. He creado un canal en Youtube con los videos de las conferencias y aquí os las muestro. Todas las conferencias están en español.

Fundamentos técnicos de la Inteligencia Artificial, por Antonio Linares

Api Rest y su uso en Google, por Cristobal Navarro

Servicios web con Harbour, por Rafa Carmona

Win & Web, los nuevos escenarios, por Carles Aubia

Harbour Data Objects, por Manu Expósito

XEdit y control de versiones, por José F. Giménez

Experiencias de una publicación sobre Harbour, por José Luis Sánchez

Inspiradora

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

Esta es la palabra que para mi mejor describe la 1ª reunión de programadores de Harbour Magazine.

Inspiradora porque Harbour es un gran lenguaje de programación, porque con Harbour se pueden hacer más cosas que software de escritorio, porque hay mucho que estudiar y aprender, porque hay gente que hace estas cosas y puede ayudar a la comunidad, porque podemos atacar motores de bases de datos de una manera cómoda, porque el uso de patrones de diseño es posible, porque tenemos herramientas potentes.

Inspiradora porque el sentimiento de comunidad no se ha perdido entre los desarrolladores Harbour, porque la asistencia a la reunión ha estrechado de nuevo los lazos entre los asistentes y nació el compromiso colectivo de organizar de nuevo reuniones entre nosotros e invitar a toda la comunidad Harbour a unirse a las reuniones.

Los asistentes en el castillo de Novelda.

Este es un primer post sobre la reunión pues tengo grabadas casi todas las conferencias en video, y voy a ir montando y subiendo los videos conforme tenga tiempo.

¿ Y las conferencias ? Pues para mi todas fueron una pasada total. Vamos a verlas una a una.

La sala de conferencias con algunos de los asistentes.

Fundamentos técnicos de la Inteligencia Artificial, por Antonio Linares

Antonio nos hizo una exposición muy amena de lo que es la inteligencia artificial, adentrándonos en los conceptos básicos hasta llegar al concepto de perceptrón y red neuronal, pasando a ver ejemplos de un perceptrón hecho con Harbour. Después siguió con más ejemplos hasta llegar a hacer una introducción de TensorFlow y mostrar un ejemplo funcionando con Python.

Antonio Linares.

La presentación de Antonio se puede descargar en la siguiente dirección:

https://bitbucket.org/fivetech/harbour_novelda_2017/downloads/Fundamentos%20t%C3%A9cnicos%20de%20la%20Inteligencia%20Artificial.pdf

Los ficheros usados en la conferencia se pueden descargar desde el siguiente enlace:

https://bitbucket.org/fivetech/harbour_novelda_2017/downloads/

Api Rest y su uso en Google, por Cristobal Navarro

Cristobal nos explicó los conceptos de API’s REST, mostrandonos a continuación los distintos APIS existentes en Google, describiéndolos y mostrándo ejemplos de su uso. Por último nos mostró una jerarquía de clases que está desarrollando y que permitirán utilizar comodamente estos API RST de Google desde programas Harbour.

Cristobal Navarro.

La presentación de Cristobal se puede descargar en el siguiente enlace:

https://bitbucket.org/fivetech/harbour_novelda_2017/downloads/Cristobal_Navarro_REST.pdf

Servicios web con Harbour, por Rafa Carmona

La conferencia de Rafa volvió a demostrar que es una auténtica esponja absorbiendo conocimientos. Primero nos contó la manera de montar un servidor web con Harbour usando el ejemplo existente en contrib/hbhttpd y a continuación la manera de montar un servicio web con Harbour y utilizarlo para conectarlo con otros sistemas.

Rafa ‘TheFull’ Carmona.

La presentación de Rafa se puede descargar en el siguiente enlace:

https://drive.google.com/open?id=1L7QB6tVbF4e_tqghmBfTGp8-nNwt_zPn

Win & Web, los nuevos escenarios, por Carles Aubia

Carles nos presentó un framework de programación web que ha desarrollado y que permite realizar aplicaciones web con una sintaxis similar a Harbour y definiendo los formularios web mediante un editor de recursos y almacenarlos en un fichero .rc. Algo realmente novedoso e impresionante, y que Carles tiene intención de liberar como open source en un futuro muy próximo con el nombre de TWeb.

Carles Aubia.

La presentación de Carles se puede descargar en el siguiente enlace:

https://drive.google.com/open?id=1Ckp9xMlFqB49aQQizFPe6AXq4buzjCww

Harbour Data Objects, por Manu Expósito

Manu explicó en que consiste su solución de acceso a datos llamada HDO, mostrando su arquitectura multicapa y dando un repaso a todos los métodos de la clase que permite en acceso a bases de datos MySql. Toda la clase está escrita en C lo que le da una rapidez endiablada.

Manu Expósito.

La presentación de Manu se puede descargar en el siguiente enlace:

https://drive.google.com/open?id=1aBgtQn9ZWJYTSRZw1_PTuEclVl8YK3Is

Patrón MVC en Harbour, por Manuel Calero

Manuel nos hizo una exposición del patrón MVC, explicando cada uno de sus componentes y nos explicó como está usando MVC en la refactorización completa de su aplicación Gestool. También nos habló de Validators y Asserts y como integrarlos en un desarrollo con patrón MVC.

Manuel Calero.

La presentación de Manuel se puede descargar en el siguiente enlace:

https://drive.google.com/open?id=1xnIducezrd_lBHH_zeshhOOeUVbUzSCx

XEdit y control de versiones, por José F. Giménez

José nos mostró el uso básico de su editor gratuito XEdit y a continuación nos explicó la manera de usar el sistema de control de versiones que han integrado en el editor. Este sistema de control de versiones funciona en local y tiene todas las funcionalidades de un sistema de control de versiones sin necesidad de contar con un servidor, sino unicamente el editor XEdit.

José F. Giménez.

La presentación de José y la documentación de XVC se pueden descargar de los siguientes enlaces:

https://drive.google.com/open?id=1wJUnw_2wELqnn7c1x6JXR-iVBOzFwtmn
https://drive.google.com/open?id=1qzRaz-qb6dhq1MGs6HAk_NaxI6gTvOy1

Experiencias de una publicación sobre Harbour, por José Luis Sánchez

En mi charla conté los motivos que me llevaron a iniciar Harbour Magazine y mostré la importancia de publicar los artículos tanto en español como inglés. Mostré las estadísticas de lecturas de las entradas, el motivo de convocar una reunión y expuse los planes de continuar potenciando la comunidad Harbour.

José Luis Sánchez

Mi presentación se puede descargar en el siguiente enlace:

https://drive.google.com/open?id=1Lm1irwwk6u1eukJMhH_9l1gdIjwig0kF

Y además…

Fueron un par de dias de volver a vernos los que ya nos conociamos y ponernos cara los que no nos conociamos. Creo que lo pasamos muy bien y hubo un gran ambiente entre los asisntentes a la reunión.

Aquí dejo alguna muestra de ello.

Y también hubo tiempo de ocio 😉

¡ Muchas gracias a todos por venir a Novelda !

Agenda de conferencias de la 1ª Reunión de programadores Harbour Magazine

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

Ya tengo ultimada la agenda de conferencias para la Reunión de programadores Harbour que vamos a realizar los próximos 11 y 12 de Noviembre en Novelda (Alicante-España). Salvo modificaciones de última hora, la agenda va a ser la siguiente:

Agenda para la 1ra reunión de programadores Harbour

Todos los conferenciantes son programadores del máximo nivel, muy conocidos tanto dentro como fuera de España, con una activa participación en los distintos foros existentes de Harbour.

Las conferencias se realizarán en el Ecoalbergue La Mola y la entrada a las mismas es libre, condicionada al aforo de la sala. Para facilitar la organización, solicito a los interesados en acudir a las conferencias que rellenen el formulario de inscripción a las mismas.

Harbour Magazine

Publication about Harbour programming language

TRecord o cuando menos es más

Hace unos meses tuve un problema de lentitud con una aplicación. Se había eliminado el servidor de una oficina y la aplicación, que funciona en red, se tenía que ejecutar en remoto desde otra. Comenzaron los problemas de lentitud, abrir una formulario TFSDI — https://cincomundos.wordpress.com/2006/06/13/fsdi2006/ — con una rejilla de datos sobre un fichero tardaba casi 10 segundos. Después de varias pruebas, vi que el problema era una clase browse muy vieja, y que simplemente actualizando la versión de Harbour + FWH usada en la aplicación la lentitud desaparecía hasta niveles aceptables.

Entonces caí en la cuenta de que en esta aplicación estaba utilizando una clase de manejo de dbf, y al intentar compilarla para la versión de Harbour a utilizar me daba un montón de errores. La alternativa era rehacer todo el código afectado por la clase o seguir utilizándola actualizándola, cosa que a su vez llevaba a rehacer código pues esa clase había sido actualizada de manera no compatible con la que yo tenía.

Lo que hice fue coger la calle de enmedio. Rehice todo el código afectado por la clase a Harbour puro, y comencé a utilizar una clase de manejo de buffer de registro que me proporcionó Marcelo Via Giglio en http://forums.fivetechsupport.com/viewtopic.php?f=6&t=34402 . Con esta clase podría manejar todos los campos de un dbf como datas de un objeto y cargarlos/salvarlos con una llamada a un método. Es una solución sencilla, pero me evitó tener que aprender el manejo de otra clase de gestión de dbf que suelen tener montones de opciones que nunca utilizo. En mi caso, menos es más.

La clase TRecord está publicada en https://github.com/JoseluisSanchez/TRecord y he actualizado Colossus para mostrar el uso de esta clase, los cambios están en la gestión de claves https://github.com/JoseluisSanchez/colossus/blob/master/prg/pclaves.prg

¿ Usas clases de terceros y has tenido situaciones como la mía ? ¿ Estás a favor o en contra de estas clases ? Espero tu respuesta en los comentarios.

Harbour Magazine

En febrero de este año comencé la publicación de Harbour Magazine, una publicación dedicada al lenguaje de programación Harbour.
Es por ello que este blog ha estado un tanto abandonado, pues he estado publicando allí información acerca del lenguaje Harbour. Harbour Magazine es bilingue español/inglés, es la primera vez que hago algo así y está siendo una gran experiencia.

Los post publicados hasta ahora han sido los siguientes:

Con Harbour Magazine ya son tres los sitios web donde publico: el blog de alanit, cincomundos y Harbour Magazine. Sinceramente no me gusta nada tanta dispersión de contenidos así que estoy pensando seriamente en unificar todo en un único sitio. Veremos como lo hago.

1ª Reunión de programadores Harbour Magazine

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

Harbour Magazine organiza una reunión de programadores en Novelda (Alicante — España) los próximos días 11 y 12 de Noviembre de 2017.

En la reunión tendremos una visita turística a la ciudad, conferencias de destacados programadores y mesas redondas. El idioma de la reunión será el español. Las conferencias previstas en el momento de abrir la inscripción son las siguientes:

  • Patrón MVC con FWH y MySQL, por Manuel Calero Solís.
  • Harbour Data Objects, por Manu Expósito.
  • Inteligencia Artificial con Harbour, por Antonio Linares Cañas.
  • Uso de Advantage Data Server con Harbour, por Reinaldo Crespo.
  • Charla de Rafa ‘TheFull’ Carmona, pendiente de concretar.

En caso de que algún asistente desee realizar una conferencia puede comunicarlo en el formulario de inscripción.

En el siguiente documento se presenta toda la información práctica de la reunión: Reunión de Programadores Harbour Magazine.

Debido a la capacidad de las salas de conferencias hay unicamente 40 plazas para asistentes a la reunión.

Ya está abierto el formulario de inscripción.Harbour Magazine

Publication about Harbour programming language

Entrevista con Patrick Mast

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

Patrick Mast es el destinatario de una nueva entrevista. Patrick fue uno de los iniciadores del Proyecto Harbour, hospeda xHarbour.org, es el propietario de xHarbour.com y un miembro activo de nuestra comunidad. Es también una gran persona y ha contestado amablemente a mis preguntas.

Cuentanos acerca de tí, una pequeña biografía, donde vives y a que te dedicas.

Vivo en Bélgica y este año cumplo 50 años. Comencé a programar con 13 con un Sinclair ZX81que compré con mis primeros ahorros. ¡Estaba intrigado sobre qué era posible hacer con una máquina tan pequeña! ¡Podias escribir algo y te respondía con texto o sonido! ¡Haha, para un chico de 13 años era sorprendente! Tenía unicamente 1KB de memoría. No 1GB, ¡¡1KB!! ¡Esto es 1024 bytes, chicos! Esto me enseño a ser muy austero con el código que escribo. Por qué usar 100 bytes si puedes hacerlo con 20, verdad ?

Entonces, en 1984 apareció el Sinclair QL. Lo utilicé para construir mi primera aplicación real, llamada ‘Survey’ (n. del t.: encuesta). Era una aplicación para registrar todas las carreras de la compañía de taxis de mis padres. De esta manera podía dar una ‘encuesta’ de todas las carreras realizadas en un periodo, calcular la distancia, el gas utilizado, etc. Estaba muy orgulloso de ella. ¡Una aplicación real de negocios!

Mi siguiente ordenador fue un IBM Personal Computer. Tenía como sistema operativo Microsoft MS-DOS. Tenía su propio monitor y teclado. ¡Una gran máquina! En ese momento estaba buscando un entorno de desarrollo mejor que el MS-BASIC que traía incorporado. Estaba mirando dos sistemas: PowerBasic y Nantucket Clipper. Elegí Clipper porque en ese momento estaba convencido de que Clipper tenía más futuro que PowerBasic.

Mi primera aplicación escrita en Clipper fue “Resto-File”, un TPV para restaurantes. Mi vecino en esa época tenía un resaurante y me pidió que desarrollara algo que le facilitara recoger las comandas de los clientes y comunicarlas a la cocina. El programa funcionó bien durante años y años. El restaurante también quiso imprimir facturas y llevar la contabilidad, así que comencçe mi siguiente aplicación Clipper a la que llamé “Fakt-File”. Era una aplicación de facturación y contabilidad para toda clase de negocios.

Entonces, en 1995 Microsoft lanzó Windows 95 y fue un éxito instantaneo para Microsoft. Debido a que yo totdavía utilizaba Clipper para todos mis desarrollos y Clipper era sólo para DOS, tuve que espabilarme y buscar una solución para llevar mis aplicaciones a la nueva plataforma Windows. En ese momento, Delphi era una gran elección, pero suponía reescribir TODO el código. Clipper y Delphi eran totalmente diferentes. Entonces conocí FiveWin que era una librería GUI que se usaba con Clipper. Así, podía mantener todoe el código de negocio y reescribir unicamente el interfaz de usuario. ¡Perfecto!

Comencé a desarrollar con Clipper/FiveWin y lancé WinFakt! versión 1.0 en 1996, sólo un año después de Windows 95. Aunque actualmente utilizamos Visual xarbour para nuestros nuevos desarrollos, todavia utilizamos FiveWin para nuestro ejecutable WinFakt.exe que va por la versión 11.

En e 2003 comencé xHarbour.com con Ron Pinkas. Queriamos dar a la comunidad [x]Harbour una versión precompilada y empaquetada de xHarbour con la opción de soporte profesional. Actualmente, en WinFakt!, utilizamos xHarbour/FiveWin/Visual xHarbour en todos nuestros desarrollos.

Para los que no te conozcan, coméntanos cuál es tu relación con la comunidad Harbour. ¿Cómo participas y qué opinas de ella ?

Cuando Antonio Linares comenzó a hablar sobre tener un nuevo compilador/intérprete que reconociera el lenguaje Clipper, yo estuve muy interesado. Todavía recuerdo el día que tuvimos que decidir el nombre del nuevo compilador. Siendo honesto, no me gustó el nomnre “Harbour” al principio, pero al grupo le gustó y así nació Harbour. Yo contribuí dando al grupo presencia en la web y proporcioné el logo y los gráficos de la comunidad Harbour.

¿ Cómo empezaste en Harbour y en qué momento decidiste usarlo profesionalmente ?

Comencé a utilizar Harbour desde su creación.

¿ Qué tipo de software haces ? ¿ De qué desarrollo tuyo te sientes más orgulloso ? ¿ Puedes mandarnos un pantallazo de tu desarrollo ?

Nuestra aplicación principal es WinFakt!. Se trata de un programa de facturación/contabilidad para pequeños negocios, que es mantenida actualmente por 6 desarrolladores. Nuestra compañía tiene un total de 23 empleados, repartidos por todo el mundo.

Este es una pantalla de WinFakt:

Este es nuestro generador de informes, desarrollado con VXH:

¿ Utilizas algún GUI en tus desarrollos ? ¿ Cual de ellos ?

Todavía utilizamos FiveWin para nuestro winfakt.exe. Para nuevos desarrollos y mejoras de WinFakt! utilizamos Visual xHarbour.

Cuentanos cual es tu entorno de desarrollo y qué herramientas de programación utilizas.

Utilizo un ordenador Mac para mis desarrollos. Utilizamos Microsoft Code para Mac como editor de código. Compilamos y ejecutamos/probamos en Windows 10 con Parallels Desktop en Mac. Todavía usamos TotalComander en Windows como gestor de ficheros.

¿ Qué echas de menos en Harbour o en su comunidad ? ¿ Qué te gustaría que tuviera Harbour ?

Un gran IDE como Visual xHarbour, pero para Harbour 😉

¿ Conoces otros entornos de programación aparte de Harbour ? ¿ Qué tipo de desarrollos has hecho en otros entornos ?

Tengo conocimientos de C, C#, Delphi, Javascript etc. Pero programar es como montar en bicicleta, una vez sabes montar a una no es dificil montar en otra 😉

Entrevista con Antonio Linares

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

En esta nueva entrevista he contactado con Antonio Linares, uno de los iniciadores del proyecto Harbour y desarrollador de la librería Fivewin, uno de los más populares GUI para Harbour.

Explícanos un poco tu bio, donde vives y a qué te dedicas profesionalmente.

Nací hace 55 años en Málaga. Un día un ordenador ZX81 llegó a mis manos, lo conecté a la tele, escribí “hola” y quede fascinado mirando esas letras en la pantalla. Fué mágico. A partir de ahí la curiosidad y las sincronías de la vida, hicieron el resto. Mi hobby se transformó en mi profesión. Un regalo inmenso de la vida.

Para los que no te conozcan, coméntanos cuál es tu relación con la comunidad Harbour. ¿Cómo participas y qué opinas de ella ?

Basicamente soy el papá de Harbour. Me límité a poner la semillita y esta se convirtió en un árbol enorme con muchas ramas. Otra bendición de la vida. Somos muy afortunados de haber sido capaces de construirlo entre todos.

¿ Cómo empezaste en Harbour y en qué momento decidiste usarlo profesionalmente ?

Queria entender como funcionaba Clipper. No decidí nada, simplemente las cosas fueron sucediendo. Lei varios libros de construcción de compiladores, me puse a hacer pruebas y compartí los resultados publicamente. Mucha gente se entusiasmó y se puso a ayudar. Y así comienza el proyecto Harbour.

¿ Qué tipo de software haces ? ¿ De qué desarrollo tuyo te sientes más orgulloso ? ¿ Puedes mandarnos un pantallazo de tu desarrollo ?

De FiveWin sin duda alguna. Me ha hecho conocer a muchos grandes amigos por todo el mundo, me ha hecho viajar, me ha permitido tener mucho tiempo para mi y sigue pagando mis facturas 🙂

¿ Utilizas algún GUI en tus desarrollos ? ¿ Cual de ellos ?

FiveWin para Windows. En Mac uso FiveMac. Y en Android e iOS uso QT ó directamente el GUI propio de esas plataformas.

Cuentanos cual es tu entorno de desarrollo y qué herramientas de programación utilizas.

Total Commander como manejador de ficheros. Fivedit como editor de código fuente. Visual Studio para depurar a bajo nivel.

¿ Qué echas de menos en Harbour o en su comunidad ? ¿ Qué te gustaría que tuviera Harbour ?

Me parece genial tal y como está. Irá incorporando lo que sea necesario y evolucionará gracias a la comunidad.

¿ Conoces otros entornos de programación aparte de Harbour ? ¿ Qué tipo de desarrollos has hecho en otros entornos ?

Todos son muy similares pero con Harbour puedo hacer lo que desee muy rapidamente. Es la magia de Clipper: nos hizo a todos programadores profesionales mientras jugábamos con él 🙂

Harbour Magazine

Publication about Harbour programming language