Blog sobre programación en VFP, Actualizado por Jorge Mota en Guatemala ;)



.Net & Desarrollo & Ideas & PHP 30 dAmerica/Chicago Junio dAmerica/Chicagol 2009 02:59 pm

Sobre MVC y CakePHP

,

Para los que han llegado a este sitio buscando información sobre CakePhp y MVC acá hay un buen tutorial para que puedan empezar.

Para los que no conocen qué es CakePhp, pues es un framework para PHP que implementa el paradigma MVC

Y si programan con asp.net quizá les interese ver http://www.asp.net/mvc

Saludos

,

Sin Categoría 15 dAmerica/Chicago Septiembre dAmerica/Chicagol 2008 11:04 pm

Configurando El entorno para el control de versiones con VFP y SubVersion (parte 3)

Bueno, después de mucho tiempo de inactividad, por fin he tenido tiempo de terminar de escribir esta serie de artículos para poder tener un control de versiones con VFP y SubVersion.

Como muchos que han probado llevar un control de versiones con VFP con productos como Visual Source Safe o Vault, sabrán que no hay una forma de saber que cambió entre cada versión de los archivos scx y vcx de vfp al ser binarios en lugar de texto como los prgs.

Pueden ver los 2 tutoriales anteriores

Instalando SubVersion para control de versiones con VFP (parte 1)
Configurando El entorno para el control de versiones con VFP y SubVersion (parte 2)

Y luego pueden descargar mi aplicación SCXML para poder llevar control de versiones de sus clases en vcx y formularios scx con vfp y subversion.

http://fox.desdeguate.com/scxml

Hasta la próxima.

Desarrollo & Ideas & Trucos 13 dAmerica/Chicago Febrero dAmerica/Chicagol 2008 02:02 pm

Como imprimir imágenes almacenadas en tablas sin usar campo general en los reportes (VFP 9)

, , , , , , , , ,

Bueno, hasta hace poco lo que hacáa al necesitar imprimir una imagen en un reporte era usar campo general para almacenarlas o sacarlas a un directorio temporal para así poder mandarlas a impresión.

Pero ahora con el campo BLOB en VFP9 podemos almacenar el contenido de una imagen y al mismo tiempo imprimirla en un reporte sin necesitar hacer conversión a un campo general.

Veamos un ejemplo

Create cursor qImagen (imagen blob)
append blank in qImagen
lcDir =FullPath(Curdir())
replace qImagen.imagen with filetostr(getfile([jpg;bmp;gif]))
cd (lcDir)
private oImg
oImg = newobject([image])
oImg.pictureVal = qImagen.imagen

Necesitamos también un reporte con un objeto Picture/OLE Bound establecido así:

Ahora corremos el reporte
report form "NuestroReporte" preview

Pero y que pasa si queremos imprimir imágenes que están almacenados en una tabla (en registros diferentes)?

Grabamos lo siguiente como GetImg.prg

*Function getImg
lParameters nId, cImgCont
oImg = newobj([image])
oImg.pictureval =cImgCont
return oImg

Creamos un reporte y le agregamos un objeto Picture/OLE Bound y le establecemos la propiedad así:
reporte_picture_val2.jpg

Ahora podemos probar la funcin en el reporte:

use in select([qImagen])
Create cursor qImagen (numero i,imagen blob)

append Blank in qImagen
append Blank in qImagen
append Blank in qImagen
append Blank in qImagen

lcDir =FullPath(Curdir())
lcFile = getfile([jpg;bmp;gif])
update qImagen set numero =recno(),imagen =filetostr(lcFile)
report form “MiReporte” preview

Bueno hasta la próxima!

, , , , , , , , ,

Sin Categoría 14 dAmerica/Chicago Octubre dAmerica/Chicagol 2007 10:36 am

Microsoft se burla de los usuarios de vfp ?

Pues he estado probando el vfp 9 con el sp2 ya instalado, y francamente el Splash Screen de esta versión de vfp me parece algo claramente ofensivo para los Ex clientes de vfp, la imagen pareciera que fue modificada usando Paint, únicamente tachando la parte donde decía SP1 y marcando sobre el ?1? una X.

