sábado, agosto 11, 2007

.NET: El Framework, el IDE y el Lenguaje

Este es un post viejo que nunca publique porque no encontraba el archivo de Word donde lo hice, aunque algunas cosas ya serán más claras ahora que es más salió Visual Studio 2008 Beta 2 y hay mucha más documentación al respecto, muchos me han comentado dudas similares de las que trataba de explicar en este documento que escribí por ahí de Marzo. Así es que busque el archivo y espero conteste algunas preguntas.

Hemos escuchado mucho de .NET 2.0 y .NET 3.0 y por separado por ahí escuchamos de una nueva versión de Visual Studio (Orcas) y C# 3.0, aunque estos últimos aún no salen, pero ya liberaron.NET 3.0. ¿Así que cuál es la realidad, podemos usar .NET 3.0? La respuesta es sí. Tal vez causa algo de confusión, pero todo se aclara separando los diferentes productos, teníamos todavía en 2005 el framework 1.1, salio en Noviembre de ese año el 2.0 junto con un nuevo IDE (VS 2005), nuevo framework (.NET 2.0) y nuevas características del lenguaje (C# 2.0 y VB 8). Así que todo lo vimos como una sola nueva versión hacía una nueva plataforma de desarrollo que por facilidad nombramos simplemente ".NET 2.0". Un año después, también en noviembre, sacan el .NET 3.0 y en esta ocasión no tenemos nuevo IDE y el lenguaje permaneció igual, según fechas de Microsoft en la segunda mitad de este año (según una simple analogía será en noviembre) sacarán C# 3.0 y un nuevo IDE.

La clave está en separar. Tomando como ejemplo lo que se libero en noviembre de 2005 y comparándolo que la versión anterior.

Tenemos C# 2.0 y VB 8.0 y antes teníamos C# 1.0 y VB 7.0, voy a hablar sólo de C#, entre otras cosas:

  • Tenemos Generics,
  • Tenemos delegados anónimos.
  • Tenemos yield.
  • Tenemos clases parciales.
  • Se optimizo el lenguaje intermedio generado, no voy a explicar mucho de eso, pero la idea es que es mejor y se hicieron cambios necesarios para soportar cosas como los Generics.

Tenemos el .NET Framework 2.0 y antes teníamos el framework 1.1:

  • Tenemos nuevas clases para acceso a datos.
  • Algunas colecciones genéricas.
  • Algunos nuevos controles para desarrollar en Windows, Web y bueno sobre todo Web.
  • Algunas muchas mejoras más por citar algunas, remoting trabaja un poco distinto y es más seguro, se deprecaron algunos métodos y clases y se crearon nuevas para sustituir cierta funcionalidad, etc.

Tenemos el Visual Studio 2005 y antes teníamos el Visual Studio 2003:

  • Cambiaron muchas funcionalidades desde una versión a la otra. Unas de las más interesantes son la integración con pruebas, diagramas y herramientas para trabajo en equipo que provee Visual Studio Team Suite, pero esta es la versión más cara. Por otro lado tenemos muchas versiones que antes no existían como las Express, más limitadas que las demás, pero mucho más barata (gratis).
  • Obviamente mejor integración con los nuevos lenguajes C# 2.0 y VB 8, por ejemplo intellisense para generics y delegados anónimos.
  • Obviamente mejor integración con el nuevo framework, por ejemplo vistas de diseño distintas para ver los mater pages y soporta las nuevas formas de compilación en ASP.NET.
  • Mejoras al depurador, nuevas herramientas como el Object Test Bench y creación de algunos nuevos generadores de código.

Ahora volviendo a todo lo de 3.0:

Tenemos ya ahorita y listo para usar el .NET Framework 3.0 y trabaja en conjunto con el 2.0 y está compuesto por los siguientes cuatro componentes:

  • Windows Communication Foundation: viene a unificar tecnologías como Web Services, MSMQ, Remoting.
  • Windows Presentation Foundation: para hacer aplicaciones de escritorio más bonitas.
  • Windows Workflow Foundation: para crear y monitorear workflows.
  • Cardspace: para autentificar a usuarios usando una metafora de credenciales.

Es importante hacer notar que todo este framework trabaja lado a lado con el .NET 2.0, simplemente son una serie más de librerías, similar a si bajaran Enterprise Library o algún componente de terceros y no necesita de ningún cambio en el lenguaje o IDE.

Tendremos ojala y este mismo año C# 3.0 y VB 9.0, hablare sólo de C# 3.0, este nuevo lenguaje trae algunas novedades como:

  • Expresiones Lambda, que no son otra cosa más que otras sintaxis para usar delegados anónimos con muchas más ventajas adicionales a la sintaxis que espero poder explicar en otro post.
  • Tipos inferidos, que no es más que otro truco del compilador, este infiere dependiendo de lo que le asignes a una variable el tipo de dato, var s = "hola"; sabemos que es un string y el compilador lo puede inferir.
  • Extension methods, que no son otra cosa más que el compilador provee una nueva forma de mandar llamar a métodos estáticos de otras clases, otro truco más del compilador.
  • Tipos anónimos, que es similar a delegados anónimos pero para clases, este se aprovecha de los tipos inferidos e inicializadores así var car = new { Color = Color.Red, Name = "Lamborghini" }, crea una clase que tiene dos propiedades, Name de tipo string y Color de tipo Color, así podemos decir car.Color = Color.Black; car.Name = "McLaren F1".
  • Inicializadores, otro truco más del compilador para crear un objeto y en la misma declaración asignarle propiedades. DbConnection conn = new SqlConnection() { ConnectionString = "", CommandTye = CommandType.Text };

    // Nuevo atajo para inicializar objetos.
    DbConnection conn = new SqlConnection() { ConnectionString = "", CommandTye = CommandType.Text };

    // Se traduce al mismo código intermedio que la anteior.
    DbConnection conn = new SqlConnection();
    conn.ConnectionString = "";
    conn.CommandType = CommandType.Text;

    Por eso es que les digo que son trucos del compilador, sin embargo muy útiles, ahora usamos en todos lados clases parciales, generics y delegados anónimos, para esta altura de 2008 seguramente estaremos usando todo esto con mucha frecuencia, sobre todo si usamos LINQ, pero ese es tema de otro post.

Siguiendo con la comparación, tendremos ojala y este mismo año, Visual Studio Orcas seguramente el nombre oficial será VS 2007 o VS 2008 dependiendo de que le guste más a los de marketing, a mi me gusta más Orcas.

  • Tendrá soporte para las nuevas funcionalidades del lenguaje.
  • Tendrá soporte para el nuevo framework 3.0, un diseñador de Workflows, Wizards y otras cosas para WCF y una nueva vista de diseño para crear aplicaciones con WPF usando XAML.
  • Incluirá otras tecnologías que ya fueron liberadas, pero aún no se integran "out of the box" con Visual Studio, como ASP.NET Ajax (Antes Atlas) que se también tendrá algunos cambios importantes principalmente en el performance y su integración con Silverlight.
  • Soportará que le digas a que versión del framework estas enfocando tus aplicaciones y puedas desde el mismo IDE crear proyectos para .NET 3.0 o .NET 2.0.
  • Mejoras al depurador e Intellisense de JavaScript.

