Mostrando entradas con la etiqueta PlasticSCM. Mostrar todas las entradas
Mostrando entradas con la etiqueta PlasticSCM. Mostrar todas las entradas

viernes, agosto 22, 2014

Nueva versión v2.4.26 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.31)

Está liberada la versión v2.4.26 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

  • Se ha mejorado el control de algunos errores y los mensajes mostrados
  • Se ha agregado el conteo de archivos procesados en la vista de Cambios Pendientes con los script específicos para esta vista



Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes del proyecto FoxBin2Prg y el historial de ambios, están en CodePlex, en este link.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

domingo, agosto 17, 2014

Cómo configurar las Herramientas de VFP 9 en Plastic


Por: Fernando D. Bozzo

Aunque esto está en el README.txt, lo transcribo aquí por comodidad.

Nota 1: No confundir estas herramientas (scripts) específicos para Plastic, con los scripts que vienen con el proyecto FoxBin2Prg y que son para el explorador de archivos de Windows, no para Plastic!


Nota 2: Donde diga <Path-a-FoxBin2Prg> o <Path-a-las-herramientas> poner el path donde copiaron las Herramientas VFP 9 para Plastic y FoxBin2Prg (es el mismo directorio para ambas)

Nota 3: Ojo que la configuración para Diff no es la misma que para Merge!


Antes de comenzar: Descarga de las Herramientas VFP 9 para Plastic


Configuración de DIFF en PlasticSCM


  • Clickear en el icono de Preferencias de PlasticSCM
  • Seleccionar "Herramientas Diff" y "agregar" esto:
    • Herramienta Diff externa:
      "<path-a-las-herramientas>\foxpro_plasticscm_dm.exe" "'DIFF' '@sourcefile' '@destinationfile' '@sourcesymbolic' '@destinationsymbolic'"
    • Patrón:
      .pjx;.vcx;.scx;.frx;.lbx;.mnx;.dbf;.dbc     (¡usar misúsculas!)
  • Clickear OK
  • Mover la extension agregada al inicio de la lista, para priorizarla



Configuración de MERGE en PlasticSCM


  • Clickear en el icono de Preferencias de PlasticSCM
  • Seleccionar "Herramientas Merge" y "agregar" esto:
    • Herramienta Merge externa:
      "<path-a-las-herramientas>\foxpro_plasticscm_dm.exe" "'PRESERVE_WS' '@sourcefile'"
    • Patrón:
      .pjx;.pjt;.vcx;.vct;.scx;.sct;.frx;.frt;.lbx;.lbt;.mnx;.mnt;.dbf;.fpt;.cdx;.dbc;.dcx;.dct     (¡usar misúsculas!)
  • Clickear OK
  • Mover la extension agregada al inicio de la lista, para priorizarla




Configuración de Custom "Open with..." en PlasticSCM



  • Click en el icono de Preferencias de PlasticSCM
  • Seleccionar "Abrir con... personalizado"

  • Click en "Añadir..." y completar los campos:
    • Nombre a mostrar:
      (VFP) Cambios Pendientes: Regenerar Binarios
    • Ruta completa del ejecutable:
      <Path-a-FoxBin2Prg>\PlasticSCM_VFP9_Pending_Changes_Regenerate_Binary.vbs
  • Click en Aceptar


  • Click en "Añadir..." y completar los campos:
    • Nombre a mostrar:
      (VFP) Cambios Pendientes: Regenerar versiones Texto
    • Ruta completa del ejecutable:
      <Path-a-FoxBin2Prg>\PlasticSCM_VFP9_Pending_Changes_Regenerate_Text.vbs
  • Click en Aceptar


  • Click en "Añadir..." y completar los campos:
    • Nombre a mostrar:
      (VFP) FoxBin2Prg
    • Ruta completa del ejecutable:
      <Path-a-FoxBin2Prg>\PlasticSCM_VFP9_FoxBin2Prg.vbs
  • Click en Aceptar


  • Click en "Añadir..." y completar los campos:
    • Display Name:
      Normalizar Capitalización de un archivo
    • Full path to the executable:
      <Path-a-FoxBin2Prg>\Normalize_FileNames.vbs
  • Click OK


  • Click en "Añadir..." y completar los campos:
    • Nombre a mostrar:
      (VFP) Todos los Archivos: Regenerar Binarios
    • Ruta completa del ejecutable:
      <Path-a-FoxBin2Prg>\PlasticSCM_VFP9_All_Files_Regenerate_Binary.vbs
  • Click en Aceptar


  • Click en "Añadir..." y completar los campos:
    • Nombre a mostrar:
      (VFP) Todos los Archivos: Regenerar versiones Texto
    • Ruta completa del ejecutable:
      <Path-a-FoxBin2Prg>\PlasticSCM_VFP9_All_Files_Regenerate_Text.vbs
  • Click en Aceptar




sábado, agosto 16, 2014

PlasticSCM: ¿Qué es nivelar un rama?

Por: Fernando D. Bozzo

En un SCM o en un DVCS trabajar con ramas es algo de todos los días.

Se suelen hacer ramas por tarea para poder trabajar en cada tarea de forma independiente, también se hacen ramas por release, de las que cuelgan las ramas de las sub-tareas que la conforman, también podemos tener a uno o más desarrolladores en cada tarea, donde cada uno tiene su propia rama de trabajo, y finalmente está la rama principal (main o trunk) de donde cuelga todo lo anterior.



