montar un tree desde una DBF con FWH

En el Puchero se usa una clasificación arborescente denominada clasificación francesa y para jugar con ella la monto en un tree. Como he recibido varios correos preguntando la manera de montar el tree desde la dbf, aqui lo explico un poco.

Lo primero es montar una estructura de datos que permita ser representando en forma de arbol. Un arbol no es más que una jerarquía con varios niveles, y lo que tengo en mi dbf son varios campos -hasta 5 – para indicar en que rama del arbol estoy. Los campos se llaman FrN1, FrN2, FrN3, FrN4 y Frn5 de manera que el arbol lo veo así:

(1,0,0,0,0)
···(1,1,0,0,0)
······(1,1,1,0,0)
······(1,1,2,0,0)
···(1,2,0,0,0)

Una vez esto claro el arbol se monta así:

FUNCTION FrTreeLoad( oTree )
LOCAL oDatabase
LOCAL nStep
LOCAL oLink
LOCAL oLink1, oLink2, oLink3, oLink4, oLink5
LOCAL N1	:= 0
LOCAL N2	:= 0
LOCAL N3	:= 0
LOCAL N4	:= 0
oLink := oTree:GetRoot()
SELECT FR
FR->(DbGoTop())
DO WHILE ! FR->(EOF())
···IF FR->FrN2 == 0
······oLink1 := oLink:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink1:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
···ELSEIF FR->FrN3 == 0
······oLink2 := olink1:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink2:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
···ELSEIF FR->FrN4 == 0
······oLink3 := olink2:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink3:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
···ELSEIF FR->FrN5 == 0
······oLink4 := olink3:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink4:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
···ELSE
······oLink5:= oLink4:AddLastChild(FR->FrTipo,IIF(FR->FrHoja,1,2),IIF(FR->FrHoja,1,2),.t.)
······oLink5:Cargo := Str(FR->Frn1,2)+Str(FR->Frn2,2)+Str(FR->Frn3,2)+Str(FR->Frn4,2)+Str(FR->Frn5,2)
ENDIF
FR->(DbSkip())
ENDDO
oTree:UpdateTV()
oTree:SetFocus()
RETURN NIL

Lo que hago es recorrer el DBF que tengo ordenado por la concatenación de los 5 campos y cuando cambio de nivel añado una rama al nivel inferior.

El resultado:

sobre DSay y SayRef o agradecimiento a Ramón Avendaño

Uno de los efectos que siempre me han gustado en los formularios de ‘acerca de’ de los programas es el efecto que yo llamo starwars. Consiste en un texto que se va deslizando de abajo arriba del formulario para desaparecer y luego volver a salir por abajo.

Uno de los mejores creadores de controles que ha habido para Fivewin – lo pongo en pasado porque hace años que no se nada de este señor – ha sido Ramón Avendaño. Una de sus clases – DSay o Dynamic Say – sirve para hacer precisamente esto, mover un texto por un área de un formulario. Otra de sus clases – SayRef – sirve para poner un hiperenlace a un texto, de manera que al pinchar en él nos enlace con un sitio web o envie un correo.

Dejo un fichero con un ejemplo de lo que se puede hacer con esta clase. Dentro del fichero va el ejecutable que muestra el efecto, así como los fuentes de las clases DSay y SayRef de Ramón. El ejecutable usa dos BMP que están en ficheros separados, por lo que hace falta descomprimir el ZIP para que el ejecutable se vea bien.

Las clases se pueden encontrar por internet con fuentes y ejemplos, y no he tenido que retocar nada para hacerlas correr con FWH. El ejemplo está compilado con el compilador comercial de xHarbour, pero se puede hacer facilmente con la version open source.

actualización de programas y reestiling del logo

Estos dias estoy terminando la actualización de la web de alanit con la versión 6.10 de Cuaderno de Bitácora y la versión 3.12 de Colossus.

