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!

Nueva versión v1.19.20 de FoxBin2Prg (Mejoras)

Por: Fernando D. Bozzo

Está liberada la versión v1.19.20 de FoxBin2Prg con los siguientes cambios:

  • Nuevo: Relativización del path de los CDX dentro de los DB2. Hasta ahora, cuando se generaba el DB2 de un DBF, el CDX se generaba con una ruta absoluta, lo que es un problema si 2 personas tienen la misma tabla sin cambios pero en distintos directorios, porque al hacer checkin en un SCM se generan cambios que no son reales ni importantes. Ahora estas diferencias no se general.
  • Nuevo: Recompilación del EventsFile del DBC, si existe, para evitar errores al regenerar el DBC. Si el DBC tiene un archivo PRG de eventos asociado, se genera el DB2 y se cambia a otro directorio, al regenerar el DBC desde el nuevo directorio, puede dar errores de que no se encuentra el archivo PRG de eventos, aunque esté copiado allí. Lo que se hace ahora es recompilar ese PRG y luego regenerar el DBC desde el DB2, lo que evita el error.

Como actualizar el FoxBin2Prg existente:
Con descargar el zip y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link  de descarga:
https://vfpx.codeplex.com/releases/view/116407


 Saludos!

sábado, abril 05, 2014

Cómo configurar las notificaciones en los Grupos de Google de forma óptima

Por: Fernando D. Bozzo

Hay mucha gente que no configura correctamente el grupo de Google al que se suscribe, y luego se da cuenta de que recibe un montón de correos que no les interesa recibir, lo que puede ocasionar muchas molestias.

Esto pasa porque, sin querer, se eligió recibir todos los correos del foro, se participe o no, y luego se comienza a recibir una avalancha de correos.

Para participar en un foro de Google, lo ideal es hacerlo desde la interfaz web, logueándonos con nuestra cuenta de Google primero, y entrando por esta URL:

https://groups.google.com/


Y ya luego ir al grupo que queramos.

Este en un ejemplo de la vista del foro de la Comunidad de Visual FoxPro en Español, al que se entra por esta URL: http://groups.google.com/group/publicesvfoxpro/topics

Como se ve, de un vistazo se pueden ver todos los temas agrupados por conversación, lo que es muy cómodo para saber de qué se trata, sin entrar (si el título que se le puso es útil, claro):




La siguiente, es la configuración por defecto que uso en todos los grupos donde participo, y en la que no deseo recibir todos los correos del foro, sino sólo de los hilos en los que participo:




Abrimos el menú y seleccionamos "Configuración de afiliación y correo electrónico":




Y aquí elegimos qué queremos. En este caso elijo no recibir ningún correo, excepto de los temas en los que participe:



 E incluso luego de participar en un tema, si no queremos seguir recibiendo mensajes de ese hilo, vamos al primer mensaje y elegimos del menú "Cancelar el envío de actualizaciones por correo electrónico":



En el mismo menú principal, hay una opción que se llama "Mi configuración global":



Desde donde podemos hacer la configuración por defecto para todos los grupos:


Y finalmente está la opción "Mis suscripciones a temas por correo electrónico":



donde están todos los hilos en los que hemos participado, y que estamos suscriptos, que podemos seleccionar con el checkbox de la izquierda y seleccionar el botón superior de "Anular suscripción":





Haciendo un correcto uso de los grupos y foros, es como podemos optimizar nuestro tiempo y evitar llenar nuestros buzones de correo.

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!

miércoles, abril 02, 2014

PlasticSCM: ¿Qué es el Shelve?

Por: Fernando D. Bozzo

La verdad es que a veces se buscan términos que confunden, cuando se podrían utilizar otros que todo el mundo conoce. El Shelve es el concepto del portapapeles (clipboard) aplicado a un changeset.


Si, es el copiar+pegar de un grupo de archivos en la rama que se elija, pero con la diferencia de que:

  • El "pegar" se hace con un merge especial llamado "Cherry Pick"
  • Este portapapeles (Shelves) se ha potenciado para que permita múltiples entradas que se guardan por separado (cada entrada es un changeset)
  • Se les puede poner una descripción, para diferenciarlas de otras entradas
  • Se pueden compartir con los demás desarrolladores que estén en el mismo servidor Plastic, ya que se guardan en la base de datos
  • Se pueden borrar o reutilizar todas las veces que se necesite