Nivelación de ramas


La nivelación de ramas es el mecanismo que se usa para actualizar una rama que tiene un ritmo de actualización menor o distinto a otras ramas, y que se hace mediante la operación de merge o de cherry pick.


Un ejemplo:
Si dos o más personas trabajan en una misma petición o tarea, cada uno haciendo una parte específica de la misma (por ej, uno hace la parte visual y otro el acceso a datos y la lógica de negocio), uno no ve lo que hacen los otros y ninguno tiene todo lo de todos, entonces lo que se hace es que todos combinan sus cambios en la rama de la tarea mediante el merge y luego cada uno nivela su rama con el trabajo de los demás desde la propia tarea.


En la siguiente imagen, se puede observar una tarea TESTS en la que trabajan 2 desarrolladores, DEV_1 y DEV_2, trabajando cada uno en su rama, como se detalló antes, y ocurre la siguiente secuencia de eventos, irando de izquierda a derecha:

1. DEV_1 hace un merge desde su rama de trabajo /main/DEV_1 hacia la rama de la tarea TESTS (flecha verde ascendente), que será automático por ser el primero

2. DEV_2 hace un merge desde su rama de trabajo /main/DEV_2 hacia la rama de la tarea TESTS (flecha verde descendente)

3. En este punto, la rama de la tarea TESTS tiene la suma de los cambios de DEV_1 y DEV_2, por lo que DEV_2 ahora hace una nivelación en su propia rama (flecha verde ascendente) teniendo así los cambios de DEV_1

4. DEV_1 hace lo mismo, y nivela su rama con los cambios de TESTS (flecha verde descendente) mediante un merge, por lo que al terminar tendrá todo lo que hizo el compañero DEV_2

5. DEV_1 termina sus cambios y hace merge en TESTS (flecha verde ascendente)

6. DEV_2 termina sus cambios y hace merge también en TESTS (flecha verde descendente)

7. Finalmente, la tarea TESTS se integra en /main (flecha verde ascendente)





Técnicas de nivelación de ramas


Cuando se hacen merges o nivelaciones, siempre se debe buscar actualizar lo más nuevo sobre lo antiguo y nunca al revés, ya que es más fácil pensar integrar "lo que se agregó nuevo" que hacer el razonamiento y la operación opuesta.

El siguiente es un ejemplo típico de una Release, donde la v1.0 está en Producción (o en el cliente), se está trabajando en la próxima Release v2.0 y en medio hay que sacar un parche v1.1 urgentemente.

La secuencia de eventos es la siguiente:

1. Partiendo de la v1.0 de la primera etiqueta circular verde, salen tanto la rama de la próxima release_2 como la rama del parche v1.1

2. El parche se desarrolla y se integra con un merge sobre la v1.0, lo que crea un nuevo changeset que se etiqueta como v1.1 en segunda etiqueta verde

3. Luego, en vez de integrar este mismo parche sobre la rama de la release_2, se crea una subrama de nivelación desde la v1.1 de arriba (1), se le hace un merge desde la rama de la release_2 (2) para agregar todo lo nuevo, y finalmente se hace la nivelación de la rama release_2 desde la rama_de_nivelación que ya contiene el parche aplicado (3)


De esta forma se maximiza la posibilidad de que los merges que se hacen sean automáticos, ya que de la otra forma (aplicando el parche sobre la release_2) es más probable que haya que hacer merge manual.



Aunque a primera vista pueda parecer un poco complejo, realmente no lo es una vez que se comienza a practicar.


Hasta la próxima!

viernes, agosto 15, 2014

PlasticSCM: Sincronización con GitHub

Por: Fernando D. Bozzo

En esta nota vamos a ver cómo se vincula y sincroniza un repositorio Plastic con GitHub.

Nota: Plastic tiene sus propios repositorios, y no necesita conectarse a repositorios externos como GitHub o BitBucket para funcionar. Esto solo se hace cuando específicamente se quiere trabajar con esos repositorios.


Un aviso importante:


   Una vez hecha la sincronización con GitHub ya no hay marcha atrás, y lo que se suba quedará subido y no se podrá borrar localmente. Aunque se intente borrar localmente (por ejemplo un changeset) en la siguiente sincronización se volverá a descargar todo y volverá a aparecer, y si no se controla bien los archivos que suben, sus conversiones a texto, su capitalización y el tipo de archivo (que no sea basura), puede perjudicar la sincronización con GitHub, lo que en la práctica puede significar tener que volver a hacer todo desde cero (crear otro repositorio Plastic, otro repositorio GitHub, etc), por eso insisto tanto en tomar las precauciones necesarias para no tener que perder tanto tiempo luego en reconfiguraciones.

Una vez aclarado el tema, ahora sí, el proceso de sincronización.


Pasos a seguir para sincronizar con un repositorio GitHub


1) Seleccionar el alias del workspace que se quiere sincronizar desde la solapa superior, justo bajo el título de la ventana (ejemplo: dvcs_vfp9). Como el workspace está vinculado a un directorio y al Repositorio (de hecho es un alias para una vista del repositorio), Plastic sabe de donde tomar la información y donde actualizar. También puede observarse que justo bajo la solapa del workspace está la información del mismo, en el formato:

Rama @ Repositorio @ servidor : puerto  y Workspace path (directorio del workspace)