Así que resumiendo un poco, 3.0 se compone de tres partes, como siempre se ha hecho, sólo que ahora realmente están separadas en tiempo, ya tenemos el Framework 3.0 listo para empezar a crear aplicaciones usando WPF, WF y WCF, sin embargo, aún no tenemos un nuevo Visual Studio que nos ayude con esta tarea, aunque hay ciertas extensiones que se pueden utilizar desde ahorita. Por otro lado, en este caso el Framework 2.0 (incluyendo el CLR), el lenguaje intermedio y el lenguaje (C# o VB) no cambiaron por lo que nuestras aplicaciones de .NET 3.0 siguen usando el mismo C# 2.0 y el Framework 2.0. Esto cambiará seguramente en Noviembre de este año que tendremos la nueva versión del lenguaje C# 3.0 y VB 9.0 y la nueva versión del Visual Studio.

Hay otro proyecto LINQ y una nueva versión del Framework (3.5) que se liberará junto con Orcas y C# 3.0 que incluye varias clases que aprovechan ciertas características del nuevo lenguaje para hacer más fácil el acceso a datos, a casi todo tipo de datos (XML, Bases de Datos, Registro, Objetos), pero de esto hablaremos más a detalle en algún otro post.

Existen otras tecnologías paralelas a lo que mencionamos (Lenguaje, Framework e IDE) que no obedecen a las mismas fechas. En cierto sentido, gracias a que Microsoft se ha vuelto un poco más ágil, y si me refiero a usar metodologías ágiles en algunos de sus grupos de desarrollo e implementar algunas de estas prácticas ya podemos usar actualmente nuevos productos sin esperar a que se incluyan Out of the Box, por ejemplo ASP.NET Ajax y el Control Toolkiit que realmente es un desarrollo de ASP.NET, pero aún no se ha integrado como parte de por ejemplo un Framework 3.0 o Visual Studio, de hecho no hubo nada nuevo para ASP.NET en el Framework 3.0. Otro ejemplo seguramente serán BLINQ una nueva tecnología que usa LINQ para hacer páginas Web, este es otro desarrollo del grupo de ASP.NET que podría liberarse hasta después de Orcas y C# 3.0. Otros ejemplos son los Software Factories, Enterprise Library y CAB de Patterns and Practices que siempre han sido componentes por separado, el SDK de Visual Studio al igual que el Guidance Automation Toolkit, han tomado un camino muy distinto al del mismo producto en sí y Visual Studio Tools for Office 2007, que gracias a dios no espero a que se liberará Orcas y lo hicieron casi a la par de Office 2007.

El mejor ejemplo de esto es el Toolkit de controles de ASP.NET Ajax, que aunque más adelante se integraran como otros controles más de ASP.NET ojala y siempre siga liberando versiones por separado del Framework, Lenguaje e IDE. Es tan difícil liberar estos últimos, involucra muchas cuestiones de licenciamiento, esquemas de venta, marketing, documentación, pruebas, etc, etc, etc que simplemente haría que simples controles como el estos tarden un año en ver la luz. No es que estos controles no tengan licenciamiento, documentación y pruebas, es sólo que se pueden liberar más rápidamente.

Yo creo que Microsoft se está viendo inteligente en ir liberando así las versiones, y permitirnos ir usando la tecnologías más recientes sin esperar por largos ciclos de desarrollo aunque si será muy cómodo el instalar un solo producto (Orcas) y tener todo lo que necesitamos, pero mientras tanto, lo podemos ir usando en producción.

Otra línea de productos más, que la verdad en este caso si nos gustaría que formara parte del mismo timeline del Framework, Lenguaje e IDE y sobre todo que le dieran la misma importancia como a las demás es el Compact Framework y SQL Compact Edition. Algo como esto tiene sus pros y sus contras, por ejemplo, SQL Compact Edition y el Compact Framework SP1 se liberaron mucho después que Visual Studio 2005 y no nos hubiera gustado tener que esperar un año hasta que saliera Orcas para empezar o algún Service Pack de Visual Studio, sin embargo, unos meses después de que se libero Visual Studio 2005 se liberó el SDK para programar en Windows Mobile 5.0, por lo que Out of the box no tenemos soporte para esta plataforma en el IDE actual. Así que siempre que fuera para tener algo antes sería mejor que se integre (e.g. que hubieran incluido lo necesario para desarrollar Windows Mobile 5.0 en VS 2005) así no tendríamos que esperar ni que instalar tanto producto por separado y tendríamos. Sin embargo siempre que pensaran en retrasar un release sólo por incluirlo en un release mayor no nos gustaría (e.g. esperar al SP1 de VS 2005 para incluir el Compact Framework SP1).

Cuando liberaron el .NET 3.0 no salió nada nuevo para Mobile, pero junto con Orcas habrá grandes novedades, aunque se espera un WPF/E no será una de estas (Silverlight para mobile), pero existe ya un Compact WCF o WCF-E. El primero, WPF Everywhere, es para usar XAML y las capacidades gráficas de WPF en otras plataformas como Web (ahora conocido como Silverlight) y otros Sistemas Operativos incluyendo Windows CE y por lo tanto Windows Mobile, sin embargo WPF-E saldrá a la luz primero como un componente para diferentes navegadores antes de estar disponible para Mobile, por lo que seguramente no lo veremos incluido como parte de Orcas. Compact WCF usará SMTP para poder tener colas de mensajes en aplicaciones desconectadas y un protocolo para poder comunicarse por push con los dispositivos, estos dos por si sólo son ya grandes ventajas, sin embargo esperaríamos algo de Remoting y WS-* para tener realmente mejores herramientas de comunicación desde estos dispositivos. Aunque no vengan como parte de WCF-E tendremos todo el stack para hacer algo nosotros.

Siguiente con Mobile, tendremos también disponibles las nuevas características del lenguaje, buena parte de LINQ y otras tantas mejoras. Aunque el Beta de VS actual no incluye el SDK para Windows Mobile 6.0, esperamos que el release de Orcas si lo incluya. Hay otras áreas muy relacionadas con Mobile como Sql Server Compact Edition 3.5 que recibirán grandes mejoras. La más importante de estas considero será SyncServices de ADO.NET, que lamentablemente no contará con la versión de Mobile para esta versión.

Microsoft debería haber llamado a .NET 3.0 simplemente 2.5 ya que fue una mejora menor y .NET 3.5 que es un gran cambio debería haber sido 3.0 o simplemente 3.0 y 4.0 respectivamente, sin embargo tendremos que vivir con las decisiones de versionamiento, aunque nos acostumbraremos rápidamente. Para hacerlo un poco más confuso, C# será 3.0 y no 3.5.

Así es que esperemos grandes cambios. Si desean ver más información de 3.5, les sugiero los posts de Scott Guthrie sobre los nuevos features que comente.

Lenguajes Dinámicos – IronPython y ASP.NET y los primeros pininos con IronRuby

Tal como el CLR y especialmente el CLS sirven de base para los lenguajes estáticos como C#, VB.NET, J#, Delphi.NET y otros menos exitosos que han surgido (no que Delphi .NET hay tenido éxito). Microsoft está trabajando sobre esta nueva cosa que llaman el DLR (Dynamic Language Runtime) que les va a servir de base para hostear lenguajes dinámicos de una manera eficiente permitiéndoles hacer llamadas a APIs de .NET, algunas de las implementaciones son IronPython, IronRuby, JavaScript y Dynamic VB. En este post daré una muy breve introducción a IronRuby y los redirigiré a un buen ejemplo de Scott Guthrie y veremos un poco más a fondo como IronPython, que ya es un poco más maduro que IronRuby, se integra con ASP.NET de una forma bastante ingeniosa y finalmente veremos algunas de las ventajas.

Como todos deberían de saber, los lenguajes dinámicos, especialmente Ruby usado en conjunto con Ruby on Rails han estado ganando mucha popularidad y tienen ciertas ventajas en comparación con los lenguajes estáticos. Por lo poco que he usado Rails tengo que aceptar que se puede ser muy productivo, aunque hay muchas cosas que extraño como Intellisense, Visual Studio, la depuración, muchas herramientas a las que estoy acostumbrado (Team System, Unit Testing, RhinoMock, etc.), pero especialmente el .NET Framework, por lo que la idea de lenguajes dinámicos que puedan interoperar con este último suena muy atractiva. Por otro lado, según benchmarks que han hecho (les debo la referencia, simplemente lo leí en algún lado y lo escuche en algunos audios) tanto las implementaciones de Microsoft de Ruby, Python y JavaScript para el CLR son muy eficientes gracias a que se convierten en código compilado al vuelo en lugar de interpretado.

Scott Guthrie recientemente escribió una introducción a IronRuby que consiste en unos simples ejemplos de consola y luego una demo de cómo usar WPF con IronRuby. Les dejo el link al ejemplo y al código fuente de IronRuby que está en la página de John Lam donde explica un poco más del proyecto, también pueden escuchar su John Lam on the DLR de DotNetRocks o John Lam on Iron Ruby en Hanselminutes. Algo interesante es que se liberará usando la Microsoft Permissive License y están invitando a gente externa a Microsoft en participar en el proyecto. Hay muchas cosas que aún no funcionan bien, pero nos podemos dar una idea de lo que viene.

IronPython ya se integra con ASP.NET podemos ver más detalle en este WhitePaper o en el audio Language Extensibility - Iron Python de DotNetRocks donde explican lo mismo. En resumen, en lugar de usar el CodeDOM para hacer el merge una página ASP.NET con la clase parcial del CodeBehind o CodeFile, utilizan el modelo de no compilación, similar a como hacen los sitios de Sharepoint. Este modelo siempre ha estado disponible y puede ser algo útil por ejemplo en páginas que no requieren de código y todo lo que usan son controles que saben cómo hacer el trabajo. Todo el truco para integrar con lenguajes dinámicos (actualmente sólo IronPython and managed JScript) es que usan uno de los puntos de extensión para cambiar el parser de ASP.NET y cambian los codesnippets (<% ... %>, <%= ... %>, <%# ... %>) por un control que tiene una propiedad con el código, por lo que sigue siendo básicamente sólo un control y la página se puede usar en el modelo de no compilation. Las páginas también podrían tener "Codebehind" o archivos de script ligados a estás aunque a diferencia de páginas con código estático, este no forma parte de la clase Page, más bien es simplemente un modulo que tienen disponible para utilizar sus métodos o propiedades directamente, de igual forma funciona con código en línea como <script runat="server"> someVar=5 </script>. Cada página tiene su propia instancia del modulo, por lo que está variable será distinta en las diferentes páginas, controles, etc. Sin embargo dado que es una variable global será similar a una variable estática en C#. Vale la pena destacar, que aunque se use el No-Compilation, desde todo el ciclo de parsing-ejecución de la página, realmente el código de IronPython se termina compilando al vuelo por el motor de lenguajes dinámicos teniendo las ventajas de performance.

Ahora que entendemos un poco de la teoría de cómo funciona el nuevo modelo, veamos algunas de las ventajas. Las expresiones de DataBing como <%# Eval("City") %> se pueden sustituir por expresiones más simples como <%# City %>, que aunque no existe en tiempo de parse, se puede evaluar en tiempo de ejecución. IronPython usa un mecanismo de inyección que nos permite hacer este tipo de cosas raras, como por ejemplo en lugar de decir String myValue = Request.QueryString["MyValue"]; podríamos simplemente decir myVar = Request.MyValue. La secuencia sería la siguiente, si el objeto no tiene ninguna propiedad llamada MyValue, intercepta la llamada el inyector e internamente hace lo mismo que haríamos en C#, permitiéndonos tener una sintaxis más clara. Lo mismo se hace por ejemplo al obtener controles, con C# haríamos algo como SomeControl.FindControl("SomeChildControl") y ahora en injector nos permite usar directamente código como SomeControl.SomeChildControl sin necesidad obviamente de hacer un cast. Podríamos hacer algo como nombre = FormView1.NombreTextBox.Text.

Pueden ver un Quickstart y descargar los ASP.NET Futures de July para hacer algunas pruebas. Ya que lo tengan pueden usar el Personal Starter Kit Python para aprender un poco. Para los que ya saben Python puede ser muy fácil una vez entendido todo el modelo. Yo me esperare mejor a ver las implementaciones con IronRuby.

sábado, agosto 04, 2007

Silverlight



Un post que tenía algo pendiente. Antes que nada tengo que hablar de que hay aquí para mobile, aunque aún no vemos claro, no tenemos demos, ni nada, podemos ir viendo un video del MEDC donde muestran lo que viene de Silverlight for Mobile Devices.




Ahora si volviendo a lo que ya podemos usar. Brevemente introduzco Silverlight como un mini-WPF que usa mini-XAML que puede correr como un plugin para el browser (si, cualquier browser tal como hace Flash) o en diferentes dispositivos, obviamente Windows Mobile como muestran en el video anterior y ojala y más adelante en otros dispositivos similar a como hace Flash Lite. Viene en dos versiones, una para JavaScript (actualmente en 1.0 Release Candidate) y otra para .NET (actualmente en 1.1 Alpha Refresh). Las versiones suenan un tanto raro, ¿por qué tenemos un 1.1 y el 1.0 aún no sale? Bueno ya ven como es Microsoft si tuvimos un 3.0 cuando no cambio nada y un 3.5 cuando hubo cambios hasta en el compilador, lenguaje e IDE, pero esa es otra historia. La diferencia se puede resumir en que 1.0 es Javascript y soporte para video y el 1.1 es Soporte a lenguajes .NET, parte del Framework y el CLR y lenguajes dinámicos (más todo lo del 1.0 claro).

Ya en la práctica lo hemos encontrado bastante recortado, aunque no es una limitante para poder realizar aplicaciones interesantes. Por ejemplo no tenemos una buena suite de controles, aunque podríamos usar de terceros, actualmente GOA y los de Telerik (wow) tienen algunos demos disponibles, este será un mercado en el que entraran muchos más adelante, por otro lado, podemos crear nuestras animaciones y dibujos en XAML, seguramente usando Expression Design y consumirlas desde Silverlight esto ofrece grandes posibilidades. La razón por la que sólo tenemos un control textbox un botón y figuras básicas es porque MS ha decidido mantener compacto el instalador (para poder decir "ocupa casi lo mismo que Flash").

Otra de las grandes ventajas es que lo podemos programar usando .NET y sí así es, tendremos CLR también en la Mac y no sólo en una MacBook con Intel y Vista instalado, sino con Mac OS.

Actualmente podemos programar para Silverlight usando JS o .NET desde VS 2008 usando un plugin y aprovecharemos las mejoras que trae el nuevo IDE para depuración e intellisense para Javascript también para Silverlight importando unas librerías.

Esto necesitas para configurar tu ambiente de desarrollo:

1- Instalar Runtimes:

-Microsoft Silverlight 1.0 RC1 (para ver Silverlight)

-Microsoft Silverlight 1.1 Alpha Refresh (para ver aplicaciones de Silverlight creadas en .Net)

2- Instalar las herramientas de desarrollo y de diseño:

-Microsoft Visual Studio 2008 Beta 2 (para desarrollar)

-Microsoft Silverlight Tools Alpha Refresh for Visual Studio VS 2008 B2 (add-on para crear aplicaciones en Silverlight)

-Expression Blend 2 August Preview (para crear animaciones de silverlight)

-Expression Media Encoder Preview (para agregar videos en silverlight)

-Expression Design (para crear gráficos en 3D)


3- Para documentación, ejemplos y add-ins, instalar SDK:

-Microsoft Silverlight 1.0 Beta Software Development Kit (SDK)

-Microsoft Silverlight 1.1 Alpha Software Development Kit (SDK)

4- Extras:

-Para Atlas ASP NET Futures July 2007 Server Controls que incluyen controles media y XAML para incorporar directamente piezas de silverlight desde extenders.

-Intellisense para Silverlight en VS 2008

-Scrip# un compilador de C# para generar JavaScript en lugar de Lenguaje Intermedio. Nos podrá ayudar a crear librerías para consumir desde Silverlight 1.0 o para interactuar con otras partes de la página.


Para más información sobre la dirección que tomará este producto, vean el Blog de Scott Guthrie donde explica más a fondo las diferencias entre 1.0 y 1.1, el uso de Javascript, .NET y lenguajes dinámicos, pueden encontrar muy buenos ejemplos en http://www.silverlight.net/ y como siempre más en http://www.google.com/

No puedo cerrar sin decirles que vean popfly.com un sitio hecho en silverlight que nos permite hacer mashups, vale la pena. Sólo pidan su invitación, les llega en un par de días y empiecen a jugar un poco con esto. Espero luego subir algunos blocks y ejemplos de mashups que haré para Roller.

domingo, julio 29, 2007

.NET Framework 3.5 en Software Guru 2007

El próximo 29 de Octubre estaré dando una plática de .NET 3.5 en el evento de Software Guru 2007.

Les resumo un poco el evento. Está dividido en cuatro tracks, Herramientas y Tecnologías, Procesos, Ingeniería de Software y Estrategias para Empresarios. Todas tienen platicas muy interesantes intercaladas conferencias magistrales como la de Scott Ambler: Applying Agile Software Development Techniques on Real-World Projects.

Espero y tengan oportunidad de ir.

Visual Studio 2008 Beta 2 Liberado

Primero ve y descargalo y mientras se descarga puedes revisar todo lo que hay nuevo. Hay tantas características en áreas tan distintas que te sugiero imprimir y leer con calma el overview. Ahora sí, revisa el what's new donde encontrarás links para profundizar un poco más respecto a cada tema.

Algo de lo que más promete es la mejora en el IntelliSense para Javascript y ASP.NET Ajax y la vista en Split, al estilo Dreamweaver, para HTML y Diseño (algo tan simple, que no sé como no lo incluyeron antes).

Hablando de Split Views, el Diseñador para WPF funcionará de manera similar y obviamente también tendremos IntelliSense en el XAML.

Otra mejora importante es que podremos aprovechar nuestros nuevos procesadores de doble núcleo para compilar nuestras soluciones.

Existen otros detalles que pudieran parecer mínimos pero los apreciaremos bastante cuando naturalmente terminemos por usarlos como las mejoras al debugger.

Hay otras características que serán importantes para muchos, por lo que las mencionare aunque no me parezcan tan relevantes por el uso de otras herramientas que hacen muy bien su trabajo: LINQ to SQL y el O/R designer.

Hablando concretamente del .NET CF 3.5, otra vez, encontramos algunas ventajas tan simples pero muy apreciadas como el hecho de que al depurar al ocurrir una excepción hará el break en el lugar donde ocurrió y no en el Run Method (como odio esto) o que el StackTrace ahora incluirá la firma de los métodos para distinguir entre las sobrecargas.

Seguramente tener parte de WCF en Mobile genera altas expectativas, sólo espero agreguen soporte para JSON o algún protocolo más ligero que XML ya que transmitir por celular con estos formatos se puede volver prohibitivo y nos hace buscar alternativas menos practicas, pero económicas. El uso de Exchange como protocolo es, aunque una solución bastante sobrada, al menos una forma de resolver el problema de cómo notificar a los dispositivos móviles. Aunque realmente sigo prefiriendo la opción de SMS y requiere definitivamente menos infraestructura es bueno saber que existe la otra opción y definitivamente provee otras ventajas adicionales.

Para proyectos de Mobile encontraremos muchas herramientas como las de pruebas que tuve la oportunidad de usar en el Beta 1 en conjunto con TFS y tengo que decir que es lo mismo que si estuvieras usando Team Edition for Testers, realmente no hay ninguna diferencia, sólo que antes estábamos tan limitados que nos acostumbramos a que esto no funcionara como siempre debería haber sido. Se puede decir que simplemente hace lo que se supone que hace. Ahora a mi me hubiera gusto que tuviera dos modos (tal vez los tiene, pero no los encontré) uno para probar sobre el dispositivo (este si existe) y otro para probar lo mismo pero corriendo en el escritorio (este se tendría que hacer manualmente). Actualmente tenemos que crear dos proyectos, uno de Mobile y otro normal de pruebas donde hagamos referencias a los proyectos de Mobile (con algunos warnings que nos da) el de mobile lo usamos junto con el TestHarness del Mobile Client Software Factory para correr las pruebas dentro del dispositivo y el otro lo usamos para las pruebas dentro del escritorio e integración continua. Aunque tenemos forma de automatizar las pruebas de Mobile para que corran dentro de nuestro build, no tenemos manera de reportar los resultados de regreso a TFS, así que estábamos obligados a tener ciertas pruebas que corrieran en el escritorio, pero obviamente no todo lo podíamos probar en esa plataforma. Aunque ahora en VS 2008 podamos usar las del dispositivo para CI y que este reporte directamente a TFS, tienen la desventaja de ser lentas, por lo que sería necesario tener ambos entornos para ciertas situaciones, como pruebas durante el proceso de programación y una vez que pasen las pruebas en el escritorio correr las pruebas en el dispositivo.

Otra de las herramientas sumamente útiles, que ya tenemos actualmente como Power Toy de Mobile es el Device Security Manager que tal como su nombre lo dice, nos permite cambiar las configuraciones de seguridad, de tal forma que podamos probar nuestra aplicación en diferentes "entornos". Sin embargo, la mejor fuente para herramientas de Mobile es el Windows Mobile 6.0 SDK que merece otro post por sí sólo, el Cellular y GSM Emullator son bastante útiles. Tampoco podría dejar de mencionar los Power Toys que más usamos: ActiveSync Remote Display (para ver en tu escritorio la pantalla de tu dispositivo), CECopy y RAPIStart (para iniciar un proceso remoto).

Volviendo a VS 2008 y siguiente con Mobile, incluye nuevos Code Snippets, que hasta ahorita parecen estar sólo para VB, todos empiezan con sd para distinguirlos de los de escritorio.

En definitiva una de las principales ventajas es aprovechar las mejoras al lenguaje, extensión methods, tipos anónimos, lambda expressions, collection initializers y parte de LINQ que están ya disponibles también para .NET CF 3.5.

Sin lugar a dudas algo de lo más atractivo es el SQL Server Compact 3.5 aunque las ventajas listadas no parecen ser tan prometedoras, salvo SyncServices que no estará disponible para Mobile en el release de este año y es más bien un desarrollo del equipo de ADO.NET y no directamente del SSC3.5. Esta característica sirve para sincronizar con diferentes bases de datos o con SQL Server sin tener que usar Merge Replication o RDA. Lamentablemente para mobile parece que nuevamente nos quedamos un poco cortos, sin embargo, el hecho de que SQL Server Compact Edition lo estén usando para escritorio hará que evolucione a un ritmo distinto y esto se verán como beneficios en un futuro (cercano espero).

Para Datos, tenemos un nuevo designer que nos permite tener como DataSources, ResultSets, DataSets, Objetos y WebServices.

Espero y tengan oportunidad de probarlo.

lunes, julio 16, 2007

Simular el HttpContext desde ASP.NET

Les dejo el link de Phil que hizo una librería super sencilla de usar
http://haacked.com/archive/2007/06/19/unit-tests-web-code-without-a-web-server-using-httpsimulator.aspx
Todo lo que haces es iniciar la simulación y listo, todas las llamadas a tu código pueden usar algo como HttpContext.Current.Application como si estuvieras en Web.

Puede hacer más que eso, pero eso lo que he probado.

sábado, junio 30, 2007

I Muestra de Software - Todo un éxito

El miercoles pasado se realizo la I Muestra de Software Lagunero, la cual resulto ser todo un éxito cumpliendo su primero objetivo: dar a conocer a las empresas laguneras que en la región existen compañías de desarrollo de software que pueden satisfacer sus necesidades. Adicional a esto algunos desarrolladores comentan que han establecido buenos enlaces que más adelante pudieran convertirse en contratos.

Les muestro una imagen del evento, donde salgo exponiendo del proceso de ventas tipico de una empresa sin el uso una solución como las que ofrecemos usando dispositivos móviles.



Pueden ver un artículo completo en el Siglo de Torreón

lunes, junio 25, 2007

Microsoft Expert Zone

Toda la semana del 25 al 29 de Junio de 2007 se llevará a cabo el evento Expert Zone que organiza Microsoft.

El evento incluye conferencias de servidores y de las nuevas herramientas de desarrollo. No tiene ningún costo. También cuenta son sesiones "Pregúntale al Experto" donde gente de Microsoft estará resolviendo dudas técnicas todos los días de diferentes temas desde Sistemas Operativos de Servidores y Administración de Base de Datos hasta Desarrollo de Software en Equipos y Diseño de Interfaces de Usuario.

Google Maps para Pocket PC

Todos conocen Google Earth, ok gran cosa, ya paso de moda. Bueno tal vez este ya también paso de moda, pero para mí fue la novedad este fin de semana. Google Maps, para que les platico, no le haría justicia, puse algunas fotos, pero tampoco muestran lo que realmente es, así que tuve que hacer mi primer screencast.




La oficina de Integradores Tecnológicos encontrada usando GPS y el ITESM CL.




Mientras yo sigo en Torreón mi novia está en Sea World en San Diego viendo las ballenitas así que se me ocurrió buscarlo. Para EU tenemos también la vista de mapa adicional a la imagen satelital.



Y para probar la búsqueda, mis tacos favoritos en San Diego, Guerrero Taco Shop. No es un cadena ni el tipo de local que buscaría anunciarse con Google, pero véanlo ahí. Instrucciones para llegar y la foto satelital con simplemente buscar Guerrero Taco Shop.

Primera Muestra de Software Lagunero

Durante los últimos 2 o 3 meses hemos estado organizando la primera muestra de Software Lagunero y todo está listo para que este miércoles estemos presentando la oferta tecnológica de la región a empresarios de diferentes sectores. En esta muestra se expondrán de productos y servicios como computo móvil y comercio electrónico (nosotros), aplicaciones web, software embebido, paquetes administrativos y soluciones a la medida. Estarán mis colegas de Microsip, Nazca, Programática Creativa, Indap, Sensa, Interfase Technologies, Merkanet y claro nosotros.

Este tipo de eventos son muy importantes, no sólo por las relaciones comerciales que pudieran desprenderse del mismo, sino por el impacto en general que tiene del sector de TI sobre el mercado local y la evolución que esto podría provocar sobre otros sectores. Finalmente el que las empresas tengan, por ejemplo, procesos automatizados les ayuda a ser más eficientes en sus tareas. El hecho de que empresas en la región puedan adoptar nuevas tecnologías es un diferenciador importante sobre su competencia no adopten tecnología los dejaría en una clara desventaja sobre todas las demás que ya lo están haciendo.

Muchas empresas no compran por desconocer los beneficios y que existen proveedores a 15 minutos de sus oficinas, este evento les servirá para conocer qué podemos hacer nosotros y nuestras soluciones hacer por ellos. Hay otras empresas que adquieren software fuera de la región y el establecer relaciones comerciales con proveedores locales les permitirá ahorrar algo de dinero en viáticos y honorarios más altos.

Herramientas para Team Foundation

Team Foundation nos ha ayudado bastante desde el trabajo del día a día hasta el seguimiento de proyectos y definición de procesos, por si sólo Team Foundation es una gran herramienta, pero la hemos ido haciendo aún mejor con ciertos productos de terceros y claro las personalizaciones que le hemos hecho. Aquí presento herramientas de las que usamos o conozco, sin embargo la lista completa esta aquí.

  1. Scrum for Team System del mismo Ken Schwaber y Conchango. TFS viene con MSF para CMMI y MSF Agile, sin embargo ninguna nos gusto. En lugar de trabajar desde cero en la definición de un nuevo proceso, tomamos Scrum For Team System que es un template que provee otros tipos de Work Items y flujos de trabajos. Les platico las diferencias más importantes.

    Ahora tenemos un Product Backlog donde vamos metiendo todos los requerimientos del cliente. Cada ítem dentro del Product Backlog en algún momento se relacionará con un Sprint, los cuales a diferencia de las iteraciones de MSF tienen una fecha de inicio y fecha de fin. Esos mismos ítems los relacionamos con n ítems más del Sprint Backlog donde tenemos ahora si actividades más técnicas.

    Los ítems del product backlog se asignan a un equipo de desarrollo y los Sprint Backlog Items se asignan a una persona. Una de las adaptaciones que hicimos es que estos work ítems puedan asignarse a un par para decir, está tarea la hacen Mike y Tea en lugar de que ambos trabajen en ella y sólo aparezca uno de los dos. Esto aún no tiene ningún efecto en reportes ni nada por el estilo, pero ya sería cuestión de luego usarla como filtro o para agrupaciones, finalmente la información ya se está guardando.

    Trae nuevos reportes como Product Burndown y Sprint Burndown que te muestran el progreso y una tendencia del proyecto o iteración actual respectivamente. Aunque muchos reportes se apegan más a nuestra metodología, tengo que decir que extraño algunos de MSF.

    Resumiendo Scrum for Team System nos permite ejecutar nuestros proyectos de una forma más natural que MSF.

  2. Continuos Integration de Vertigo Software y con mejoras de Daniel Cazzulino de Clarious Consulting y miembro del equipo de desarrollo del MCSF es un simple WebService que se suscribe al evento Check-In e inicia el proceso de Build. Requiere un poquito de configuración, pero una vez jalando es una chulada. Lo usamos en todos nuestros proyectos en los que configuramos el build. Ya he puesto otros posts de Integración Continua.
  3. TeamPlain de Devbiz empresa recién adquirida por Microsoft es un website que se conecta a servers de TFS para poder hacer casi todo lo que haces desde TFS a excepción de checkouts y checkins. No he probado si podemos iniciar un build, sin embargo, para lo que lo usamos es ver WorkItems, reportes, archivos, etc. y para esa función es una excelente herramienta con una interfaz sexy y muy intuitiva. Aún no probamos el 2.0 RC que ahora usa Ajax.

    Esta herramienta es gratuita desde que Microsoft adquirió devbiz.

  4. Team Foundation Power Tools incluye a su vez 4 herramientas.
    1. Nuevas políticas para los check-ins. A mí me han resultado muy útiles la que forza los comentarios para el check-in y la de asociar un WI que con los resultados de un Query específico de tal forma se puede forzar a que sólo le den check-in usando WIs dentro del proyecto al que pertenece el código y asignados a ese usuario y así no mezclen por error.

      Hay otros tantos como el Forbidden Patterns que te permite decirle que archivos no deben subirse usando RegEx que aún no he tenido oportunidad de conocer.

    2. El Test Build Pack nos permite seleccionar todo un dll en lugar de tener que escoger un vsmdi para nuestras pruebas, esto se integra con los Team Builds por lo tanto se puede usar con CI que les mencionaba en el punto 2. Yo no he tenido necesidad de usarlo y me gusta más la opción de especificarle los nodos de las pruebas del vsmdi que quiero utilizar y esto me permite buena flexibilidad para especificar que ciertas pruebas se automatizaran y otras no deben correr en nuestro servidor de Builds.
    3. El famoso Process Template Editor de Joel Semeniuk de imaginet se integra ahora con VS para editar las plantilas ahí mismo y usa DSL para definir los flujos que puede tener un WI. Esta herramienta es vital para personalizar Team Foundation, aunque ya al personalizar toda una plantilla realmente terminas metiéndote al XML el PTE te permite perder el miedo inicial a hacer cambios de la manera más sencilla. Esta herramienta por si sola merece un post por separado.
    4. Una herramienta de Consola que provee nuevos comandos. A esta no he tenido necesidad de meterme aún, pero cuando trabaje con TF.exe si me di cuenta que está limitada en ciertos aspectos, pero me ayudo mucho en su momento. Ahora tenemos más opciones disponibles como un comando UU (Undo Unchanged) un TreeClean y un TreeDiff que por cierto estas últimas dos ya vienen junto con Orcas.

Algunas herramientas que estamos por instalar pero parecen muy interesantes son las siguientes.

  1. Light Weight Scrum Process Template es otra plantilla similar a Scrum for Team System, pero supuestamente más light. Algo de lo que presumen mucho es que usan Areas e iteraciones para la definición de sprints y Scrum for Team System lo hacen como un Work Item más, yo la verdad ya me acostumbre a hacerlo de esta forma y tiene la ventaja de que le puedes poner fechas, cosa que las iteraciones de VSTS no incluyen. Habrá que ver como hacen con las fechas. Definitivamente es una plantilla que al menos nosotros que usamos buena parte de las bases de scrum tenemos que probar. Si resulta interesante luego publicare algo.
  2. Team Build Ticker es un notificador de builds, suena como una herramientas muy útil que te avisa (estilo Messenger creo) el estatus de tu build. Esto nos evita el tener que esperar el e-mail. El link para la descarga al parecer está fallando.

Como no he probado estas herramientas no les puedo decir más de lo que he leído, por eso mejor chequen los links que les deje.

Espero y les sean de utilidad a nosotros nos han ayudado bastante. Les dejo una lista completa de herarm

Queda pendiente un post sobre Team Foundation Orcas y el Process Template Editor.

viernes, junio 15, 2007

SqlServer Compact Edition en ASP.NET

Este post salvo el día. Para poder usar SqlServerCompactEdition con ASP.NET todo lo que hay que hacer es:
AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);

Listo, eso es todo.
Antes por cuestiones de licenciamiento (en SqlServer Mobile) no se podía a menos que se tuviera instalado Sql Server al menos Express o herramientas de desarrollo. Con la nueva versión ya no hay problema de licenciamiento sólo hay que usar esa línea de código.

Espero y les pueda servir.

martes, abril 03, 2007

TDD y la matriz de trazabilidad

En MoProSoft y CMMI constantemente nos encontramos con que la matriz de trazabilidad es necesaria para poder medir el impacto que un proyecto tendrá al momento de realizar un cambio. Dicen que es necesario el conocer esto para poder estimar y una vez aprobado el cambio, saber que áreas debes de cambiar.

TDD ofrece un enfoque un tanto distinto. En un principio nos obliga a tener un diseño altamente desacoplado por pensar primero en como usar el código antes de pensar en como hacerlo y principalmente por refactorizar constantemente. Esto nos trae como ventaja que el impacto en distintos componentes de código sea minímo.

Ahora si, partimos de que el impacto es minímo, ¿cual sería la necesidad realmente de tener la trazabilidad si sabemos que pocos componentes se verán afectados?. Por otro lado, gracias a ese diseño desacoplado, ahora sabemos que conocemos los limites y repercusiones del cambio por lo que la estimación es fácil. Hasta aquí cumplimos con el propósito de la matriz de trazabilidad.

La verdad es que ninguno de los dos enfoques es mejor que el otro como para determinar el impacto a los componentes. Algunos dirán que la matriz de trazabilidad da una mejor visibilidad lo cual es cierto, TDD no te la da (no directamente, ya veremos más adelante), pero te da confianza al hacer los cambios. El problema es que tener esa visibilidad viene con un gran costo, el mantener la matriz muy bien actualizada y con alto nivel de detalle, esto sin duda consume mucho tiempo, probablemente más que el necesario para hacer los cambios que pudieran presentarse al proyecto.

Partiendo de que ninguno de los dos enfoques es exacto al preveer el impacto en los componentes afectados, la desventaja de la matriz de trazabilidad es que no es capaz de identificar realmente el impacto que tuvo el cambio una vez realizado y ahí es otra área donde las pruebas que tenemso al usar TDD tienen su alto valor.

Digamos que hacemos un cambio al código y nuestra matriz nos dice que tenemos que cambiar el componente A, C y D, hacemos el cambio en los tres lugares esperados, verificamos que funcionen bien, se integra y antes de liberar aún tenemos que revisar que B no haya sido afectado y probablemente nos daremos cuenta de que B sufrio cambios hasta las pruebas de aceptación y será muy tarde para ver quien introdujo ese error y tratar de corregirlo a tiempo para liberar el producto y volvemos a la fase anterior sin poder liberar.

Viendo el mismo ejemplo en un proyecto que utilizo TDD desde un principio, estamos confiados a que sólo A necesitará un cambio ya que las dependencias entre los otros componentes son muy debiles, realizamos el cambio, damos check in se corre una serie de pruebas automatizadas que nos muestran que B ya no funciona como se esperaba. Ya le habíamos cotizado al cliente sabiendo que sólo tendríamos que cambiar A. En este momento estamos a buen tiempo de para:
a) Corregir el impacto causado en B y volver a dar check in a ver que pasa.
b) Explicarle al cliente que costará más de lo esperado y tomará más tiempo,
c) Que el cliente decida que prefiere si retrasar la entrega del proyecto por su impacto en B o no incluir el cambio propuesto y continuar con la fecha de entrega como se planeo originalmente.

