Are Out !!! SQL Azure DataSync CTP y Windows Azure Autoscaling Block Beta

Muy buenas,

Hace unos días escribía un post sobre la Preview de SQL Azure DataSync, pues bien, ya tenemos la CTP y, como parece ser que no ha cambiado desde entonces, me ahorro el hacer el tour con la herramienta, jeje..

Como no hay una buena noticia sin dos, también tenemos a nuestra disposición una beta de Patterns & Practices, “Windows Azure Autoscaling Block” que puedes descargar directamente desde desde NuGet:

Si estás interesado como yo en el auto-escalado, entonces empieza por aquí con sus novedades:

  1. El estabilizador aumenta la histéresis (“tendencia de un material a conservar una de sus propiedades, en ausencia del estímulo que la ha generado.”) en el escalo de operaciones mediante la prevención de reglas reactivas de acciones repetidas y erróneas.
  2. El Throttiling (regulador), permite limitar o desactivar ciertas operaciones relativamente caras en la aplicación cuando la carga está por encima de determinados umbrales.
  3. Notificaciones de emails, permite enviar notificaciones a destinatarios configurados para tomar decisiones manuales o realizar alguna otra acción correctiva.
  4. Conjunto valores de contadores para cada role definido en el almacén de información de servicios  (utilizado principalmente por el estabilizador, pero los usuarios también podrán usarlo en operandos de condiciones de la reglas).
  5. Capacidad para definir acciones personalizadas para reglas reactivas.
  6. Capacidad de especificar operandos personalizados para su uso en condiciones de reglas reactivas.
  7. Nueva funciones "Max" y "Growth" en la definición de operaciones.
  8. Mejora en los mensajes para la evaluación de reglas y escalado para determinar mejor lo que está sucediendo en el sistema.
  9. Nuevo ID de evaluación para correlacionar todos los mensajes de registro de un pase de evaluación específica.
  10. Cargas JSON para registrar los mensajes para ayudar a las herramientas que monitoricen e interpreten los mensajes.
  11. Clases de utilidad y definiciones de constantes para leer y analizar los mensajes de registro.
  12. Mejoras en la herramienta de configuración, mejores nombres y descripciones de objetos de configuración, validación, y un editor de cadenas de conexión de Windows Azure.
  13. Actualización de la lógica en el RulesEvaluator.
  14. Renombrado de la propiedad "nombre" por "alias" a fin de eliminar ciertas ambigüedades.
  15. Renombrado "SourceLogger" por "SystemDiagnosticsLogger".
  16. Refactorizado del elemento XML “scale” en el esquema de reglas para hacerlas más amigables (mediante la la eliminación de las propiedades "targetType" y "unit") e inferirlas a partir de su uso.
  17. Proporcionan una mejor definición de puntos cuando hay datos suficientes para que el block/componente pueda evaluar una regla.
  18. Nuevo elemento booleano NOT para especificar condiciones de la regla.
  19. Soporte para expresiones aritméticas básicas (multiplicación y división) en los parámetros en la especificación de condiciones de la regla.
  20. "Rank" (prioridad) a las reglas reactivas.

Para más detalle, no te olvides de CodePlex.

Hasta aquí por el momentosobre el auto-escalado !

Saludos @Working hard…
Juanlu

TFS Integration Tool: Integrando/migrando de CMMI 4.2 a CMMI 5 y mapeos para Task y Requirements

Muy buenas,

No tenía pensado comentar nada al respecto, pero después de aprender a usar la herramienta, detectar algunos bugs y un poco de trabajo de “chinos”, creo que es una pequeña ayuda para que podáis entender la migración entre distintos “Team Projects” con distintas plantillas de procesos:

Antes de nada, para el que no conozca “TFS Integration Tool (o, TFS Integration Platform)” es un herramienta de CodePlex, que facilita la migración/integración entre diferentes versiones de Work Items, Bug Tracking, etc.

Aunque está en beta, siempre que no se haya “customizado” complicadamente algún work item, cosa que no es de extrañar en algún caso, Risa), la herramienta funciona bastante bien, salvo algunas limitaciones en cuanto a items que no son migrados a día de hoy:

  • Check-in notes
  • Labels
  • Permissions
  • Workspaces
  • Pending Changes
  • Shelvesets
  • File encodings
  • Subscriptions
  • Test Cases
  • Check-in policies
  • Reports
  • Team Portal / SharePoint
  • Process Templates
  • Work item queries
  • Builds
  • Warehouse data

