sábado, diciembre 19, 2009

Peregrinatio, Por el camino de la Luz.

En el transcurso de tu vida, según dicen por ahí, tienes que escribir un libro, plantar un árbol y tener un hijo.

Yo agregaría algo más.... tienes que hacerte amigo de un artista.

Yo tengo la fortuna de conocer y ser amigo de uno, Juan Ramón Llavori, su arte es comparable a la pintura, pero en su versión moderna, Juan Ramón o como le llamamos los amigos, "JR", es un artista del lente, un fotógrafo maravilloso.

Tengo la fortuna de poseer 2 de sus obras y un collage de varias de ellas, y creánme, es complicado convencer a JR de deshacerse de una de fotografías, porque cada foto ha sido tomada con un cariño especial y tiene "ese" toque, no sabría decir como describirlo, que la hace única.

En esta ocasión tengo en mis manos su última obra, su libro : PEREGRINATIO; POR EL CAMINO DE LA LUZ, una obra dedicada al Camino de Santiago y dicho sea de paso, uno de los trabajos de fotografía mas hermosos que he tenido que la oportunidad de ver.



A lo largo de los últimos 7 años, Juan Ramón ha recogido sus experiencias como peregrino del Camino de Santiago en una recopilación de maravillosas fotografías que ha publicado en su libro.

Como todo buen artista, JR publica su arte para compartirlo con todo el mundo, y para ayudar a los demás, este libro es una edición de autor (lo publica por su cuenta), los ingresos generados por la venta del libro (sólo 35.00 Euros por cada ejemplar, portes incluidos), serán destinados primeramente a cubrir el costo de publicación, el resto de los ingresos será para construir una cocina para el Convento de las Monjas de Ponda y finalmente, si hay algún ingreso más, a montar una exposición sobre el libro.



Una de las cosas que mas me llama la atención es que JR es un fotográfo autodidacta y no se dedica a la fotografía como una forma de trabajo, la fotografía es para él un pasatiempo al que se entrega con la pasión que solo se puede esperar de un artista, que mas que hacer lo quiere, quiere lo que hace.

Para muestra, una de las fotografías que están en las portadas de libro:



Algunas tribus índigenas piensan que una fotografía les roba el alma, cuando veo el trabajo de Juan Ramón me doy cuenta que realmente el alma del ser humano se puede fotografiar, pero no para robarla, sino para compartirla y hacerla eterna por medio de su arte.

Si quieres conocer un poco mas de la obra de Juan Ramón, puedes consultar:

Si deseas un ejemplar del libro, puedes ponerte en contacto directamente con Juan Ramón en su correo electrónico jrllavori@euskaltel.net y si estás en México (no me comprometo a hacerlo para otros países) y deseas un libro de Peregrinatio.... ponte en contacto conmigo (info@ciber-tec.com), porque seguramente quedaré con Juan Ramón en mi próximo viaje a España y podré traer conmigo algunos ejemplares.

martes, diciembre 08, 2009

Operación España 2010

En el año 1999 comenzamos a viajar a España.

La primera vez que dí cursillos en España pensé que no se repetiría, que había sido un trabajo de formación como cualquier otro, pero la realidad fue muy distinta .... al 1999 siguió el 2000, y luego el 2001, y así sucesivamente, año tras año y a veces no una, sino dos y hasta 3 veces en el mismo año, he hecho las maletas, cruzado el charco y me he dedicado a dar formación en España, cosa que nunca hubiera sido posible sin la inestimable participación de la empresa Geroa Software y del buen amigo Niko del Pozo.

El año 2010, no será la excepción, el año pasado cambiamos las fechas en las que solíamos dar los cursos (Mayo), para hacerlo a principio de año.

Tenemos ya planeados nuestros cursos para 2010, los cuales se llevarán a cabo como tradicionalmente lo hacemos, en San Sebastián, Guipuzcoa, al norte de España, del 4 al 13 de Febrero del 2010.