Veamos un ejemplo de uso:

1.  Tomamos un form:


2.  Le hacemos un cambio, en este caso solo modificaré el backcolor:



3.  Verificamos los datos cambiados, que mostrará solo los binarios del form, y regeneramos la vista de texto del form, para tener ambas versiones sincronizadas:



 4.  En vez de hacer checkin, hacemos Shelve, lo que lo guarda en el portapapeles que comenté:


Observación al paso: Ya que tenemos este menú abierto, notar que hay una opción "Proteger los cambios a otra rama", que sirve para guardarlos en una nueva rama con el nombre que le demos. Viene bien cuando nos equivocamos e hicimos los cambios en la rama principal y olvidamos crear antes la rama de trabajo, lo resolvemos aquí en un paso ;-)


5.  En la ventana de confirmación que nos aparece, podemos guardar estos cambios y seguir modificando, o guardar estos cambios y deshacerlos de la rama si marcamos el check de abajo, lo que permite mantenerlos solamente en el portapapeles (Shelve):



Como deshice los cambios del workspace, el form volvió a quedar como estaba:




6.  Nos muestra un mensaje confirmando el guardado, donde se puede marcar el check de abajo para que no vuelva a mostrar este mensaje:



7.  Nos muestra la vista de Shelves con los que haya, donde arriba siempre están los más nuevos. Un apunte: Esta vista tiene el panel derecho desactivado por defecto, pero se puede activar del icono indicado en la imagen, y en el mismo panel se puede poner un comentario descriptivo, que es muy útil para saber de qué se trata y no se pierda entre los demás:



 8.  Para aplicar un Shelve en el workspace, se elige desde el menú contextual:



9.  Aquí se muestra el Shelve aplicado, que es el equivalente a haber realizado las modificaciones a mano. Un apunte:  Aplicar un Shelve implica hacer un merge del Shelve sobre el contenido del workspace que, como todo merge, puede ser manual o automático dependiendo de los cambios hechos en el workspace. Como en este ejemplo antes deshice los cambios del workspace, entonces no hay cambios y el merge será automático:


Y a partir de aquí es como cualquier otro cambio merge que hemos hecho antes.

El resultado de aplicar este Shelve, es el cambio de color del form:



Nota: El Shelve se puede usar para guardar cambios pendientes normales, no los cambios pendientes de un Merge, ya que no puede guardar el link de Merge.



Resumen


El Shelve puede ser muy útil usarlo como "backup rápido" cuando se deba hacer un checkin de varios archivos en los que se pretenda deshacer los cambios de los binarios que no tengan su versión texto tx2 (o sea, se indicó generar, pero no se generó), y que por tanto no tienen cambios en el código (esos cambios en los binarios pueden ser por el timestamp interno), y que pueda ocurrir un error que les haga perder los cambios de uno o varios archivos.


Hasta la próxima!

Artículos relacionados:
PlasticSCM: ¿Qué es el Merge?

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

Por: Fernando D. Bozzo

Está liberada la versión v2.4.13 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.19
- Actualizada la configuración en el README.txt, ya que un error en lo escrito estaba causando algunos problemas en la configuración del merge


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!

Nueva versión v1.19.19 de FoxBin2Prg (Nuevo Hook)

Por: Fernando D. Bozzo

Está liberada la versión v1.19.19 de FoxBin2Prg con los siguientes cambios:

  • Nuevo: Hook para DBFs que permite intercalar un proceso personalizado entre la creación del DBF y la creación de sus índices (ejemplo "tests\demo_hook_dbf.prg" incluido). Este agregado le puede servir a quienes usen FoxBin2Prg como objeto por programa. El Hook consiste en la creación de un encganche donde se puede lanzar una rutina personalizada, por ejemplo de carga de datos, entre la creación de la tabla y la creación de los índices cuando se procesa un archivo DB2.

Como actualizar el FoxBin2Prg existente:
Con descargar el zip y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.


Link  de descarga:
https://vfpx.codeplex.com/releases/view/116407


 Saludos!

PlasticSCM: El merge sustractivo como reemplazo del borrado

Por: Fernando D. Bozzo

Hay situaciones en las que necesitamos borrar uno o varios cambios (changesets), pero queremos borrarlos con la opción de poder recuperarlos luego, o queremos borrarlos definitivamente pero nos es imposible porque no es el último changeset, sino uno o varios intermedios que ya forman parte del historial, y que por cuestiones de integridad referencial Plastic no permite borrarlos.