Hasta donde he podido llegar, los “Labels” si los migra, Risa.

Aunque podemos encontrarnos casos más complejos, entre otros, que el TeamProject destino exista y ya tenga bastante código, Work Items, changesets, etc, por el momento, os dejo un resumen de mi caso en concreto (desde “MSF for CMMI Process Improvement v4.2” a “MSF for CMMI Process Improvement CMMI5”) donde el TeamProject destino está recién creado:

  • Crea el “TeamProject” destino basado en la Platilla “MSF for CMMI Process Improvement v5.0
  • Abre la consola de administración de TFS y asignar el usuario con el que se vaya a lanzar la migración desde el “TFS Integration” dentro del grupo “Team Foundation Services Account”. Como en la mayoría de los casos seremos nosotros mismos, los que lancemos la migración, pues bastará con seguir los pasos (1) y (2) según indico en la siguiente figura, y si ya apareces como “Administrator Console Users”, haz click en “Reaply” para que se puedan aplicar los permisos oportunos y, todo listo.     Si quieres conocer más información al respecto de este punto, echa un vistazo a este post de “Willy’s Cave”.

image

  • Abre el “TFS Integration”, crea una nueva configuración(“Create new”) y elige “VersionControlAndWorkItemTracking.xml
  • Selecciona el “Workflow Type” “Custom(el resto, en la versión “2.1.10324.0” no parece que vayan del todo bien, no se guardan las reglas, tienes que aplicar de  nuevo la migración y finalmente la esta nunca se produce !!!)

image

  • Utiliza los siguientes valores para realizar tu configuración de Mapeo/Migración:

image

  • En el paso (2) aparecerá una nueva ventana donde tendrás que indicar los mapeos entre los distintos Work Items y sus campos.