La ventaja de TDD sobre la matriz de trazabilidad es que tiene otras ventajas adicionales a las de poder estimar conociendo el impacto sobre los componentes al hacer un cambio y aunque no nos da visibilidad nos da seguridad que muchas veces es más imporante. Sin embargo, es muy sencillo hacer una pequeña matriz de trazabilidad de Requerimientos-Pruebas-Implementación si se busca cumplir con algún modelo como MoProSoft, CMMI, ISO o simplemente se necesita usar para tener un poco de mejor visibilidad.

¿Cómo hacemos esta matriz usando TDD? Simple, nuestros requerimientos ya los tenemos dados de alta en Team System como Work Items, seguramente como Sprint Backlog Items, Tasks o lo que sea que manejen, un Work Item digamos Requerimiento 1, puede estar relacionado con Tarea 1 y Tarea 2, así que tenemos la trazabilidad directa desde la herramienta de requerimientos a actividades. La actividad usando TDD empezará por realizar una prueba unitaria, por lo que ahora relacionamos Tarea 1 con Tarea1Test y Tarea1FailsTest. Desde las pruebas en código, podemos navegar dando click en "Go to Definition" en el metodo o clase que estamos probando, por lo que tenemos navegación completa de requerimientos hasta implementación. Por otro lado si se tiene una capa de acceso a datos, sabremos claramente que partes de la base de datos se usan y por otro lado esta altamente desacoplado (o debería).