SPlash VFP 9 Sp2

Para los que no logren verlo a la primera:


VFP Splash Screen

al editar la imagen en Fireworks, se nota claramente que la imagen fue chapuseada en un editor no profesional (bordes sin degrado, cuadros ?montados?, etc), de hecho se nota el rectángulo blanco sobre el fondo gris en donde dice SP2.

¿Acaso Microsoft no puede permitirse un diseñador en planilla que sepa editar imágenes correctamente?

En realidad los programadores VFP parece que NO le importamos a Microsoft, Descontinuan el producto, sacan un medio parche para que corra en Vista correctamente (en Vista home Basic no siempre se puede instalar el SP2), la aplicación Solution viene incompleta (ver el apartado que dice ?Sample Data?

En alguna carta del director de Vfp, recuerdo haber leído que Sedna agregaría algunos controles active X de Dbi-tech, al buscar en la ayuda no aparece ninguna referencia a DBI, ni a ningún control CT, ni siquiera se registran en la máquina.

Hay que ir a esta página en DBI Tech para poder instalarlos y usarlos:

http://www.dbi-tech.com/Special_Offers_SednaComponents.asp

Una vez instalado, nos pedirá que lo registremos en su sitio, a travez de una aplicación que los controles proveen (no los puedes usar hasta que los registres ), Además para poder registrar los controles necesitamos de una cuenta de correo que NO sea gratuita (cuentas @hotmail, @gmail, etc no sirven). Y la gente que no cuenta con un email que no sea gratuito, como se registrará ?

Activación Controles CT

El ejemplo de CTFrame no funciona (ocurre un error al querer cambiar la propiedad FillType del activeX, en tiempo de diseñoo y de ejecución), así que habrá que esperar si lo actualiza la gente de DBI, por que al debuggearlo provoca un C000005 en Vfp.

En fin, que en el archivo de ayuda no encontre lo que me interesaba, un primer vistazo a todo lo nuevo que trae, y en Solution es bastante difícil navegar entre lo que ya estaba y lo que fue agregado.

Al agregar un CursorAdapter a un reporte, no es posible ejecutar el builder para el mismo. En las formas sí que se puede ejecutar el builder.

Hasta el momento, éstos son mis primeros desagrados con Sedna

Me parece que Microsoft no está interesado en conservarnos como clientes a los usuarios de VFP, lo que me parece una pena, sobre todo por que mucha gente esperaba con mucha ansia el lanzamiento de sedna, y creo que jamás nadie se esperaba una actualización tan cutre como la que Microsoft nos proporciono para darnos el tiro de gracia y enterrarnos.

Desarrollo 14 dAmerica/Chicago Octubre dAmerica/Chicagol 2007 02:05 am

Service Pack 2 de VFP 9 Liberado!

, , , , , , , ,

Pues sí, recien Microsoft ha liberado el Service Pack 2 (Sedna) de Microsoft Visual Foxpro 9, y ya está disponible para su descarga.

Para ver los bugs que corrige pueden dirigirse a esta página.

Por lo pronto el servidor de Microsoft está saturadísimo y estoy teniendo bastantes problemas para bajarlo, quizá en el resto de la madrugada se mejora la cosa, en cuanto le pueda dar una buena probada a esto comentare que tal se ve.

, , , , , , , ,

Desarrollo 13 dAmerica/Chicago Septiembre dAmerica/Chicagol 2007 10:01 am

11111111: ¡Feliz Día del programador! | Microsiervos (Ordenadores)

Pues eso, hoy es el día 256 del año, así que féliz día del programador!!!

En Microsiervos lo explican mejor:
11111111: ¡Feliz Día del programador! | Microsiervos (Ordenadores)

En palabras de StrGT

Hoy es el día del programador, el día 256 del año, felicidades mis amigos-monos-amaestrados.

Creo que mejor no podría estar.

Página oficial del día no oficial: http://www.programmerday.info/

Hasta la próxima.

Tags: , , ,

Desarrollo & Ideas 27 dAmerica/Chicago Agosto dAmerica/Chicagol 2007 02:30 am

Configurando El entorno para el control de versiones con VFP y SubVersion (parte 2)

, , , , , , , , , , , , , , , ,

Bueno, en esta parte del tutorial vamos a configurar algunas cosas de nuestro proyecto para poder importarlo en nuestro Depósito (repository) de SubVersion.

Cabe mencionar que la primera parte es configurar TortoiseSVN para evitar que incluya archivos que no querramos llevar control de versiones (archivos propios de cada desarrollador que no van al ejecutable, archivos de configuración de cada estación, archivos .fxp, archivos de texto, archivos dbf, cdx, fpt, dbc, etc)

Así que vamos a una carpeta en el explorador de Windows, clic derecho / TortoiseSVN / Settings


Opción Menú para ingresar a opciones de TortoiseSVN

En la ventana que aparecerá debemos configurar las 2 opciones que están señaladas a continuación:

Ventana de opciones de TortoiseSVN

  • Global Ignore pattern:
  • Acá debemos indicar las extensiones de los archivos queremos exclúir, tenga en cuenta que es Case Sensitive por lo que quizá quiera agregar las extensiones en la forma:
    *.Fxp, *.fxp, *.FXP
    o bien indicar una exclusión así:
    *.[Ff][Xx][Pp]
    También puede indicar que quiere exclúir un directorio completo usando una cadena como ésta:
    */Data, Datos/*, Puede referise a la ayuda para más opciones de exclusión :).

  • Use “_svn” instead “.svn” directories
  • Es especialmente util cuando pensemos usar SubVersion con Visual Studio también, debido a que el editor de .Net tiene problemas con los folders que empiezan por un punto (.svn), se debe tener en cuenta que sí un directorio ya fué versionado con TortoiseSVN sin marcar esta opción y luego la selecciona deberá versionar nuevamente, para que lo reconozca.

Si nos conectamos a traves de un proxy al servidor de SubVersion, necesitaremos ir al apartado Network a configurarlo. Igualmente si ya disponemos de algún software para comparar archivos como WinMerge o DiffDoc deberá ir a configurarlo al apartado External Programs /Diff Viewer , sí deséa ver algunos otros programas para ver las diferencias entre las versiones puede darle un vistazo a este listado.

Esta segunda parte ha sido poco, pero conforme tengo tiempo he ido escribiendola, esperen pronto la segunda parte :)

, , , , , , , , , , , , , , , ,

Desarrollo & Ideas 18 dAmerica/Chicago Agosto dAmerica/Chicagol 2007 01:22 am

Instalando SubVersion para control de versiones con VFP (parte 1)

, , , , , , , , , ,

Bueno, hasta hace poco yo estuve usando SourceGear para el control de versiones de mis proyectos, pero debido al problema por todos conocido que los formularios y clases se almacenan realmente en archivos DBF (el control de versiones los considera binarios) es prácticamente imposible que 2 personas trabajen en la misma forma/clase y luego unir los cambios en un solo archivo y que este sea un archivo válido para vfp.

Ahora debido al presupuesto, estoy utilizando el control de versiones SubVersion, pero lastimosamente no he encontrado casi ninguna buena documentación de uso en español, por no decir que no existe prácticamente nada en español que enseñe a implementarlo con VFP.

En este primer artículo, voy a mostrar como instalar SubVersion y también TortoiseSVN para empezar.

La mejor manera de instalar SVN, configurarlo como servicio, Crear un “Depósito” inicial (Repository) e instalar TortoiseSVN, es usando el instalador de http://svn1clicksetup.tigris.org/ ya que nos hará todo el trabajo.

Para los que quieran instalar por aparte todo, acá les dejo los links de descarga:

Debido a que el instalador svn1clickSetup no necesita mucha información intentare acá explicar los pasos necesarios para instalarlos por separado:

Una vez que tengamos el paquete denominado svn-X.X.X-setup.exe (en mi caso 1.4.4) procedemos a ejecutarlo y a seguir las instrucciones en pantalla. Debemos recordar donde lo instalamos en mi caso C:\Archivos de programa\SubVersion.

Instalamos TortoiseSVN, y reiniciamos la máquina en caso nos lo solicite.

Una vez que reiniciamos si es que lo pidió, abrimos una ventana del explorador de windows, y nos dirigimos a la unidad en que querramos mantener la Base de datos de SubVersion, por fácilidad yo prefiero ponerlo en el C: en la raíz, bajo el nombre de SVNCode (procuren no usar espacios en el nombre ni caracteres raros :P ), así que todo lo que hace falta hacer es crear dicho directorio para que quede así:

C:\SvnCode

Damos clic derecho sobre el folder y en la nueva opción que dice “TortoiseSvn” nos posicionamos para seleccionar en el submenú la opción “Create Repository Here…”

Creando el Depósito

Luego nos preguntará, el tipo de base de datos que deséamos utilizar para el depósito, la recomendación general es que utilizemos el tipo Native Filesystem (FSFS):

Tipo de datos para el depósito

Una vez que selecciones el tipo de datos a usar, damos clic a ok y nos avisará que el depósito fue creado exitósamente :) a menos claro que no dispongamos de permisos sobre esa carpeta o espacio ;) (o que la carpeta no se encuentre vacía antes de crear el depósito allí).

Al exáminar la carpeta veremos que ha creado varias subcarpetas

  • Dav
  • Locks
  • Conf
  • Db
  • Hooks

También un Readme.txt que conviene dejar allí, en caso que alguien más use esa computadora y quiera averiguar que es esa carpeta para evitar que la borre, también en la carpeta hooks, encontrará varios archivos .tmpl que quizá le guste revisar y leer al respecto cómo usarlos y configurarlos (estos pueden estar escritos en python o en perl)

El siguiente paso, será configurar nuestro depósito, abrimos la carpeta Conf y veremos 3 archivos:

  • svnserve.conf
  • passwd
  • authz

Los 2 primeros archivos serán los únicos que necesitaremos configurar por el momento (a menos que quieran configurar apache y el módulo webdav, que escapa al objetivo de este artículo ya que no uso apache)

SvnServe.conf:
Debemos agregar 2 líneas, una para los usuarios que no inicien sesión anon-access) y otra para los usuarios que se auntentícaron (auth-access), el valor Default es darle lectura a los no autentícados y escritura para los otros, yo recomiendo no dar acceso a nada (none) para los no autentícados sí el acceso se hará atravéz de internet. por lo pronto vamos a agregar a nuestro archivo Svnserve.conf las 2 siguientes líneas, en el apartado [general] y antes de [sasl]:

anon-access = none
auth-access = write

Passwd
Acá vamos a agregar tantas líneas como usuarios querramos que tengan acceso al depósito, en mi caso agregare 2:

dev1=pwd1630
dev2=1675Prq

Grabamos los cambios y nos toca decidir sí queremos que SubVersion este configurado como servicio, o por el contrario si lo que queremos es arrancar el programa cada vez que lo vayamos a necesitar (la máquina no solo sirve para desarrollo/servidor/o bien queremos tener control de cuando este disponible/etc).

En el caso que querramos controlar cuando arranca SubVersion lo mejor será usar un archivo.Bat con algo como esto:
cd "c:\archivos de programa\programacion\subversion\bin"
svnserve.exe --service -rC:\svncode

Recuerde que debe editar las rutas para que coincidan con su instalación y el depósito que creó con tortoisesvn. Cada vez que necesite iniciar SubVersion puede ejecutar ese archivo.bat.

Por el contrario, si lo que queremos es que este disponible al iniciar la máquina (aún cuando no hayamos iniciado sesión aún), debemos configurarlo como un servicio, así que arrancamos la consola de comandos (Inicio /Ejecutar / cmd.exe) y escribimos lo siguiente (todo en una línea)

sc create svn binpath= "\"c:\archivos de programa\Subversion\bin\svnserve.exe\" --service -rC:\svncode" displayname= "Servidor de SubVersion" depend= Tcpip start= auto

Deben tener en cuenta el espacio que se encuentra después de cada signo de igual (= ) ya que es obligatorio escribirlo así, también tengan en cuenta la ruta, quizá necesite ajustarla para que concuerde con su instalación o su depósito.

Sí todo ha ído bien nos deberá mostrar un texto como este

[SC] CreateService SUCCESS

Delo contrario nos dará un error informandonos de la sintáxis, tendremos que digitar de nuevo y poner atención a que quede igual al texto de arriba :).

Una vez que tengamos creado el servicio, debemos iniciarlo, desde la consola de comandos:

sc start svn

Que a su vez devolverá algo como esto:

SERVICE_NAME: svn
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 3800
        FLAGS              :

Y bueno ya tenemos Svn configurado instalado, configurado como servicio, y un Depósito creado, listo para ser usado. Pronto la segunda parte del control de versiones en el que veremos como integrar nuestros proyectos.

Para los que desean tener SubVersion en un servidor pero no se animan a instalarlo sin probarlo antes, podrían probar esta máquina virtual con vmware que corre en un ubuntu. http://www.young-technologies.com/Software/Subversion-Virtual-Machine/ (en inglés), la ventaja de correrlo así es que podríamos migrar a un servidor posteriormente, y también el hecho de cargar el servicio solo cuando lo necesitemos en caso que solo sea 1 programador en el proyecto :).

Hasta la próxima.

Links: SubVersion (sitio oficial)
TortoiseSVN (sitio oficial)
Referencias: Setting up and running Subversion and Tortoise SVN
with Visual Studio and .NET

CVS, SubVersion and Visual FoxPro

, , , , , , , , , ,

Sin Categoría 10 dAmerica/Chicago Agosto dAmerica/Chicagol 2007 11:55 am

Nuevo Concurso de Microsoft (válido solo este fin de semana)

, , , , , , , ,

Pues sí te gustaría tener un juego original de Microsoft (Age of Empires - Halo - Shadowrun - Fable) y que solo por escribir un código capaz de generar un documento OpenXML (el nuevo formato de Microsoft te lo regalen (sin rifas ni sorteos) este es tu fín de semana de suerte, la fecha límite para enviar tu código es 8 AM del día lunes 13 de agosto del 2007 ;)

El código debes escribirlo en .Net y la idea es que generes desde cero, el XML de un documento OpenXML con tus datos ;)

Más información y las bases del concurso en el blog de Ricardo Jímenez

http://blogs.msdn.com/ricardoj/archive/2007/08/10/age-of-empires-halo-shadowrun-fable-concurso-de-fin-de-semana.aspx

Que estás esperando para empezar a escribir el código!!!

, , , , , , , ,

API & Desarrollo & Ideas & Trucos 08 dAmerica/Chicago Agosto dAmerica/Chicagol 2007 01:43 pm

Obteniendo el nombre corto de una ruta o archivo

, , , , , , , ,

Hace poco me tope con la necesidad de saber la ruta corta de un archivo (o ruta DOS), al decir ruta corta me refiero a la ruta que manejaba el DOS antiguo, que a diferencia de windows cada archivo solo puede tener 8 caracteres en el nombre del archivo y 3 en la extensión. es decir

C:\Mis Archivos\Juan Pérez y Pérez.xls una aplicación DOS lo encontraría así: C:\Misarc~1\JUANPR~1.XLS.

Esta Función permite obtener ese nombre corto:

Function GetDosFileName(lcfile As String) As String
**http://fox.desdeguate.com/?p=77
**Autor: Jorge Mota
**Devuelve la ruta corta (DOS) de una ruta o un archivo.
Declare Long GetShortPathName In "kernel32" String lpszLongPath,;
String lpszShortPath, Long lBuffer
lcFileName=Replicate(Chr(0),254)
lnTotal=GetShortPathName(lcfile, @lcFileName, Len(lcFileName))
Return Substr(lcFileName,1,lnTotal)
Endfunc

Ejemplos de uso:
Archivo:
?lcfile = GetDosFileName([C:\Juan Pérez y Pérez.xls])
Directorio:
lcDir = GetDosFileName([C:\Archivos de Programa\])

Retornará una cadena vacía si el directorio o archivo no existe.

Hasta la próxima.

, , , , , , , ,

Desarrollo & Ideas & Trucos 29 dAmerica/Chicago Julio dAmerica/Chicagol 2007 01:01 pm

Obteniendo la hora desde un servidor de Tiempo en internet con vfp (iTime)

, , , , , , ,

Hace algún tiempo en www.Portalfox.com se publicaron algunos artículos para poder obtener la hora de nuestro servidor, pero en algunos casos, no nos es posible tener acceso al servidor, ya que no usamos carpetas compartidas (shared) así que no podemos hacer el trabajo por medio de esos métodos.

Y como hace algún tiempo instale linux, para pruebas de servidor de mySql, en una máquina y me dí cuenta que se puede configurar como un servidor de hora, (tengo entendido que en Windows, podemos lograrlo según Microsoft para windows 2003 y para XP también pero no he tenido tiempo de probarlo), bueno el caso es que teniendo un servidor de hora me dí cuenta que podía sincronizar las estaciones XP desde el apartado que pone Hora de internet /Internet zone, al entrar a Panel de control (Control Panel) y seleccionar Hora y Fecha (date and time).

Así que me puse a investigar, de que manera podíamos obtener la hora desde un servidor de este tipo desde vfp, según el RFC 868 el servidor debe devolver un número de 32 bits, el cual debemos sumarle en segundos a la fecha 01-01-1900. a la Fecha y Hora que obtengamos de allí, debemos restarle/sumarle la diferencia horaria según en la zona que nos encontremos.

Seguir leyendo »

, , , , , , ,

Desarrollo 13 dAmerica/Chicago Julio dAmerica/Chicagol 2007 03:00 pm

Concurso de Microsoft

, , , , ,

Pues recientemente recibí un correo de Microsoft invitandome a participar en el Concurso Expresión ( http://www.microsoft.com/centroamerica/msexpresion/default.aspx ) para Centro América.

Me llama la atención especialmente que puedes participar, aún cuando lo que uses para diseñar no sea Microsoft, digamos podrías hacer tu diseño con DreamWeaver, Nuv, o incluso el notepad ;) para realizar la faéna.

Los premios se ven bastante bien, tales como un monitor de 24 pulgadas, por ejemplo este es el premio al 1er lugar de Expression - Diseño Web:

  • Trofeo al Primer Lugar
  • Microsoft Expression Studio
  • Microsoft Visual Studio .NET 2005 Professional
  • Microsoft Windows Vista Ultimate
  • Monitor LCD Widescreen DELL 24”
  • Publicación en la Edición Especial de la Revista Colectiva

Las bases del concurso las encuentran por acá ( http://www.microsoft.com/centroamerica/msexpresion/terminos-es.aspx )

También tienen más información en el blog de Ricardo Jimenez

Tienes hasta el 15 de septiembre para enviar tu diseño, y si no tienes posibilidad de publicarlo en el web, puedes enviarlo en un zip.

Si alguien se anima a participar, que avise ;)

Hablando de Expressión, alguien conoce algún sitio de cursos o algo para iniciar, está muy bien el soft ;)

, , , , ,

Variado 27 dAmerica/Chicago Junio dAmerica/Chicagol 2007 08:31 am

Descarga de software 1 nuevo cada día…

,

Pues navegando por la red me encontre con este sitio: http://www.giveawayoftheday.com en el que nos permiten descargar 1 programa (+ 1 juego de bono) al día, con la única limitante que nada más podrás instalarlo ese día, y el software no tendrá soporte técnico ni derecho a upgrades (En algunos), todo el soft que puedes bajar es comercial, y está sirviendo para que muchos puedan darse a conocer.

Sí te pones en contacto con ellos, puedes enviarle tu soft, y así darte a conocer al mundo.

Una interesante forma de negocio.

,

Next Page »