- Eliminar proyectos en TFS (Team Foundation Server) 2005
-
Para eliminar un proyecto de Team Foundation Server 2005 podemos utilizar la utilidad en línea de comando TFSDeleteProject, la cual se encuntra en el directorio :\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies, e intrudocir el siguiente comando:
TFSDeleteProject /Server:servername /force projectname
No obstante, ya hay gente que ha pensado como facilitarnos la tarea y ha creado sus propias herramientas visuales para ello, además de libre uso y Open Source en una solución de VS2005; podeis encontrarla en el siguiente post:
http://julien.lavigneducadet.com/index.php?2006/08/03/7-user-interface-to-delete-a-tfs-project

- Creando Redes Virtuales de forma muy sencilla: Hamachi
-
Los videojuegos mueven muchas inquietudes, y cuando no conseguimos iniciar una partida con nuestros coleguitas fastidia muchísimo. Así le ocurría a mi amigo Juanan (al cual le debo este post), el cual intentaba jugar en red a The Age of Empires. En dicho juego, al igual que otros muchos, necesitas una IP única para unirte a la red. ¿Qué ocurre si algunos miembros están dentro de una red internada privada y otros están fueran en Internet? En principio, los que están en la interna no podrán jugar, ya que no habrá forma de reconocer que usuario es cada cual. Por suerte, tenemos solución para ello: crear nuestra propia VPN entre los miembros correspodientes. ¿Y cómo hacemos ello? De forma muy sencilla podemos conseguirlo con la aplicación Hamachi.
Dicho programita, el cual nos ofrece una versión gratuita de menor funcionalidad (pero suficiente), nos permitirá de forma muy sencilla crearnos redes virtuales y compartirlas via internet y/o en una red local propia. La herramienta también nos permitirá compartir archivos y directorios como en una red local normal de Windows.
La comunicación está basada en p2p autenticado y encriptado. (descripción detallada de la arquitectura de seguridad de Hamachi), de modo que nuestros datos irán cifrandos e identificados de forma única. La comunicación se iniciará a partir de un servidor intermediario de la empresa desarrolladora de dicho software, el cual dejará de intervenir una vez iniciada, estableciendo una comunicación directa entre los nodos correspondientes. En principio, los puertos utilizados para establecer la comunicación son el 12975 y el 32976 bajo TCP, aunque ello puede configurarse y variar (más información de los puertos utilizados).