Nos falta otra parte de la navegación, que es desde implementación hacía requerimientos, esta parte es un poco más difícil de seguir, ya que un metodo o clase podría ser usado en diversas áreas, sin embargo dando click en "Find all referencies" llegamos a nuestras pruebas y de las pruebas ya podemos ver que tareas estan relacionadas con esta. Team System no ayuda mucho con la navegación bidireccional entre Work Items pero podrían hacerse algunos queries si fuera realmente necesario.

Resumiendo, con TDD
Tenemos diseños desacoplados que ayudan a minímizar el impacto a los diferentes componentes.
Nos da seguridad y confianza al hacer los cambios sabiendo que tenemos un buen diseño y en caso de errores detectaremos rápidamente si otros componentes se impactaron.
Podemos obtener visibilidad a través de la navegación entre Work Items, Pruebas e Implementación.

martes, marzo 27, 2007

Como ver los mensajes de error en el Compact Framework (CF)

Ok, para ahorrar espacio los desarrolladores del CF pusieron en un dll por separado los mensajes de error (más info). Así que lo que tenemos que hacer para mostrarlos es instalar el CAB correspondiente a su idioma que se encuentra en C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\Diagnostics. Si hacen el deployment desde VS, el IDE instale este CAB automáticamente, pero si el deployment de la aplicación lo hacen de otra forma, necesitarán instalar este CAB.