En estas situaciones lo que se puede hacer es un "merge sustractivo", o sea, un merge para deshacer cambios, que funciona exactamente al revés del merge común, que agrega cambios.

Aunque son exactamente la operación opuesta, tienen un punto en común, y es que en ambos puede darse el caso de requerir una intervención manual, o sea, de resolver algo a mano, bien desactivando los cambios de un panel en la ventana de merge o bien modificando a mano valores directamente.

En esta nota vamos a ver el merge sustractivo automático, ya que la parte manual es la misma que ya comenté en el merge normal, excepto que en vez de agregar cambios, quitaríamos cambios.


Cómo deshacer un changeset


Supongamos que hemos agregado un archivo en un changeset que no debíamos agregar e hicimos algunos cambios que no queremos, y que nos damos cuenta luego de haber hecho otros cambios que hemos guardado en otro changeset posterior y que no queremos borrar, solo queremos quitar el changeset del archivo agregado y los cambios anteriores.


Imagen 1: Cambios a mantener del nuevo botón "Pag.4" (click en la imagen para agrandar)



Imagen 2: Los mismos cambios, pero vistos en el código, luego de hacer doble-click en el changeset de la flecha verde




Imagen 3: Cambios a descartar del label verde (click en la imagen para agrandar)



Imagen 4: Los mismos cambios, pero vistos en el código, luego de hacer doble-click en el changeset de la flecha verde



1.  Para deshacer este changeset, lo marcamos (flecha verde de la imagen 4), elegimos click-derecho, "Merge Avanzado" y "Merge sustractivo de este changeset...", lo que mostrará esta pantalla en la que se puede observar que se borrará el archivo antes agregado y se desharán cambios en el form:



2.  Procesamos el merge, y nos quedarán los binarios, ya que solo podemos trabajar con versiones texto en un merge, y en este caso los cambios han sido todos automáticos (aunque no siempre es así):



3.  Seleccionamos los binarios que queden e indicamos dejar los que ya hay en el workspace:




4.  Como hemos hecho el merge sustractivo sobre la versión texto, y por suerte ha sido automático, debemos regenerar los binarios desde los textos. Nunca olvidar que en un merge "el texto manda" y el binario se regenera:



Y esperar el mensaje de confirmación:




5.  Hacemos el checkin y confirmamos que en la vista del Explorador de ramas que ha quedado una línea roja de merge sustractivo, que saltea al changeset que queríamos mantener:



6.  Finalmente, confirmamos que tanto el archivo agregado antes ahora se quita, como el código del label verde:


Como podemos ver, en el form no hay rastros del label verde y el botón "Pag.4" se mantiene.




Cómo deshacer un grupo de changesets


La forma de operar es la misma que para uno, pero con una única excepción: en vez de elegir un changeset se deben elegir dos.
Si que queremos deshacer los changesets marcados en naranja, debemos marcar (click) el de la izquierda (flecha verde) y luego marcar el de la derecha con ctrl+click (la otra flecha verde). Visualmente se puede comprobar la selección porque el fondo azulado del changeset es un poco más claro y porque el borde redondeado deja de ser gris claro y es gris oscuro:


Ejemplo 1 - Cuando los changesets a Deshacer están en la misma rama

En este caso todos los cambios están en la misma rama, por lo que el merge sustractivo también se hace en la misma rama.



Ejemplo 2 - Cuando los changesets a Deshacer están en distintas ramas

En este caso todos los cambios se han hecho en una rama secundaria (fdbozzo2), luego fueron integrados en la rama de tarea con un merge (punto A - flecha verde) y luego fueron deshechos con un merge sustractivo de la rama secundaria (fdbozzo2) pero con destino en la primaria (punto B - flecha roja)



El motivo de elegir un changeset más a la izquierda de la selección, es que se trata de un intervalo abierto-cerrado, donde la parte abierta (flecha verde izquierda) se selecciona pero no está incluida, y la parte cerrada (flecha verde derecha) se selecciona y está incluida.

El resto es igual que lo visto para un changeset.


Hasta la próxima!

Artículos relacionados:
PlasticSCM: ¿Qué es el Merge?
Control de Código Fuente: Terminología común que hay que conocer
PlasticSCM: ¡Houston, tenemos problemas!