El próximo año, los cursos que planeamos dar son:

Programación Orientada al Objeto con (x)Harbour: Los objetos con (x)Harbour son un pilar fundamental para desarrollar aplicaciones mas rápido y mejores, sin embargo hemos notado que casi nadie conoce como usar objetos con (x)Harbour, y por ello hemos diseñado este curso, además de aprender como usar los objetos de (x)Harbour y sus interfaces gráficas, como Xailer, Visual xHarbour y Fivewin, aprenderemos como usar componentes OLE para conectar por ejemplo con Office e incluso a usar ADO para conectar con otros formatos de base de datos, de una manera fácil. Este curso te facilitará enormemente el uso de Xailer, de FastReports (el cual está construido sobre una clase para (x)Harbour) y de otros componentes de programación.

Xailer 2.0 : Ya está disponible la versión 2.0 de esta estupenda herramienta de desarrollo, a lo largo de los últimos 3 años, hemos acumulado bastante experiencia en la herramienta y esta vez, hemos incluido en un solo curso TODO Xailer, desde los temas básicos para comenzar a utilizar Xailer de una manera rápida, hasta temas avanzados como el uso de DataControls para acceder a cualquier formato de base de datos tanto DBF como SQL. En este curso hemos incluido varias aplicaciones completas con código fuente.

SQL para archivos DBFs con Advantage Database Server: Mucha gente piensa que ADS es caro, no es cierto, hay una versión gratuita, y nosotros te vamos a regalar una para 2 usuarios, muchos lo ven como un simple "cliente/servidor" para archivos DBF, no es cierto, ADS es un sistema completo de Gestión de bases de datos relacionales que no tiene nada que envidiar a productos como MySQL, SQL Server o cualquier otro SGBDR, y de eso se trata este curso: aprenderemos a usar todo el poder del SQL, pero sobre archivos DBFs, además de temas como procesos almacenados, seguridad de la información, replicación de datos, etc. Este curso incluye por su puesto, una copia de nuestro manual Advantage Database Server para (x)Harbour en Español, una copia del Libro Advantage Database Server a Developer's Guide de Cary Jensen y una licencia para 2 usuarios de Advantage Database Server, totalmente funcional y sin limitaciones.

Programación para internet con WebAS: Web Application System es un conjunto de clases para desarrollar aplicaciones para internet, usando un navegador Web para la interfaz con el usuario, fue diseñado originalmente usando el motor de objetos de FiveWin a 16 bits, pero eventualmente lo hemos modificado para que funcionara con (x)Harbour simplemente y con todas sus interfaces gráficas, WebAS puede ser utilizado tanto con el modo consola de (x)Harbour y con cualquier interfaz gráfica para el mismo, como Xailer, MiniGUI, Visual xHarbour y FiveWin.

FastReports: hemos preparado un curso especial que te permitirá usar este estupendo generador de informes con (x)Harbour, tanto en modo consola, como en modo gráfico, con cualquier GUI. FastReport se integra fácilmente con cualquier herramienta visual para Harbour como Xailer, Visual xHarbour, MiniGUI, y Fivewin, utiliza CUALQUIER motor de base de datos, DBF, Advantage Database Server o cualquier SQL, funciona con (x)Harbour a través de una clase. En voz de mas de uno de sus usuarios, FastReports es la herramienta mas útil que existe para (x)Harbour.

Opcionalmente también tenemos planeado un curso de migración de 16 a 32 bits con (x)Harbour, porque nos hemos dado cuenta de que muchos programadores siguen trabjajando con Clipper en modo consola (aunque usted no lo crea) y con el surgimiento de los sistemas operativos de 64 bits, a pesar de los emuladores y la virtualización, siempre será mejor trabajar sin necesidad de tener "algo" de por medio entre la aplicación y el sistema operativo. Entendemos que muchos usuarios ya habrán saltado 32 bits, por lo que este curso se abrirá unicamente si hay bastantes interesados.

