[El Bruno] El mejor regalo para estas fiestas

Buenas,

desde hace unos años, no coincidimos con mi chica en los regalos para fin de año, por lo general no me dejan comprar el coche que quiero, o fallan mis planes para conquistar el mundo con robots que utilicen tecnología Microsoft, esto ocasiona que estas fechas sean poco agradables para mi.

Sin embargo, el 2007 me ha traido el mejor regalo de todos: durante los últimos nueve meses con mi chica hemos diseñado y compilado la primera versión de Valentino Capuano. Y hoy 27 de diciembre de 2007, hemos desplegado ha nacido mi primer hijo.

Una vez más, una foto vale más que mil palabras:

 

Saludos @ Hospital

El Bruno

PD: por las dudas que alguien no me conozca, no conozca a mi chica o no conozca a Valentino, en la foto superior, de izquierda a derecha podemos encontrar a El Bruno, Valentino y La Pao.

 

Share this post :


Crossposting from ElBruno.com

[DSL] DSL Integration Service, integracion y referencias entre DSLs

Buenas

si llevas trabajando un tiempo utilizando las Domain Specific Language Tools, seguramente te encontrarás en una situación donde necesites compartir información entre diferentes modelos. Hace un tiempo, explique como “cargar” una instancia de un DSL utilizando el modelo de objetos que se genera con el mismo, pero ¿qué sucede cuando quieres tener una referencia a un modelo desde otro, o a determinadas partes del mismo?

Si partimos de la base que un DSL (por definición) debe estar enfocado a pequeños dominios de negocio, cuando pensamos en un concepto un poco más global, seguramente nos enfrentaremos a un escenario donde necesitemos integrar información de diferentes DSLs.

 

DSL Integration Service

La versión actual de Domain Specific Language Tools no permite realizar integración entre DSL diferentes. Sin embargo, podemos utilizar Visual Studio DSL Integration Service (DIS) para realizar esta tarea. DIS es una parte del Microsoft.VisualStudio.Modeling.Integration Package, cuyo objetivo y función principal es permitir la creación de referencias de elementos entre diferentes modelos DSL.

Lamentablemente, este paquete no está soportado por el equipo de desarrollo de VSX, y tampoco hay mucha información al respecto, pero jugando un poco y gracias a un poco de Reflector se pueden obtener resultados interesantes.

 

Tutorial – DIS Sample

Para demostrar la utilización del mismo, volveremos al ejemplo (que maduro post a post), donde tenemos un pequeño DSL que permite modelar proyectos y asignar usuarios al los mismos.

1. Agregar Referencias

Lo primero que debemos realizar es agregar una referencia a Microsoft.VisualStudio.Modeling.Integration en el proyecto Dsl y automáticamente se agregará en el proyecto DslPackage. Usualmente este assembly se encuentra ubicado en ..Program FilesMicrosoft Visual Studio 8Common7IDEPublicAssembliesMicrosoft.VisualStudio.Modeling.Integration.dll

 

2. El siguiente paso consiste en la publicación de nuestro modelo como un modelo “navegable”. Debemos decorar nuestro proyecto con el el atributo RegisterAsExportable. Para esto modificamos el archivo Package.tt dentro del proyecto DslPackage y agregamos en la sección superior la declaración de la variable domainModelRoot (línea 5).

Además dentro del archivo Package.tt agregamos al final del mismo, la sección que decora el paquete utilizando el atributo RegisterAsExportable (líneas 29 a 36). 