2) Ahora vamos vincular nuestro repositorio con GitHub. Hacemos click-derecho en la rama /main sobre la parte gris que está fuera del punto azul (es poco margen al principio, pero se puede seleccionar y se quedará coloreada de azul claro, bajo los puntos circulares), se abrirá el menú contextual y en el título del panel derecho deben ver que dice "Nombre de la rama" (si dice "numero de changeset" eligieron mal), en este menú eligen "Replicación / Sincronizar con Git":



3) Aquí ponen la URL del repositorio de GitHub ( ejemplo: https://github.com/fdbozzo/dvcs_vfp9.git ) y el usuario y contraseña que usaron para darse de alta en GitHub, y pulsan "Sincronizar" (no se preocupen del nombre que figura en la captura, que es solo ilustrativo):



4) Si todo salió bien, deberían ver esto:



Si lo anterior sale en rojo, es que algo salió mal (por ejemplo, siguiente imagen) y se debe analizar el mensaje de error dado. En este caso, el error se debió a un bug de Plastic que reporté en febrero y que solucionaron:




5) Una vez que cierren esta pantalla, ya está hecha la sincronización y guardadas las credenciales para las próximas sincronizaciones.En el Explorador de ramas, si actualizan con F5 o con el icono de la flecha circular (a la derecha de ACCIONES PRINCIPALES), deberían poder ver dos o más puntos azules, al menos más puntos de los que veían antes de sincronizar. Esta vista es un gráfico de changesets (cambios) en el tiempo, donde pueden ver la fecha (arriba), y hacia la derecha siempre está lo más nuevo.



Nota importante:
Las ramas nuevas no hacerlas nunca del primer nodo de /main (el de más a la izquierda), debe hacerse de los posteriores y normalmente se hace desde el último changeset de la derecha, ya que si no les quedarán ramas fantasma que no podrá ver nadie mas.



Solución a algunos problemas sincronizando con GitHub u otro repositorio externo no-Plastic


Cuando se trabaja con repositorios externos como GitHub, BitBucket u otros, a veces las cosas pueden no salir como esperamos.

Si el problema es de conexión, o sea que da un error nada más intentar sincronizar, lo primero que se debe verificar son los datos de conexión al repositorio externo, como la URL, el usuario y la contraseña, que a veces poner mal un carácter impide la conexión.

Si se detecta que lo que uno de los usuarios ve no se corresponde con lo que debería ver, una solución podría ser que el usuario se cree un nuevo repositorio local, en un nuevo workspace y un nuevo directorio, vuelva a configurar la conexión al repositorio externo y sincronice. De esta forma se le bajará todo nuevamente, y si el repositorio local anterior tenía algún problema, entonces ese problema desaparece.

Normalmente esto lleva unos minutos, dependiendo del tamaño del repositorio externo.




Hasta la próxima!



Reglas mínimas y buenas prácticas de programación

Por: Fernando D. Bozzo

Las reglas que se indican a continuación, son buenas prácticas de programación que sirven, no sólo para trabajar con control de código fuente, sino para toda la programación en general.

Aunque para algunos sea obvio, para otros no lo es tanto, así que es mejor explicar los motivos de esto.



¿Qué son y para qué sirven las buenas prácticas?


Las buenas prácticas no existen desde siempre, sino que se fueron desarrollando como resultado de la experiencia común de muchos desarrolladores y empresas dedicadas al desarrollo de software, como Microsoft y otras.

En esas experiencias se han pasado muchas veces por situaciones conflictivas, que luego de haber identificado fallos o problemas comunes, y luego de haber analizado los motivos que llevaron a ellos, se han ido perfeccionando ciertas prácticas que minimizan la posibilidad de los mismos.

Otra ventaja de las buenas prácticas, es que tienen a facilitar el mantenimiento del código, no solo por la persona que lo hace, sino por otros, lo que permite "normalizar" la forma de hacer las cosas, bajar los tiempos de desarrollo y maximizar la eficiencia.

Finalmente, el uso de estas normas minimiza los problemas y las diferencias a la hora de tener que mezclar el código de dos desarrollos sobre los mismos componentes (llamado merge), aumentando la posibilidad de que sea automático y no requiera intervención manual.


Buenas prácticas de programación


La siguiente lista de recomendaciones es lo mínimo que conviene tener en cuenta en todos los desarrollos, tanto trabajando en solitario como en equipo.



1. Convención de nomenclatura de variables (VFP)

Está detallada en la ayuda de FoxPro y en el MSDN de Microsoft

Ejemplos:
Parámetros => tcCadena, tnNumero, tdFecha, tlBoolean, taArray, toObjeto
Variables Locales => lcCadena, lnNumero, ldFecha, llBoolean, laArray, loObjeto
Variables Privadas => pcCadena, pnNumero, pdFecha, plBoolean, paArray, poObjeto
Variables Publicas => gcCadena, gnNumero, gdFecha, glBoolean, gaArray, goObjeto



2. Convensión de nomenclatura de objetos (VFP)

Está detallada en la ayuda de FoxPro y en el MSDN de Microsoft

Ejemplos:
custom => cus_nombre
label => lbl_nombre
form => frm_nombre
checkbox => chk_nombre
editbox => edt_nombre
listbox => lst_nombre
spinner => spn_nombre
pageFrame => pgf_Nombre
page => pag_Nombre
commandButton => cmd_nombre



