jueves, 24 de marzo de 2011

Juego de la vida en C#

Aquí comparto un simulador de juego de la vida hecho en C# 4.0 (WinForms).

Características:

- Variables como Algoritmo, Edad máxima, Ocupación y Tamaño del universo son configurables.
(Presionar F1 para ver la ayuda de las teclas rápidas para modificar estas variables).

- Uso de PLinq para aprovechar al máximo la capacidad de procesadores multinúcleo.

- Uso de Bloqueo de bits (LockBits) para agilizar el rendimiento de la manipulación de la imagen del universo.

Capturas de algunos de los patrones que se pueden lograr:






Presionar F1 para mostrar la ayuda en pantalla.

Algunos algoritmos interesantes que puedes probar (presionando la tecla A) son:

AlgoritmoDescripcion
5678/35678(caótico) diamantes, catástrofes
/3(estable) casi todo es una chispa
1358/357(caótico) un reino equilibrado de amebas
23/3(caótico) "Juego de la Vida de Conway"
23/36(caótico) "HighLife" (tiene replicante)
235678/3678(estable) mancha de tinta que se seca rápidamente
34/34(crece) "Vida 34"


Descarga el código fuente desde Aquí
Si sólo quieres el ejecutable: Aquí

Notas: Necesitarás el .NET Framework 4.0 para poder correr el simulador.

Aquí: http://gols.codeplex.com la última versión en inglés



viernes, 18 de marzo de 2011

Herramientas de comparación y merge en TFS

Los que usamos TFS (Team Foundation Server) para el control de código fuente, sabemos que la herramienta de merge por defecto (Diffmerge) es bastante pobre.

Por suerte Visual Studio 2010 permite configurar el software para comparaciones y merge de código que hagamos dentro de TFS.

Aquí les ofrezco una breve comparación entre Diffmerge y otras dos populares herramientas (WinMerge y KDiff), además de los pasos necesarios para configurarlas dentro de Visual Studio.


Diffmerge (TFS)

• Es la herramienta por defecto del TFS para comparaciones y merges.
• No hay posibilidad de cambiar el tamaño de la fuente.
• La visibilidad del cambio es por línea, no se indica la parte de la línea que cambió.
• Interfaz poco intuitiva y no configurable.


KDiff3 (sourceforge)

• Posibilidad de cambiar el tamaño de la fuente para mayor visibilidad.
• Los cambios se resaltan con códigos de colores en la parte de la línea que sufrió cambios.
• La parte inferior muestra claramente los conflictos que deben ser resueltos manualmente.
• Interfaz configurable.
• Es open source (GNU GENERAL PUBLIC LICENSE)


• Posibilidad de cambiar el tamaño de la fuente para mayor visibilidad.
• Los cambios se resaltan con colores en la parte de la línea que sufrió cambios.
• La parte inferior muestra claramente la diferencia en el conflicto seleccionado.
• Permite visualizar rápidamente todos los cambios del archivo.
• Es open source (GNU GENERAL PUBLIC LICENSE)
• Interfaz configurable.

Estas dos últimas herramientas (WinMerge y KDiff) son bastante similares y oferecen prácticamente la misma funcionalidad, pero sin duda son las mejores herramientas de merge para Windows.
Cuestión de gusto o costumbre cuál prefiera cada uno.

Para configurar el KDiff (o cualquier otra herramienta de merge) dentro del Visual Studio, se procede de la siguiente manera:

1. Dentro de VS2010, menú Tools, Options. Navegar hasta la opción Source Control, Visual Studio TFS. Click en el botón Configure User Tools.

2. En Configure User Tools, agregar un nuevo comando con el botón Add, para asociar el comando de
Compare.

3. Ingresar los siguientes valores del comando de compare y darle OK:
Extension: *
Operation: Compare
Command: Ruta del ejecutable kdiff3
Arguments: %1 --fname %6 %2 --fname %7

4. Agregar otra nueva operación con el botón Add, esta vez para asociar el comando Merge, e ingresar los siguientes valores.
Extension: *
Operation: Merge
Command: Ruta del ejecutable kdiff3
Arguments: %3 --fname %8 %2 --fname %7 %1 --fname %6 -o %4


Listo, con esta configuración las comparaciones y merges que el TFS necesite hacer, se harán a través de la herramienta KDiff3.


Para configurar el WinMerge se procede de la misma forma, lo único que cambia es el comando y los argumentos de los últimos dos pasos, quedando así:

Extension: *
Operation: Compare
Command: winmerge.exe
Arguments: /ub /dl %6 /dr %7 %1 %2
Extension: *
Operation: Merge
Command: winmerge.exe
Arguments: /ub /dl %6 /dr %7 %1 %2 %4

Aquí transcribo una lista de herramientas con los argumentos que deben utilizarse para integrarlas con Visual Studio:
Compare
HerramientaCommandArguments
TFS defaultdiffmerge.exe%1 %2 %6 %7 %5 /ignorespace
WinDiffwindiff.exe%1 %2
DiffDoc (for Word files)DiffDoc.exe/M%1 /S%2
WinMergewinmerge.exe/ub /dl %6 /dr %7 %1 %2
Beyond Comparebc2.exe%1 %2 /title1=%6 /title2=%7
KDiff3kdiff3.exe%1 --fname %6 %2 --fname %7
Araxiscompare.exe/wait /2 /title1:%6 /title2:%7 %1 %2
Compare It!Wincmp3.exe%1 /=%6 %2 /=%7
SourceGear DiffMergeDiffMerge.exe/title1=%6 /title2=%7 %1 %2
Beyond Compare 3BComp.exe%1 %2 /title1=%6 /title2=%7
TortoiseMergeTortoiseMerge.exe/base:%1 /mine:%2 /basename:%6 /minename:%7
Visual SlickEditwin\vsdiff.exe%1 %2

Merge
HerramientaCommandArguments
TFS defaultdiffmerge.exe/merge %1 %2 %3 %4 %6 %7
KDiff3kdiff3.exe%3 --fname %8 %2 --fname %7 %1 --fname %6 -o %4
Visual SourceSafessexp.exe/merge %1 %2 %3 %4 %6 %7
Araxiscompare.exe/wait /swap /a3 /3 /title1:%6 /title2:%7 /title3:%8 %1 %2 %3 %4
Beyond Compare (2-way merge)bc2.exe%1 %2 /savetarget=%4 /title1=%6 /title2=%7
WinMerge (2-way merge)winmerge.exe/ub /dl %6 /dr %7 %1 %2 %4
Guiffyguiffy.exe-s -h1%6 -h2%7 -hm%9 %1 %2 %3 %4
Ellie Computingguimerge.exe--mode=merge3 %3 %1 %2 --to=%4 --title0=%8 --title1=%6 --title2=%7 --to-title=%9
SourceGear DiffMergeDiffMerge.exe/title1=%6 /title2=%8 /title3=%7 /result=%4 %1 %3 %2
Beyond Compare 3BComp.exe%1 %2 %3 %4 /title1=%6 /title2=%7 /title3=%8 /title4=%9
TortoiseMergeTortoiseMerge.exe/base:%3 /mine:%2 /theirs:%1 /basename:%8 /minename:%7 /theirsname:%6 /merged:%4 /mergedname:%9
Visual SlickEditwin\vsmerge.exe%3 %1 %2 %4