Archivo MensualAgosto 2007
Desarrollo & Ideas 27 Ago 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

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

- Global Ignore pattern:
- Use “_svn” instead “.svn” directories
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 :).
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 Ago 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:
- SVN http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=74
- TortoiseSVN http://tortoisesvn.net/downloads
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
), 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…”

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):

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:
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 Ago 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
Que estás esperando para empezar a escribir el código!!!
.Net, bases del concurso, fable, fín de semana, halo, microsoft age of empires, msdn, openxml, shadowrun Sin Categoría
Desarrollo & API & Ideas & Trucos 08 Ago 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.
API, archivos de programa, Desarrollo, fox, Ideas, kernel32, la ruta, ruta corta archivo, Trucos vfp