image

  • Este mapeo está listo para los Work Items de tipo “Requirement” y “Task”, el resto podrás crearlos tu mismo sin mayor esfuerzo una vez que entiendas estos, eso si, tendrás que conocer las diferencias de campos y poder hacer así el mapeo.
   1: <SettingXml>

   2:   <WITSessionCustomSetting>

   3:     <Settings />

   4:     <WorkItemTypes>

   5:       <WorkItemType LeftWorkItemTypeName="Task" RightWorkItemTypeName="Task" fieldMap="Migrate2Tasks" />

   6:       <WorkItemType LeftWorkItemTypeName="Requirement" RightWorkItemTypeName="Requirement" fieldMap="Migrate2Requirements" />

   7:       <WorkItemType LeftWorkItemTypeName="Bug" RightWorkItemTypeName="Bug" fieldMap="*" />

   8:       <WorkItemType LeftWorkItemTypeName="Issue" RightWorkItemTypeName="Issue" fieldMap="*" />

   9:       <WorkItemType LeftWorkItemTypeName="Change Request" RightWorkItemTypeName="Issue" fieldMap="*" />

  10:     </WorkItemTypes>

  11:     <FieldMaps>

  12:  

  13:       <FieldMap name="Migrate2Tasks">

  14:         <MappedFields>

  15:  

  16:           <!-- Mapeo de todos los campos -->

  17:           <MappedField LeftName="*" RightName="*" MapFromSide="Left" />

  18:  

  19:           <!--- Excepciones a los mapeos  -->

  20:           <!-- Mapeos sin destino -->

  21:           <MappedField LeftName="Severity" RightName="" MapFromSide="Left" valueMap="" />

  22:           <MappedField LeftName="Issue" RightName="" MapFromSide="Left" valueMap="" />

  23:           <MappedField LeftName="Start Change Date" RightName="" MapFromSide="Left" valueMap="" />

  24:           <MappedField LeftName="Exit Criteria" RightName="" MapFromSide="Left" valueMap="" />

  25:           <MappedField LeftName="Test Id" RightName="" MapFromSide="Left" valueMap="" />

  26:           <MappedField LeftName="Test Name" RightName="" MapFromSide="Left" valueMap="" />

  27:           <MappedField LeftName="Test Path" RightName="" MapFromSide="Left" valueMap="" />

  28:           <MappedField LeftName="Estimate" RightName="Microsoft.VSTS.Scheduling.OriginalEstimate" MapFromSide="Left" valueMap="" />

  29:           <!-- Mapeos con cambio en el destino -->

  30:           <MappedField LeftName="Triage" RightName="Microsoft.VSTS.Common.Triage" MapFromSide="Left" valueMap="TriageMap" />

  31:           <MappedField LeftName="Priority" RightName="Microsoft.VSTS.Common.Priority" MapFromSide="Left" valueMap="PriorityMap" />

  32:           <MappedField LeftName="Discipline" RightName="Microsoft.VSTS.Common.Discipline" MapFromSide="Left" valueMap="DisciplineMap" />

  33:           <MappedField LeftName="Task Type" RightName="Microsoft.VSTS.Common.TaskType" MapFromSide="Left" valueMap="TaskTypeMap" />          

  34:  

  35:         </MappedFields>

  36:       </FieldMap>

  37:  

  38:       <FieldMap name="Migrate2Requirements">

  39:         <MappedFields>

  40:  

  41:           <MappedField LeftName="*" RightName="*" MapFromSide="Left" />

  42:  

  43:           <MappedField LeftName="Issue" RightName="" MapFromSide="Left" valueMap="" />

  44:           

  45:           <MappedField LeftName="Rank" RightName="Microsoft.VSTS.Common.StackRank" MapFromSide="Left" valueMap="" />

  46:           <MappedField LeftName="Estimate" RightName="Microsoft.VSTS.Scheduling.OriginalEstimate" MapFromSide="Left" valueMap="" />

  47:  

  48:           <MappedField LeftName="Requirement Type" RightName="Microsoft.VSTS.CMMI.RequirementType" MapFromSide="Left" valueMap="RequirementType2Map" />

  49:           <MappedField LeftName="Priority" RightName="Microsoft.VSTS.Common.Priority" MapFromSide="Left" valueMap="PriorityMap" />          

  50:           <MappedField LeftName="Triage" RightName="Microsoft.VSTS.Common.Triage" MapFromSide="Left" valueMap="TriageMap" />

  51:  

  52:           <!-- These are not exist on target  -->

  53:           <!--<MappedField LeftName="Start Date" RightName="Microsoft.VSTS.Scheduling.StartDate" MapFromSide="Left" valueMap="" />

  54:           <MappedField LeftName="Finish Date" RightName="Microsoft.VSTS.Scheduling.FinishDate" MapFromSide="Left" valueMap="" />-->

  55:  

  56:         </MappedFields>

  57:       </FieldMap>      

  58:     </FieldMaps>

  59:  

  60:     <ValueMaps>

  61:       <!-- Tasks values  -->

  62:       <ValueMap name="TriageMap">

  63:         <Value LeftValue="Pending" RightValue="Pending"/>

  64:         <Value LeftValue="More Info" RightValue="More Info"/>

  65:         <Value LeftValue="Info Recv" RightValue="Info Received"/>

  66:         <Value LeftValue="Triaged" RightValue="Triaged"/>

  67:       </ValueMap>

  68:  

  69:       <ValueMap name="PriorityMap">

  70:         <Value LeftValue="1" RightValue="1" />

  71:         <Value LeftValue="2" RightValue="2" />

  72:         <Value LeftValue="3" RightValue="3" />

  73:         <!--<Value LeftValue="" RightValue="4" />-->

  74:       </ValueMap>

  75:  

  76:       <ValueMap name="DisciplineMap">

  77:         <Value LeftValue="Analysis" RightValue="Analysis" />

  78:         <Value LeftValue="User Experience" RightValue="User Experience" />

  79:         <Value LeftValue="User Education" RightValue="User Education" />

  80:         <Value LeftValue="Test" RightValue="Test" />

  81:       </ValueMap>

  82:  

  83:       <ValueMap name="TaskTypeMap">

  84:         <Value LeftValue="Analysis" RightValue="Corrective Action" />

  85:         <Value LeftValue="User Experience" RightValue="Mitigation Action" />

  86:         <!--<Value LeftValue="" RightValue="Planned" />-->

  87:       </ValueMap>

  88:  

  89:       <ValueMap name="RequirementType2Map">

  90:         <Value LeftValue="Scenario" RightValue="Scenario"/>

  91:         <Value LeftValue="Quality of Service" RightValue="Quality of Service"/>

  92:         <Value LeftValue="Functional" RightValue="Functional"/>

  93:         <Value LeftValue="Operational" RightValue="Operational"/>

  94:         <Value LeftValue="Interface" RightValue="Interface"/>

  95:         <Value LeftValue="Security" RightValue="Security"/>

  96:         <Value LeftValue="Safety" RightValue="Safety"/>

  97:         <!--<Value LeftValue="" RigthValue="Business Objective"/>

  98:         <Value LeftValue="" RigthValue="Feature"/>-->

  99:       </ValueMap>

 100:     </ValueMaps>

 101:   </WITSessionCustomSetting>

 102: </SettingXml>

 103: <SettingXmlSchema />

  • Algunas notas aclaratorias sobre el mapeo:
    • Las líneas de la 5 a la 9, indican los Work Items a mapear.
    • Las líneas 5 y 6 incluyen el atributo “fieldMap” cuyo valor indica el mapeo en particular, que se corresponden con las líneas 17 y 38 respectivamente.
    • Adicionalmente en este código hago algunas aclaraciones al respecto, así que no habrá problema en entenderlo.
    • Las líneas de la 60 a la 100, indican los diferentes valores para las opciones posibles de ciertos campos.
    • Las líneas comentadas se corresponden principalmente con aquellos mapeos de campos que no existen en origen pero si en el destino (en el nuevo TeamProject), por tanto no las mapeo, puesto que no son requeridas.