1 <#@ Dsl processor="DslDirectiveProcessor" requires="fileName='....DslDslDefinition.dsl'" #> 2 <#@ include file="DslPackagePackage.tt" #> 3 <# 4 string directiveName = "Dsl15"; 5 string domainModelRoot = "ExampleModel"; 6 #> 7 // 8 // Package attributes which may need to change are placed on the partial class below, rather than in the main include file. 9 // 10 namespace <#= CodeGenerationUtilities.GetPackageNamespace(this.Dsl) #> 11 { 12 /// <summary> 13 /// Double-derived class to allow easier code customization. 14 /// </summary> 15 /// <remarks> 16 /// A package load key is required to allow this package to load when the Visual Studio SDK is not installed. 17 /// Package load keys may be obtained from http://msdn.microsoft.com/vstudio/extend. 18 /// Consult the Visual Studio SDK documentation for more information. 19 /// [VSShell::ProvideLoadKey("Standard", Constants.ProductVersion, Constants.ProductName, Constants.CompanyName, 1)] 20 /// </remarks> 21 [VSShell::ProvideMenuResource(1000, 1)] 22 [VSShell::ProvideToolboxItems(1)] 23 [VSTextTemplatingHost::ProvideDirectiveProcessor(typeof(global::<#= this.Dsl.Namespace #>.<#= directiveName #>DirectiveProcessor), global::<#= this.Dsl.Namespace #>.<#= directiveName #>DirectiveProcessor.<#= directiveName #>DirectiveProcessorName, "A directive processor that provides access to <#= directiveName #> files")] 24 [global::System.Runtime.InteropServices.Guid(Constants.<#= dslName #>PackageId)] 25 internal sealed partial class <#= dslName #>Package : <#= dslName #>PackageBase 26 { 27 } 28 29 [Microsoft.VisualStudio.Modeling.Integration.RegisterAsExportable( 30 typeof(<#= directiveName #>DomainModel), 31 typeof(<#= directiveName #>SerializationBehaviorMonikerResolver), 32 typeof(<#= domainModelRoot #>), 33 typeof(<#= directiveName #>SerializationBehavior))] 34 internal sealed partial class <#= dslName #>Package : <#= dslName #>PackageBase 35 { 36 } 37 }

 

3. En este momento modificaremos el modelo agregando una nueva propiedad al UserElement llamada ReferencedUserElement. El objetivo de esta nueva propiedad es poder realizar una referencia a otros UserElements del modelo actual o de otros modelos, permitiendo la selección de los mismos.

 

4. Para permitir la selección de un UserElement desde la propiedad ReferencedUserElement, debemos agregar los siguientes atributos a la propiedad Custom Attributes:

    • Microsoft.VisualStudio.Modeling.Integration.TargetClass
      • @”ElBruno.Dsl15UserElement”
    • System.ComponentModel.Editor
      • typeof(Microsoft.VisualStudio.Modeling.Integration.Editors.ExportedClassEditor)
      • typeof(System.Drawing.Design.UITypeEditor)
    • System.ComponentModel.TypeConverter
      • typeof(Microsoft.VisualStudio.Modeling.Integration.ExportedInstanceConverter)

  • El 1er atributo Microsoft.VisualStudio.Modeling.Integration.TargetClass determina qué elementos del modelo se desea examinar.
  • El 2do atributo System.ComponentModel.Editor determina qué editor se utilizará para seleccionar los valores de esta propiedad.
  • El 3er atributo System.ComponentModel.TypeConverter especifica el tipo de converter utilizado para la conversión a String de la selección de un elemento de un modelo.

5. En este momento ya podemos transformar el código y compilar el proyecto y veremos que si lanzamos el proyecto de debugging veremos que los shapes de usuarios poseen una nueva propiedad que permite seleccionar un elemento de usuario.

 

DIS Does not support [Generate Double Derived = True]

Cuando seleccionamos la misma y presionamos F4 o hacemos click en el boton (…) veremos que nos encontramos con el siguiente error:

--------------------------- Microsoft Visual Studio --------------------------- Unable to locate DomainObjectIdAttribute attribute in type 'ElBruno.Dsl15.UserShape' --------------------------- OK ---------------------------

 

Y aquí el problema se complica bastante ya que DIS no soporta el trabajo con elementos que tengan la propiedad Generate Double Derived = True. En nuestro caso a esta propiedad la hemos utilizado bastante ya que con la misma, generamos las diferentes personalizaciones visuales en nuestro modelo (el fondo del DSL, los textos multilínea, etc.).