domingo, marzo 25, 2007

Visual Studio Plugins

Alguna vez han deseado comparar algún archivo con otro que tienen localmente en su máquina, tal como hacen con los archivos desde source control? Han querido tener una vista de árbol con sus clases de C# tal como con sus archivos de HTML en el document outline? Han pensado alguna vez porque son tan lentas las busquedas en VS, qué porque no esta indexado? Bueno la solución estan en unos pequeños power toys de Microsoft http://www.microsoft.com/downloads/details.aspx?FamilyID=cd7c6e48-e41b-48e3-881e-a0e6e97f9534&DisplayLang=en

Espero y les sirva el links, son bien simples, pero útiles.

Por cierto, hablando de plugins para VS, Resharper de jetbrains agrega funcionalidades muy útiles la más interesante es como detecta errores en el código y algunas opciones para refactorizar, sin embargo si de eso se trata Refactor! deDeveloperExpress hace de una forma gráfica, intuitiva y práctica muchas técnicas de refactorización, sin embargo, un tanto lento. CodeRush también de la misma empresa, se encargará de cambiarle toda la vista a tus clases agregando simbolos y una navegación un tanto útil entre metodos, en lo personal, tanti icono me parecio demasiado aunque al principio es interesante, despues no resuslta tan práctico. No sé si este plugin en partículuar (que fue el último que instale) o si fue el conjunto de todos los que tenía instalados, pero VS 2005 se volvio especialmente lenta al tener CodeRush. SlickEdit es otro producto interesante y tiene una versión gratuita aunque no ofrece nada realmente muy atractivo, a menos que el saber cuantas líneas de código tiene un metodo o proyecto les parezca interesante, tiene otas dos o tres monerias, sin embargo la versión de paga tiene una funcionalidad muy interesante, que por cierto en otros IDEs como Delphi.NET ya viene incluide de fabrica. Cada vez que guardas un archivo crea una copia y va llevando el historial, después te permite hacer un diff, merge y cosas así que haces con herramientas de control de versiones.

Espero y algunas de estas herramientas les sean de utilidad, yo sinceramente despues de formatear mi maquina solo volvi a instalar las de Microsoft ya que de todas las demás no supe cual hizo tan lento mi IDE.
Les sugiero tratar primero con las de SlickEdit, Resharper, Refactor y CodeRush e ir desinstalando la anterior ya que algunas ofrecen funcionalidad tan similar y de una manera transparente que después es difícil distinguir quien es quien te la esta ofreciendo.

sábado, marzo 10, 2007

TFS desde Web

Para acceder a Team System y especialmente al control de versioens desde las oficinas de nuestros clientes, siempre era un rollo, porque, porque teníamos que conectarnos a través de VPN, algunos clientes no permitían este tipo de enlaces por sus proxies y cuando lo podíamos lograr era muy lento.

Finalmente TFS funciona a través de Web Services, así que porque diablos no podíamos consumirlos normalmente, no era todo lo que proponía "Servicios Web XML", un estándar, portable, sin problemas de firewalls y puertos por ser una tecnología propietaria, etc, etc, blablabla.

Bueno el problema no eran el consumir un Servicio Web en sí, si no más bien la forma en que funciona la autentificación. Con el SP1 de TFS esto se arregla, ya que incluye un Filtro ISAPI para el IIS que permite autentificar contra Active Directory (o de la forma en que TFS lo necesite) sin tener que usar en IIS "Autentificación de Windows" y ahora podemos usar Digest y Clear Text, aunque relamente no queremos usar esta ultima sin SSL y Digest tampoco es tan seguro que digamos. Bueno el link que les dejo lleva paso a paso con instalar un SSL y el filtro ISAPI y configurar lo necesario para que puedan acceder a TFS desde Internet.

En resumen los pasos son sencillos (no voy a explicar como configurar un SSL aquí).
Simplemente da de alta el filtro en IIS
Escoge el tipo de autentificación que necesitas
Conectate desde Internet utilizando tu dirección publica.

Algunos problemillas:
TFS corre en el puerto 8080 y algunos cliente nuestros tienen bloqueado ese puerto (mmmm), la solución fue mapear en nuestro firewall que lo que llegue al 80 lo mande al 8080, en el 80 teníamos Sharepoint, pero quien quiere Sharepoint realmente? Bueno si es útil, pero podemos prescindir de el estando fuera de la oficina.

Seguramente quisieras una forma de ver el mismo dominio estando fuera de la oficina como estando dentro, bueno simplemente configuren su DNS para que apunte al TFS estando localmente cuando soliciten algo como midominio.com y obviamente redirijan el tráfico de midominio.com al TFS.... bueno cada empresa lo tendrá distinto.

Si no tienen midominio.com o sudominio.com o IP estática vayan a homedns.org y saquen uno dinámico, con eso puede funcionar bien.

Suerte y espero y les funcione igual de bien que a nosotros.

Como tratar un bug

Todos hemos lidiado con bugs, nuestros o de terceros, en proyectos en desarrollo o en proyectos cerrados, los hemos visto como usuarios de software y tambien como desarrolladores.

Los desarrolladores y los usuarios hemos aprendido que el software no es perfecto, que existen bugs y también service packs. Es cierto que nadie quiere ver esos bugs, pero más importante, nadie los quiere por segunda vez.