En la imagen vemos la sencilla intefaz, la cual nos muestra la IP asignada a nuestro adaptar de red virtual creado por la aplicación, y podemos examinar los usuarios conectados a la VPN.
Himachi no sólo funciona para la plataforma Windows (2000, XP, 2003 y Vista), también para Linux y Mac.
- Work Items jerárquicos en Rosario (codename del siguiente Visual Studio Team System a VSTS 2008)
-
Una de la mejoras que podremos encontrar en Rosario (supongo que habrá algún español en el equipo de desarollo
) será la capacidad de crear Work Items jerárquicos. Hasta este momento, usábamos sobre TFS (Team Foundation Server) las áreas y las iteraciones para simular la jerarquía de los Work Items. No obstante, en programas máduros y muy utilizados para la gestión de proyectos como MS Proyect, ya se permitía la creación jerárquica de aquellos, lo cual es muy útil e intuitivo.
No obstante, esta aún reciente y joven versión de Rosario sólo acepta jerarquía de Work Items sobre Excel y Team Explorer, no siendo todavía integrado MS Proyect, aunque se espera que ello ocurra.
Podeis encontrar un ejemplo de ello en el siguiete post:
http://www.holliday.com.au/blog/tfs-rosario-feedback-hierarchical-work-items.html
También podeis leer más sobre Rosario, y Team System en general, en este otro blog:
http://blogs.msdn.com/jeffbe/default.aspx
Para los que todavía seguimos utilizando TFS 2005, podemos encontrar otras herramientas gratuitas y abiertas como , la cual nos permite crear Work Items jerárquicos, aunque no son integrados con TFS, es decir, no son reconocidos por Team Explorer, Excel o MS Proyect.
- Serializar Dictionay de tipos complejos usando Framework 3.0 - WCF
-
Continuando con el anterior post de la serialización de diccionarios, una asignatura pendiente en el Framework 2.x, veremos ahora como conseguirlo con el Framework 3.0 también sobre tipos complejos; es decir, ahora tendremos un diccionario tal que Dictionary<MiTipo1,MiTipo2> y podremos des-serializarlo a XML sin necesidad de implementar nuestras propios diccionarios.
Pasemos directamente a ver un sencillo ejemplo sobre código
; para ello suponemos declarada un sencilla clase "Casa", la cual será uno de los tipos contenidos en nuestro diccionario.
[DataContract]
public class Casa
{
[DataMember]
public string nombre;
[DataMember]
public int habitaciones;
public Casa() { }
public Casa(string nombre,int habitaciones)
{
this.nombre = nombre;
this.habitaciones = habitaciones;
}
}
Como podeis observar, los miembros de nuestra clase están marcados con ciertos atributos especiales. Estos también provienen del ensamblado System.Runtime.Serialization.dll y dan sorporte al nuevo motor de serializacion de WCF (Data Contract Serializer). Son fundamentales si queremos que una entidad o alguno de sus miembros sea serializable.
- Serializando un diccionario de tipos complejos:
Dictionary<string, Casa> diccionario_casas = new Dictionary<string, Casa>(2);
diccionario_casas.Add("iberica", new Casa("iberica", 8));
diccionario_casas.Add("jardinera", new Casa("jardinera", 15));
XmlWriterSettings setting = new XmlWriterSettings();
setting.Indent = true;
XmlWriter xtw = XmlTextWriter.Create("c:/casas.xml", setting);
XmlDictionaryWriter xdw = XmlDictionaryWriter.CreateDictionaryWriter(xtw);
DataContractSerializer dcs = new DataContractSerializer(typeof(Dictionary<string, Casa>));
dcs.WriteObject(xdw, diccionario_casas);
xtw.Close();
- Deserializando un diccionario de tipos complejos:
XmlReader xr = XmlDictionaryReader.Create("c:/casas.xml");
DataContractSerializer dcs = new DataContractSerializer(typeof(Dictionary<string, Casa>));
Dictionary<string, Casa> mundo = (Dictionary<string, Casa>)dcs.ReadObject(xr);
xr.Close();
Para más información http://msdn2.microsoft.com/en-us/library/ms733127.aspx
- Scrum Template for Team System: Error TF30170
-
Además de las dos metodología que nos proporciona por defecto Team System:
- MSF for Agile Software Development
- MSF fro CMMI Process Improvement
también podemos añadirle otras de terceros, destacando entre ellas Scrum for Team System de Conchango. En mi caso, tengo instalado TFS 2005 (Team Foundation Server) en español, así como los WSS (Windows SharePoint Services) también, y dicha plantilla se encuentra en inglés. No fue sorpresa cuando al intentar crear un proyecto con esta última metodología, apereció el siguiente error:
Error
TF30170: The plugin Microsoft.ProjectCreationWizard.Portal failed during task SharePointPortal from group Portal.
Explanation
Plugin error text: “The language id specified in the process template does not exist on the WSS server.”
Podemos solucionar ello instalando el paquete de idiomas de WSS:
Windows SharePoint Services 2.0 Language Template Pack
http://www.microsoft.com/downloads/details.aspx?fa...
- Serializar Dictionay usando Framework 3.0 - WCF
-
Para aquellos que hayan intentado serializar un diccionario con el Framework 2.x (o inferiores), se habrán encontrado con un maravilloso error de que ello no es posible por defecto. ¿Pero si puedo serializar una lista de tipos complejos, tal que List<MiTipo>, por qué no voy a poder serializar un diccionario que es 3/4 de lo mismo? Este problema digamos que se nos escapa de nuestras manos humildes y tendríamos que preguntarselo a los chichos de Redmon, ya que el problema se encuentra dentro del Framework.
Una tipo que quiera ser serializable debe implementar IXmlSerializable, lo cual no lo hace la clase Dictionary, ¿por qué? This is the question. Dicha clase se encuentra en la librería mscorlib.dll y IXmlSerializable en System.Xml.dll, no pudiendo haber dependencias de la primera a la segunda, ya que se crearía una referencia circular (System.Xml ya hace uso de mscorlib).
Para subsanar dicho problema con el Framework 2.x acudíamos al truco del almendruco: creabamos nuestra propia clase Diccionario la cual heredara de Dictionary e implementara IXmlSerializable, algo tal que así:
[XmlRoot("dictionary")]
public class SerializableDictionary<TKey, TValue>
: Dictionary<TKey, TValue>, IXmlSerializable
{ ....
}
Podeis encontrar un ejemplo completo de ello en http://weblogs.asp.net/pwelter34/archive/2006/05/0...
------------------------------------------------
Con la llegada del Framework 3.x, este problema queda solucionado, dándonos soporte el módulo de WCF (Windows Communication Foundation). Concretamente, la librería System.Runtime.Serialization del Framework 3.0 nos proporciona las entidades XmlDictionaryWriter y DataContractSerializer.
Si ahondamos un poco más en la cuestión, veremos como los desarrolladores del Framework 3.0 han solucionado el problema de la posible referecia circular antes comentanda, incorporando la clase XmlDictionaryWriter al ensamblado System.Runtime.Serialization.dll con en el espacio de nombre System.Xml, en lugar de incorporarla al ensamblado supuestamente correspondiente System.XML.dll
La clase DataContractSerializer es la entidad similar a XmlSerializer, encargada de serializar los diccionarios a traves de XmlDictionaryWriter.
Veamos para terminar un poco de código, donde serializaremos un Diccionario de tipos simples. En el próximo post, para no alargar más éste, serializaremos y deserializaremos un diccionario con tipos complejos.
Dictionary<string, string> mundo = new Dictionary<string, string>();
mundo.Add("coche", "renault");mundo.Add("animal", "gato");
XmlWriterSettings setting = new XmlWriterSettings();
setting.Indent = true;
XmlWriter xtw = XmlTextWriter.Create("c:/mundo.xml", setting);
XmlDictionaryWriter xdw = XmlDictionaryWriter.CreateDictionaryWriter(xtw);
System.Runtime.Serialization.DataContractSerializer dcs = new DataContractSerializer(typeof(Dictionary<string, string>));
dcs.WriteObject(xdw, mundo);
xtw.Close();
Si nos vamos a C:/ veremos el nuevo archivo mundo.xml con el siguiente contenido:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfKeyValueOfstringstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<KeyValueOfstringstring>
<Key>coche</Key>
<Value>renault</Value>
</KeyValueOfstringstring>
<KeyValueOfstringstring>
<Key>animal</Key>
<Value>gato</Value>
</KeyValueOfstringstring>
</ArrayOfKeyValueOfstringstring>
- Instalando TeamPlain (Team System Web Access Power Tool) y solucionando errores
-
En un anterior post de Bruno, nos comentaba que ya teníamos disponible la herramienta TeamPlain para nuestro Team Foundation Server. Como bien decía nuestro compañero, dicha herramienta nos permite mediate web configurar y realizar diversas operaciones de forma similar a lo que nos permite Team Explorer desde el mismo Visual Studio, lo cual es una ventaja muy buena.
No obstante, si alguien ha intentado instalarlo sobre su 2003 Server en Español, se habrá encontrado un maravilloso error similar a este:
Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración
Just-In-Time (JIT) en lugar de a este cuadro de diálogo.
************** Texto de la excepción **************
System.Security.Principal.IdentityNotMappedException: No se pudieron convertir algunas o todas las referencias de identidad.
en System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
en System.Security.Principal.NTAccount.Translate(Type targetType)
en System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified)
en System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule)
en Microsoft.TeamFoundation.WebAccess.Config.ACL.SetFolderPermissions(String folderPath, String account)
en Microsoft.TeamFoundation.WebAccess.Config.frmWizard.Install()
en Microsoft.TeamFoundation.WebAccess.Config.frmWizard.cmdInstall_Click(Object sender, EventArgs e)
en System.Windows.Forms.Control.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ButtonBase.WndProc(Message& m)
en System.Windows.Forms.Button.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Ensamblados cargados **************
mscorlib
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.832 (QFE.050727-8300)
Código base: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
.................
y mucho más
Directamente le pasé el problemilla a nuestros compañeros de los foros de msdn, los cuales son unos crack y contestan super rápido. Dicho error se produce durante la instalación en todas aquellas máquinas cuyo idioma del sistema opertivo sea Alemán,Francés, Italiano o Español. Para solucionar ello deberemos realizar los siguientes pasos:
1- Crear un nuevo grupo de usuarios en la máquina donde esté instalado nuestro TFS (Team Foundation Server) que se llamará "Network Service"
2- Añadir a dicho grupo un nuevo miembro , el cual dependerá de nuestro idioma. Concretamente sería uno de los siguientes:
-
German - NT-AUTORITÄT\NETZWERKDIENST
-
French - AUTORITE NT\SERVICE RÉSEAU
-
Italian - NT AUTHORITY\SERVIZIO DI RETE
-
Spanish - NT AUTHORITY\SERVICIO DE RED
3- Volver a realizar la instalación previamente cancelada de TeamPlain, la cual no debería ya de fallar.
Como os decía, esta ayuda la podreis encontrar como fuente primaria original en los foros de msdn en el link siguiente:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1958289&SiteID=1&mode=1
Como material adicional, también podeis encontrar un cortito Webcast que explica la instalación de TeamPlain en el siguiente enlace (ojo, este webcast no tiene en cuenta el error antes comentado ya que lo realiza sobre un sistema en inglés):
http://msdn2.microsoft.com/en-us/teamsystem/bb500979.aspx
A probar el asunto!!!!