Nota: Para completar el resto de mapeos, haz uso de los fichero “XML” de las distintas plantillas, así podrás conocer el detalle de los mapeos a realizar.

  • Guarda los cambios “Save to Database.
  • Y comienza con la integración/migración “Current Migration” – “Start

image

  • Una vez finalizado el proceso, podrás comprobar que el nuevo TeamProject contiene todo el código; Work Items, labels, Branching (sin “Trak Changeset” !), changeset asociados, etc., y si estableces como parámetro de configuración,  el “Workflow Type”, “Custom” para un “Frecuency”,  “ContinousAutomatic”, podrás comprobar que a medida que cambias código, haces “CheckIn”, etc., todo se verá reflejado en el nuevo como si se tratara del mismo TeamProject.

De la misma manera que este proceso de integración entre dos TeamProject ha sido un éxito, también podrás hacerlo para distintas “Queries” de origen y por tanto, “Area Path”, etc. El peso principal recae sobre cada uno de los mapeos según he comentado antes, y podrás hacerlo, para distintas plantillas de proceso, Scrum, MSF Agile, etc., e incluso entre distintas  plantillas origen y destino.

Mucha suerte y espero que sirva de ayuda/aclaración, Guiño

Saludos @TFS

Juanlu, elGuerre

SQL Azure DataSync Preview. Sincronizando… ¡Step by step!

Muy buenas,

Como sabéis durante esta semana estamos en el Pass Summit 2011, donde SQL es el protagonista y donde espero que salgan a relucir muchas de las novedades que estamos esperando y principalmente desde el área de Windows Azure, concretamente en este caso, SQL Azure.

Esta son los puntos a tratar sobre SQL Azure :

    1. A lap around Microsoft SQL Azure and a discussion of what’s new
    2. Building Offline Applications for Windows Phones and Other Devices using Sync Framework and SQL Azure
    3. Migrating & Authoring Applications to Microsoft SQL Azure
    4. Building Large Scale Database Solutions on SQL Azure
    5. Introducing SQL Azure Reporting Services
    6. Loading and Backing Up SQL Azure Databases
    7. SQL Azure Data Sync – Integrating On-Premises Data with the Cloud
    8. SQLCAT: SQL Azure Learning from Real-World Deployments
    9. SQLCAT: Administering SQL Azure and new challenges for DBAs

De momento SQL Azure Data Sync en su nueva y reciente versión Preview y su integración en el Portal de Azure.

En un post anterior ya comenté como se llevaba a cabo esta sincronización para la CTP 2. Ahora todo es más intuitivo y fácil gracias a los nuesvos Wizards paso a paso. Muy bien conseguidos, sin duda !!!  +10.

En primer lugar, lo que tenemos que hacer es generar una provisión, y para ello, bastará con hacer click en “Provisión”, acertar los terminos de uso, seleccionar una subscripción y esperar unos segundos.

image

A continuación ya estamos listo para comenzar el proceso de sincronización y seguir el Wizard, ¡a buen entendedor pocas palabras bastan!:

image

He aquí los los pasos para trabajar con esta nueva versión y generar un proceso completo de sincronización en este caso una sincronización BIDIRECCIONAL, entre una BBDD en SQL OnPremise y otra en SQL Azure:

  • Indicar un nombre para el grupo de sincronización, ej.: “Sync 1”

image

  • Añadir al proceso una BBDD SQL local