Así que aquí estan los 5 puntos de Miguel Madero para lidiarn con bugs (desde el punto de vista de desarrollo).
1. Tener un buen sistema de log.
Lo peor es que el único que puede reproducir el error es el usuario final, pero ¡No sabe como hacerlo!.
2. Revisar frecuentemente ese sistema de log o implementar un sistema de alertas. Los usuarios no van a venir a decirte que errores hay (a menos que sea muy grave) ellos aprenden a vivir con ellos y esperan que algún día se arreglen sólos. Muchas veces ni siquiera estaran concientes de que hay un bug, pero el análizar la información del sistema de log te puede ayudar a corregirlo antes de que se haga costumbre.
3. Habla con tus usuarios.
¿Qué les parece el software? ¿Qué problemas tienen? ¿Qué los hace sufrir cuando usan el software? Estos es muy importante y junto con la informacíón del log puedes encontrar el problema y su causa. Tambien te darás cuenta que muchas cosas que ellos piensan estan mal, simplemente son resultado de una mala capacitación o que no saben como usar cierta funcionalidad. Dependiendo del tipo de sofware se pueden usar tecnicas como reuniones de grupo, foros de discusión, apoyo de usuariso expertos, etc para mitigar esos problemas que por cierto no son el punto de este post.
4. Confirmar que encontramos el bug.
Estan pensando "una vez encontrado, correr a codificar un fix directamente".... NOOOOOOOOOOOOO, no hagan eso (en casos muy sencillos con eso terminaríamos). Hay que estar concientes que hasta este punto sólo hemos encontrado una probable causa y tal vez sólo un posible problema. Lo primero es crear una nueva prueba (vean mi post de TDD) que demuestr el bug. Esta es realmente una de las formas más sencillas de empezar a usar TDD. Para desarrolladores que nunca han usado esta buena práctica, la idea es que antes de codificar creemos una prueba que falle, luego hagamos la prueba pasar, lo cual garantiza que se haya cumplido el requerimiento o parte del requerimiento a probar.
Bueno un bug es finalmente un requerimiento más: "arreglar el problema de....". Así que usamos TDD de la misma forma que con cualquier otro. Aquí es más sencillo porque lo puedes hacer de manera aislada, es decir, no tiene que estar para todo el proyecto, sólo para parte del código, en este caso ya tienes también una idea (gracias al log y la platica con tu usuario) de como hacer una prueba que falle.
Aquí es donde vale la pena algo de código. El bug es el siguiente, el usuario dice que la aplicación esta calculando mal la suma de 2+2. Tu sabes que tienes una clase que hace esa suma, por lo que ese código es el que probaremos.
[TestMethod]
public void TestTwoPlusTwoIsFour()
{
MiClaseSumador sumadora = new MiClaseSumador();
int result = sumadora.Add(2,2);
int expected = 4;
Assert.AreEqual(result,expected);
}

En esta ocasión el log no nos hubiera ayudado mucho. Por otro lado el usar TDD fue muy sencillo en este caso, porque ya existía la clase y metodos a probar. Cuando no se esta acostumbrado a hacer pruebas al estilo TDD lo primero que hechan de menos el intellisense porque cuando escriben algo como "sumadora." el IDE no sabe que metodos hay porque no existen, ni que parametros espera, etc. Bueno cuando estamos corrigiendo un bug nos evitamos este problema haciendo la adopción de la técnica más fácil. Por otro lado, lo que realmente estamos probando antes de codificar no es en sí la clase, sino lo que hace la clase, así que pasamos al punto 5.

5. Corregir el bug identificado.
Una vez que tenemos una prueba que falla, sabemos que ese es el bug y simplemente hay que codificar algo para que pase la prueba. Una vez que la prueba pasa, no sólo estamos seguros de que efectivamente se corrigio el bug, sino más importante aún, de que no aparezca por segunda ocasión (claro hay que volver a correr esta antes de cualquier futuro release del software y mejor aún si se automatiza para que corra con cada checkin o cada noche por lo menos).


Claro que esta es una prueba sencilla, sólo quería ejemplificar. Por otro lado, la mayoría de los bugs podrían requerir de más de una prueba para garantizar que esta corregido, por ejemplo sumar 2,3 o algo distinto.

Otros puntos a notar.
El bug debería quedar documentado, si se usa alguna herramienta como Team Foundation Server el bug deberá relacionarse con las pruebas para que automaticamente nos provea la Trazabilidad que piden MoProSoft o modelos así (que por cierto a veces es útil).
La prueba debe volver a correrse de vez en cuando y mejor aún si es en cada check in.
Es importante el tener una forma rápida de actualizar a los clientes para que este bug quede corregido, si es un website puede ser fácil si es Windows o Mobile algo como Click One o el Updater Agent pueden ayudar.

QUE GANAMOS
Estamos seguros de que lo que correjimos es efectivamente el bug encontrado y no una cosa distinta, la prueba garantiza que realmente podemos reproducirlo.
Estamos seguros de que si se vuelve a presentar, seremos notros los primeros en encontrarlos al correr de nuevo la misma prueba.
Aprendimos TDD
Corregimos el bug.
Trazabilidad del bug a la prueba y a la corrección

lunes, febrero 05, 2007

Batalla en el escritorio

Nunca había visto está página pero encontre lagunabites.com por un CV que me mandaron. Está página promete tener contenido interesante. Les dejo este video y vean otros de sus posts, estan buenos (menos el de Sexo en el Oxxo).

http://lagunabites.com/bites/2007/01/28/batalla-en-el-escritorio/

martes, enero 16, 2007

AttachEnabled, Attach to Process, Mobile Debug

Cada que trabajo con una agenda nueva me pasa lo mismo y nunca recuerdo exactamente como hacerlo, siempre busco en mi blog pensando que alguna vez publique algo, pero oooh decepción.

Así que aquí va. Realmente la info sale de aquí pero resumido es lo siguente:

En Remote Registry Editor (parte de VS) vayan a su dispositivo y agreguen la siguiente llave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETCompactFramework\Managed Debugger\AttachEnabled=1

Es un Dword. Reinicien su dispositivo y listo Ahora pueden darle en Tools/Options/Attach to Process.

Es más rápido esto que dar F5 desde un principio. Lean las recomendacioes de David Kline

miércoles, enero 10, 2007

Team System

Wow!!! nuestro Team System está rapidisimo. Despues de formatear todas las máquinas y servers de la office Team System va que vuela.

Ahora el único problema es que mientras hace un get latest ya no alcanzamos a ver que archivos se estan bajando.

No se puede depurar en ASP.NET desde Vista

Recien formateamos las máquinas de la oficina para instalar el nuevo OS de MS, pero oh sorpresa en dos de las máquinas no podían correr ASP.NET.

Todo el truco esta en que VS debe estar corriendo como administrador de la máquina para poder depurar. Al parecer Vista y VS 2005 aún no se llevan bien, pero fuera de eso y otros problemas relacionados con lo mismo de permisos, no hemos batallado y en una de las máquinas hace 4 meses que se trabajaba con VS y Vista.

Otro de los problemas es que no puedes loggearte a Team System si no corres como Administrador VS.

Para como solucionar esto, lo más sencillo sería dar clic derecho y run as admin, para mejorjes soluciones chequen mi otro post.

viernes, enero 05, 2007

Integradores Tecnológicos Integrando Continuamente.

Haca ya un buen tiempo publique algo de CI, bueno finalmente lo estamos haciendo.

Que es, simplemente cada que damos un check-in nuestro servidor de build es notificado se jala la última versión desde nuestro servor de versiones, compila, corre code analysis, hace algunas pruebas de performance y otras pruebas automatizadas y finalmente se agregea todo el log a una lista de builds, queda en un dropbox todos los binarios compilados y listo.

Es muy sencillo el concepto, pero muy valiosos, auqnue sólo tenemos 2 días de usarlo, se que nos va a servir.

Toda la magía esta en una aplicación que recibe una notificació de Team Foundation, por cierto, les sugiero tambien copiar el default.aspx de Daniel

jueves, noviembre 23, 2006

Post para matar el tiempo.... Code Analysis

Estoy trabajando en un proyecto que al ratito les platico y está tardando mucho en realizar algunas cosas que luego les comento. Mientras esperaba me desesperaba y me ponía a buscar páginas de internet. Después de agotar los últimos posts de Martin Fowler y revisar el foro de discusión de roller.com.mx termine revisando mi blog. Me di cuenta que agote tenía casi un mes sin postear algo.

Después de un tiempo sin que se me ocurriera nada de que postear, me doy cuenta de que casi todo lo que hago vale la pena por un post, naaaa no es cierto, no soy todavía tan creído, pero si hay muchas cosas que me gustaría poder compartir. Por ejemplo, justo ahora estoy usando Code Analysis en un proyecto, aunque ya había usado FxCop en .NET 1.1 con excelentes resultados y un par de veces había curioseado con Code Analysis en VS 2005, no me había puesto a usarlo desde un principio en un proyecto.

Bueno ahora estoy haciendo un framework como parte de un proyecto de un cliente. Un framework es de esas partes en los proyectos que más debes de cuidar sobre todo porque son componentes que usaran muchos desarrolladores en diferentes proyectos, por lo que las sugerencias de Code Analysis resultan muy útiles aunque muchas muy enfadosas.

Code Analysis ha resultado ser muy lento, al menos como para correrlo cada vez que quiero compilar, pero si es tolerable como para correrlo como parte de mi suite de pruebas. Algún día creo que voy a hacer o a buscar algo que se encargue de en el background mientras yo sigo codificando se ponga a correr mis pruebas y code analysis y se vayan automáticamente corrigiendo los errores que aparecen en VS, pero de mientras, tendre que irlo corriendo manualmente de vez en vez.

Más adelante les platicare más de Code Analysis. Ahora voy a resumir un poco de lo que he hecho en estas tres semanas de ausencia.

Bueno el 3 de Noviembre di un curso en el Tec de Monterrey como parte de la serie de conferencia del MDCD, hable de lo que es el .NET Framework 3.0.

Luego fuí a Cd Victoria en Tamaulipas a una reunión de Clústers. Lo interesante es ver como los demás clusters del país tiene los mismos problemas que encontramos nosotros en Torreón, inclusive los grandes como el caso de Jalisco o TI Baja, aunque tenemos mucho que aprender del camino que ellos han recorrido.

Leí un libreo de XP (Extremme Programming), lo que más me gusto es que no es a las prácticas que se han vuelto buzz words como pair programming o TDD a lo que le dan la importancia si no a los valores y principios que deben de tener las personas, los equipos y la organización en general para que el proceso funcione bien. En general, has aquello que aporte valor al proyecto. XP es otro tema para platicar por si sólo, aunque soy más fan de muchas prácticas de Scrum y EssUP resulta otra metodología ágil interesante, la escencia de XP es algo que toda metodología debería tener: valores y principios pensados por el bien del proyecto.

Ya no avance con el libro de CSLA, pero lo poco que he leído me ha ayudado mucho, no para el propósito de ese framework, sino para la elaboración de otros. Es interesante ver desde adentro como esta armado y porque algo es internal en lugar de public o private por ejemplo.

Recién empiezo un libro de Team System que se ve muy prometedor.

Le ayude a Carina Casco a hacer un concurso nacional de patines (ufff que friega, pero ya salimos).

Terminamos algunos proyectos (entre ellos el primer piloto de MoProSoft) y estamos empezando otros, tal vez es por eso que no he tenido tiempo de postear.

Bueno y que sigue. Jugueteando con .NET el 8 de Diciembre, la idea es que lleven un juguete para poder entrar y estos sean donados, así DotNetLaguna aporte algo a la comunidad lagunera. Voy a estar viajando a Monterrey por motivo de un proyecto así que cada 15 días andare por allá. Seguirle con MoProSoft y la guerra con metodologías ágiles y formales. El fïn de año es de buenas ventas tanto para Integradores como para roller.com.mx así que esperemos que haya mucha chamba.