3. Checkin y checkout de componentes (SCM/VFP)

Antes de hacer un checkin o un checkout de componentes, es conveniente limpiar el entorno para evitar problemas:

CLEAR ALL
CLOSE ALL
(y ahora se puede hacer el checkin o checkout)



4. Cambio de changeset (Plastic/VFP)

Al igual que en el caso anterior, es conveniente hacer el CLEAR ALL / CLOSE ALL, pero además es conveniente revisar y refrescar la vista de Cambios Pendientes, ya que si hubiera archivos modificados, generaría un aviso.



5. Trabajo en ramas (SCM)

Regla de oro: Nunca se debe trabajar o modificar en la rama personal de otro usuario, ya que se le puede ocasionar una inconsistencia en el desarrollo. La rama de trabajo personal es como el maletín de cada uno, no se comparte y es actualizada por el propietario exclusivamente.

Si se quieren compartir ramas, se deberá hacer con ramas que no sean personales (como una rama de una tarea) y solamente se debe actualizar mediante merge o cherry pick, nunca manualmente.



6. Sesiones de FoxPro

Evitar cambiar el directorio de una sesión de FoxPro que sea usada para modificar componentes (o sea, no usar CD <directorio> o SET DEFAULT TO <directorio> si se modifican programas con MODIFY), ya que los programas se suelen cachear en la memoria, y al modificar en otra ubicación se podrían provocar problemas de ruta inválida sobre todo en las clases y forms.



7. Parámetros

Usar LPARAMETERS en vez de PARAMETERS y si hay que agregar parámetros a un método, agregarlos siempre al final, nunca en medio, que eso rompe la compatibilidad de los programas.

Ejemplo agregando nuevo parámetro "tnCosto":
LPARAMETERS tcNombre, tnEdad, tnCosto




Como todo, esta lista no es definitiva, pero al menos es una buena base para poder trabajar de forma "compatible" con otros desarrolladores.


Hasta la próxima!


PlasticSCM: Cómo configurar el usuario Administrador del Servidor

Por: Fernando D. Bozzo

Cuando instalamos Plastic, por defecto no hay un usuario Administrador preconfigurado (no tiene nada que ver con ser Administrador de Windows!).

Normalmente esto no es un problema y se puede trabajar sin más, sobre todo si lo usamos para trabajar en solitario, pero hay que recordar que la Licencia Comunitaria de Plastic es hasta 15 usuarios, y si usamos uno o más repositorios sincronizados con un repositorio externo, como GitHub o BitBucket, nos pueden aparecer otros usuarios sin que nos demos cuenta, y encima se dan de alta de forma automática como usuarios habilitados, que por ende consumen una licencia cada uno.



Ejemplo del problema


Nos creamos uno o varios repositorios locales, (que por defecto usan el backend local de SQLCE en Windows y SQLite en Linux y Mac, salvo que configuremos una BDD externa), y uno o más de esos repositorios los configuramos para que se sincronicen con un repositorio externo, por ejemplo, con GitHub.

Cuando hagamos la sincronización y se actualicen los datos del repositorio local, todos los usuarios que hayan intervenido en el desarrollo de los programas del repositorio (o sea, del proyecto), se darán de alta localmente de forma automática, lo que consumirá parte de las licencias que tenemos disponibles, o, en el peor caso, todas!, y si esto llegara a ocurrir, Plastic se bloquea automáticamente por haber alcanzado el máximo de licencias permitidas. Pero tiene solución...



Cómo evitarlo


La solución es fácil, lo que pasa es que cuesta encontrarla  ...y para eso es este artículo :D

Se trata de establecer el usuario Administrador del Servidor Plastic, que es el único que puede habilitar e inhabilitar licencias, y ahí está lo bueno, porque se pueden desactivar las licencias que no se usen!

Esto es útil incluso si se trabaja en un equipo, donde uno de los integrantes se va de vacaciones y otro integrante ocupa su lugar: Se desactiva la licencia del que se va (ojo, no se borra!, solo se desactiva!) y se habilita al nuevo.

Cabe aclarar que las licencias de uso se activan automáticamente cuando se hace el primer checkin, no cuando se agrega un usuario a Plastic.



1 - Comprobar licencias en uso y disponibles


Para comprobar qué licencias se están usando de nuestro servidor Plastic, usamos el comando "cm" desde la línea de comandos de DOS, así:

C:\DESA\dvcs_vfp9>cm li
Información de licencia de Plastic SCM:

* Información de usuarios con licencia:

fdbozzo                   ACTIVO
chewbacca                 ACTIVO

---------------------------------------
Registrado a: Community edition particular - Fernando Bozzo

Fecha de expiración: 02/03/2015 00:22:18

Total de licencias: 15
Total usuarios activos: 2
Total licencias disponibles: 13
---------------------------------------



En el ejemplo anterior podemos ver que el usuario "chewbacca" está usando una licencia, por estar ACTIVO, y podría haber más. En este caso el total de usuarios activos es 2.



2 - Comprobar el usuario actual


Aunque cada uno sabe con qué usuario se dió de alta en Plastic, lo puede comprobar igual que se hace en Linux, con el comando whoami (en Plastic es cm whoami):

C:\DESA\dvcs_vfp9>cm whoami
fdbozzo




3 - Consultar el usuario administrador del Servidor Plastic


A continuación consultamos el usuario administrador del Servidor Plastic, que inicialmente será "all":