La versión 6.10 de Cuaderno de Bitácora trae el nuevo sistema de registro que ya no es ligado a máquina e incorpora el fichero de ayuda de la aplicación. La versión 3.12 de Colossus funciona bajo Windows98. Resulta que estaba usando una versión del control TaskBox de Canalfive que sólo funciona en WindowsXP y que dejaba el programa colgado en Windows98 y Windows2000. El problema lo he solucionado usando una versión anterior del control que funciona perfectamente en todas las versiones de Windows.

Con estas actualizaciones tenemos los tres programas terminados con sus correspondientes ayudas y con un sistema de registro no ligado a máquina. Ahora mi intención es adherirme al programa de colaboración de Softonic para vender los programas a través de ellos. Ya contaré que tal esta experiencia.

Una última modificación en la web ha sido un reestiling del logo de alanit. He pasado en el logo de un tipo de letra Trebuchet a Gadget y creo que le da más personalidad al logo. Este es el viejo:

y este el nuevo:

¿ Que os parece el cambio ?

corrigiendo errores III

error #3: Poner unos foros en la web sin integrarlos correctamente.

Cuando montamos lanueva web pensamos en poner unos foros para los usuarios. Estuve viendo sistemas de foros y decidí usar los foros de phpBB que es un sistema muy conocido y extendido. El problema de este foro es que es muy potente pero al mismo tiempo muy complejo, y me conformé con pegarlo a la web, sin integrarlo correctamente. El caso es que cuando entrabas en los foros parecía como que salias de la web para ir a otro sitio.

Mal hecho. Si quieres ser profesional tienes que parecer profesional.

Ahora he estado modificando un foro basado en el de JoS que encontré en la web de John’s adventures para integrarlo correctamente en la web. Podeis probarlos desde la nueva página de foros de alanit. Son más sencillos que los de phpBB pero están perfectamente integrados en la web.

corrigiendo errores II

error #2: Usar registro ligado a máquina y complicar el proceso de registro del programa.

Otro error que cometí fue complicar el proceso de registro. A finales de verano pasado supe que las algunas versiones de mis programas se podian descargar en alguna red P2P y, la verdad es que no me sentó nada bien. Decidí que las nuevas versiones llevarían registro ligado a máquina, esto es el programa generaría una clave de registro en función del ordenador donde estuviera instalado el programa y en función de esta clave habría otra que yo enviaría. El resultado sería que si el usuario quisiera instalar el programa en otro ordenador me tuviera que pedir una nueva clave de activación.

Mal, mal, mal. Esta manera de proceder es un error garrafal. El caso es que ya puse un post sobre el tema en este mismo blog, pero me pudo más el enfado de ver los programas circulando sin control y cedí a la tentación de ponerme el traje de policia. Ahora ya está corregido y en breve lanzaremos unas versiones nuevas que llevan un sistema de registro tradicional por clave que ya no es ligada a máquina.

El usar un modelo de registro ligado a máquina es malo por dos cosas: uno porque el usuario realmente no tiene una licencia de uso del programa, sino una licencia de uso del programa en un determinado ordenador y si cambia de equipo necesitará una nueva clave. Esto crea una inseguridad clara en los usuarios y muchos potenciales usuarios nunca registrarán el programa. En segundo lugar usar un registro ligado a máquina complica el proceso de registro en tanto que en el momento de registrar el programa el usuario tiene que enviar una clave generada con el programa en el ordenador donde lo va a usar. Mucha gente prueba un programa en un ordenador y luego lo va a querer usar en otro distinto, o quiere comprar un programa para un amigo o familiar, o lo que sea. Lo que está claro es que un registro no ligado a máquina es más sencillo. Como experiencia puedo decir que el número de actualizaciones de las versiones que pusimos a la venta en noviembre han sido la tercera parte de lo que yo esperaba, y estoy con
vencido de que mucha culpa la tiene el modelo de registro.

Esta claro que con un registro por número de serie, un usuario puede registrar una licencia y usarla en varios ordenadores, pero realmente creo que los desarrolladores debemos confiar en nuestros usuarios ya que son los que nos permiten seguir en el negocio. Tal como está la cosa con las redes P2P, registrar un programa es más cuestión de voluntad que de otra cosa, y debemos hacer todo lo posible porque el registro de nuestros programas sea lo más sencillo posible.

