December 2007 - Artículos

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

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 Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\Microsoft.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='..\..\Dsl\DslDefinition.dsl'" #> 2 <#@ include file="DslPackage\Package.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.Dsl15\UserElement"
    • 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. :D

 

 

Fuentes

 

Saludos @ Hospital

El Bruno

 

Share this post :
Crossposting from ElBruno.com
Publicado 26/12/2007 20:26 por El Bruno | con no comments

 

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

 

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

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

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:\Projects\Labs2008\Project1\ConsoleApplication1\ClassLibrary1\bin\Debug\ClassLibrary1.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

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

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

 

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="Files\Readme.htm" installShortcut="true" shortcutIconPath="Resources\ReadmeShortcut.ico" openAfterInstall="true" /> <supportingFile name="Sample" filePath="Files\Sample.xlsx" installShortcut="true" shortcutIconPath="Resources\Sample.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 :D

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com
Publicado 19/12/2007 13:50 por El Bruno | con no comments

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
Publicado 16/12/2007 18:41 por El Bruno | con no comments

Buenas

como lo prometido es deuda, he aquí los materiales de la presentación Yo Robot:

No quiero dejar de agradecer muchísimo a los chicos de OnobaNet por las cañitas, las tapitas y las gambas !!! el buen momento que pasamos todos juntos (y perdón por el estado medio muerto en el que nos encontrabamos con JuanLu, eso de las fiestas de fin de año es complicado jejeje).

He aquí unas fotillos del evento y otras para que vean lo bien que se está por Huelva:

 

  • Preparando la sala.

 

  • Presentación en curso

 

 

  • Conociendo un poco mejor huelva

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas

hace un tiempo escribí unas pocas líneas en un post, donde explicaba como agregar un menú personalizado a un proyecto de Domain Specific Language Tools. Una característica añadida a esta funcionalidad puede consistir en mostrar el elemento del menú contextual, dependiendo del tipo de elemento seleccionado.

Si partimos del ejemplo del post anterior y definimos que solamente necesitamos activar nuestro menu "Display Information" cuando el tipo de elemento seleccionado sea un UserShape, debemos modificar la implementación de la función OnPopUpMenuDisplayAction y agregar una validación dentro de la misma, por ejemplo:

1 internal void OnPopUpMenuDisplayAction(object sender, EventArgs e) 2 { 3 MenuCommand command = sender as MenuCommand; 4 5 // The popmenu command is by default disabled 6 command.Visible = false; 7 command.Enabled = false; 8 9 foreach (object selectedObject in this.CurrentSelection) 10 { 11 // validate if the selected element is a User Shape 12 if (selectedObject is ElBruno.Dsl15.UserShape) 13 { 14 command.Visible = true; 15 command.Enabled = true; 16 break; 17 } 18 } 19 }

Como se ve en la rutina de código, entre las líneas 9 y 18, verificamos el tipo de objeto seleccionado y a partir de esta verificación habilitamos el comando para que se accesible.

De esta forma, cuando seleccionemos cualquier tipo de elemento dentro de nuestro diagrama y despleguemos el menú contextual veremos que la opcion "Display Information" está deshabilitada

 

Si en cambio seleccionamos un elemento del tipo User y desplegamos el menú contextual veremos que podremos acceder a la misma y hacer click sobre el elemento del menú

 

El ejemplo se puede descargar desde http://geeks.ms/files/folders/elbruno/entry56705.aspx (thanks Geeks !!!)

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com
Publicado 12/12/2007 13:27 por El Bruno | con no comments

Buenas

interesante colección de material, resultado de la última Strategic Architect Forum llevada a cabo en Redmond durante noviembre. Estaba a punto de marcar mis favoritos, pero creo que en un orden indeterminado, consumiré de a uno todas las presentaciones.

Página oficial: http://msdn2.microsoft.com/en-us/architecture/bb267380.aspx

 

Saludos @ ¿?

El Bruno

Crossposting from ElBruno.com

Buenas

conquistar el mundo no es una tarea simple (un ejemplo de ello lo demuestran las sabias enseñanzas de Cerebro o de Stewie Griffin), y conquistarlo utilizando tecnologías Microsoft es más complicado aún hasta que llegue el Service Pack 1.

Por suerte, nuestros amigos de Onobanet nos han dado una nueva oportunidad y el próximo viernes 14 de Diciembre celebraremos un nuevo evento donde veremos que podemos utilizar el .Net Framework para algunas aplicaciones poco convencionales; además de darle un repaso a las novedades de Microsoft Visual Studio Team System 2008.

Información General del Evento

Descripción: Si desarrollas con tecnología Microsoft, debes saber que no solo puedes crear aplicaciones comerciales con Visual Studio, también puedes divertirte y mucho. En esta charla veremos algunas aplicaciones de Microsoft Robotics Studio y LEGO Mindstorm, cómo trabajar con Visual Studio .Net y un WiiMote, cómo controlar un helicóptero utilizando Visual Studio, y alguna sorpresita más.  

Agenda:

16.00.-  Registro

16.30 .- Introducción a Microsoft Robotics Studio. Por Bruno Capuano.

18.00 .- Descanso

18.30 .- Novedades en Visual Studio 2.008. Por Juan Luis Guerrero.

20.00 .- Ruegos y Preguntas.

Opciones de registro

Id. de evento:
1032358807

Registrarse por Teléfono
902 197 198

Inscripción: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032358807&Culture=es-ES

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com

Buenas,

mientras en el equipo de Soluciones de Avanade Spain, seguimos debatiendo sobre las mejores opciones para abordar una aplicación, me encuentro con una nueva versión del ya popular ADO.Net Entity Framework. Esta versión posee muchos cambios internos con respecto a la Beta 2 pero los más interesantes están orientados a la implementación de la interacción con la DB y LINQ, esta es la lista completa de cambios:

  1. EDM Changes
    1. CommandText attribute on Function element in SSDL schema has been changed to a child Element.
    2. Changed all Enumeration values in Schema Files to have Pascal Casing so that they are consistent.
    3. GetMappedPrimitiveType method on MetadataWorkspace and ItemCollection class has been removed.
    4. StoreItemCollection that is Constructed over SqlConnection needs an Open or Openable connection. Previously a non-null SqlConnection would have worked even if it could not be opened.
  2. Entity Service Changes
    1. Unsigned types have been removed from EDM/CSDL type system.
    2. Obtaining the native SQL generated for a given command has changed. EntityCommand - DbProviderServices.CreateCommandDefinition, ObjectQuery.CreateCommandTree() and DbProviderServices.CreateCommandDefinition are no longer available
    3. Canonical function Edm.Length() ignores trailing white space when connected to SQL Server (any version).
  3. LINQ to Entity Changes
    1. Group By can no longer be applied on a navigation property
  4. Object Service Changes
    1. ObjectStateManager.GetObjectStateEntry() no longer accepts an entity object instance as a parameter
    2. ObjectQuery.First(), -FirstOrDefault(), and -Exists() have been removed.
    3. ObjectQuery.Parameters collection is locked once the query is compiled/executed.
    4. EntityKey.EntityKeyValues has changed from ReadOnlyCollection<KeyValuePair<string, object>> to EntityKeyMember[].
    5. ObjectContext no longer opens a connection during the constructor.
    6. EntityKey class no longer implements IXmlSerializable
    7. EntityKey(EntitySet entitySet, IEnumerable<KeyValuePair<string, object>> entityKeyValues) constructor has been removed.
    8. EntityKey(string qualifiedEntitySetName, string[] keyNames, object[] keyvalues) constructor has been removed
    9. ObjectStateManager.GetEntityKey(object) has been removed.
    10. EntityCollection.CollectionChanged event has been renamed to AssociationChanged
    11. ObjectQuery IListSource implementation is explicitly implemented.
    12. ObjectContext.Refresh no longer takes a params array of objects to refresh.
    13. ObjectQuery.GetResultType() requires the user to open the connection.
  5. Tool Changes
    1. EDMX files created in CTP1 don't always open in CTP2 of the designer
    2. Build error when projects with .edmx files created in Visual Studio Beta 2 and EDM Designer CTP 1 are rebuilt in Visual Studio 2008 RTM

y sobre la clásica pregunta sobre cuando utilizar LINQ y cuando utilizar ADO.Net Entity Framework, me remito a palabras de Microsoft:

Si está escribiendo una aplicación que requiere cualquiera de las siguientes características, se debe utilizar ADO.NET Entity Framework:

  • es necesario poseer una capacidad que permita definir de una forma más flexible la asignación a un esquema relacional existente
  • es necesario poseer una capacidad que permita realizar consultas relacionales almacenadas en versiones diferentes de la familia de productos de Microsoft SQL Server
  • es necesario poseer una capacidad que permita compartir un modelo a través de escenarios de replicación, reporting, inteligencia empresarial, Integration Services, etc.
  • es necesario poseer la capacidad de realizar consultas utilizando un lenguaje que aplique sobre un modelo conceptual sin materializar resultados como objetos

Descarga:

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

Buenas

hablando con el amigo JuanLu y con Walter, comenzamos a comentar lo bien que iba internet en algunos clientes y lo útil que era el mismo para ver la tv online las descargas. Yo creo que lo máximo que encontré de descarga real es lo siguiente:

 

aunque claro, hubo otros ejemplos mejores, de 6 o 7 MBs/seg pero con caché y proxy de por medio.

Lo mejor para probar, dejar descargando un Windows 2000 Server en Polaco (seguramente no estará en el caché) y ver la tasa de descarga ...

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com

Buenas

hoy me preguntaban por mail que hacer si dentro de tu entorno de desarrollo has creado varios proyectos con Domain Specific Language Tools y se ha generado mucha basura en el mismo. Por ejemplo si tu formulario para agregar un nuevo item muestra información como el siguiente:

 

Si ya has probado la opcion para limpiar que viene incluida en el SDK de Visual Studio y sigues teniendo problemas, deberás pasar a una solución más drástica:

eliminar las entradas innecesarias en el registro de Windows

Las entradas que se deberían revisar para Visual Studio 2005, son las siguientes y dentro de cada una de las mismas eliminar la información innecesaria.

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\DslTools\Packages
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\Editors
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\Languages\File Extensions
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\Packages
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\ShellFileAssociations
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\TextTemplating\DirectiveProcessors
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\ToolWindows

Si estas trabajando con Microsoft Visual Studio 2008, las entradas son

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\DslTools\Packages
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Editors
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Languages\File Extensions
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Packages
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\ShellFileAssociations
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\TextTemplating\DirectiveProcessors
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\ToolWindows

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com
Publicado 5/12/2007 0:08 por El Bruno | con no comments
Archivado en:

Buenas

desde que comencé a escribir sobre Domain Specific Language Tools, me han llegado un par de mails preguntando cómo empezar o que pasos a seguir si quieres comenzar a trabajar con esta tecnología. El tema es muy interesante, pero la herramienta es bastante “tediosa”, inclusive en la nueva versión de Microsoft Visual Studio 2008 donde se han arreglado bastantes problemas, el desarrollo sigue siendo complicado.

Es por eso, que antes de comenzar cualquier tipo de desarrollo, debes:

  • Lo principal es tener en claro el dominio de la aplicación sobre el que vas a trabajar (imprescindible)
  • A partir de allí, pensar en que elementos serían parte de tu lenguaje
  • Cuando has pensado en los elementos de tu lenguaje, debes pasar a la gramática, es decir, a definir las relaciones y restricciones que existirán entre los mismos.
  • En este momento cuando tengas toda esta información es recomendable comenzar a crear los primeros diseños “en papel”; esta primera aproximación permitirá pulir los detalles más finos.
  • Finalmente puedes crear un DSL acorde a tu modelo, pero cuidado en este paso, las Domain Specific Language Tools para Visual Stidio son un set de herramientas engañosas que no permiten acciones del tipo Undo o vueltas atrás muy fácilmente; por lo gral si durante el proceso de diseño VS da un error, hay que “tirar todo y comenzar de nuevo
  • El diagrama resultante del DSL te puede permitir el comienzo del proceso posterior para la generación de código cuando hayas cerrado la versión 1.0 del mismo.

 

Saludos @ Everywhere

El Bruno

 

PD: Cómo no hay mucha información en la web, recomiendo no caer en el error de comprar este libro:

Domain-Specific Development with Visual Studio DSL Tools (Microsoft .NET Development Series) (Paperback)

ya que deja bastante que desear y realmente no ayuda mucho para comenzar; cuando tengas un año de experiencia en Domain Specific Language, lo puedes leer para evaluar el punto de vista del autor y tomarte una cerveza con algún amigo.

Crossposting from ElBruno.com
Publicado 4/12/2007 0:17 por El Bruno | 2 comment(s)
Archivado en:

Buenas

he aquí uno de los momentos más incómodos durante una presentación, recuerdo de hace un tiempo y que seguía como un draft entre los post de WLW.

Al momento de hacer balance la conclusión es obvia: debes activar las máquinas virtuales en el período indicado.

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com
Publicado 2/12/2007 21:32 por El Bruno | 2 comment(s)
Archivado en:

Buenas

ya lo comentaban Luis y Rodrigo hace un par de días, la nueva version de Team System Web Access para Team Foundation Server 2008 está disponible para su descarga. Estas son parte de las nuevas características de TSWA

  • Direct Links: esta versión permite crear accesos directos elemento de trabajos y demás característicasde TSWA
  • Performance Improvements: se ha logrado un mayor rendimiento.
  • Custom Work Item Controls: Con el fin de aprovechar esta característica, es necesario implementar versiones web de los controles personalizados que se hayan desarrollado.  Existe mucha documentación de referencia, además de los siguientes ejemplos:
    • Cómo validar un elemento de trabajo en el cliente
    • Cómo validar un elemento de trabajo en el servidor
    • Cómo diseñar un control cuyo campo depende en los valores de otros campos
    • Cómo diseñar un control que cambia otro campo valores y guarda el elemento de trabajo
  • Team Build Support: sería una pena que con las nuevas capacidades de TFS2008 en el Build Server, no tuviésemos las nuevas capacidades disponibles para la version web. Ahora es posible ver la cola de generación y cola de nuevos builds; entre otras cosas

En el post original se describe mas en detalle las características de esta descarga.

Descarga: http://www.microsoft.com/downloads/details.aspx?FamilyId=C568FBA9-3A62-4781-83C6-FDFE79750207&displaylang=en

Fuente: http://blogs.msdn.com/buckh/archive/2007/11/30/team-system-web-access-2008-power-tool-is-now-available.aspx

 

Saludos @ Home

El Bruno

Crossposting from ElBruno.com