C:\DESA\dvcs_vfp9>cm showowner repserver:win7u:8087
repserver:win7u:8087 all Usuario




Si el usuario es "all", conviene configurar el usuario Administrador como se indica en el siguiente paso.



4 - Configurar un nuevo usuario Administrador del Servidor Plastic


Ahora configuramos (o reconfiguramos) el usuario Administrador (el nuestro, que consultamos antes), como se indica a continuación, reemplazando el usuario por el vuestro y el servidor (PC) por el nombre de la máquina donde hayan instalado Plastic (el mismo que en FoxPro se obtiene con SYS(0) ):

C:\DESA\dvcs_vfp9>cm setowner -user=fdbozzo repserver:win7u:8087


Una vez configurado el usuario Administrador, lo verificamos (reemplazar win7u por vuestro nombre del Servidor Plastic):

C:\DESA\dvcs_vfp9>cm showowner repserver:win7u:8087
repserver:win7u:8087 fdbozzo Usuario




5 - Desactivar licencias de usuario


Siendo Administradores del Servidor Plastic podemos usar el comando "cm du" (o también "cm deactivateuser") para desactivar licencias. En este caso desactivaremos la licencia del usuario "chewbacca":

C:\DESA\dvcs_vfp9>cm du chewbacca --nosolveuser
El usuario chewbacca_cp ha sido desactivado correctamente



Volvemos a listar las licencias en uso para comprobar los cambios:

C:\DESA\dvcs_vfp9>cm li
Información de licencia de Plastic SCM:

* Información de usuarios con licencia:

fdbozzo                   ACTIVO
chewbacca                 INACTIVO (No tiene licencia)
---------------------------------------
Registrado a: Community edition particular - Fernando Bozzo

Fecha de expiración: 02/03/2015 00:22:18

Total de licencias: 15
Total usuarios activos: 1
Total licencias disponibles: 14
---------------------------------------



Listo! Eso es todo. Ya tenemos esa licencia DESACTIVADA (que no borrada), que podremos volver a activar cuando querramos, y en este caso quedó un único usuario activo.



6 - Activar licencias de usuario


Siendo Administradores del Servidor Plastic podemos usar el comando "cm au" (o también "cm activateuser") para activar o reactivar licencias.  En este caso activaremos la licencia del usuario "chewbacca":

C:\DESA\dvcs_vfp9>cm au chewbacca --nosolveuser
El usuario chewbacca_cp ha sido activado correctamente



Volvemos a listar las licencias en uso para comprobar los cambios:

C:\DESA\dvcs_vfp9>cm li
Información de licencia de Plastic SCM:

* Información de usuarios con licencia:

fdbozzo                   ACTIVO
chewbacca                 ACTIVO
---------------------------------------
Registrado a: Community edition particular - Fernando Bozzo

Fecha de expiración: 02/03/2015 00:22:18

Total de licencias: 15
Total usuarios activos: 2
Total licencias disponibles: 13
---------------------------------------




Tengan muy presente esto, porque si el Servidor Plastic se bloquea por aclanzar las licencias permitidas, desactivando licencias es la manera de desbloquearlo.


Hasta la Próxima!

Prácticas de VFP 9 con control de código fuente desde CERO - ¡Ayuda! ¡Me perdí! (agosto 2014)

Por: Fernando D. Bozzo

Para estas prácticas de agosto 2014 hice un nuevo Blog para los que se perdieron y para quienes quieran rapasar lo que vamos haciendo, donde iré actualizando todas las tareas que hagamos en el foro, con links a las mismas y a los articulos que publico, en el orden que los vamos viendo, así pueden volver a ponerse en tema rápidamente.

Con solo seguir el orden de los artículos publicados en el Blog, será suficiente para poder avanzar paso a paso en el uso del control de código fuente con Plastic, y en el foro hacen las preguntas.

Gente, de verdad no se preocupen si en algún momento alguno se retrasa. Simplemente hagan las preguntas en el hilo correspondiente a la práctica, marcada como [Foro], y los que ya la hayan hecho podrán responderles sin problemas, yo incluido.

Por ejemplo, si estamos en la PARTE 3 de las prácticas y alguno sigue en PARTE 2, no pasa nada, solo haga sus preguntas en el hilo de la PARTE 2 en la que se encuentra, que todos recibirán el correo de notificación, y por el asunto se sabrá dónde está cada uno.

Con este tipo de participación online, el término "rezagado" no existe, porque es atemporal, de la misma forma que todavía hay preguntas de FoxPro 2.6 y se siguen contestando.

Importante: Es conveniente que primero lo lean el artículo completo antes de hacer nada, para tener una idea del conjunto de pasos, y luego vayan haciendo los pasos. No se apuren.


¿Tienes algún problema? Chequea este artículo, que voy actualizando contínuamente:
PlasticSCM: ¡Houston, tenemos problemas!


¿No puedes bajarte el programa por algún problema en la página de Plastic?
Aquí hay un enlace a una versión de Plastic actualizada que temporalmente va a servir (versión evaluación 30 días y 5 desarrolladores), así que luego hay que bajarse el archivo de licencia gratuita anual para 15 desarrolladores antes de que caduque:
PlasticSCM-5.0.44.596-windows-installer.exe.7z


Recursos de software necesarios (links):