viernes, octubre 27, 2006

CodeSnippet Manager en Team System

Despues de casi un año de estarlo buscando, por fin, "helo" aquí. Todo gracias a Alex y su post, la verdad es que era algo muy sencillo, pero nunca se me había obucrrido buscar ahí.

Problema: En Team System no aparece el Code Snippets Manager.
Solución: Ve a Tools/Customize y luego busca la opción dentro del menú Tools y reagregala.

Ahora si a hacer mis snippets para algunos patrones de diseño.

lunes, octubre 23, 2006

Lo primero que querrás cambiar de Windos Vista

Ok, Windows Vista es mucho más seguro que los demás Windows, ¿por qué?. Aún y que entres con tu cuenta de administrador, por default, todos los threads estan corriendo con una cuenta de menores privilegios.
Ventjas: si un usuario abre un attachment que dice love.zip o conejitas.exe, el virús no podrá hacer gran daño. Lo mismo aplica a muchos otros escenarios.
Desventaja: si abres por ejemplo en Visual Studio un proyecto que no este dentro del folder "Documentos" (antes "Mis Documentos") o en el folder del usuario no podrás guardar los archivos, compilar, etc, porque por más que seas administrador, VS se abrió bajo una cuenta sin permisos.
Otro ejemplo es mi outlook, resulta que mis data files (donde estan todos mis mails) estan en otro disco duro, por lo tanto en en el folder del usuario (users/miguel/ antes era algo como Documents and Settings/miguel/). Así que outlook simplmente no habría a menos.

Como arreglarlo, hay tres formas:
1. Da click derecho y luego run as Administrator y luego da clic en Si a las 22 alertas que salen.
2. Da click derecho, ve a propiedades, pestaña de compatibilidad y dale en siempre correr esa aplicación como administrador. Ahora cada vez que abres la app te pregunte si le das permiso de iniciar, ya que explicítamente la app lo solicitará desde un inicio.
3. Ok, para permitir que corra toodo siempre bajo tu cuenta de admin, ve al menú inicio y en la barra de busqueda (antes run) escribe "secpol.msc" y deshabilita Local Policies/Security Options/User Account Control: Run all administrators in Admin Approval Mode. Reinicia y listo. Ahora todo lo que tendrás que soportar es una anuncio que dice que tu máquina no es segura.

El tipo de usuarios de "mi mamá" deberían de usar siempre todo sin permisos y no complicarse con clic derecho y propiedades y nada de eso.

La primera opción del clic derecho es muy enfadosa, pero útil para usuarios con algo de experiencia.

La segunda opción es la ideal para quien sabe como tener en control sus aplicaciones y administrar cuales tendrán permisos.

La tercera opción es para descuidados y gente inconsciente que o sabe el daño que podría ocasionar dejar a su máquina siempre corriendo como administrador.

Yo en lo personal me quedo con la tercera opción. Entro en el grupo de los flojos que no quieren estar dando ok a las alertas de seguridad.

Como funciona esto. Una parte interesante es que una aplicación puede desde atributos del Assembly (en AssemblyInfo.cs) específicar el nivel de permisos deseado. Si yo desde estos atributtos solicito permisos de administrador para mi aplicación, al momento de que alguien la ejecuta Windows Vista le pregunta al usuario si la quiere dejar similara a si el mismo usuario hubiera dado clic derecho y run as admin. Si tu aplicación explicítamente solicito que quiere pocos permisos, la opción de "always run as admin" estará deshabilitada.

Es buena práctica el que tus aplicacione siempre pidan los minímos permisos necesarios para que trabaje bien. Es decir si tu aplicación realmente no necesita full control, no lo solicites, simplemente pide lo que sabes que necesitarás, el hacer esto hará funcionar un modelo de seguridad similar al de Windows Vista en sistemas operativos anteriores, es decir, si tu app trata de hacer algo que excede los permisos solicitados explicítamente, truena.

jueves, octubre 19, 2006

Aplicación de Patrones de Diseño

El día de hoy Jaime y yo dimos un taller en el Tec Laguna sobre la aplicación de patrones de diseño. Para los que asistieron les dejo el material y para los curiosos, pues igual bájenlo, aunque la verdad el material no es suficiente como apoyo didáctico, se debe complementar con la explicación del taller.
Viene mucho código fuente, muchos ejemplos que por tiempo no alcanzamos a ver. El zip incluye la presentación de powerpoint y junto a esta la solución de Visual Studio. Dentro de esta solución hay muchos proyectos de C#, los interesantes (o al menos los que vimos en el taller) son Strategy.Ducks, Strategy.Chafa, Factory.Docks y Strategy.Winforms. Todo el resto se los dejo como ejemplo.
Si tienen Nunit podrán correr el proyecto DeveloperTests que prueba todos los patrones de diseño.
Espero y este material les sea útil. Si tiene cualquier duda, sólo dejen un mensaje.
Les recuerdo que las vacantes siguen abiertas para desarrolladores y practicantes con deseos de aprender y desarrollar con nuevas tecnologías. Manden currículum a recursoshumanos@integradorestecnologicos.com.

viernes, octubre 06, 2006

Segundo Evento Comunidad .NET

Hoy realizamos el segundo evento de la Comunidad .NET Laguna. El proximo es para el 3 de Noviembre en el ITESM CL.

No pude asistir a la primera conferencia y la segunda la dimos nosotros, por lo que mejor espero comentarios de ustedes. Estuve en la inauguracion y vimos una presentacion de Armando Perez sobre el desarrollo de las TIs en la region y el plan que tiene Gomez para impulsar este sector o mas bien para que este sector pueda impulsar a Gomez. La verdad es que es un apoyo mutuo, las ciudades que decidan ahorita subirse al barco les puede ir bien y tanto nos beneficiamos nosotros que estamos en el sector, como los ayuntamientos que van a generar empleos y sobre todo la sociedad en general que podra tener mejores fuentes de empleo. Bueno pero para que meternos en cosas de politica, mejor pasamos a hablar del taller.

Yo entre al taller de WCF fue un poco lento el ritmo, aunque muy interesante el taller. Se veia que Paco (Francisco A. Juarez Figueroa) ya se habia metido un buen tiempo a WCF, traia bien preparado el tema. A proposito de este tema, vale la pena un post nuevo sobre WCF y sus ancestros.

TDD

Este sera mi primer Post de una serie de publicaciones sobre TDD. Tengo un ejemplo paso a paso de una pequena prueba con esta metodologia, pero antes de meterme a la practica, les dejo un poco de teoria.

http://msdn.microsoft.com/vstudio/teamsystem/tester/default.aspx?pull=/library/en-us/dnvs05/html/GuidelinesforTDD.asp

Estuve revisando mis posts y en todo un mes, hice solo 4 posts. Ya necesito publicar mas. Tengo algunos temas pendientes... vamos a bloggear mucho mas ahora, tanto que parecera spam...

viernes, septiembre 29, 2006

Segunda Reunión Comunidad DotNetLaguna

Invita: A su segunda reunión de la comunidad.

Microsoft tiene el gusto de invitarlo a la Segunda Reunión de la Comunidad de Desarrolladores de la Comarca Lagunera.Se llevara a cabo este viernes 06 de octubre del 2006 a las 9:30 a.m. en la Sala de Usos Múltiples del Instituto Tecnológico de la Laguna.
Lugar de las conferencias:
Sala de Usos Múltiples del Instituto Tecnológico de la Laguna.Lugar de los talleres: CITIGP (Blvd. Rebollo Acosta y Czda. Lázaro Cardenas 481 Gomez Palacio).

Conferencia:Expression Designer e Interactive con Visual Studio 2005Hora: de 10:00 a 11:20 hrs. Lugar: Tecnológico de la Laguna Expositor: R. Benjamin Romeo Tanús

Mesas Técnicas:Compartiendo Experiencias en: Inicios en .Net Instaladores, Web Services, Mobile, etc. Hora: de 13:00 a 14:00 hrs. Lugar: Tecnológico de la LagunaExpositores: La Comunidad

Taller: Expression Web/Interactive con Visual StudioHora: de 16:00 a 17:30 hrs.Lugar: CITI-GPExpositores: Bayardo Edel Cruz Velázquezy Gustavo Mesta Ortega

Conferencia: Ciclo de desarrollo de Software con Visual Studio Team SystemHora: de 11:30 a 13:00 hrs.Lugar: Tecnológico de la LagunaExpositor: Miguel A. Madero Reyes.

Taller: Windows Communication FoundationHora: de 16:00 a 17:30 hrs.Lugar: CITI-GPExpositor:Francisco A. Juarez Figueroa

Convivio: Preparando el siguiente evento Hora: 18:00 hrs. Lugar: CITI-GP


¡Ven, participa y forma parte de esta gran comunidad de desarrolladores ahora cerca de ti!

jueves, septiembre 21, 2006

Platicas del Microsoft Developer Community Day

Como les comentaba en mi post anterior el 3 de Noviembre será el MDCD. Los temas son los siguientes:
Desarrollo con .Net 3.0, la evolución del .Net framework (yo voy a dar este tema)
Preview nuevas características en Windows Vista (mmmm).
Desarrollando con Visual Studio 2005 y Microsoft Office 2007 (suena chido, este lo dará alguien que mande Microsoft).
AJAX y su integración con las plataformas de desarrollo (este lo va a dar Benjamin Romero de dotNetLaguna).

Espero y les resulente interesantes los temas.

sábado, septiembre 09, 2006

ITunes PodCasts

Similar a como funciona un RSS Reader, ITunes funciona como un lector de PodCasts, lo que te permite mantener una lista de suscripciones a tus programas de audio favoritos. ITunes se encarga de descargarlos por ti y los deja listos para que los quemes o escuches en offline.


Esto es genial para no tener que ir a la página de cada uno para checar si hay algo nuevo y luego descargar uno a uno los audios, guardarlos, etc…


Así que bajen ITunes y vayan a Advanced y Seleccionen “Subscribe to PodCast”.

Microsoft Developer Community Day

El próximo 3 de Noviembre en el Auditorio Santiago A. Garza de la Mora en el ITESM CL se llevará a cabo este evento de Microsoft, que incluye una serie de conferencias sobre el tema. Este tipo de eventos (MDCDs) son los sucesores a lo que antes conocíamos como DevDay’s. Microsoft cambio el nombre e imagen de estos eventos, para manejarlos ahora como eventos de las comunidades de .NET. Por esto, DotNetLaguna, estará a cargo de la organización de este.


Los temas aún están pendientes por definirse y estos los escogeremos entre todos, así que vayan y voten por sus preferidos y con suerte hasta ganan un Xbox 360.

lunes, agosto 28, 2006