Tenemos sitios disponibles, pueden contactar directamente con Geroa Software, nuestro representante en España para mas informes sobre fechas, precios, descuentos especiales y temarios de los cursos:

Nicolás del Pozo
info.es@ciber-tec.com
Tel. 678 437 795

Mas información de los cursos está disponible haciendo click aquí.

lunes, noviembre 30, 2009

Harbour VS xHarbour, Las diferencias verdaderas (Parte 15)

Interface de POO para Arreglos Hash.

xHarbour permite acceder a los elementos de un arreglo hash usando una interfaz de POO. hVal["ABC"] := 100 puede ser también expresada como hVal:ABC := 100.

Usar la interfaz POO es mas lento que usar el operador [] pero trabaja para todos los índices los cuales son identificadores válidos en mayúsculas para [x]Harbour.

Por default el núcleo de Harbour no soporta esta funcionalidad, sin embargo tiene un API de POO suficientemente robusto para soportar la implementación de esta funcionalidad sin tocar el código del núcleo aún a nivel .PRG. Esta característica está implementada en XHB.LIB.

Este código puede ser compilado y ejecutado por ambos compiladores:
      #ifndef __XHARBOUR__
#include "xhb.ch"
#endif
proc main()
local hVal := {=>}
hVal["ABC"] := 100
hVal:QWE := 200
hVal:ZXC := 300
hVal:QWE += 50
? hVal:ABC, hVal:QWE, hVal:ZXC
? hVal["ABC"], hVal["QWE"], hVal["ZXC"]
return
Algunos usuarios de Harbour suelen compilar el código del núcleo de Harbour con la macro HB_HASH_MSG_ITEMS la cual activa esta funcionalidad directametne en el código del núcleo, pero esto no es necesario con el código actual y existe solo por razones históricas.

Es posible que en un futuro el soporte para esa macro sea quitado o reemplazado por una opción de runtime la cual pueda ser habilitada o quitada para cada arreglo hash por separado.

Continuará....

domingo, noviembre 29, 2009

Harbour VS xHarbour, Las diferencias verdaderas (Parte 14)

Uso de un string de 1 caracter como valor numérico.

xHarbour usa strings de 1 byte como valor numérico correspondiente al valor ASCII de dicho byte, por ejemplo:

? "A" * 10 // 650

Por default el núcleo de Harbour no soporta esta funcionalidad, sin embargo tiene un API de POO suficientemente robusto para soportar la implementación de esta funcionalidad sin tocar el código del núcleo aún a nivel .PRG. Esta característica está implementada en XHB.LIB.

El siguiente código se compila y se ejecuta correctamente en ambos compiladores:
      #ifndef __XHARBOUR__
#include "xhb.ch"
#endif
proc main()
local c := "A"
? c * 10, c - 10, c + 10, c * " ", chr( 2 ) ^ "!"
return
y en ambos casos da el mismo resultado.

De cualquier manera la emulación no está completa en Harbour, funciona solo a nivel código .PRG.

En xHarbour las funciones/macros estándar del API en "C" fueron modificadas para interpretar un string de un byte como un número. Esto es una fuente potencial de muy serios problemas, por ejemplo OrdSetFocus("1") podría interpretarse como seleccionar el índice 1 o el índice 49. Los programadores de Harbour decidieron no añadir dicha funcionalidad a nivel núcleo, de tal forma que en Harbour, las funciones escritas en "C" no aceptan un string de 1 byte como parámetro numérico y código como este:
      ? str( "0" )
Genera un error en tiempo de ejecución en ver de imprimir ' 48'.

Continuará....

sábado, noviembre 28, 2009

Harbour VS xHarbour, Las diferencias verdaderas (Parte 13)

Indices negativos en el operador [ ] para acceder a los elementos de un arreglo por el final.

xHarbour soporta índices negativos en el operador [ ]. Se utiliza para acceder a los elementos por el final de la lista, por ejemplo: aVal[-1] tiene el mismo efecto que aVal[len(aVal)-1].