- Visual FoxPro 9.0
- Herramientas FoxPro para Plastic => (Incluyen el EXE de FoxBin2Prg, pero no sus fuentes, que están aquí si los quieren)



Todo lo que estamos viendo está aquí:



Cualquier duda, me escriben o preguntan en el foro.

Fernando D. Bozzo

domingo, agosto 10, 2014

Nueva versión v2.4.24 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.30)

Está liberada la versión v2.4.24 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:




Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes del proyecto FoxBin2Prg y el historial de ambios, están en CodePlex, en este link.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

sábado, agosto 02, 2014

Nueva versión v2.4.23 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.29)

Está liberada la versión v2.4.23 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

  • Actualizada la versión de FoxBin2Prg (solo el EXE) a la versión v1.19.29
  • Bug Fix del agregado del control y reporte de algunos errores que puedan ocurrir durante la conversión, para ser mostrados en los mensajes de estado de procesamiento.



Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes del proyecto FoxBin2Prg y el historial de ambios, están en CodePlex, en este link.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

sábado, julio 26, 2014

Nueva versión v2.4.22 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.28)

Está liberada la versión v2.4.22 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

  • Actualizada la versión de FoxBin2Prg (solo el EXE) a la versión v1.19.28
  • Se ha agregado control y reporte de algunos errores que puedan ocurrir durante la conversión, para ser mostrados en los mensajes de estado de procesamiento.



Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes del proyecto FoxBin2Prg y el historial de ambios, están en CodePlex, en este link.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

viernes, julio 18, 2014

Nueva versión v2.4.21 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.27)

Está liberada la versión v2.4.21 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:




Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes del proyecto FoxBin2Prg y el historial de ambios, están en CodePlex, en este link.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

domingo, julio 06, 2014

PlasticSCM: Opciones de conectividad, transporte del código fuente y backup

Por: Fernando D. Bozzo

Una de las cosas que más me gustan de este SCM (Source Control Manager o Administrador de Código Fuente) es la cantidad de opciones que tiene para conectarse y sincronizarse con otros servidores Plastic y con otros servicios como GitHub, BitBucket y otros.

Este artículo está dedicado a quienes necesitan sincronizar sus repositorios con otras personas o con otros servicios, trabajen en solitario o en grupo. Lo importante es conocer las opciones disponibles para luego elegir.

Quienes vienen trabajando con herramientas de control de código, ya saben que una vez que se comienza a trabajar así, no se puede ni se quiere vivir sin él, y quienes estén comenzando a conocerlo, estarán pudiendo comprobar, al menos, algunas ventajas que aporta, como poder ver y analizar el historial, deshacer o rehacer cambios, hacer un Diff o un Merge (....a qué ahora sí les suena esto :), preparar versiones del sistema, también llamadas Releases, preparar parches, trabajar simultáneamente en más de una versión del mismo componente, etc.

Dicho esto, una de las cosas que nos aportará valor y comodidad es poder disponer del control de código donde sea que estemos trabajando, tanto trabajando en solitario como trabajando en grupo y compartiendo un proyecto, y por eso vamos a ver varias situaciones y alternativas de trabajo disponibles.


Supongamos que disponemos de un PC de escritorio en casa, o de un servidor en la oficina, donde está instalado el componente servidor de Plastic con los repositorios definitivos, y donde realmente se centralizará todo el control del código fuente. Es necesario mantenerlo siempre actualizado, por lo que las vías para hacerlo son:

  • Trabajar directamente en ese PC o en el servidor
  • Trabajar en una red local con acceso a ese PC o servidor
  • Trabajar desde Internet con acceso a ese PC o servidor
  • Trabajar en una ubicación desconectada y sin Plastic, hacer una copia de lo trabajado en zip y sincronizarlo más tarde en el servidor Plastic 
  • Trabajar en una ubicación sin Plastic, pero con acceso a DropBox, Google Drive u otro servicio de guardado en la nube, para más tarde sincronizarlo en el servidor de Plastic

De ahora en más, hablar de una PC de sobremesa, hablar de una Portátil o hablar de un Servidor de Oficina o Empresa, en todos los casos con el componente servidor de Plastic, los consideraré a todos como "el servidor Plastic", ya que es la función que están realizando, desde el momento en que permiten guardar el código fuente en una Base de Datos local.

Es importante entender esto, porque todo lo posterior tratará sobre formas de sincronizar los repositorios entre servidores Plastic, que perfectamente podrían sincronizarse entre una PC de sobremesa y una Portátil, o entre una Portátil y un Servidor de Oficina/Empresa, o entre dos (o más) Portátiles, o usando un repositorio externo como GitHub, BitBucket, etc, o cualquier otra combinación que se les ocurra donde intervengan dos o más servidores Plastic.

Finalmente, y para despejar cualquier duda, "sincronizar" es la acción de actualizar repositorios en ambos sentidos, o sea que se suben los cambios (archivos y directorios nuevos, modificados o eliminados) que el repositorio destino no tiene y se bajan los cambios que nuestro repositorio local no tiene, quedando el historial en ambos casos igualado.


¿Pero sincronizando no se pisarán mis cambios con los de los demás?


Puede ocurrir, si no se trabaja de forma organizada. Para evitar estos problemas fácilmente, la forma de trabajar debe ser tener una rama por desarrollador como mínimo, y a su vez otra rama por tarea, pero fundamentalmente debe haber un proyecto inicial, con su pjx, los archivos de configuración de Plastic y con toda la estructura de directorios en el repositorio, para evitar diferencias innecesarias en nombre de directorio o capitalización, y demás.