Mobile Client Software Factory

Guidance, Tools, Frameworks and Tips for Developing Windows Mobile 5.0 Applications.Mobile Client Software Factory


Les paso la presentación y algunas anotaciones que hice de la plática que di el Viernes pasado. Espero y les sea útil.

Le sugiero revisar los links al final de la presentación.

Cualquier duda, pueden dejar un mensaje o escribir en dotNetLaguna.com

Miguel Madero.

jueves, agosto 24, 2006

Comunidad .NET Laguna Primer Evento

InvitaciónMayor información:mailto:informes@dotnetlaguna.commVisítenos en:www.DotNetLaguna.com

Microsoft tiene el gusto de invitarlo a la Inauguración de la Comunidad de Desarrolladores de la Comarca Lagunera.Se llevara a cabo este viernes 25 de agosto del 2006 a las 9:30 a.m. en el auditorio del Instituto Tecnológico Superior de Lerdo.Mostraremos en ese día conferencias y talleres a 2 niveles (Avanzado y Principiante) donde trataremos temas como Visual Studio 2005, Ajax, Remoting, Mobile, etc.Presentación de la comunidad Microsoft: DotNet Laguna viernes 25 de agosto.Lugar de las conferencias: Instituto Tecnológico Superior de LerdoLugar de los talleres: CITIGP(Blvd. Rebollo Acosta y Czda. Lázaro Cárdenas 481 Gómez Palacio)


Actividades de nivel Básico

10:00 - 11:20

Conferencia: "Programación rápida con Visual Studio 2005"

Por: Juan Pablo Burciaga

11:30 - 13:00

Conferencia: "Caso de éxito: Windows y Web Services"

Por: Gustavo Mesta Ortega

16:00 - 18:00

Taller: "Introducción a ASP.Net"

Por: Ricardo Escajeda


Actividades de nivel Avanzado

10:00 - 11:20

Conferencia: "Ajax en .Net: Atlas"

Por: Benjamin Romero

11:30 - 13:00

Conferencia: "Desarrollo de Aplicaciones en Mobile 5.0"

Por: Miguel Madero

16:00 - 18:00

Conferencia-Taller: "Utilizando .Net Remoting"

Por: Carlos Alcántara

¡Ven, participa y forma parte de esta gran comunidad de desarrolladores ahora cerca de ti!

© 2006 Dot Net Laguna. Todos los derechos reservados. Microsoft, BizTalk, Microsoft Dynamics, SharePoint, SQL Server, Visual Studio, y Windows son marcas registradas Microsoft Corporation en Estados Unidos de Norte America y/o otros países. Todas las marcas son propiedad de sus respectivos dueños.Fe de Erratas: Los acentos y caracteres especiales han sido eliminados por compatibilidad con los clientes de correos

sábado, agosto 19, 2006

Que son Software Factories?

Tengo yo varios posts sobre el tema de Software Factories y siempre que escribo prometo publicar más al respecto.... bueno Jaime recien escribio un post bastante interesante para todos aquellos que quieran una introduccion sobre Software Factories. Me ahorro más de 1 hora y media de mi vida porque es precisamente el tipo de introducción que tenía en mente escribir. Así que vayan y lean más sobre Software Factories.

ElCerDo -- Blog: Que son Software Factories?

lunes, agosto 14, 2006

MoProSoft e Integradores Tecnologicos

Recien publicaron en el Siglo de Torreón una nota de una entrevista que me hicieron.

lunes, julio 31, 2006

Windows Vista Gadgets

Los Gadgets son un nuevo tipo de aplicaciones usadas en Windows Vista. Los que han usado este OS los habrán visto en su Sidebar. Bueno, investigando un poco de que opciones hay para desarrolladores de Vista, enconte como desarrollar Gadgets. No es nada espectacular, sobre todo para aquellos que han desarrollado web.

Ok, de esto se trata, necesitas un archivo de manifiesto (gadget.xml con ciertos datos sencillos como decirle donde está el Gadget, el titulo de este, una descripción, información del autor, etc. Todo lo demás es hacer una página web a ciertas medidas. Dentro del mismo folder puedes tener tus imágenes, archivos de javascript y css. Puedes configurar una página de Settings y guardar la configuración de tu Gadget, también podrás tener muchas instancias de tu Gadget abierto cada uno con su propia configuración. Estos Gadgets los puedes depurar desde Visual Studio. Por último una vez listo tu Gadget, simplemente comprime todo el folder en un zip o lo empaquetas en un cab y le cambias la extensión a .gadget y listo, lo distribuyes desde tu sitio web.

Una gran ventaja es que estos Gadgets pueden usar el Gadget Object Model que nos permite desde JavaScript acceder a información del Sistema Operativo como variables de entorno información de la batería, uso de CPU y muchas otras cosas. Al parecer es bastante poderos.

Un área interesante de explotar seria la manera en que pudiéramos combinarlos con Ajax para estar trayéndonos información, pudieran ser anuncios, alertas de un sitio web como alguna venta del sitio que la persona este administrando, traerse imágenes de un fotoblog.

Bueno no quiero aburrirlos con tanto rollo, lo mejor es que vean directamente el ejemplo introductorio a como crear Gadgets.

domingo, julio 30, 2006

Más de VSTS for DB Pros

Aquí les dejo algunas pantallitas con comentarios.



DB for Pros, agrego nuevos Project Templates, vamos a probar con el de SQL Server 2005 y agregarlo SourceControl a nuestro proyecto de Investigaciones.



Uuups. Nunca me preguntaron por una instancia de SQL y al parecer no se pudo conectar a ninguna. “Project Creation Failed”.


Intentemos de nuevo, pero en esta ocasión sin agregarlo a SourceControl.


Mismo error, nuevamente. ¿Hasta aquí llegamos? No… vamos a intentar con otro tipo de proyecto.


No es exactamente lo que buscábamos, pero a ver, agreguemos un proyecto para crear clases que se usen en SQL Server.


Tal como esperábamos, ahora nos pide la instancia.


Wow, desde VS 2002, siempre fue algo complicado el depurar SQL, y esto parece que va a dejar todo listo para poder hacerlo de manera sencilla. Sólo no hay que depurar en un servidor de producción. Hagan esto en alguno de prueba. Según la nota: “Todos los managed threads se detendrán durante la depuración”.


Al agregar un nuevo Item, estas son nuestras opciones. Se está volviendo lento y tardado poner una imagen de cada paso. Por lo que voy a probarlo sólo y luego les paso lo más importante. Este es mi primer post con imágenes desde Word 2007 directo a blogger, así que quería probar que tal se subían. Pero bueno, suficientes imágenes para mi prueba.

Bueno realmente no hubo mucho más que mostrar.

  • Agregue el proyecto a SourceControl sin problemas.
  • Le agregue uno de cada uno de los ítems que mostré anteriormente.
  • Les hice cambios a estos y cree unos tipos de datos, clases y otras cosas sencillas. Nada que no hubiéramos podido hacer desde otro lugar.
  • Al presionar F5 me empezó a hacer el deployment y todo fue a dar a mi base de datos sin problemas.
  • Al final me dijo que no tenía suficientes permisos para depurar.


Bueno y a que le hizo el deployment. Me copio mi Assembly, creo un StoredProcedure y mi type.

Es importante mencionar que el proyecto tiene unos Test Scripts. Estos Scripts se corren al momento de hacer el deployment, para estos prueban tus StoredProcedures u otros objetos de SQL.

Ok, vale la pena entonces probar alguna otra funcionalidad aparte de el puro deployment y SourceControl.

Refactoring: hice un simple rename a mi tipo para que ahora se llame Type2 y voila!!! F5 y todos los cambios aplicados también en mi base de datos y afectando a mi StoredProcedure.

CREATE
PROCEDURE [dbo].[StoredProcedure1]

@miTipo [dbo].[Type2]

Algo que me llamo la atención es la manera en que podemos crear Stored Procedures. Finalmente es un metodo estático dentro de una clase decorado con ciertos atributos. El metódo puede regresar algún tipo de dato y recibir tantos parametros como sean necesarios, esto finalmente se traduce en código como el que vimos arriba.

Unit Testing: cree una sencilla prueba unitaria para algunas propiedades y metodos y todo sin problema. Sin embargo, no se que tal se comporte al querer hacer unit testing sobre un stored procedure ya en la base de datos o sobre algún mock database. Aún no se como vaya a trabajar eso.


Hay mucho por conocer de está herramienta, les sugiero que la bajen y se pongan a jugar un rato. Aunque no estoy completamente satisfecho con el producto, parece ser algo prometedor.

sábado, julio 29, 2006

Problemas instalando Windows Vista Beta 2

Les dejo el link de un Post muy interesante respecto a como instalar Windows Vista.

Word 2007 y mis Posts pendientes

Les comento que Word 2007 tiene una nueva funcionalidad para publicar directamente a diferentes proveedores de blogs, entre ellos blogger. Bueno mis últimos posts prometían ser algo más completos con mejor formato y colorsitos y más importante aún fotos. Sin embargo, Word 2007, al parecer aún no puede subir bien las fotos.

Así que les debo tres posts más hasta que tenga oportunidad de subir las fotos manualmente a algún otro lugar. Mientras les dejo un abstract de los posts:
1. Como usar Continuous Integration con VSTS TFS, hay una herramienta que permite que se automatice está tarea, en lugar de que se configure por tiempo, ahora detecta que hay cambios en el código y corre el build al momento.
2. Algunos Screenshots de la spruebas con DataDude (VSTS for Database Professionals).
3. SmallDtoWrapper, es un patrón de diseño de arquitectura que nos ha resultado muy útil para optimizar el consumo de ancho de banda al usar WebServices. Desde que empece a leer de patrones de diseño, siempre quise tener el mio, bueno, porfín posteo respecto a mi primer patrón de diseño.... Espero comentarios...

martes, julio 25, 2006

Visual Studio Team System for Database Professionals

Esta es la descripción que encontré de la herramienta:

Herramientas para construir bases de datos de SQL en un entorno de proyecto administrado con soporte para versiones, despliegue (deployment), pruebas unitarias, refactorización, y desarrollo SQL desconectado. Este release (CTP de Junio de 2006) está enfocado en un escenario de funcionalidad completa para SQL 2000 e incluye el sistema base con ingeniería en reversa, un nuevo editor de consultas, comparador de esquema y datos, generador de datos, pruebas unitarias y refactorización de nombres.

En un post anterior ya les había hablado de DataDude (codename) para este nuevo producto. Bueno, ya pueden bajar los bits de Junio, pero no les dejo ese link, mejor el del CTP4.

Estos son links de algunos bloggers the DataDude:

Luego que lo prueba más publicare algunas fotos.