corrigiendo errores I

Con el lanzamiento de las versiones 6.00 y 4.00 de Cuaderno de Bitácora y el Puchero el pasado mes de Noviembre cometí una serie de errores bastante importantes. En una serie de post los iré explicando, diciendo que hice, qué hice mal y porqué.

error #1: Poner un programa a la venta sin tener el fichero de ayuda terminado.

Después de varios meses de desarrollo, y tras haber pasado por una etapa de prueba con nuestros betatesters decidimos poner a la venta las nuevas versiones de los programas. Preparamos la nueva web y lanzamos los programas, dejandonos los ficheros de ayuda sin hacer y pensando que en un mes los tendriamos listos. Han pasado casi 6 meses y esta semana tendremos listos por fin los dichosos ficheros de ayuda. Al no tener los ficheros de ayuda no hemos querido enviar los programas a revistas ni a sitios de descargas pues pensamos que los programas no están completos.

Además, cuando liberas un programa siempre llegas con la lengua fuera y luego te da un bajón de ritmo de trabajo. Aunque al programa le falte la ayuda, inconscientemente piensas que el programa está terminado cuando no lo está y ralentizas un poco el ritmo. Para postre tras anunciar la nueva versión a los usuarios registrados siempre se produce una avalancha de correos que te quita mucho tiempo de desarrollo pues lo tienes que decicar a contestar estos correos.

Cuando se hace desarrollo a ratos como hacemos Jaime y yo, los plazos son incalculables. No sabes si un dia vas a tener 2 horas o ninguna, pero lo peor es que las planificaciones salen al revés. Cuando se acerca Navidad o Semana Santa piensas que vas a tener más tiempo para programar, porque seguro que cae algún dia de vacaciones. Sin embargo es al revés porque la familia, los amigos o cualquier otra actividad absorben tu tiempo libre y en vez de tener más tiempo tienes menos.

planeta código

Supongo que a estas alturas todos estareis enterados. Juanjo ha creado un agregador de feeds basado en web de blogs de programación y le ha llamado PlanetaCódigo. La idea es muy buena, y permite de un vistazo leer un montón de blogs de programación.

Tengo un amigo que dice que nunca diga que soy informático, sino que diga que tengo un puesto de fruta en un mercado. Tiene razón. Si tu le sueltas a alguien que la idea de un agregador de feeds basado en web es muy buena, te pueden mirar con cara muy rara.

colossus 3.10

Como lo prometido es deuda, los lectores del blog vais a ser los primeros en probar Colossus. Estas son las principales características del programa:

  • Para cada servicio que requiera de contraseña se almacena el nombre del servicio, usuario, contraseña y tipo de servicio. Los tipos de servicio son: sitio web, proveedor de acceso o ISP, archivo y otros.
  • El programa permite generar una contraseña de modo aleatorio especificando el número de caracteres que debe tener la contraseña.
  • El programa utiliza una semilla para encriptar los datos cuando se sale del programa. Esta semilla se puede modificar de manera que cada usuario tendrá protegidos sus datos frente a posibles intromisiones.
  • Cuando almacenes una contraseña de un sitio web el programa te permitirá almacenar una dirección del sitio web, una dirección de FPT y una dirección de e-mail de contacto. Podrás acceder al sitio web y enviar un correo a la dirección especificada con un sólo click desde el formulario de mantenimiento de claves.
  • Cuando almacenes una contraseña de un proveedor de acceso a internet o ISP el programa le permitirá almacenar el DNS primario y secundario, los nombres de los servidores de correo entrante y saliente, el telefono del nodo a llamar y el telefono de soporte.
  • Cuando almacenes una contraseña de un archivo podrás seleccionar el archivo mediante el dialogo estandar de Windows para búsqueda de archivos. Si el tipo del archivo tiene una asociación con una aplicación Windows podrá acceder al mismo con un click desde la ventana principal de la aplicación.
  • El programa almacena la información encriptada, de manera que únicamente se pueda acceder a los datos almacenados desde el programa. El acceso a los datos se puede proteger con una contraseña.
  • Se puede encriptar el contenido del fichero de datos sin salir del programa. Esto es especialmete util cuando deseamos abandonar momentaneamente el PC. Al desencriptar de nuevo los datos el programa solicitará la contraseña de entrada al mismo.
  • El programa permite copiar información de usuarios y contraseñas al portapapeles con un click de ratón. Tambien permite examinra el contenido del portapapeles.
  • El programa permite acceder a sitios web mediante ‘usuario:contraseña@url’ aceptado en muchos sitios web. Tambien permite acceder a archivos cuya extensión tenga una asociación con Windows.
  • Fichero de materias para separar los distintos tipos de contraseñas.
  • Generador de listados para imprimir cualquier listado deseado.
  • Colossus se distribuye bajo licencia Creative Commons 2.0. Eres libre de copiar, distribuir y comunicar públicamente el programa bajo las condiciones siguientes:
    • Reconocimiento: debes reconocer y citar al autor original.
    • No comercial: no puedes usar el programa para fines comerciales.
    • Sin obras derivadas. No puedes alterar, transformar o generar un programa derivado a partir de este.
  • Colossus utiliza algunas imágenes de la serie NUVOLA de David Vignoni.
  • cls3.jpg

    Tienes el programa para descargar aqui. Espero tus comentarios.