Opciones de sincronización entre repositorios


Estas son algunas de las opciones disponibles:
  • Sincronizar un repositorio Plastic local con otro repositorio Plastic remoto. Esta es la opción ideal y la más eficiente. Requiere una conexión de red o por Internet entre ambos servidores Plastic, y que no esté bloqueado el puerto 8087 (u 8088 si se usa seguridad SSL). Ojo, Plastic no soporta Firewalls donde deba autenticarse. En esos casos se deberá usar redirección de puertos.
  • Sincronizar un repositorio Plastic local con otro repositorio remoto como GitHub, BitBucket o cualquier otro soportado. Esta opción implica usar un servicio "intermediario", y si el repositorio no es público, probablemente implique algún costo extra asociado, ya que al menos GitHub, si se quiere usar un repositorio privado, se debe pagar, y supongo que con el resto será lo mismo.
  • Trabajar con cliente Plastic local y servidor Plastic en red o por Internet. Realmente aquí no hay sincronización. Esta opción se suele usar en las empresas que tienen uno a varios equipos de desarrollo internos o externos, pero donde el código fuente se quiere que solamente esté en el servidor corporativo por ser un bien intelectual de la empresa. La única desventaja de este modelo es que si la red no es veloz se pueden producir picos de congestión si los equipos de desarrollo son numerosos o si se usa para procesos de Integración Continua (CI). Requiere una conexión de red o por Internet entre ambos servidores Plastic, y que no esté bloqueado el puerto 8087 (u 8088 si se usa seguridad SSL) y en este escenario ayuda mucho utilizar balanceo de servidores o Servidores Proxy Plastic (esto está mejor explicado en su web)



Supongamos que tenemos un portátil nuestro que usamos para programar, en el que podemos instalar lo que sea necesario, y que llevamos de aquí hacia allá todo el tiempo, sea a lo del cliente, a casa o a un bar. Tenemos un Servidor Plastic instalado en el portátil, y nuestros repositorios, cada uno con su proyecto. Aquí trabajamos normalmente y sin mayor problema, ya que tanto el código como el SCM están en el mismo equipo, por lo que hacemos checkin, merge, ramas y lo que haga falta.

Si tuviéramos que sincronizarnos con un compañero que trabaja en otra ubicación y donde no compartimos una red local, podríamos usar estas opciones:
  • Sincronización Plastic local a Plastic remoto. En este caso los dos nos ponemos de acuerdo en un horario para conectarnos a Internet y la sincronización sería directa de equipo a equipo usando el puerto 8088 SSL (u otro), y para resolver el problema de la IP dinámica se puede usar algún servicio como NoIP, DynDns o similar. El único problema con esto sería ponerse de acuerdo en ese horario, y que, a día de hoy, la versión 5 de Plastic no soporta la conexión a través de Firewalls que requieran autenticación, pero si al Firewall se le configura redirección de puertos, muy probablemente se pueda.
  • Sincronización Plastic local a servidor remoto (GitHub, etc). Este es el caso comentado en Opciones de Sincronización, donde se usa un repositorio intermediario.
  • Sincronización mediante archivos zip por DropBox. GDrive o similar. Esto realmente no es una sincronización, pero al menos permite incorporar los cambios de otra persona al repositorio local. La idea es crear dos ramas, la nuestra y la de nuestro compañero. Nosotros trabajamos en nuestra rama normalmente hasta que nuestro compañero nos envía un zip mediante DropBox, Google Drive o similar. Nos pasamos temporalmente a la rama de nuestro compañero, descomprimimos el zip en el workspace y hacemos el checkin. Ya está en control de código y podemos hacer un merge de su rama a la de integración. Este mecanismo es un poco Espartano porque nos implica estar haciendo un merge de lo nuestro y un merge de lo del otro, y al otro le implica lo mismo, con lo que se duplica el trabajo de integración y la posibilidad de errores, pero al menos nos puede sacar del paso.
  • Sincronización Plastic local a Plastic local. Si, suena raro, pero se pueden crear 2 o más repositorios Plastic locales usando distintos workspaces y distintos nombres de repositorio, para luego, mediante un perfil de conexión (comentado más abajo), sincronizarlos. No sé si tenga alguna utilidad, ya que yo lo usé solo para probar y simular 2 usuarios distintos que sincronizaban sus repositorios (que se pueden modificar por separado), pero es bueno conocer las opciones disponibles.

  • Fast-Export/Fast-Import: Finalmente hay una opción que merece ser conocida, que es la opción Fast-Export y Fast-Import, basada en el formato abierto de Git, que permite exportar un repositorio completo a un archivo en este formato de Git, y también permite importarlo. Esto permite una capa más de compatibilidad, no solo con Git, sino con otros SCM que admitan ese formato.


Dentro de la sección de configuración de Plastic, hay un apartado llamado Perfiles, donde se pueden configurar perfiles de conexión con distintos esquemas de autenticación (usuario/password, LDAP, Directorio Activo, etc).

Este apartado merece ser conocido, porque realmente admite muchas opciones de conectividad.




Como se podrá comprobar en la Instalación, los puertos son configurables, y esta configuración se puede cambiar en cualquier momento