6. La solución para este caso es volver a False todos los elementos donde se haya cambiado la propiedad Generate Double Derived. Al momento de compilar nos encontraremos con varios errores, ya que como hemos generado código personalizado para la personalización de componentes visuales, este código no encuentra lugar para compilarse.

 

Solución temporal: comentar el código que dispara excepciones.

 

7. Compilar nuevamente la solución y lanzar el proyecto de Debug. Veremos que hemos perdido las personalizaciones visuales pero sin embargo si seleccionamos un elemento del tipo UserElement y editamos la propiedad ReferencedUserElement, veremos que podemos lanzar un editor para la selección de UserElement.

 

8. Lo interesante de la utilización del DIS, es que permite navegar y seleccionar los diferentes elementos que componen la solución. Como en la definición de la propiedad hemos restringido el acceso a solo aquellos que sean del tipo ElBruno.Dsl15, podremos navegar sobre todas las intancias de los mismos. Por ejemplo si agregamos un nuevo proyecto, y dentro del mismo agregamos un nuevo modelo con información de ejemplo, podremos ver que la selección de UserElement aparece este nuevo modelo.

 

Conclusión

Utilizando DIS podremos realizar referencias entre diferentes diseñadores creados utilizando Domain Specific Language Tools de una forma rápida y sencilla. Si bien este paquete no está soportado, su utilización es muy simple y bastante directa. Lamentablemente, DIS posee restricciones y una de ellas para mi no tiene justificación limita mucho la creación de los DSLs.

Todavía no he exprimido a fondo las posibilidades de este paquete, pero seguramente posee muchas otras virtudes y otras restricciones que iré explorando poco a poco (obviamente que también postearé al respecto).

Pueden descargar el proyecto de ejemplo desde http://geeks.ms/files/folders/elbruno/entry59709.aspx (thanks Rodrigo, upss perdon thanks Geeks.ms jejeje)

 

Solución al problema de la propiedad [Generate Double Derived = True]

He escrito cerca de 10 posts relacionados con las opciones que podemos utilizar para personalizar los modelos que creemos con las Domain Specific Language Tools. Una simple restricción no debería afectar tanto a la utilización de las mismas. Por ejemplo, ya que no podremos realizar un override del método InitilizeShapeFields para definir las propiedades de visualización, porque el mismo no está generado en 2 clases separadas, podremos utilizar otro override para realizar esta tarea.

Por ejemplo en el siguiente código correspondiente al Diagrama principal del DSL, hemos reemplazado el método InitilizeShapeFields por un nuevo metodo llamado SetDefinedStyle (línea 22) y luego llamando a este método desde la propiedad StyleSet (línea 11, a la que también hemos sobreescrito).

 