resultados del primer XAAC

Dear xHarbour friend,

We are very happy to announce the results of the first «xHarbour Annual Application Competition».

First and second places are shared between:

* «DBFView», by Grigory Filatov (MiniGUI application).
* «el Puchero», by Jose Luis Sanchez Navarro (FWH application).

Third place winner is:

* «EasyReport» by Timm Sodtalbers (FWH application).

Congratulation to the prize winners, and to ALL competitors, all of you deserves the gratitude of the xHarbour community – Thank You!

Delivery of the prizes, as well as the XAAC-2004 T-Shirts has just started, and should be completed over the next few days.

Again, congratulations to all of us. We are very proud of the participation level, the quality of the competing products, and of course the amazing achievements and creativity of the winning applications. 🙂

Best Regards,

Patrick Mast
xHarbour.com Inc.

al principio… no tienes nada

El post de Ian Landsman Starting a micro-isv… in the beginning there was nothing contiene algunos aspectos a destacar para cualquiera que quiera empezar en esto de ser un microvendedor de software.

Lo primero que tienes que hacer es leer a la gente que sabe del tema. Ian recomienda a Joel Spolsky, Eric Sink, Brent Simmons y Dave Winner. Tambien recomienda leer a Seth Godin.

Luego habla de la elección del software a realizar, y se plantea hacer algo que conoce – en su caso un software de helpdesk – por dos motivos:

  • Es un segmento que ya conoce
  • No quiere crear una nueva categoría de software porque piensa que es muy costoso convencer a alguien de que use un producto del que no tiene ninguna referencia. Luego en los comentarios Ian añade que es más fácil innovar en una categoría existente que crear una nueva categoría de software.

Yo sinceramente estoy en desacuerdo con este último punto. Creo que si alguien es capaz de crear un buen software que es realmente innovador, sin duda triunfará. Me vienen a la cabeza casos como ICQ o Napster. Es cierto que luego puedes perder tu mercado por temas de marketing o de que una gran empresa entre en tu segmento, pero si yo tuviera una idea realmente innovadora iría a por ella sin dudarlo.

En el post recomienda encarecidamente crear un blog para comunicar todo aquello que haces a tus clientes potenciales y para recibir críticas y sugerencias. Y ya al final del post hay una afirmación lapidaria cuando habla de la imagen de marca: ‘si no pareces profesional no eres profesional’. En esto estoy totalmente de acuerdo, por muy bueno que sea tu software, si tu web tiene un aspecto de aficionado, con un logo mediocre y un aspecto mediocre, es difícil que un visitante se sienta atraido por tu software y se lo descargue tan siquiera para probarlo. Creo que una página bien construida, con unos buenos gráficos son una invitación a probar tu software.

alanit
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.