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.