1 namespace ElBruno.Dsl15 2 { 3 public partial class Dsl15Diagram 4 { 5 6 /// <summary> 7 /// Gets an instance of the style set for the shape. 8 /// </summary> 9 /// <value></value> 10 /// <returns>An instance of the style set for the shape; otherwise, if there is no style set for the shape, the class style set. </returns> 11 public override StyleSet StyleSet 12 { 13 get 14 { 15 SetDefinedStyle(this.ShapeFields); 16 return base.StyleSet; 17 } 18 } 19 20 //protected override void InitializeShapeFields(IList<Microsoft.VisualStudio.Modeling.Diagrams.ShapeField> shapeFields) 21 22 private void SetDefinedStyle(IList<Microsoft.VisualStudio.Modeling.Diagrams.ShapeField> shapeFields) 23 { 24 base.InitializeShapeFields(shapeFields); 25 26 // add backgroung image to the designer 27 ImageField backgroundImage = new ImageField("background", Properties.Resources.fondo); 28 backgroundImage.DefaultFocusable = false; 29 backgroundImage.DefaultSelectable = false; 30 backgroundImage.DefaultVisibility = true; 31 shapeFields.Add(backgroundImage); 32 33 // define Background Image margins 34 backgroundImage.AnchoringBehavior.Clear(); 35 backgroundImage.AnchoringBehavior.SetTopAnchor(AnchoringBehavior.Edge.Top, -1.5); 36 backgroundImage.AnchoringBehavior.SetLeftAnchor(AnchoringBehavior.Edge.Left, 0); 37 } 38 } 39 } 40

Aplicando este cambio ya podremos tener nuestro DSL con elementos multilínea, background personalizado y capacidades para la sección de elementos utilizando DIS. 😀

 

 

Fuentes

 

Saludos @ Hospital

El Bruno

 

Share this post :


Crossposting from ElBruno.com

[VS2008] Work Offline con TFS

 

Buenas,

antes de comenzar con el post, una pequeña reflexión; es cierto que Microsoft Visual Studio 2008 soporta “multitargeting”, pero no por eso la migración de proyectos de Visual Studio 2005 a Microsoft Visual Studio 2008 es transparente. Si además de Visual Studio utilizas algún producto de 3ras partes o alguna implementación especial, seguramente tendrás un poco de trabajo extra. Y es en este proceso de migración, donde seguramente te encontrarás con algunas de las novedades de Microsoft Visual Studio 2008 y es muy probable que disfrutes con las mismas.

Una de las que más me gustan en la capacidad de trabajar en modo desconectado con un servidor Team Foundation Server en forma nativa desde el IDE de Visual Studio. (actualmente con Visual Studio 2005, se puede realizar esta tarea utilizando las Power Tools para VS, pero además de ser una herramienta de linea de comando poco amigable, el resultado de la misma suele ser un poco “disfuso” cuando trabajamos con muchos archivos en modo desconectado)

Volviendo al modo OffLine, supongamos que estamos trabajando en un pequeño proyecto de librería de clases, utilizando Microsoft Visual Studio 2008 contra un servidor Team Foundation Server 2005. Si en algún momento perdemos la conexión con nuestro servidor TFS e intentamos abrir nuestro proyecto, veremos la siguiente advertencia:

--------------------------- Microsoft Visual Studio --------------------------- Go Offline The Team Foundation Server http://TFSSERVER:8080/ is currently unavailable. This solution will be opened offline. --------------------------- OK Help ---------------------------

 

Nuestro proyecto aparecerá como un proyecto no controlado en el Solution Explorer (como muestra la siguiente imagen). Cuando modifiquemos un archivo veremos que el mismo se encuentra protegido (con la protección de escritura que es el mecanismo que se utiliza para el control de los archivos) y que Visual Studio nos ofrece una serie de opciones para saltar esta protección contra escritura:

 

A partir de este momento, todos los cambios que realicemos dentro del proyecto se realizarán sobre nuestra copia local de los archivos de la solución. Finalmente cuando la conexión con el servidor TFS se reestablesca podremos volver a un modo Online (conectado) simplemente desplegano el menú contextual sobre la solución o proyecto y seleccionando la opción Go Online como muestra la siguiente imagen:

 

Cuando seleccionamos la opción Go Online, veremos que Visual Studio realiza un pequeño análisis para determinar cuales son los archivos que hemos modificado mientras estabamos desconectados y nos ofrece la posibilidad de definir estos cambios antes de pasar al modo OnLine.

 

 

Una vez que hemos pasado al modo OnLine, veremos que los archivos que modificamos se encuentran desprotegidos y nuestro esquema de trabajo continua como si nunca hubiesemos perdido conexión contra el servidor de Team Foundation Server.

Otro de los small details de Microsoft Visual Studio 2008, que hacen que este IDE sea una mejora sustancial sobre VS2005. Una vez más, si no has migrado … Just Do It !!!

 

Saludos @ Home y Feliz Navidad

El Bruno

 

Share this post :


Crossposting from ElBruno.com

[TFS] Team Foundation Server 2008 Power Tools Released !!!

 

Buenas

una vez migrados todos los entornos de desarrollo a Microsoft Visual Studio 2008, y con el server casi completo, una de las mejores cosas que podían pasarnos es que se liberen las Team Foundation Server Power Tools 2008. Nuestros grandes amigos de MSDN han escrito bastante al respecto y un post imperdible es el de Brain Harry (blog imperdible sobre VSTS).

Team Foundation Server Power Tools 2008 incluye las siguientes herramientas:

Estas son algunas de las new features que mas me han llamado la atención:

  • Eliminación de WorkItems … sin palabras, genial !!!
  • Versión standalone para el editor de Process Templates, volviendo al tiempo de la gente de Imaginet
  • Generador de notificaciónes personalizadas para los procesos de Build.
  • Búsqueda en Source Control, siempre útil y complicado por ahora
  • etc.

Detalles: http://msdn2.microsoft.com/en-us/tfs2008/bb980963.aspx

Descarga: http://www.microsoft.com/downloads/details.aspx?FamilyId=7574836F-4A0B-454F-A340-85DA4698177C&displaylang=en

 

Saludos @ Home

El Bruno

 

Share this post :


Crossposting from ElBruno.com

[TFS] TFS 30042, el error que esperas el viernes antes de navidad

Buenas

vamos que si par de horas antes de partir a casa, en el fin de semana de navidad, te encuentras con el inesperado pero posible

TF30042: The database is full. Contact your Team Foundation Server administrator.

te replanteas la cantidad de mala suerte que posees, o tratas de averiguar que hiciste mal en una vida anterior.

Pero, mejor un poco de paciencia, a verificar que le pasó al server y a hacer un poco de lugar:

 

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

[VS2008] Corrector ortografico en las reglas para el Analisis de Codigo

Buenas

una de las cosillas que más me gusta de Microsoft Visual Studio 2008, es que en el nuevo set de reglas de análisis de código (heredado de FxCop 1.35) se incluye la posibilidad de verificar la ortografía del código que escribimos. No voy a entrar en detalles sobre si esta nueva feature esta bien o mal, pero si explicaré como activar la misma, porque realmente da unos resultados muy interesantes.

Si creamos un nuevo proyecto de tipo Aplicación de Consola en Visual Basic .Net o C#; podremos ver dentro de las reglas de análisis de código del mismo un par de reglas nuevas, por ejemplo las CA1703: Resource strings should be spelled correctlyCA1704: Identifiers should be spelled correctly:

 

La primera regla valida la ortografía de los contenidos que agreguemos en los archivos de recursos de nuestro proyecto. A simple vista, la prueba de esta regla debería ser tan simple como crear un nuevo recurso y agregar texto inváido dentro del mismo:

 

 

Sin embargo, en este punto surgen un par de preguntas que debemos tener en cuenta para “ayudar” al motor de análisis de código: con qué cultura trabajaremos por defecto? y qué cultura es la que tiene por defecto nuestro archivo de recursos?.

Pues bien, para definir esta información, en primer lugar debemos editar nuestro archivo de proyecto y agregar el siguiente contenido:

</PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProductVersion>9.0.21022</ProductVersion> <SchemaVersion>2.0</SchemaVersion> ... <CodeAnalysisCulture>en-US</CodeAnalysisCulture> </PropertyGroup>

donde el elemento <CodeAnalysisCulture /> define la cultura que se utilizará para el análisis de código en la configuración definida por el elemento <Configuration />. En este caso he decido utilizar la cultura de nuestros amigos de Seattle: en-US.

Adicionalmente, para definir la cultura por defecto que poseerá nuestro archivo de recursos debemos modificar el archivo AssemblyInfo.vb de nuestro proyecto y agregar el siguiente atributo:

Imports System.Resources ''' Aditional Code goes here <Assembly: NeutralResourcesLanguageAttribute("en-US")>

Donde el atributo System.Resources.NeutralResourcesLanguageAttribute define la cultura para el archivo de recursos de nuestro proyecto.

Pues bien, en este momento si compilamos nuestro proyecto y habilitamos el análisis de código, podremos ver el siguiente Warning:

MSBUILD : warning : CA1703 : Microsoft.Naming : In resource 'ConsoleApplication1.Resources.resx', referenced by name 'MyName', correct the spelling of 'nombre' in string value 'Mi nombre es Bruno'. Code Analysis Complete -- 0 error(s), 1 warning(s) Done building project "ConsoleApplication1.vbproj". ------ Build started: Project: ClassLibrary1, Configuration: Debug Any CPU ------ ClassLibrary1 -> C:ProjectsLabs2008Project1ConsoleApplication1ClassLibrary1binDebugClassLibrary1.dll ========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ==========

¿La solución? pues cambio el valor del recurso por un contenido válido en inglés y todo compila perfectamente.

Aunque he aquí un par de datos interesantes

  • la corrección ortográfica funciona utilizando el modelo de objetos de Word 2003, asi que si piensan en un entorno con un servidor de compilacion (TFS), es necesario pensar además en una licencia de Word para este servidor.
  • Esta feature no funciona por defecto con Office 2007 (o eso me parece). Sin embargo, si instalamos las Office 2003 Proofing Tools se activa el funcionamiento.

Pueden descargar el proyecto de ejemplo desde http://geeks.ms/files/folders/elbruno/entry58807.aspx

Update: si además quieren utilizar un diccionario personalizado para la corección ortográfica, el amigo Luis ha escrito un excelente artículo hace un tiempo; http://geeks.ms/blogs/lfraile/archive/2007/08/22/agregar-quot-palabros-quot-al-diccionario-del-code-analysis-en-orcas.aspx

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

[Lego] Mindsensors.com (para frikis extremos)

Buenas

Si ya te has cansado de jugar con tu LEGO Mindstorms NXT, y no sabes que más puedes armar; te propongo un par de opciones:

  • Puedes crear este Robot Gimnasta y verificar en cuanto tiempo tu Lego se autodestruye
  • Otra opción puede ser crear este Bot Utilitario para ayudar en las tareas del hogar
  • Puedes aterrorizar a tus vecinos con este Insecto Demoníaco
  • O puedes crear un lanzallamas y verificar si todavía no te has dado cuenta que las piezas del Lego son de plástico

Si además te sobran unos €€€ para hacer algun regalo de navidad, una buena opción es dar una vuelta por http://www.mindsensors.com. Este site se dedica a la creación de sensores adicionales para Lego Mindstorm NXT (y para el RCX). Puedes regalarle a tu chica uno de los siguientes accesorios y seguramente serás elegido como la mejor pareja de estas navidades.

Entre los que más me han llamado la atención están:

  • Cámara para NXT
    Esta cámara se conecta a NXT en un puerto de sensor estándar. Reporta las coordenadas de hasta 8 objetos al Lego NXT. Además puede ser conectada al ordenador a través de un puerto USB.
  • Sensor de Aceleración
    Permite recolectar métricas sobre los movimientos de aceleracion. La mejor forma de pensar en su utilización: un mando de Wii, como en el video.
  • Sony PlayStation 2 para NXT 
    Permite conectar un mando de Sony PlayStation 2 Controller al NXT.
  • Sensor de infrarrojos a distancia para NXT de largo alcance
    Alta resolución lecturas en milímetros. Rango: 20cm a 150cm
  • Port Splitter para NXT
    Este splitter permite que crear 4 puertos a partir de 1 para asi conectar hasta 3 dispositivos.
  • Cables para NXT
    Si como a mi, tus gatos te comen los cables del Lego, aqui están más baratos que en el site oficial

Cada uno de los componentes que se venden, poseen una interfaz pública para trabajar con ellos. De esta forma y despues de varias cañas puedes crear un sensor al estilo Wii-Mote para controlar un brazo robótico.

 

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

[OffTopic] Tafiti.Source = Open (abierto como el Corte Ingles en Navidad)

Tafiti Search Visualization.pngBuenas

noticia interesante para leer un poco y aprender otro poco más.

Tafiti Search Visualization (tree).pngEl código fuente de Tafiti (www.tafiti.com) está disponible para su descarga desde http://codeplex.com/WLQuickApps.

Tafiti es un sitio de búsqueda que que se creó originalmente para demostrar las capacidades de Silverlight y de las API de Windows Live Search.

En este momento se pueden descargar los fuentes desde aquí y a ver quien es el primer valiente que le da un “retoque” y saca su propia versión.

 

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

[DSL] Desplegando proyectos

 

Buenas

antes de pasar a temas más complicados como la migración de proyectos a Microsoft Visual Studio 2008, un punto que me quedó pendiente de repasar para los proyectos que trabajen con Domain Specific Language Tools, es el despliegue de estos proyectos. Las Domain Specific Language Tools incluyen un template de proyecto para la distribución de aplicaciones y existen otras opciones muy interesantes como el template que distribuye Clarius.

En este caso, partiré de mi ejemplo anterior y sobre esta solución seleccionaremos la opción de agregar un nuevo proyecto del tipo Domain Specific Language Setup.

 

Como podremos ver, este proyecto “automáticamente” asume que existen los proyectos iniciales Dsl y DslPackage y genera a partir de los mismos una serie de archivos Xml que son los que se compilan en el instalador final. Estos archivos se compilan utilizando una suite de herramientas para la creacion de instaladores llamada WiX. WiX un proyecto open source y que está alojado en http://win.sourceforge.net. La descarga de las herramientas de WiX, consisten en una serie de ejecutables que procesas estos archivos, los más conocidos e importantes son Candle.exe y Light.exe.

 

En el caso de un proyecto simple, como es el de este ejemplo, el proyecto generado es lo suficientemente completo como para generar un instalador que abarque todos los módulos que necesitamos. La base de este proyecto es el archivo InstallerDefinition.dslsetup, ya que sobre el mismo trabajan otros archivos .tt para generar la información de compilación.

Sin embargo, existen algunos puntos que se pueden personalizar para lograr un proyecto de despliegue más completo:

  • Dentro de los directorios Resources y Files del proyecto de setup se encuentran los archivos de soporte para el instalador, como el header para los formularios del asistente, el archivo de licencia, etc.
  • Si nuestro proyecto, requiere además otros archivos, los podremos agregar dentro de la sección <supportingFiles> del archivo principal
<supportingFiles> <supportingFile name="Readme" filePath="FilesReadme.htm" installShortcut="true" shortcutIconPath="ResourcesReadmeShortcut.ico" openAfterInstall="true" /> <supportingFile name="Sample" filePath="FilesSample.xlsx" installShortcut="true" shortcutIconPath="ResourcesSample.ico" openAfterInstall="true" /> </supportingFiles>

Por ejemplo el xml anterior, incluye una referencia a un archivo de Excel llamado Sample.xlsx, incluido dentro del proyecto de Setup en el directorio Files y además hace referencia al ícono Sample.ico para mostrar el mismo.

  • Si nuestro proyecto, requiere además otros assemblies que sean el resultado de la compilación de otros proyectos en la solucion, los podremos agregar dentro de la sección <supportingAssemblies> del archivo principal
<supportingAssemblies> <supportingAssembly name="Dsl" project="Dsl" assemblyPath="ElBruno.Dsl15.Dsl.dll"/> <supportingAssembly name="HelloWorld" project="HelloWorld" assemblyPath="HelloWorld.dll" containsRegistryValues="true" /> </supportingAssemblies>

Por ejemplo el xml anterior, incluye una referencia a la salida de la compilacion de un proyecto llamado HelloWorld, incluido dentro de la solucion de Domain Specific Language Tools.

Personalizado estas y otras opciones, se pueden lograr un proyecto de Setup bastante completo para el despliegue de nuestros DSLs, sin embargo, si la personalización debe ser más potente, recomiendo echarle un vistazo a Software Factory Toolkit de Clarius Consulting. (no entraré en el detalle de la instalación de este producto, ya que podemos encontrarnos un berenjenal interesante de versiones, CTPs, etc. tema para otro post)

Una vez instalado el SFT, deberemos habilitar el package correspondiente para el trabajo con Factorias desde el menú Tools / Guidance Package Manager

A partir de este momento veremos que poseemos una nueva opción desde el menu Add de nuestra solución para agregar un nuevo proyecto de Setup basado en SFT

Cuando seleccionamos este tipo de proyecto, veremos que el asistente solicita que especifiquemos el proyecto que contiene el DSL principal de nuestra solución.

Una vez seleccionado, se creará un nuevo proyecto, que también utiliza WiX para la generación del instalador, pero podremos ver que dentro del mismo la estructura de archivos es diferente y que además los archivos tt, contienen el codigo de generación dentro de los mismos, con lo que podemos “personalizarlos” a nuestro gusto.

 

Pues bien, como toda extensión de Visual Studio, los clásicos proyectos “Hola Mundo” son muy fáciles de implementar, pero cuando quieres algo más complejo, hay que trabajar un poco más. La base de la generación de instaladores es Wix, y recomiendo echarle un vistazo a http://www.tramontana.co.hu/wix/, y sobre la creación de MSIs automatizados con WiX

Finalmente, si trabajas en un entorno con un buen Team Foundation Server y tienes un servidor de compilación, dentro de MSDN está este excelente artículo http://msdn.microsoft.com/msdnmag/issues/07/03/WixTricks/ que puede servir de base para integrar la compilación frecuente de este tipo de proyectos en un ciclo de vida de desarrollo.

 

Cuando comience el 2008, comenzaré a postear sobre DSLs y Microsoft Visual Studio 2008 y cómo no !!! sobre Visual Studio Shell 2008 😀

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

[Download] Microsoft .NET Framework 3.0 Service Pack 1

Buenas

en estas épocas navideñas, el gran despliegue de colores y luces me deja un poco mareado. Es por eso que se me pasan de largo algunos grandes acontecimientos como la lesión de Messi, o el recital atrasado de Led Zeppelin (gracias por volver)

Pero el lanzamiento del Microsoft .NET Framework 3.0 Service Pack 1 es algo que no deberíamos pasar de largo.

La descarga puede realizarse desde http://www.microsoft.com/downloads/details.aspx?FamilyID=ec2ca85d-b255-4425-9e65-1e88a0bdb72a&displaylang=en y esta es la lista de algunos de los problemas solucionados en este SP

932471 (http://support.microsoft.com/kb/932471/) “No puede abrir este documento porque han caducado sus permisos”

932816 (http://support.microsoft.com/kb/932816/) Que CORRIGE: Experimenta varios problemas en Base de Flujo de Windows

935314 (http://support.microsoft.com/kb/935314/) Que CORRIGE: Puede experimentar problemas con conexiones de canal de puesto Windows Communication Foundation

935315 (http://support.microsoft.com/kb/935315/) No se puede iniciar la aplicación COM+ cuando utiliza la herramienta Configuración de Modelo de Servicio de COM+ para exponer los componentes COM+ en la aplicación COM+

935434 (http://support.microsoft.com/kb/935434/) Que CORRIGE: Mensaje de error : ” ” no hay una esta implementación parte del Windows Plataforma FIPS validó algoritmos criptográficos en sistemas compatibles con FIPS cuando usa Windows Communication Foundation para serializar tipos genéricos

936123 (http://support.microsoft.com/kb/936123/) Que CORRIGE Mensaje de error a que abre un flujo de trabajo utilizando el diseñador de flujo de trabajo en Visual Studio 2005:” Error al cargar flujo de trabajo”

936512 (http://support.microsoft.com/kb/936512/) Que CORRIGE: Se produce una pérdida de memoria al enviar muchos mensajes utilizando el transporte NetMsmq en el .NET Framework, 3,0,

938758 (http://support.microsoft.com/kb/938758/) Que CORRIGE: El método Unload puede dejar de responder en un proyecto Base de Flujo de Windows

942520 (http://support.microsoft.com/kb/942520/) Que CORRIGE: Puede experimentar rendimiento lento cuando ejecuta una aplicación Windows Communication Foundation

para el detalle completo revisar http://support.microsoft.com/default.aspx?scid=KB;EN-US;945826#appliesto

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com