Hay mucha documentación disponible en la web de Plastic, aunque lamentablemente está solo en Inglés. Este es un link al apartado donde explican todo sobre entornos distribuidos.


Hasta la próxima!


Artículos relacionados:
PlasticSCM: Cómo configurar la replicación de repositorios Plastic locales y remotos



Nueva versión v2.4.20 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.26)

Por: Fernando D. Bozzo

Está liberada la versión v2.4.20 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:




Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes del proyecto FoxBin2Prg y el historial de ambios, están en CodePlex, en este link.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

miércoles, junio 25, 2014

Nueva versión v2.4.19 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.25)

Por: Fernando D. Bozzo

Está liberada la versión v2.4.19 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:




Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes del proyecto FoxBin2Prg y el historial de ambios, están en CodePlex, en este link.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

domingo, junio 15, 2014

Nueva versión v2.4.18 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.24)

Por: Fernando D. Bozzo

Está liberada la versión v2.4.18 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

  • Algunos mensajes han sido convertidos al Inglés para permitir un uso Internacional más amplio
  • Actualizada la versión de FoxBin2Prg (solo el EXE) a la versión v1.19.24



Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes de FoxBin2Prg están en CodePlex, en el link indicado arriba en la versión.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

sábado, junio 07, 2014

Nueva versión v2.4.17 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.23)

Por: Fernando D. Bozzo

Está liberada la versión v2.4.17 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

  • Agregado switch "nFlags" en los scripts vbs para Plastic, para poder mostrar un mensaje de finalización de proceso, muy útil cuando se procesan muchos archivos o cuando se procesan archivos pesados que tardan (activo por defecto)
  • Activado por defecto el mensaje de finalización de proceso en los scripts vbs para usar con el administrador de archivos de Windows
  • Actualizada la versión de FoxBin2Prg (solo el EXE) a la versión v1.19.23



Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes de FoxBin2Prg están en CodePlex, en el link indicado arriba en la versión.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

domingo, mayo 18, 2014

Nueva versión v2.4.16 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.22)

Por: Fernando D. Bozzo

Está liberada la versión v2.4.16 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

- Actualizada la versión de FoxBin2Prg (solo el EXE) a la versión v1.19.22



Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes de FoxBin2Prg están en CodePlex, en el link indicado arriba en la versión.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

jueves, mayo 01, 2014

Nueva versión v2.4.15 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.21)

Por: Fernando D. Bozzo

Está liberada la versión v2.4.15 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

- Actualizada la versión de FoxBin2Prg (solo el EXE) a la versión v1.19.21



Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes de FoxBin2Prg están en CodePlex, en el link indicado arriba en la versión.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

jueves, abril 17, 2014

Nueva versión v2.4.14 de las herramientas Visual FoxPro 9 para PlasticSCM (Incluye FoxBin2Prg.exe v1.19.20)

Por: Fernando D. Bozzo

Está liberada la versión v2.4.14 de las herramientas Visual FoxPro 9 para PlasticSCM, con los siguientes cambios:

- Actualizada la versión de FoxBin2Prg (solo el EXE) a la versión v1.19.20



Estas herramientas son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM para poder invocar a FoxBin2Prg (incluye solo el EXE) desde dentro de la interfaz de Plastic.

El README.txt explica como se configura en Inglés y Español.

Nota: Los fuentes de FoxBin2Prg están en CodePlex, en el link indicado arriba en la versión.


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link de descarga:
https://github.com/fdbozzo/foxpro_plastic_diff_merge


Saludos!

jueves, abril 03, 2014

PlasticSCM: ¿Para qué sirve el Annotate?

Por: Fernando D. Bozzo

El comando Annotate, habitualmente llamado "blame" (culpar) en los demás SCM, sirve para obtener información sobre las modificaciones hechas a un archivo, como saber quién modificó una línea, cuándo, etc.

En Plastic lo podemos encontrar en el menú contextual de la vista de Items, en la vista de Cambios Pendientes y al ver el contenido de un changeset, cuando le hacemos doble click.

Ejemplo desde la vista de Items:



Vista Annotate por defecto, donde se puede apreciar la información por cada línea (usuario, número de changeset donde se cambió, rama en la que se cambió y número de línera), el degradé de colores indica la antigüedad del cambio, cuanto más claro, más reciente es el cambio:



En el menú contextual de esta vista también hay varias opciones más:



Entre ellas, el poder ver los cambios coloreados por usuario:



El botón "Statistics" de arriba permite ver algunas estadísticas, como la cantidad de líneas del fichero, la antigüedad y la cantidad de líneas modificadas por desarrollador:



Algo muy útil de esta funcionalidad Annotate es que, al igual que el resto de funcionalidades en Plastic, lo mismo se puede obtener desde la línea de comandos con el comando cm, por ejemplo, estando en la terminal de DOS ubicado en el directrorio del workpsace, este comando:

cm annotate forms\frm_test_fdb.sc2

Genera esta información:


La interfaz de comandos, mediante el comando cm, permite automatizar la mayoría de las funciones de Plastic, lo que es increíblemente flexible y útil no solo para usar en scripts, como las utilidades de Visual FoxPro 9 para Plastic, sino también para automatizar la generación de estadísticas que luego se puedan mostrar por otros sistemas, incluso en web.

Aquí hay un link de ejemplo de lo que se puede obtener:

http://codicesoftware.blogspot.com/2007/08/getting-stats-with-query-system.html


Hasta la próxima!