image

  • La primera vez que ejecutes este paso (2) necesitarás instalar en local el software “Client Sync Agent”, de manera que este permitirá al Portal de Azure configurar las sincronizaciones  conociendo así las conexiones  SQL Server locales. Para completar este paso por primera vez sigue estas indicaciones:

image

image

A continuación descarga e Instala el “Client Sync Agent” (Herramienta de Configuración con SQL Server Local + Servicio Windows).

Introduce un nombre cualquiera a asignar al agente. También tendrás que obtener la Key para poder configurar el “Client Sync Agent”.image

Una vez instalado el cliente (necesitaras las credenciales de un usuario para hacer el logon del servicio Windows (Agente)), sigue estos otros pasos para configurar el agente:

  1. Introduce la key obtenida en el paso anterior haciendo click en el botón "Submit Agent Key Configuration".
  2. Introduce las credenciales del servidor local de SQL Server haciendo click en el botón “Register”.

image

Vuelve al portal. Ahora ya podrás tener acceso a la BBDD local desde el portal de Azure y podrás continuar con el proceso.

Una vez completados los pasos anteriores o si ya tenías configurado un agente puedes optar por uno de las siguientes opciones, dependiendo de si ya habías creado o no una sincronización.

Opción (1) – Por primera vez:

image

image

Opción (2):

image

Paso 3: Ahora a configurar la BBDD de Azure sobre la que queremos realizar el proceso de sincronización, para ello, esta debe existir previamente.

image

Paso 4: Indicar cada cuanto tiempo queremos que se ejecute la sincronización, si queremos o no habilitar el proceso de sincronización y la política de conflictos (que información prevalece ante un conflicto, la de SQL Azure (Hub) o SQL Server Local (Client)),

image

Paso 5: Editar el mapeo de sincronización, (eso sí, de momento para una sóla base de datos) e incluso establecer filtros en relación a valores de campos.

 image

Después de esto y para terminar, lo único que nos queda es “Deploy”.

image

Y aquí, el resultado del portal una vez la sincronización ya está esta en curso:

image

Una vez finalizado el proceso las BBDD, tanto la local como la SQL Azure, incluirán un mayor numero de objetos; tablas, procedimientos almacenados y tipos definidos por el usuario, todos ellos con el prefijo “DataSync.”

image

Proceso listo, modifiquemos donde modifiquemos, en SQL Server o en SQL Azure, la información se verá reflejada en ambos.

También he de decir, que la consulta de logs (Log Viewer) ha mejorado bastante con respecto a su predecesor, ahora permite búsquedas por filtros (Sync Group, Agent, Database, Log Type y Date range):

image

Nota: Si la sincronización en lugar de ser bidireccional, es entre BBDDs de Azure (“Sync between SQL Azure databases”), la instalación del Agente en local no es necesaria.

Ahora a esperar a ver que más nos van contando en el Pass Summit 2011 !!! .

Saludos
Juanlu, elGuerre

Azure Emulator SDK 1.5: “There is already a listener on IP endpoint 127.0.0.1:12001”, Role State Unknow, …

Muy buenas,

Hoy, con ganas de comenzar a ver algunas mejoras de Windows Azure SDK 1.5, parto con la puesta en marcha del entorno y para ello:

  1. Instalar“WindowsAzureToolsVS2010.exe” (Web Installer ) y que en esta versión (todo en uno), incluye tanto el SDK 1.5 como las Tools para Visual Studio 2010.
  2. Seguidamente el Windows Azure AppFabric  1.5  que podéis descargar desde aquí.
  3. Al arrancar en modo debug (F5) la aplicación con un proyecto de Azure

image

Se genera la BBDD “DevelopmentStorageDb20110816” necesaria para la simulación de Windows Azure en local  y todo parece ir bien, perooo, zaaaas, error del Storage Emulator (Alguna vez ya sucedió, pero esta vez se está haciendo de rogar, así que da lugar a un post, Risa).

image

Concretamente el error es:

There is already a listener on IP endpoint 127.0.0.1:12001.  Make sure that you are not trying to use this endpoint multiple times in your application and that there are no other applications listening on this endpoint.

Desde la línea de comando ejecutamos el siguiente comando:

   1: netstat /a /b

Y vemos que, efectivamente un proceso esta ocupando el puerto 12001.

image

Si se matamos el proceso, a veces, se auto-arranca, así que, o “dejamos de usar VMWARE (Cosa que debería hacer)” o bien:

No cambiemos nada en el fichero “C:Program FilesWindows Azure SDKv1.5bindevstoreDSService.exe.config” para ver la configuración del “Windows Storage Emulator” puesto que obtendrás errores del tipo “The process cannot access the file because it is being used by another process”:

image

Por el momento con matar el servicio ha funcionado, pero aun así, me encuentro con este otro error: “Role instances are taking longer than expected to start” (grrr…. vaya día….):

image

Estos son los Know Issues detectados en Windows Azure SDK 1.5 hasta el momento:

  1. Incomplete Windows Azure Blob Download using DownloadToStream, DownloadToFile, DownloadText, and DownloadByteArray methods
  2. Windows Azure SDK 1.5 Compute Emulator Fails to Start
  3. Windows Azure SDK 1.5 Compute Emulator Listen Port Unavailable
  4. IIS7 Logs Are Not Collected Properly

Como nota principal: No debería estar ocupado ninguno de los puertos: 12000, 12001, 12002, 808, 16001, o 15100.

Reviso el “Compute Emulator UI” donde el estado de mi Web Role es “Role State Unknow”.

Finalmente, tras revisar todo nuevamente paso a paso; los diferentes Logs que genera el storage emulador, varios reinicios del visual estudio, deshabilitar los diagnósticos de Windows Azure de mi proyecto, etc, es que el maldito puerto “808” pertenece a los bindings del “Default Web Site” en el IIS.

image

Los eliminamos y después de tantas vueltas, todo queda funcionando correctamente.

Ahora a celebrarlo con unas birras y una buena cena, ¡que es sabadete! Risa.

Espero que a mas de uno le evite una pesadilla !!!

Buen fin de semana a tod@s

Juanlu, ElGuerre

Instalando Windows 8, Visual Studio 2011 y TFS 2011. Despegando…

image

Al final, me he decido a probar, aunque realmente, ¡Ya estaba tardando…! Risa, y en lugar de descargar una máquina virtual ya montada como dice Bruno, aquí, he preferido currármelo un poco, Risa.  Pues  bien, después de unos 11minutos, el Windows 8 ya está instalado en una VM del disco SSD, he aquí algunos pantallazos:

  • Puedes logarte con credenciales de Windows Live ID.

image

  • Menú de Inicio con una experiencia de usuario totalmente nueva, ¡Bueno Windows Phone  ya iba por este camino!.  Las tablets con Windows 8 están cerca Risa!!!

image

  • Task Manager más “cooool”

image

  • Un Windows Explorer con Ribbons.

image

Y mucho más, que te gustará, sin duda, Y si tienes pantalla táctil, más aun, Guiño.

Y lo mejor, que de echo era el objetivo de este post, el Visual Studio 2011. Aunque esta versión de Windows 8 ya viene con  el  Visual Studio 11 Express, yo voy a por la Developer Preview !!!

image

En este caso, después de más de 11 minutos, ya está todo listo para comenzar a indagar, aunque bueno, muchos de vosotros ya lo estáis haciendo, pero yo no voy a ser menos,jeje… entre todos le iremos sacando el jugo !!!

Muchas nuevas características: .NET 4.5, integración con HMTL5, MSBuild 4.5, integración con office, (nuevo para PowerPoint “StoryBoarding”, donde El Bruno, nos deleita con un breve resumen), nuevo TFS 2011(Bruno ya está le está metiendo caña y al que habrá que seguir !).

image

Por aquí, Jason Zander hace un pequeño Tour. Y, además, integración con ASP.NET MVC 4: Nueva pantalla de inicio bastante más currada,  con Popup para el registro, nueva pestaña de contacto con acceso a Tweeter y a Facebook y más.

image

 

Por el momento el problema encontrado tiene que ver con las “Windos Azure Rools for Visual Studio”, habrá que esperar, así que por el momento mientras trabaje con Windows Azure tendré que hacerlo con Visual Studio 2010. Triste.

 image

Finalmente, el TFS ha quedado instalado y listo para comenzar a trabajar e ir poco a poco indagando en las novedades. Fácil, sencillo y sin problema alguno y, eso sí, con un portal de administración mucho más intuitivo y conseguido.

image

 

Hasta aquí, una breve introducción a lo que esta viniendo, y que ya mucho de vosotros estáis comenzado a conocer.

 

Saludos
Juanlu

PD: De nuevo comenzaré a estar por aquí más a menudo. “Hay etapas duras y momentos más complicados, pero todo es paciencia” !!!