Por default el núcleo de Harbour no tiene incorporada dicha funcionalidad, sin embargo su API de POO es lo suficientemente robusta para permitir añadir dicha extensión sin tocar el núcleo aún a nivel .PRG. Está implementado en Harbour en XHB.LIB.

Este código puede ser compilado y ejecutado por ambos compiladores:
    #ifndef __XHARBOUR__
#include "xhb.ch" // add support for negative indexes in Harbour
#endif
proc main()
local s := "ABCDEF", a := {"1", "2", "3", "4", "5", "6"}
? s, "=>", s[1], s[2], s[3], s[4], s[5], s[6], "=>", ;
s[-1], s[-2], s[-3], s[-4], s[-5], s[-6]
? a[1], a[2], a[3], a[4], a[5], a[6], "=>", ;
a[-1], a[-2], a[-3], a[-4], a[-5], a[-6]
return
¡ Advertencia !: Vea la nota en el artículo anterior sobre los índices fuera de rango usados con el operador [] y los elementos en cadenas de caracteres.

Continuará....

viernes, noviembre 27, 2009

Harbour VS xHarbour, Las diferencias verdaderas (Parte 12)

Uso del operador [] para elementos en cadenas de caracteres (strings).

xHarbour soporta el uso del operador [] para acceder a cada elemento dentro de una cadena de caracteres. Harbour no lo hace por default, pero tiene un API de POO suficientemente robusto para permitir la introducción de dicha extensión sin tocar el código central, aún a nivel PRG. Esto se implementón en Harbour en la librería XHB.LIB.

Este código puede ser compilado y ejecutado por ambos compiladores:
      #ifndef __XHARBOUR__
#include "xhb.ch" // add xHarbour emulation to Harbour
#endif
proc main()
local s := "ABCDEFG"
? s, "=>", s[2], s[4], s[6]
s[2] := lower( s[2] )
s[4] := lower( s[4] )
s[6] := lower( s[6] )
?? " =>", s
return
¡Advertencia!: Existe una diferencia en la implementación anterior, introducida intencionalmente en Harbour. xHarbour nunca genera errores para índices incorrectos en el operador [] cuando es usado en cadenas de caracteres, si el índice es incorrecto, simplemente devuelve "", por ejemplo agregando esto al código anterior:
      ? ">" + s[0] + "<", ">" + s[1000] + "<"
Si el operador [ ] es usado por otro tipo de elementos se genera un RTE. Harbour genera RTE en todos los casos. Si alguien necesita compatibilidad estricta XHB, entonces deberá usar código para sobrecargar el operador[] para cadenas de caracteres en la XHB.LIB para sus propias preferencias, removiendo el RTE.

Continuará...

jueves, noviembre 26, 2009

Harbour VS xHarbour, Las diferencias verdaderas (Parte 11)

Macros Multivalor:

En los primeros días de Harbour se agregó un soporte básico para macros multivalor los cuales pueden ser evaluados como una lista de valores, por ejemplo:
      ? &("1,2,3")
Debería mostrar esto:
      1,  2,  3
La implementación de esta extensión no fue aceptada por muchos desarrolladores de Harbour y fue una de las principales causas del surgimiento del "fork" xHarbour.

En Harbour dicha funcionalidad fue removida posteriormente e implementada desde cero usando distintos algoritmos y estructuras internas. Ahora Harbour soporta macros multivalor en código como este:
      proc main()
local s1 := "'a', 'b', 'c'", s2 := "1,3", a
? &s1
a := { { "|", &s1, 'x', &s2, 'y' }, 'x', &s2 }
? "a[1] items:"
aeval( a[1], { |x,i| qout( i, x ) } )
? "a["+s2+"] =>", a[ &s2 ]
return
xHarbour, que heredó la implementación original, después de 6 años, aún no puede ejecutar correctamente el código anterior.

Continuará....