MSDN Blogs
  • WarNov Developer Evangelist

    Windows Azure también es para ITPROS!

    • 0 Comments

    Nuestra plataforma de Cloud Computing no sólo ofrece mejores servicios de software en la nube, más baratos y más escalables y robustos para los usuarios, sino que también nos ofrece a desarrolladores muchas ventajas frente a otros modelos de programación. Por si fuera poco, para los ITPROS también hay!

    Cuándo en los modelos de despliegue tradicionales habían tenido la oportunidad de ampliar la cantidad de servidores en una solución solo cambiando un numerillo en un archivo de configuración?

    En el video que les presento a continuación, observamos cómo un ITPRO puede hacer una instalación de una aplicación en minutos y luego hacerla crecer de una manera muy sencilla.

    Con este fin creé una sencilla aplicación Web que nos informa el ID del servidor que está respondiendo. Cuando solo hay un servidor, siempre se muestra el ID 0, pero cuando hay varios, se muestra alternativamente que responde el 0, el 2, o el 1.

    Recuerdo de mis épocas de desarrollador puro, pasar hasta 5 horas tratando de actualizar un portal web asp.net en un hosting de MIA, consistente en un clúster de 6 nodos, junto con un equipo de 4 personas. Hoy eso no me tomaría más de media hora y lo podría hacer automatizadamente con un script.

    Enjoy!

     

    (Disclaimer: El video lo grabé de una teleconferencia que hice y por ende pueden encontrar ciertas deficiencias en el sonido; sin embargo lo encontré de mucho valor y quise compartirlo con ustedes; quedo atento ante cualquier duda)

  • WarNov Developer Evangelist

    Windows Azure: El Servicio de Cloud Computing más rápido del mundo

    • 0 Comments

    En la batalla de los proveedores de servicios de Cloud Computing (verdadero cloud computing), Windows Azure de Microsoft ha salido adelante. Azure ofrece los tiempos de respuesta más rápidos a los usuarios finales para una aplicación de comercio electrónico estándar.

    Estos son los primeros resultados acerca de la capacidad de distintos proveedores para ofrecer un resultado de la carga de trabajo. La misma aplicación fue colocada en la nube de cada proveedor y, a continuación, fue golpeada por miles usuarios automatizados a lo largo de 11 meses.

    Google App Engine estuvo de segundo, seguido por GoGrid, Amazon EC2 y Rackspace, según pruebas realizadas por el servicio de CloudSleuth de Compuware.

    clip_image001

    Funcionalidades de la prueba incluían la capacidad para ofrecer una página Web con información de catálogo de muchas imágenes pequeñas y detalles de texto, seguidas por una segunda página que consiste en una imagen grande y etiquetas. Windows Azure con su centro de datos en Chicago fue capaz de ejecutar los pasos necesarios en 10.142 segundos.

    Como pueden apreciar, es sorprendente, dada la variedad de arquitecturas y técnicas de gestión de los participantes, los primeros cinco contendores muestren resultados tan sorprendentes. Aquí aparte del primer puesto de Azure, la diferencia la marcan los servicios de valor agregado que en nuestra estrategia Microsoft son inmensos ya que Azure se puede integrar transparentemente a todos los otros productos y servicios que manejamos en un amplio e inigualable rango en el área tecnológica.

    Los tiempos de respuesta pueden parecer mucho en comparación con, digamos, los motores de búsqueda que solo tardan un segundo en responder. Pero la aplicación de prueba está diseñada para requerir una transacción de varios pasos que está siendo solicitada por los usuarios de una variedad de lugares del mundo.

    Es la mayor red de robots en el mundo, dijo el proveedor independiente que ejecutó el análisis. A continuación, se corrigió: "Es la mayor red de bot legal," ya que hay redes de bots de malware de tamaño considerable surgen de vez en cuando.

  • WarNov Developer Evangelist

    Mesh: En 5 millones de Dispositivos

    • 0 Comments

    Hoy, hemos alcanzado un hito importante: Windows Live Mesh (nuestra oferta de sincronización de archivos con la nube y entre diversos dispositivos) completó la conexión con 5 millones de dispositivos: más de 3 millones de usuarios sincronizando 2.2 petabytes a la nube. Windows Live Mesh fue lanzado el 30 de septiembre de 2010 y se unió a SkyDrive, un servicio ya utilizado por 70 millones de clientes, como un componente esencial de la estrategia de nube de consumidor de Microsoft.

     

    image

    Esto marca un momento importante en la transición estable para un mundo donde la gente utilizará una mezcla de servicios cloud y aplicaciones basadas en PC, juntos. Como empresa, creemos que esta tendencia continuará ya que las personas buscan un equilibrio en la manera en que administran sus datos en múltiples dispositivos y servicios.

    Esto contrasta con los que creen lo mejor es un mundo sólo en la nube y que todo debe vivir en línea. Es una idea simple, pero nuestros clientes nos dicen que quieren elegir lo que funciona mejor para ellos.

    Para ofrecer esta elección, nuestra estrategia de nube de consumidores se centra en tres partes:

    1. Ofrecer correo electrónico y chat servicios de clase mundial con Hotmail y Messenger que se conectan a servicios como Facebook, MySpace, LinkedIn, Gmail, Yahoo Mail y más de 75 otros sitios Web de todo el mundo.

    2. Proporcionar una gran plataforma para desarrollar estos servicios, incluidos los servicios de Microsoft como Xbox, Office y Windows Phone 7

    3. Conectando Windows a la nube con Windows Live Essentials

    Estamos muy contentos de ver que nuestros clientes aprovechan la oportunidad de conectividad que brinda Mesh, y lo mejor de todo, gratis!

  • WarNov Developer Evangelist

    Te gusta Python? Que tal trabajarlo con el poder de Visual Studio huh?

    • 0 Comments

    Las herramientas de integración de Python con Visual Studio. Básicamente han sido liberadas en Beta dentro de CodePlex: http://pytools.codeplex.com y permiten que VS sea usado para escribir código Python con Ironpython y CPython. Ofrece un perfil de depuración y también soporta High Performance Computing (HPC de Windows).

    Cosas interesantes acerca de Python::

    -Es un lenguaje multiplataforma

    -Se está volviendo muy popular (# 6 de acuerdo con el índice de Tiobe)

    -Está siendo usado como una introducción al lenguaje de CS en tesis doctorales

    -La versión de IronPython se integra perfectamente con .NET (por ejemplo con bibliotecas recientemente lanzadas como NumPy/SciPy – Librería de uso científico ahora en versión .NET)

    - No solo soporta HPC sino que pronto soportará Windows Azure y Dryad

    -Es gratis

    -Es código abierto (apache 2.0)

  • WarNov Developer Evangelist

    Windows Azure SDK 1.4 acaba de liberarse

    • 0 Comments

    En noviembre tuvimos la versión 1.3. La 1.4 sale tan pronto fruto de un refresh urgente que había que hacer para solucionar los siguientes problemas:

    1. El modo Full IIS fallaba cuando el Web.config estaba en solo lectura (por ejemplo proveniente de un TFS)

    2. Los paquetes de despliegue con Full IIS quedaban de doble tamaño

    3. En el modo full IIS el IIS se reciclaba cada vez que se llenaba el almacenamiento de diagnóstico

    4. Un error en los permisos sobre el archivo de log de IIS causaba que IIS no pudiera transferir los logs al storage de Windows Azure

    5. En ocasiones no funcionaba la herramienta csupload en ambientes x86

    6. Los errores de usuario en el web.config eran muy complicados de diagnosticar

    7. Habían ciertos errores en la estabilidad y robustez del acceso a través de Remote Desktop Connection a los roles de Windows Azure.

    Luego de instalar este refresh, quedarán con la siguiente versión de SDK:

    image

    Este release incluye adición de mejoras a las tecnologías de Windows Azure Connect ( que ahora puede ser accedida por múltiples administradores y emplear máquinas que no tengan por defecto el idioma inglés instalado; además tiene mejoras en el diagnóstico y notificaciones de estado) y para Windows Azure Content Delivery Network que entre otras cosas ahora permite el acceso a través de HTTPS.

    Por si fuera poco, coincide esta publicación con la liberación de una nueva versión del Portal de Windows Azure, que ahora tiene algunas funcionalidades adicionales en su interfaz gráfica y una mejor respuesta de interfaz.

    Pueden descargar este refresh de aquí.

  • WarNov Developer Evangelist

    Tecnología Azure en pro de los afectados en Japón

    • 0 Comments

    Microsoft ha activado su Protocolo de respuesta a desastres. Luego de asegurar a sus empleados e instalaciones, se establece contacto con clientes y socios para realizar evaluaciones de impacto. A pesar de la catástrofe, no hay interrupción en los servicios de nube de Microsoft.

    Microsoft está ofreciendo soporte técnico gratuito para ayudar a nuestros clientes y socios afectados por el terremoto de manera que puedan restablecer sus operaciones. También se están proporcionando licencias de software gratuitas para todos los clientes y socios afectados, así como a líderes, gobiernos, socios sin fines de lucro y las instituciones que participan en actividades de respuesta ante desastres. Exchange OnLine estará disponible sin costo alguno para los clientes de negocios en Japón, cuya infraestructura de colaboración y las comunicaciones puedan haberse visto afectadas. Esto les ayudará a reanudar las operaciones más rápidamente, mientras que los sistemas existentes vuelven a la normalidad.

    clip_image001

    Microsoft también ha entrado en contacto con los clientes, gobierno local, organismos gubernamentales y no gubernamentales para apoyar los esfuerzos de socorro. Se ha dispuesto un portal de respuesta ante desastres basado en comunicaciones sobe Windows Azure en el que los gobiernos y organizaciones no gubernamentales pueden comunicarse con los ciudadanos o intra-Agencia para fines de comunicación, información y conciencia situacional.

    Bing Maps actualmente proporciona imágenes del área y está trabajando para asegurar las fotografías de antes y después del desastre, para una aplicación de asignación de respuesta ante desastres. En el portal de respuesta ante desastres de Microsoft, hemos enumerado formas de ayuda, incluidos vínculos a varias organizaciones sin fines de lucro que están ofreciendo apoyo para ayudar a las víctimas del sismo japonés.

  • WarNov Developer Evangelist

    EntityFramework Interoperable

    • 0 Comments

    Sabemos que una de las tareas más costosas en el desarrollo de una solución de software, es la creación de la capa de acceso a datos. Como ya sabemos, Microsoft hoy en día nos ofrece una brillante alternativa en cuanto a ORM. El EntityFramework, que soporta originalmente en el fondo a MS Sql Server. Sin embargo, en este artículo veremos cómo nuestras tecnologías están abiertas a ser interoperables con otros motores de bases de datos como MySql y PostgreSQL.

    Para este post, me he permitido invitar a Emerson Perdomo. Ingeniero de Sistemas de la Universidad Distrital de Bogotá. Gran colaborador en nuestra subsidiaria de Microsoft Colombia quien ha estudiado bastante el tema de ORM y creación automática de formularios basados en clases. Las siguientes instrucciones fueron creadas por él, para ayudarnos a comprender el proceso de conectar el EntityFramework a otras fuentes de datos.

    PostgreSQL

    Npgsql - .Net Data Provider for Postgresql es un conjunto de DLLs que se agregan a Visual Studio .Net pero no se integran con el Wizard del Visual Studio .Net porque no hay soporte oficial de Npgsql, sin embargo, se pueden agregar en cada uno de los proyectos sin ningún problema; el inconveniente es que al intentar usarlas hay que generar el modelo desde "Visual Studio 2008 Command Prompt" e incluir los dos archivos ".cs" que genera al proyecto.
    A Continuación doy los pasos para poder usarlo en un ejemplo sencillo.

    PASO 1:

    Descargue de la página oficial de Npgsql
    http://pgfoundry.org/frs/?group_id=1000140

    El archivo:
    Npgsql2.0.8-bin-ms.net3.5sp1.zip

    Npgsql2.0.8-bin-ms.net3.5sp1.zip

    Descargue la Última versión de PostgreSQL
    http://www.enterprisedb.com/products/pgdownload.do#windows

    Obviamente hay que tener
    Visual Studio 2008 Professional Edition Trial con SP1
    http://www.microsoft.com/express/Downloads/

    .Net Framework 3.5
    http://www.microsoft.com/downloads/details.aspx?FamilyID=d0e5dea7-ac26-4ad7-b68c-fe5076bba986&displaylang=es

    PASO 2:

    Instalamos el PostgreSQL , el Visual Studio, .NET Framework 3.5 y descomprimimos el Npgsql2.0.8-bin-ms.net3.5sp1.zip recomiendo que lo descompriman en C:\ para que no estén buscando la ubicación.
    Ahora vamos a registrar nuestras DLL de Npgsql en el GAC de Visual Studio.
    Primero hay que abrir nuestro "Visual Studio 2008 Command Prompt" que se encuentra por lo general en "Inicio -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Prompt "
    Ahí ejecutamos las siguientes líneas de código:
    gacutil -i c:\ubicacion de la dll Npgsql\Npgsql.dll
    gacutil -i c:\ubicacion de la dll Mono.Security\ Mono.Security.dll
    en mi caso
    gacutil -i c:\ Npgsql2.0.8-bin-ms.net3.5sp1\bin\Npgsql.dll
    gacutil -i c:\ Npgsql2.0.8-bin-ms.net3.5sp1\bin\Mono.Security.dll

    PASO 3:

    Ahora hay que agregar una línea de código XML al archivo machine.config del Framework que por lo general se encuentra en C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\
    Abrimos el Archivo machine.config con el editor de su preferencia.
    Y agregamos en el área de <DbProviderFactories> </DbProviderFactories>
    la Siguiente línea de código

    <DbProviderFactories>
    <add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.8.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
    </DbProviderFactories>

    PASO 4:

    Ahora abrimos el motor de base de datos PostgrsSQL y creamos una base de datos sencilla
    Base de datos Test
    http://www.megaupload.com/?d=2XS1OYGU
    Recuerda que la base de datos esta sin datos hay que alimentarla.

    PASO 5:

    Ahora ejecutamos la siguiente línea de código en el "Visual Studio 2008 Command Prompt".
    c:\> edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"string de conexion" /project:NombreQueQuiera /language:CSharp
    En mi caso
    c:\> edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"DATABASE=test;HOST=127.0.0.1;PORT=5432;PASSWORD=yta;USER ID=postgres" /project:TestPostgreSQL /language:CSharp
    Los Archivos van a quedar en esta Ubicación
    C:\Program Files\Microsoft Visual Studio 9.0\VC
    De ahí lo pasas al proyecto que estés trabajando y Solo agregas los archivos ".cs":

    Insertando modelo de Postgresql en solución VS

    Puedes encontrar más información sobre los Archivos de extensión.
    CSDL en :
    http://msdn.microsoft.com/es-mx/library/bb399169.aspx

    MSL en :
    http://msdn.microsoft.com/es-mx/library/bb399202.aspx

    SSDL en :
    http://msdn.microsoft.com/es-mx/library/bb399559.aspx
    No te preocupes si salen errores de referencia en el siguiente paso especificamos cuales son.

    PASO 6:

    Ahora hay que agregar unas referencias:
    System.Data.Entity
    System.Runtime.Serialization

    Después de esto Tendrás que crear el App.Config y configurar la cadena de conexión.
    Y listo ahora es posible hacer CRUD a la base de datos, para ver el ejemplo terminado dejo el SourceCode.
    http://www.megaupload.com/?d=CORN5YVQ
    __________________________________________________________________________________________________________________________________________

    MySql

    MySql Entity Framework es fácil de configurar ya que solo tienes que descargar el Mysql Connector de la página oficial http://dev.mysql.com/downloads/connector/net/
    Instalarlo y listo, lo puedes Usar exactamente igual que Entity Framework para Sql Server.

    Claro está que debes tener previamente instalado el Visual Studio 2008 con SP1

  • WarNov Developer Evangelist

    Curso Gratuito de XNA en Colombia

    • 0 Comments

    Microsoft Colombia te reta a aplicar tu imaginación, pasión y creatividad en innovaciones de tecnología que puedan hacer una diferencia en el mundo. Participa en Imagine Cup 2010.

    El Diseño de juegos es en dónde el arte y la ciencia se unen. A través de Imagine Cup, puedes aprender y avanzar hacia una carrera cómo desarrollador o empresario de juegos. Únete hasta con 3 amigos y construye una experiencia de juego completa, usando XNA Game Studio 3.0 o posterior, Visual Studio o Silverlight.

    ¿Quieres aprender XNA Game Studio y participar en Imagine Cup 2010?

    1. Aquí encuentras toda la información sobre la competencia. No olvides revisar con detenimiento las reglas.

    2. Regístrate en Imagine Cup 2010 y escoge la categoría de Diseño de Juegos.

    3. Envíanos a más tardar el 30 de enero el usuario con el cual te inscribiste, a acadcol@microsoft.com.

    4. El próximo 5 y 6 de Febrero podrás asistir sin ningún costo, al curso de XNA Game Studio dictado por especialistas en Desarrollo de Juegos con la plataforma XNA, que hacen parte de la más activa comunidad de desarrollo de Bogotá: BogotaDotNet (http://bogotadotnet.org/). Este curso lo estaremos dictando para los estudiantes que se hayan registrado en la competencia. El curso será presencial en Bogotá (cupos limitados) y se transmitirá vía Live Meeting. No importa en cuál ciudad del país estés, puedes participar.

    5. El día del curso te daremos acceso gratuito al software que requieres para desarrollar tu juego.

    6. Busca inspiración para tu proyecto en los Objetivos de Desarrollo del Milenio de las Naciones Unidas y empieza a crear tu producto. La primera ronda del concurso se cierra el 15 de Marzo de 2010.

    La tecnología es la fuerza más poderosa para transformar las ideas brillantes en soluciones reales y sabemos que eres talentoso en programación de software, desarrollo de hardware, diseño, pero sobre todo, que eres visionario.

    Apuéstale a representar al país en la final mundial de la competencia, que será en Polonia.

    ¡Te esperamos!

    Esta iniciativa es válida para Estudiantes mayores de 16 años, que residan en cualquier ciudad de Colombia.

  • WarNov Developer Evangelist

    Entornos Laborales Virtuales Microsoft para Emprendedores

    • 0 Comments

    Tengo un gran amigo. Emprendedor y entusiasta de las tecnologías Microsoft. Se ha independizado y gran parte de su operación se ha beneficiado de todos los recursos que hoy en día tiene Microsoft que son gratis o de muy bajo costo. Empezando con BizSpark (todo el software por 3 años y 100 dólares no más), herramientas de virtualización gratuitas como Virtual PC, etc.

    En este post, de su nuevo blog:
    http://rickersilva.wordpress.com/2010/01/25/virtual-office,
    nos enseña como logró establecer su empresa sin oficinas y usando todas estas herramientas.

  • WarNov Developer Evangelist

    MIX10 Keynote Dia 2: Internet Explorer 9 y Visual Studio

    • 0 Comments

    El MIX10 es claramente uno de los eventos más importantes para desarrolladores y diseñadores alrededor del mundo. Cada año este evento es organizado por Microsoft en Las Vegas donde aparte de congregarnos a aprender los último en tecnología nos hemos maravillado con la magia de esta ciudad que nunca duerme.

    Son tres días de evento. Y durante los dos primeros tenemos Keynotes en las mañanas y el resto del día charlas. El tercer día está compuesto únicamente por sesiones de charlas.

    En mi anterior post vimos todo lo relativo al keynote del primer día que estuvo enfocado a Windows Phone 7.

    En el segundo día estuvimos apreciando un lanzamiento del que ya hemos sabido mucho gracias a las betas publicadas: Visual Studio 2010. Pero sobretodo tuvimos la fortuna de ser participes de un gran lanzamiento:

    Me siento complacido de anunciar la liberación del preview de la plataforma Internet Explorer 9 (IE9): La siguiente versión del navegador web más popular del mundo. IE9 esta siendo diseñado para ayudarnos en el desarrollo web creando aplicaciones enriquecidas, interoperables y que cumplen con los estándares, al proveernos la plataforma, las herramientas y las características que requiere la web moderna.

    Este primer vistazo a la plataforma está diseñado para permitirnos a todos en la comunidad del desarrollo y diseño web, una oportunidad de proveer feedback en nuestro progreso en la construcción de IE9. No está diseñado para ser un explorador web FULL, sino solo un primer vistazo… un pre-alpha. Esperamos liberar updates de la plataforma cada cinco a siete semanas.

    Internet Explorer 9

    Qué hay de nuevo?

    Sobretodo características que aprovechan la GPU (tarjeta de video) de las computadoras clientes para mejorar la experiencia con HTML5 y CSS3, usando SVG:

    • Podremos usar el poder de la aceleración de hardware para renderizar el HTML5 más rápido, con mejor resolución y usando menos recursos!
    • HTML5
      • Mejoras en el parsing, incluyendo el manejo de elementos genéricos y el overlapping de tags.
      • Soporte para parseo de XHTML
      • APIs de selección de texto para habilitar la selección programática de texto
      • SVG
        • Estructura de documentos con metadata y funcionalidad de extensibilidad.
        • Formas básicas como  rectángulos, círculos, elipses, líneas, polilíneas, y polígonos.
        • Sistema de coordenadas, transformaciones y unidades
        • Elementos de tipo Path!
    • CSS3
      • Esquinas Redondeadas a través de border-radius

        IMG_8086
      • Soporte para la propiedad CSS Opacity y el modelo de color RBGA
    • JAVASCRIPT
      • El nuevo motor interpreta aun más rápido:

        SunSpiderResults[1]
        Milisegundos empleados en terminar el test SunSpider con una Dell Optiplex con un procesador de 3.0 GHz Core 2 Duo Intel, 4GB RAM, video Intel Integrado y corriendo Windows 7.
    • DOM
      • DOM Level 2: Namespaces, Rangos y Vistas
      • DOM Level 3: Eventos
      • Soporte mejorado para los estilos y características HTML del DOM Level 2
    • DEVELOPER BAR
      • Network Analizer (Este es de los que más me gusta)
        • Permite a los desarrolladores capturar, mostrar y almacenar las peticiones web, sus estadísticas y análisis!!! Definitivamente era algo que le faltaba a las herramientas para desarrolladores.
    • AUN MAS ESTANDAR
      • De un ACID de 12, pasamos a uno de 55!!!

        Acid3ScreenCapture[1]

    Cuándo lo puedo tener?

    Aún más complaciente para mí, es anunciarles amigos, que el preview YA está disponible para su evaluación en http://www.IETestDrive.com. Allí también encontramos un conjunto de páginas web y aplicaciones diseñadas para demostrar características y mejoras incluidas en la última versión.

    Los desarrolladores y diseñadores pueden proveernos feedback a través del programa Microsoft Connect en www.connect.microsoft.com solicitando una invitación allí. Si realmente están interesados en usar la plataforma lo más pronto posible, comuníquense conmigo y les estaré dando un código de acceso inmediato.

    Visual Studio 2010

    IMG_8117Esta versión es definitivamente la que más cambios drásticos ha incluido en mis siete años de experiencia con la plataforma. Además, finalmente son los cambios más esperador personalmente hablando, pero también por muchos de mis amigos y conocidos desarrolladores.

    Los cambios han sido integrales y se han hecho inclusiones sin precedentes en la herramienta. Nunca me había sentido tan “en casa” como programando con Visual Studio 2010.

    Comencemos entonces:

    Soporte multi-monitor mejorado!!

    IMG_8120

    Esta característica es genial más ahora que tenemos una gran cantidad de herramientas nuevas para trabajar en vivo dentro de nuestro Visual Studio 2010 con la arquitectura de nuestros proyectos y necesitamos mucho espacio para ver diagramas mientras codificamos!! En anteriores versiones de la herramienta teníamos cierto soporte para estas características, pero ahora han sido mejoradas.

    IntelliSense más Inteligente

     

    IMG_8121

    El IntelliSense ya viene preparado para manejar las nuevas características del Framework 4.0 como parámetros por defecto. Además nos ahorra aún mucha más escritura con sus son consejos de código predictivo ya que con escribir cualquier parte de la palabra deseada (no solo el principio) nos muestra un listado de todas las posibilidades para que podamos escoger.

    También cada vez que estamos ubicados en un identificador, resalta dentro de todo el editor en donde se encuentra referenciado ese identificador al ponerlo en negrita.

    El editor de Visual Studio 2010 está basado en WPF. De manera que ahora las operaciones que podemos hacer sobre este son mucho mas flexibles. Una que personalmente me encanta es la posibilidad de hacer zoom sobre el editor usando el scroll del mouse acompañado de la tecla control. Esto es muy útil a la hora de ver nuestro código desde distancias considerables. Como esto es trabajado con WPF y texto vectorial, no se pierde nada de la calidad del código:

    image

    Estas son solo una de las pocas cosas que se han mejorado e incluido como nuevas en Visual Studio 2010 que darían para un post difícilmente terminable: Ventana de navegación de identificadores, generador de jerarquía de llamados, generador de dependencias... Pero aquí les dejo la referencia para que puedan ver con detalle de que se trata.

    Deployment

    Podemos manejar diversos ambientes de deployment de acuerdo a las condiciones, todo organizado dentro de nuestra solución. Por ejemplo, tenemos la habilidad de tener tres copias distintas de Web.Config: Una para desarrollo, otra para pruebas y otra para producción:

    IMG_8130

    ASP.NET 4.0

    Otro de los temas vistos en este Keynote fue ASP.NET 4.0 y todas sus novedades. Por ejemplo, la claridad y simpleza con que es traducido el código ASP.NET:

    IMG_8123

    Como pueden ver, el acercamiento al HTML plano y fácil de manejar luego con JQuery es total.

    Recuerdan cuando su página comenzaba a pesar 400kb y 500kb y cada vez crecía y crecía más, pues sobre el responsable en parte de este “sobrepeso” ahora se ha trabajado bastante así que el ViewState generado es mucho más pequeño:

    IMG_8124

    Otras características mejoradas:

    • URLs semánticas. Para hacer los sitios más accesibles a las personas y a los motores de búsqueda. Es de esta manera que ahora es mucho más fácil lograr urls como http://www.example.com/autos/acme/rojo/2009.
    • Muchas más gráficas (charts) nativas para mostrar datos

    Programación del Lado del Cliente

    Visual Studio también viene fuertemente enriquecido para mejorar el desarrollo de código para el lado del cliente, sobretodo ahora que es tan popular y benéfico.

    IMG_8128

    El Intellisense de Javascript es aún más rápido en esta versión. de hecho, observemos las mediciones en la velocidad de generar IntelliSense para librerías Javascript:

    IMG_8129

    De recalcar: JQuery se actualiza dos veces más rápido en VS2010 y librería como ExtJS se cargan SEIS veces más rápido!

    Este tipo de acciones de mejora para el lado del cliente, son solo una muestra más de todo el poder que Microsoft le está dando a estas herramientas que vienen a ser el futuro de la programación Web. Entre los esfuerzos, también podemos contar con que Microsoft está apoyando económicamente a la gente de JQuery para que sigan con su excelente trabajo!!

    IMG_8161

    Conclusión

    Si somos desarrolladores acostumbrados al tradicional ASP.NET y ADO.NET, tenemos que salirnos de esa “Zona de Confort” si en realidad queremos que nuestras aplicaciones puedan competir contra la avalancha de aplicaciones web ágiles que centran gran parte de la lógica en programación orientada a cliente también conocida como programación en el browser o sencillamente Javascript en todos sus sabores.

    Muchas veces hemos rechazado la programación de Javascript porque ASP.NET nos ofrecía un modelo bastante rico que nos permitía prescindir de ello. Sin embargo, esta encapsulación escondía la verdadera naturaleza de la operación Web (Request-Response) y terminó haciendo que nuestros productos fuesen muy pesados y no corrieran rápido bajo algunas condiciones.

    Hoy en día, Microsoft ofrece en su Visual Studio soporte a todas estas tecnologías. Un claro énfasis en permitir desarrollar fácil el Javascript, AJAX, JQuery, y en general todas las APIs para los servicios que se usan más en la actualidad. Sumemos esto a MVC y obtendremos sitios que llegan a ser hasta 10 veces más rápidos que sus antecesores ASP.NET clásicos.

    Es tanto el soporte que se quiere dar a esta tecnología, que hasta el browser: Internet Explorer 9, ahora tiene herramientas de depuración de código del lado del cliente y de monitoreo de comunicaciones HTTP que vienen enriquecidas para ofrecer más ventajas a este tipo de enfoque programático.

    No es fácil; pero solo es cuestión de animarse y dar el salto. De allí en adelante, todo será aprendizaje y mejora!



  • WarNov Developer Evangelist

    Un mes de Windows Azure gratis para su aprendizaje

    • 0 Comments

    Si quieren aprender Windows Azure a su propio ritmo y con cuenta de Windows Azure, les tengo un pase especial por hasta un MES gratuito de Sql Azure y Windows Azure.

    NO SE REQUIERE TARJETA DE CREDITO!!

    Pueden iniciar el campamento en cualquier momento y podrán disfrutar de los servicios gratuitos hasta finalizar cada mes.

    Pasos a seguir:

    1. Para acceder a este beneficio, obtengan su pase aquí. Y luego entren al Portal de Desarrollo de Windows Azure con el pase obtenido.
    2. Descarguen las herramientas de Windows Azure para Visual Studio.
    3. Aprendan
      1. Aquí cómo crear su primera aplicación Windows Azure y súbanla con el pase obtenido.
      2. Entren rápidamente al mundo Windows Azure observando estos seminarios rápidos
      3. Aprendan Windows Azure a profundidad: Windows Azure Platform Training Kit

    Ánimo antes de que se acaben los cupos!



  • WarNov Developer Evangelist

    Modificando el ancho de los ScrollBars en WindowsForms

    • 0 Comments

    Hace poco en mi foro me preguntaron acerca del mecanismo para modificar estos ScrollBars por ejemplo en un grid de WindowsFors…

    Primero, una mala noticia:
    El tamaño del scrollbar en aplicaciones Windows, independientemente de qué tecnología de programación se use para presentarlo, tiene un tamaño cuyo valor es una variable global del sistema. Es por esto, que no es posible modificarlo programáticamente. Si así lo hicieras, entonces TODOS los scrollbar de windows se modificarían y por tal motivo, esa opción no está disponible en el framework.

    Ahora las posibles soluciones:

    1. Cambiar en la personalización de Windows el tamaño de los scrollbar. Esto sería una buena idea, dado que todo el sistema está destinado para ser TOUCH. Al menú accedes dando click derecho sobre el escritorio, etc…
    2. Cambiar la aplicación a WPF: Para mí la mejor elección. Sobretodo dado que una interfaz touch tiene una interacción especial con el usuario. WPF está enfocado a permitir generar experiencias de usuario sofisticadas.
    3. Hacer el control en WPF y embeberlo dentro de un Panel de la aplicación WinForms: Esto si no quieren pasar todo a WPF. Aquí información de cómo hacerlo:
      http://msdn.microsoft.com/en-us/library/ms742215.aspx


  • WarNov Developer Evangelist

    Lanzamiento de WebSiteSpark en Colombia

    • 0 Comments

    Aquí desde el MIX10 en Las Vegas, me complace informarles a todos los emprendedores, que en Microsoft Colombia tenemos muchas herramientas que nos permiten iniciar nuestros negocios y lo mejor de todo, GRATIS!!!

    Así es, GRATIS!

    Por esto me permito invitar a todos los que se consideren emprendedores en la industria del desarrollo de software para la Web, a que asistan a nuestro gran lanzamiento en el Salto del Ángel!!!

    A continuación los detalles de la invitación (hagan click en la imagen para registrarse)

    Click para Registrarse

    Los espero!!! smile_party



  • WarNov Developer Evangelist

    MIX10 Keynote Día 1: Windows Phone 7 Series

    • 0 Comments
    Welcome to mix

    Este gran poster nos espero en el gigantesco Mandalay Bay en Las Vegas. Ciudad en la que cada año se congregan cientos y cientos de diseñadores y desarrolladores de todo el mundo para apreciar los últimos avances tecnológicos para mejorar la experiencia de usuario (UI) en los desarrollos de software.

    El keynote del primer día, estuvo nada menos que genial! Dirigido por el Vicepresidente Corporativo Scott Guthrie:

    WarNov y Scott Guthrie

    Con sus colaboradores mas cercanos, nos mostró a los asistentes un overview de la cantidad de tecnologías emergentes disponibles y en el día de hoy se hizo un alto enfoque en todo lo relacionado a Windows Phone 7 Series.

     

     

    Un Teléfono Amigable

    IMG_7907

    Y quien mejor para hablarnos de Windows Phone 7 que el señor Joe Belfiore. VP de Windows Phone 7!

    Para comenzar, se mostro como WP7 nace del concepto de usabilidad que se tiene con el Zune. El reproductor de multimedia de Microsoft, que desafortunadamente no es muy conocido en Colombia, y que realmente ofrece al usuario una experiencia bastante agradable.

    Es así, como ya no tenemos el Windows en “miniatura” que solíamos encontrar hasta Windows Mobile 6.5; y donde era muy complicado hasta el mero hecho de abrir el menú inicio. (Tocaba tener puntería)

    Hoy en día con WP7 el acceso a todos los comandos es bastante sencillo gracias a los Tiles que permiten con el dedo desplazarnos entre los aplicativos. (Adiós perdedizo Stylus!!!)

    Es un teléfono realmente amigable y fácil de usar. Enfocado claramente al manejo de redes sociales y reproducción multimedia.

    Un teléfono que se programa con Visual Studio .Net.

    IMG_7908 IMG_7909

    En este apartado, el señor Guthrie nos mostro como en cosa de 5 minutos escribía el “segundo cliente oficial” de Twitter para WP7. Solo escogiendo el tipo de proyecto para WP7 en Visual Studio 2010 ya tuvo un lienzo listo para trabajar y arrastrar un par de botones y luego usar la clase de WebClient para comunicarse con Twitter.

    Cómo obtenemos este tipo de proyecto en nuestro Visual Studio?

    Windows Phone 7 Series es un sorprendente sistema operativo para teléfonos móviles dada su innovadora interfaz de usuario y funcionalidad, así como la grandiosa plataforma de desarrollo sobre la cual nosotros como desarrolladores podemos construir rápidamente juegos y aplicaciones. Se vendrá toda una avalancha de dispositivos corriendo Windows Phone 7 Series (WP7). Y esto junto con la plataforma de desarrollo y el "Marketplace" hará que la demanda de WP7 de los consumidores sea muy alta, así que nosotros como desarrolladores podremos adoptar rápidamente la plataforma de WP7 para capitalizar este crecimiento.

    Para lograrlo, en el MIX10 se anunció la liberación del Windows Phone 7 Training Kit for Developers que incluye todas las librerías para programarlo de una manera similar a como programamos aplicaciones Silverlight, un emulador del teléfono y muchas otras herramientas! Este kit de capacitación les permitirá entrar en el nuevo mundo de WP7 por que le proporciona una explicación paso a paso de las herramientas a utilizar y algunos conceptos clave para la programación en esta plataforma! La información completa la encuentran aquí: http://developer.windowsphone.com/

    Un teléfono que tiene de todo!

    Ya muchas empresas han emprendido el viaje hacia el mundo de la nueva plataforma WP7. Por ejemplo Netflix el gran proveedor de alquiler y streaming de películas. Se creó esta aplicación que corre en WP7 y que nos permite entre otras cosas buscar títulos, ver los títulos recomendados, solicitar las películas a domicilio, y por si fuera poco, verlas en streaming directamente en nuestro teléfono gracias a las poderosas capacidades de reproducción de video de WP7 usando Silverlight 4 y OpenData operado desde Windows Azure

    IMG_7915

    Además se nos mostraron grandiosos juegos creados usando XNA! De manera que el mismo código de programación solo con unas pequeñas modificaciones fue usado para crear las versiones para PC y XBOX! One XNA!!!

    IMG_7904

    IMG_7946 IMG_7945

    Otra aplicación genial que vimos fue un reproductor de Comics:

    IMG_7918 IMG_7920 IMG_7922

    Vemos como nos permite ver toda nuestra colección de Comics, y para cada uno de ellos, leerlo como si fuera una revista normal o hacer acercamientos para ver mejor el arte del dibujo. Como si fuera poco, también se integra con Web 2.0, ya que permite comentar apartes de los Comics y publicar dichos comentarios en las redes sociales!

    Y hablando de redes sociales, me pareció de lujo la aplicación Foursquare que integra nativamente en el WP7 la información de todos nuestros contactos en todas las redes sociales en un solo aplicativo sencillo, fácil de usar y muy llamativo:

    IMG_7924 IMG_7927

    Permite ubicar a nuestros contactos (que tengan GPS) usando Bing Maps. Además permite la creación de eventos y los asistentes entonces tienen una guía basada en mapas para llegar al sitio de encuentro! Todo en WP7 gracias a SL, y programado con VS2010 y Blend 4. Osom!!!

    Otros aplicativos que vi bastante interesantes:

    • Shazam: Para poner al teléfono a oír una canción mientras descifra qué temas es y demás, usando bases de datos musicales online. De hecho, si hay una versión libre dela canción, nos permite descargarla o comprarla.
    • MLS: Un aplicativo que aprovecha tecnología de Message Push, que permite enviar información a aplicaciones WP7 aún cuando estas no estén corriendo actualmente en el teléfono. En este caso, información de los partidos de futbol era enviada al aplicativo y cuando el usuario abría dicha aplicación, encontraba ya toda la información actualizada.
    • Marionette: Trae ciertos “muñecos” personalizables a los que se les puede poner rostros de contactos y manipular como marionetas gracias al brillante manejo del Acelerómetro.
    • Loic Le Meur, gestor de seesmic nos enseñó la última versión de su cliente de twitter creado totalmente en WPF que ahora como novedad, permite a las empresas y personas, crear sus propios News Feed personalizados!! Pero para completar, nos mostró su brillante versión para WP7. Sencillamente genial…

    Para finalizar, nos sorprendieron con un aplicativo en WP7 que controlaba un robot cañón de camisetas real con el cual dispararon varias camisetas hacia la audiencia que luchó por ellas. Todo el manejo se hacía no solo con los botones del teléfono y el TouchScreen sino también con el acelerómetro:

    IMG_7936 IMG_7939 IMG_7976

    Todo esto fue desarrollado usando herramientas que afortunadamente tenemos disponibles desde AHORA!!!

     IMG_7950

    Las versiones Beta de Blend se pueden bajar de:
     http://expression.microsoft.com/en-us/cc507094.aspx

    Fue un gran KeyNote que nos dejó muy motivados para el resto de temas a tratar en el MIX. Hoy segundo día hemos visto que aún cuando fue tan impactante se quedó corto con todo el mundo de temas que se liberan en este año. Sigan conectados para más noticias y reviews!!



  • WarNov Developer Evangelist

    Silverlight Tour – Bogotá, Colombia (27Abr – 29Abr 2010)

    • 0 Comments

    Con permiso de mi buen amigo Rodrigo Díaz  me permito referenciar un post acerca de su visita a Colombia no solo para ser speaker de nuestro gran evento presencial para desarrolladores del 26 de Abril, sino para dictar también el curso de Silverlight 4 que hace parte del internacional Silverlight Tour:

    El Curso de Silverlight: Silverlight Tour Workshop en Español regresa a la capital colombiana el próximo día 27 de Abril.  Se llevará a cabo del 27 al 29 de Abril 2010 con un horario de 08:00 a 19:00 horas los tres días.  Les recuerdo que el material y todo el curso está completamente en Español :) .

    Asimismo, tengo el gusto de informarles que como una promoción especial en conjunto con Microsoft Colombia, esta fecha en Bogotá cuenta con 50% de descuento directo sobre el precio normal en Colombia.  Además, será el primero en utilizar el material actualizado a Silverlight 4 RC anunciado y liberado oficialmente la semana pasada en el marco del evento MIX 2010 en Las Vegas.

    Si desean comprender a profundidad la platataforma de desarrollo de Silverlight, conocer el uso de Expression Blend 4 (Beta), y prepararse para la construcción de aplicativos para Windows Phone 7 esta es su mejor opción.



  • WarNov Developer Evangelist

    .NET Avanzado: Closures

    • 0 Comments

    Voy a ponerlo lo más simple que pueda:

    Un Closure  es una entidad de código que encapsula un comportamiento dado teniendo acceso al contexto en que fue definido; en cristiano, es como una clase, pero no con tanta flexibilidad (solo admite una acción dada) y su estado no puede ser cambiado luego de ser inicializado. En síntesis, una seudoclase más especializada, que consume menos recursos. Y que es más felxible que una estructura, dado que se constuye con delegados, que pueden apuntar a distintos métodos.

    Cómo se construye?

    Tomar el framework 2.0 en adelante, usar sus delegados y métodos anónimos, generar un productor de delegados con un parámetro de configuración y se obtendrá un closure.

    Ha tenido por ejemplo que calcular un impuesto como el IVA que puede variar según el artículo?
    Por ejemplo para una crema dental es de 16% pero para un auto es 25%.

    Entonces el programador bien juicioso se hace el siguiente método:

    double IvaCalc(double tax, double amount);

    Así pues siempre que se vaya a llamar al método se han de pasar ambos parámetros:

    double imp1 = IvaCalc(25, 25800);
    double imp2 = IvaCalc(16, 4);
    dpuble imp3 = IvaCalc(16, 5800);

    etcétera

    Entonces se puede optar por hacer dos métodos; uno por cada tipo de IVA.
    Pero si son 10 tipos de IVA habrán 10 métodos?

    Así que se opta por hacer una clase calculadora de IVA:

    Código clase calculadora de impuestos en C#

    De esta manera basta con instanciar un objeto por cada tipo de IVA y ponerlo a trabajar; esto minimiza la cantidad de código escrita, y es bastante claro:

    IvaCalculator autoCalc=new IvaCalculator(25);
    IvaCalculator prodCalc=new IvaCalculator(16);
    double imp1 = autoCalc(25800d);
    double imp2 = prodCalc(4d);
    double imp3 = prodCalc(5800d);


    Pero de nuevo... si son diez tipos distintos de IVA, creará diez instancias de objeto? Es justo tanto empleo de memoria al tener un objeto completo solo para hacer una operación?
    No lo creo... precísamente para solventar esta situación son útiles los closures.(Entre otras)

    Un closure permite reflejar la simple funcionalidad de la pequeña clase que diseñamos anteriormente, sin incurrir en el overhead del objeto como tal. Para lograrlo, se requiere una forma de mantener un estado (en este caso, la tasa del impuesto) para no tener que estar pasando el parámetro de configuración en cada llamado. Además se requiere una operación sobre ese estado. Cómo lograrlo sin tener que hacer un objeto?

    La operación como tal, se logra con un simple método. Pero este método debe ser configurable en su creación de manera que tenga un estado.

    Para que se pueda configurar es necesario que exista una variable en un ambiente léxico (scope) superior al del método, de manera que esta variable pueda ser inicializada sin necesidad de llamar al método. Esta, será pues la variable que indica el "estado" del método. Pero igual, eso está dentro de una clase. De hecho en C# todo lo que ejecute, ha de estar dentro de una clase. La ventaja ahora, es que vamos a trabajar dentro de la misma clase de ejecución de nuestro flujo. No tendremos que crear más instancias.

    Tanto el parámetro como la operación deben quedar encapsulados dentro de un mismo ambiente léxico dentro de la clase, para que tengamos la unidad requerida para poder generar instancias (pero no de una clase que es lo que queremos instanciar, sino de algo más liviano que llamaremos "enclosure"). Para esto es necesario poder hacer referencia al método dado.

    En .NET qué nos permite hacer referencia a métodos? Si... correcto: los delegados. Entonces generamos un ambiente léxico que tenga al delegado referenciando al método y al parámetro de configuración. Obviamente si estamos dentro de una clase y no queremos generar otra, ese ambiente léxico es un nuevo método. Este método deberá retornar el delegado apuntando a la operación ya configurada como es debido, pero además el método al que apunte el delegado deberá estar declarado inmediatamente, de manera que el parámetro de configuración del mismo sea accesible a éste, desde el método que lo contiene.

    En teoría suena bien. Pero cómo lograr que un delegado apunte a un método que se declara "en línea" junto con éste?

    Ahí es donde entran los métodos anónimos. Son precisamente eso: Métodos declarados en línea donde son requeridos por los delegados. Generalmente, los delegados se han inicializado con el nombre de un método que cumpla el contrato de su firma. Ahora (Framework 2.0 en adelante), no es necesario declarar el método aparte para poderlo referenciar luego por un delegado (lo que impediría acceder al dichoso parámetro de configuración) sino en línea junto con la declaración del delegado:

    delegate int MyDelegate(int a, int b);
    MyDelegate myDel = delegate (int a, int b)
    {
       .....
       return ....
    };

    No olvide el ";".

    Ya con este conocimiento, podemos generar el método que queremos:

    //Este delegado que permitira
    delegate double IvaCalculator_(double tax);

    IvaCalculator_ ivaCalcProducer(double tax)
    {
       return delegate(double amount)

       {
          return amount*tax;
       };
    }


    Exótico no?

    Pero a pesar de ello, logramos lo deseado: El método toma una variable de configuración. Así tenemos estado y manipulación de estado. Lo que haría una clase. Entonces ahora cómo se operaría es muy parecido al uso de clases anterior; solo que ahora no hay overhead por creación de nuevos objetos. Lo que se crean son nuevos delegados. Uno por cada tipo de tasa en este caso. Ellos "cuestan" mucho menos que un objeto.

    IvaCalc_ ivaCalc16=ivaCalcProducer(16);
    IvaCalc_ ivaCalc25=ivaCalcProducer(20);
    double imp1 = ivaCalc25(25800); 
    double imp2 = ivaCalc16(4); 
    double imp3 = ivaCalc16(5800);

    Descargar Ejemplo Completo (Aplicación de consola en C# mostrando el uso de Closures)

    Y listo. Así se construyen y usan los closures. Ahora ya puede ir y alardear un poco con su equipo de desarrollo acerca del misterioso "Closure"!!

     Open mind 4 a different Coding!!!

  • WarNov Developer Evangelist

    Enfrentándose al StackOverflowException

    • 0 Comments
    Más de una semana sin solución. Buscaron en internet a ver... nada.
    Los StackOverFlow Exception no se pueden capturar con un try catch. Ni lo intenten. Cuando sucede la aplicación está más muerta que al cerrarla.
    Finalmente, me preguntaron....
    "Eso es que tienen una función recursiva con el punto de parada mal diseñado" les dije.
    Pero no había tal.
    Entonces me puse a mirar...
    En la primera ocasión no vi nada anormal en realidad. Solo un par de cosas para optimizar el código. Pero nada como para decir que el misterioso snack dejara de aparecer.
    Una y otra vez se repetía. Y lo peor, es que era un proceso bastante largo, que siempre fallaba luego de la primera horta. Así que hacer debug era un infierno total.
    En la segunda ocasión que me senté a mirarle el código, tampoco vi nada raro; se me ocurrió que depronto había mucha memoria desperdiciada... pero nótenlo: eso nunca tiene que ver con el stack. Snack es una cosa y Stack es otra y Memoria no tiene que ver con ellos. El Stack almacena el listado de funciones que se han ejecutado. Y tiene un tamaño entre 500 y 1000. Así que si llamamos más de ese número, el stack secillamente se llena y la aplicación colapsa.

    Teniendo esto muy presente, decidí volver a chequear el código una tercera vez...
    y oh sorpresa cuando al fin encontré lo que estaba pasando!!!!

    Había un método que al final del mismo, tenía un disparador de evento. Otra clase capturaba ese evento y en respuesta lanzaba la ejecución de otro proceso distinto que antes de terminar volvía a lanzar ese evento y así sucesivamente. Todo esto siempre se ejecutaba con el mismo thread. Así que cada vez, el método se quedaba esperando a que se ejecutara el siguiente. Por esto el stack comenzaba a llenarse hasta colapsar, porque las funciones no terminaban, pero si se llamaba a otras.

    Es algo para nada obvio. Pero al fin por pura intuición se descubrió. Lo ridículo del asunto, era el mensaje que representaba el evento disparado: "Terminé" Entonces otra clase leía que había terminado y ponía a correr otro proceso. Que sentido tiene eso? Era muy difícil programar a la clase externa que corriera un proceso y luego otro y otro y ya? No lo creo. Sencillamente a algunos diseños les falta ingeniería de verdad.
  • WarNov Developer Evangelist

    Trasmitiendo las variables de aplicación entre capas en una solución .NET

    • 0 Comments
    (Y haciéndolas dinámicas)

    Sea el escenario de una típica aplicación 3-tier para un sistema de información. Hay una capa de presentación, una de negocios y la de datos. En la capa de datos según lineamientos plenamente aceptados, tenemos las cadenas de conexión a las bases de datos que se usarán. Si la aplicación se desarrolla con el Framework 2.0, es normal que las capas de datos y negocio, queden representadas por DLLs que luego son consumidas por una aplicación Windows o web, por ejemplo. Entonces cada cliente se comunica con sus capas servidoras que tienen la conexión a base de datos y saben en dónde están los datos para operar.

    Hasta ahí no hay ningún problema. Cuando la aplicación ya está lista para producción, generalmente se usará una base de datos distinta a la usada en desarrollo y quizá en pruebas.
    Este cambio, gracias a la arquitectura del framework 2.0 en adelante, solo implicaría cambiar el archivo de configuración (App.config) de la DLL de capa de datos. Se abre con un editor de texto, y se edita el XML con la nueva cadena de conexión, y ya está. Todos los clientes quedan conectados a la nueva fuente. Pero qué sucede si se crea una aplicación de capas, que no necesariamente tiene la misma conexión de base de datos para todos los clientes? Cómo lograr que cada cliente genere una cadena de conexión dinámica que se pueda cambiar a discreción permitiendo que la aplicación funcione correctamente?

    En el framework 2.0 las cadenas de conexión son tratadas como variables de alcance de aplicación. El otro tipo de alcance es de usuario. Cuando la variable es de alcance de usuario, esa misma, puede ser modificada en tiempo de ejecución. Entonces sería fácil crear métodos para que los clientes de presentación de alguna manera transmitieran los nuevos valores de las cadenas de conexión a las otras capas. No obstante, como mencioné anteriormente, las cadenas de conexión son de alcance "aplicación" y estas variables no se pueden modificar en tiempo de ejecución. Así que para un cliente es imposible modificarlas transmitiendo nuevos valores mientras está corriendo. Así que el método de crear código que transmita los cambios requeridos, no es factible. La solución, aunque es trivial, no es intuitiva y Visual Studio no provee una manera directa para lograrla. Para encontrarla y entender de qué se trata, suponga que llamamos a la cadena de conexión strCon1. Entonces, queda guardada dentro de los settings de la DLL de datos como strCon1 y tiene determinados valores de conexión.

    Además permitiría cambiar la cadena de conexión dinámicamente, antes de iniciar la ejecución de la aplicación (recordemos que ésta es una variable de aplicación). Al distribuir la aplicación, se puede hacer con o sin el archivo de configuración de la aplicación. Si se distribuye sin este, cuál será entonces la cadena de conexión a usarse? Se usaría la última presente al compilar la librería (Esto gracias a la compilación del archivo de propiedades en la clase Settings.settings).

    Como es conocido, cada capa en el framework, vendría representada por un assembly (DLL) por separado. Es decir, cada capa es un proyecto dentro de la solución y cada proyecto de estos, tiene sus propias propiedades y variables de usuario y aplicación. Como ya se mencionó estas variables van en archivos App.config. Al compilar la solución, dentro de cada carpeta de salida de los proyectos queda un archivo App.config para las dallas, y un archivo miaplicacion.exe.config para los ejecutables en el caso de aplicaciones Windows o web.config en el caso de web services o aplicaciones web ( en estos últimos dos casos, el archivo queda en el root del sitio web).

    Lo que uno como desarrollador distribuiría, sería únicamente los compilados y salidas de los proyectos componentes de la solución. Entonces irían en nuestro ejemplo dos DLL (una de datos, la otra de negocio) y el ejecutable. Además irían los archivos de configuración, que en el caso de las DLL se llamarían igual.

    Pero si se llaman igual, cómo se soluciona este problema? Fácil; basta con combinar los archivos de configuración en uno solo con el mismo nombre y listo. Pero es fundamental que los nombres de las variables (por ejemplo de cadenas de conexión) permanezcan invariables.

    En mi búsqueda de esta solución, una de las cosas que intenté fue agregar una variable de aplicación a la capa de presentación, que tuviera el mismo nombre de conexión y los mismos parámetros que la definida en la capa de datos usando la interfaz de Visual Studio. De esta manera se produciría un miaplicacion.exe.config, con la cadena de conexión que usa la capa de datos y así cada vez que yo cambiase este archivo y reiniciase la aplicación, el sistema tomaría los cambios y funcionaría de acuerdo a ellos.
    Al ver con más detalle el resultado, descubrí que el nombre de la variable no había quedado exactamente igual que el usado por la capa de datos. Y en la práctica, este hecho no es muy fácil de identificar.

    Así que dado que uno puede estar tentado a agregar el setting usando la interfaz de Visual Studio, puede incurrir en este error si no se fija lo suficientemente bien. Lo mejor, es no agregar el setting de esta manera. Sino agregar a mano (o editar a mano si ya existe), un archivo App.config y escribir el setting exactamente como se usó en la capa de datos.Cuando así lo hice, con felicidad observé como finalmente los cambios en el archivo XML se veían reflejados en la aplicación, cuando esta empezaba a correr. Esto me dio la flexibilidad requerida para configurar cada cliente con una fuente de datos distinta a la usada en el desarrollo de la aplicación.

    Conclusión: Para propagar las variables de configuración desde las capas más exteriores a las más interiores dentro de un sistema n-tier usando framework 2.0 en adelante, basta con escribirlas todas en el archivo de configuración de la capa más externa, de manera que sean absolutamente idénticas a las usadas en las capas internas. Y no es posible hacer esto, solo con la ayuda de la interfaz gráfica de Visual Studio, pues se requiere editar el archivo manualmente y luego incluirlo en el deployment de la aplicación.


  • WarNov Developer Evangelist

    Don JSon

    • 0 Comments
    Algunas aplicaciones web requieren AJAX y requieren que su tamaño de página ha de mantenerse bajo límites estrictos. Entonces no es posible usar las librerías de AJAX .NET dado el considerable peso que le agregan a la página, sino usar directamente el objeto XmlHTTPRequest. Adicionalmente es necesario considerar el peso impuesto por los datos que se transfieren desde el server al cliente luego de usar AJAX. En primera instancia uno podría pensar en XML. Pero como se sabe, los archivos se hacen muy grandes con información que finalmente no es la relevante, así que se genera más peso para las páginas. Por este motivo, actualmente se está difundiendo rápidamente el uso de JSON.

    JSON es un sobconjunto del lenguaje JavaScript, que permite representar objetos a través del paradigma llave-valor. En síntesis es como un "fatless" XML, que es mucho más liviano. Y que además tiene la gran ventaja que puede ser interpretado directamente por JavaScript, de manera que tanto el peso de la página como la ejecución se mejorar sustancialmente, ya que no hay que usar librerías para manejo de XML en JavaScript ni hacer tediosos recorridos a través del texto.

    Para JSON hay librerías disponibles en casi todos los lenguajes, incluido C#. De esta manera, cualquier objeto puede ser traducido a de C# a texto JSON en el server, luego transferido al cliente usando Request.Write después de un llamado AJAX, e interpretado inmediatamente por el browser, sin mayor overhead.

    Desde C# 3.0 muchas de estas características están siendo implementadas de forma nativa y ofrecen beneficios incalculables a la hora de desarrollar, por lo que es recomendable desde ya comenzar a usar estos elementos que han existido desde hace mucho tiempo, pero que solo ahora con el auge de “la interpretación – AJAX, Silverlight, etc- han entrado de lleno en el mundo Microsoft.


    El sitio oficial es
    http://www.json.org
    Pero para no devanarse los sesos y entender rapidito el asunto está: http://www.secretgeek.net/json_3mins.asp; en tres minutos sabrán qué es.
  • WarNov Developer Evangelist

    Error en WebService: &quot;The thread have been aborted&quot;

    • 0 Comments
    El webservice protagonista de este post es uno basado en WSDL; así que no aplica para WCF. Fue creado y usado para lo que no debería ser. Una funcionalidad de una aplicación web administradora de contenidos. Como esa era muy compleja para modificarla, entonces la dejaron intacta, solo que le adicionaron el web service, para que la aplicación propia pudiese usar el dichoso administrador de contenidos.

    En teoría funcionaba bien. Pero ante cargas significativas: "The thread have been aborted". Y nadie sabía qué era. Entonces me llamaron a ver que era. Y lo primero que observé, es que el pobre webservice exponía unas operaciones que operaban sobre la base de datos. Y en general eran operaciones costosas. Pero lo peor, es que siempre el webservice tenía que quedarse esperando la respuesta del servidor de DB.

    "Eso es el timeout del webservice" dije.
    "Si, pero ya le pusimos hasta 5000 horas y nada!!"
    Ouch!!!

    Entonces tratemos de optimizar las operaciones de la DB.
    Le pasé el profiler, el DBEngine Tunning Advisor, implementé y borré índices y en efecto. La vaina mejoró.
    Operaciones de 9 minutos pasaron a 3 y en otros casos operaciones de 3 min pasaron a 1 seg (y eso porque el reporte no mostraba menos de 1 seg)

    Pero llegamos al punto en que por más optimización que hicimos, el error seguía pasando y el thread seguía siendo abortado.

    El httpruntime es un parámetro de configuración en el webconfig y jugar con sus valores puede ser catastrófico o genial. (En este punto cuando he nombreado web.config obvio que sabrán que estoy hablando de asp.net. especficamente del 2.0).

    Señores, se los presento aquí.

    Allí encontramos como atributo a executionTimeOut y fue el que le pusieron como en 5000 y nada. Por qué?
    Uno diría que aquí es donde le puede decir al webservice que espere más antes de "morirse". En efecto así es. Lo que pasa es que con el framework 2.0 vino nuevo otro atributo: shutdownTimeout. El primer atributo aplica sobre la aplicación como tal. Pero el segundo aplica sobre el worker process. Así que si está muy bajo para lo que uno quiere, el worker process es "bajado" por ASP.net cuando el tiempo expira y adivinen que pasa "The thread has been aborted".

    Lo pusieron en 1000 y por fin pudieron hacer su prueba completa!!!

    Concluyendo: Para evitarse problemas, no ponga a los webservices a esperar respuestas a trabajos completos. Esto margina el rendimiento de la red, y en general de todos los recursos del sistema. Use mecanismos asincrónicos.

    Si ya la embarró y no hay tiempo para cambios o definitivamente la terquedad o condiciones del negocio no permiten más, acuda al httpruntime y sus dos timeouts; esto puede apagar el incendio.
  • WarNov Developer Evangelist

    Problemas con el Connection Pool de ADO.NET

    • 0 Comments
    Cuando se crea una conexión SQL en ASP.NET, por defecto siempre irá al POOL de conexiones administrado por el framework. Es así como ni al cerrarla ni haciéndole dispose, esa conexión realmente se cierra en el SQL Server como tal. El pool de conexiones existe para mejorar en general el rendimiento de las aplicaciones, dado que el hecho de abrir una conexión es bastante costoso. Así que aunque lógicamente la conexión está ConnectionString es requerida, se sirve una de las ya existentes en el pool de una manera más rápida que creandola desde 0 (from the scratch).

    Si no se desea este comportamiento, basta con incluir en la conexión o en el WebConfig POOLING=FALSE

    El pool para un ConnectionString en particular se puede configurar con el número máximo y mínimo de conexiones. Jugar con estos valores puede mejorar o empeorar el rendimiento de la aplicación. El valor por defecto es de 100.

    Existe un error bastante grotesco que puede asustar mucho si no se entiende de connection pools:

    A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)

    Ocurre por ejemplo si en el pool no hay conexiones disponibles, debido a que han sido terminadas por un ente distinto a la aplicación (alquien desconectó el cable de red, apagaron el server, le hicieron kill a las conexiones, etc.)

    No ocurre porque la operación esté tardando demasiado. Y el que ocurran excepciones por éste último motivo no se arregla aumentando el timeout de la conexión. El timeout de la conexión se refiere al tiempo de espera para logran conexión con el server de db, antes de que una excepción sea lanzada.

    El tiempo de timeout por defecto es de 15 segundos. Y en el connectionstring está medido siempre en segundos. Siempre ha tener valores positivos o 0. De lo contrario una excepción surge. Si es 0, significa que nunca se lanzará excepción por incapacidad de alcanzar al server. Esto no es buena idea, porque el sistema se puede volver irresponsivo, y no habría indicios de por qué sucede esto.

    Para que los pool funcionen correctamente, debe existir un manejo responsable de las conexiones. Cómo se manejan responsablemente? Cerrándolas cada vez que no se vayan a requerir más.

    SqlConnection conn = new SqlConnection(myConnectionString);
    try
    {
      conn.Open();
      doSomething(conn);
    }
    finally
    {
      conn.Close();
    }


    Como se vé si hay un fallo, igual se cierra la conexión.

    Teniendo en cuenta: http://www.15seconds.com/issue/040830.htm

    "Close and Dispose methods of Connection object are equivalent. Neither one gives you any specific advantages over the other. "

    Por tanto se puede usar también de una forma más elegante y ostentosa:
     

    using (SqlConnection conn = new SqlConnection(myConnectionString))
    {
      conn.Open();
      doSomething(conn);
    }


    El using en este contexto libera todos recursos declarados, por medio de Dispose.

  • WarNov Developer Evangelist

    Ecosistema de Desarrollo Microsoft

    • 0 Comments

    Hace muchos años se creó alrededor del nombre Microsoft como tecnología, un mito que hoy en día en numerosos ambientes sigue vigente basado en hechos que ya no son reales y que provoca que los profesionales en tecnologías de diseño y desarrollo de software pierdan grandes oportunidades o a veces tengan que ejecutar más trabajo del que realmente deberían estar haciendo.


    Este mito dice que las tecnologías Microsoft son tecnologías cerradas, costosas y para nada integrables con el mundo Open Source. Otras versiones a veces agregan opiniones acerca de la calidad de los productos generados con nuestras tecnologías. Pero el éxito de las aplicaciones creadas con nuestra plataforma a nivel mundial habla por sí solo.
    En síntesis, hoy el mito está absolutamente roto. Y en este artículo describiremos por qué. Cómo nuestra plataforma ahora es integrable con el resto del mundo de software y lo mejor de todo, al mejor precio posible: $0.


    Ahora Microsoft ofrece un poderoso conjunto de herramientas, servidores y tecnologías en forma completamente gratuita para poder construir WebSites, Servicios y Aplicaciones. Habilitando a los estudiantes, emprendedores y personas que deseen iniciarse en nuestra plataforma de punta sin costo inicial y con la posibilidad de poder trabajar con muchas de las tecnologías con las que ya se encuentran familiarizados.

    En el siguiente video hacemos un recorrido rápido sobre toda la plataforma gratuita de Microsoft y en el resto del artículo hablamos de ello:

    Este ecosistema ya se encuentra totalmente unificado y reside en un solo sitio web, desde donde se puede descargar gratuitamente y comprende:


    1. HERRAMIENTAS

    a.      Visual Web Developer 2008 Express: Disponible para usar tecnologías como ASP.NET, Entity Framework, LINQ, Dynamic Data, AJAX, Silverlight y muchas más, para permitir por ejemplo crear Aplicaciones Orientadas a Datos automáticamente, sin una línea de código. Y en interoperabilidad, ofreciendo alternativas como soporte completo en el editor de código (coloreado de sintaxis, autocompletado de código, tips de métodos, depuración para Javascript) y librerías de última generación como JSon y JQuery. Como si fuera poco, nos ofrece todo un entorno integrado que no solo nos permite administrar nuestra solución de software como tal, sino también Bases de Datos, sitios FTP y aplicaciones para desplegar nuestra solución en los servidores web.

    b. Internet Explorer 8: Con sus herramientas para desarrolladores y diseñadores incluidas, hace eficiente y fácil el proceso de creación de sitios web, permitiendo la manipulación del DOM y el HTML dentro del browser, así como hacer Tracing de los estilos css usados, y perfilamiento y depuración de Javascript. Además incluye soporte completo para CSS 2.1, características de HTML5 como navegación AJAX, DOM Store y más características de CSS3 como texto vertical. También permite la creación de características únicas como buscadores personalizados, WebSlices, y Aceleradores para mejorar la experiencia de navegación de los usuarios.

    2. SERVIDOR DE BASES DE DATOS:

    Una versión gratuita del exitoso Microsoft SQL Server se encuentra disponible para ser descargada y servir como fuente de datos para sitios de producción; ya sea el próximo MySpace, o una aplicación corporativa. Disponemos de una excelente consola de administración para este motor; también gratuita, que nos permite administrar, crear, consultar y modificar las bases de datos muy fácilmente. En cuanto a interoperabilidad, provee su propio conector con PHP, para poder desplegar todo su poder sobre nuestro SQL Server.

    3. TECNOLOGIA:

    Nuestro nuevo framework, sobre el cual corre toda la plataforma, como siempre sigue siendo gratuito. Y esta vez viene con mejoras inigualables que van a permitirnos ser productivos con realmente muy poco esfuerzo:

    a. MVC: El modelo que realmente permitirá construir aplicaciones completamente estándar, al darnos control total sobre la forma en que se muestran nuestros sitios. Además permite un desarrollo orientado a pruebas, y una alta facilidad de administración en proyectos de gran magnitud gracias a su naturaleza puramente desacoplada.

    b. Dynamic Data: Creación automática de la capa de acceso a datos y aún de las interfaces de usuario para implementar las operaciones CRUD en nuestros sitios Web, todo esto soportado por templates que permiten dinamizar la apariencia del resultado final para que se ajuste a nuestros requerimientos.

    c. AJAX: Un completo framework integrado que nos permite crear aplicaciones web dinámicas de alta respuesta que funcionan como aplicaciones de escritorio.

    d. LINQ: Consulta y manipula CUALQUIER tipo de fuente de datos con un mismo lenguaje, con todos los beneficios de trabajar con lenguajes .NET Nativos como C# o VB.

    e. Entity Framework: La tecnología que nos permite mapear nuestras bases de datos a objetos en memoria en un abrir y cerrar de ojos, para ser totalmente productivos enfocándonos en desarrollar nuestro negocio y no en labores repetitivas.

    4. PLATAFORMA DE SERVICIOS:

    Internet Information Services 7 (IIS 7.0) ya no es solo un servidor web. Es toda una plataforma para hospedar sitios web, servicios y aplicaciones. Nos brinda la oportunidad de personalizarlo sin perder disponibilidad ni seguridad. Le podemos personalizar o agregar características como Intelligent Media Streaming a través de extensiones gratuitas de IIS, maximizar la seguridad web y ejecutar aislamiento automático de aplicaciones. Nos permite un despliegue simplificado de aplicaciones .NET y PHP en el mismo servidor. Incrementa la velocidad de nuestros sitios Web a través de técnicas únicas de caching dinámico y compresión de datos mejorada e implementa una infraestructura escalable con el balanceo de carga basado en HTTP sumado a un manejo de peticiones y ruteo inteligente.

    Y por si no se los he mencionado, todo esto es gratis!

    Para tener todo este ecosistema en nuestras máquinas de desarrollo y producción, lo único que necesitamos es visitar: http://www.microsoft.com/web

    Allí encontraremos más detalles de toda la nueva plataforma, así como un link directo al PI (Platform Installer) que nos permite descargar todo este contenido unificadamente, para tener en nuestras manos todo el poder de la plataforma en un santiamén.

    Además de esto, en este sitio encontraremos completos tutoriales que nos enseñarán a usar la plataforma de principio a fin para lograr rápidamente tener un sitio en producción. Tal es el caso del tutorial del sitio de ejemplo NerdDinner que incluye libro en PDF, video, y por supuesto código fuente.

    Por si fuera poco aquí también se nos enseña el proceso de Hosting de nuestros sitios, si es que no somos muy diestros en este tema. Pero eso no es todo! También podremos obtener hosting GRATIS para las aplicaciones que hagamos con la nueva plataforma; de esta manera cubrimos todo el proceso gratuitamente, desde la creación hasta la implementación de nuestras aplicaciones.


    Muchos otros recursos se encuentran referenciados en este portal, para que tengamos la posibilidad de extender más aún nuestro conocimiento: Links a los sitios de aprendizaje de Silverlight, IIS y ASP.NET, Links a Blogs de los escritores de nuestra tecnología más influyentes y muchos temas más.

    Hay más en este portal? Claro que sí. Nuestra tecnología es completamente abierta. Y es por eso que en este portal encontramos un enorme listado de aplicaciones Open Source creadas con la plataforma y en muchos caos PHP, listas para ser usadas aun comercialmente sin ningún costo: WordPress, DotNetNuke, MojoPortal, SugarCRM, Umbraco y muchas más.

    Con todo lo anterior, es muy fácil iniciarnos en la plataforma y los productos que podemos llegar a crear con ella. Tanto así, que rápidamente podremos convertirnos en empresarios de tecnología a través de todos estos recursos. Dado lo anterior, en el portal también se ofrece la alternativa de entrar a hacer parte de programas para profesionales en tecnologías Microsoft como WebSpark o BizSpark, en los cuales por unas tarifas súper reducidas para apoyar el emprendimiento (US$100 por tres años) se puede tener acceso a la mayoría del licenciamiento de los productos Microsoft requeridos para sacar nuestra empresa adelante. Hasta acceso a soporte tenemos desde el portal de nuestra plataforma!

    Nuevamente: El mito está roto!

    Visite http://www.microsoft.com/web y observe como puede empezar a ser productivo muy rápido, sin un solo peso invertido y con la posibilidad de integrarse sin problema al mundo Open Source. El Ecosistema de Microsoft, ofrece tecnologías para todos!

    Descargar el Video: Descargar la presentación:


  • WarNov Developer Evangelist

    Stairway to Azure (2) Adquiriendo las cuentas de acceso.

    • 0 Comments

    En la primera entrega de esta serie de posts acerca de Windows Azure, estuve recorriendo todo el camino en la historia de Software más Servicios y relacioné un video que muestra de forma muy rápida esta historia y nos deja listos para comenzar a usar Windows Azure como alternativa de S+S propuesta por Microsoft.

    Vimos como Windows Azure permite hospedar en la nube servicios de negocio y de base de datos y que tiene puntos de conexión para comunicarnos con las aplicaciones "on-premises".

    Cuando trabajamos con Windows Azure, básicamente nos descargamos un SDK y unas herramientas que se instalan sobre nuestro Visual Studio y IIS, con el fin de generar un Windows Azure "Local" sobre el cual podemos hacer pruebas de los desarrollos para Windows Azure. Obviamente, los servicios de Azure tienen su costo (posteriormente estaemos hablando de esto). Pero como también es obvio, necesitamos tener la oportunidad de probar la experiencia, antes de pagar por una suscripción.

    Por este motivo, Windows Azure ofrece un trial, para que podamos poner en el Windows Azure real las aplicaciones que desarrollemos usando el Azure Virtual Local. Para acceder a estas cuentas trial, es necesario solicitar un token, que se toma su tiempo en ser asignado a nosotros (algunos días). Para solicitarlo, primero es necesario registrar nuestra cuenta de Windows Live Id (anteriormente Passport.NET) en el sitio de Microsoft Connect. Y luego de esto, llenar una información de registro específica para acceder al token. Después, esperamos algun tiempo mirando ansiosamente el correo todos los días, hasta que descubrimos que tenemos el tan preciado token. Una vez con ese token en nuestro poder, procedemos a redimirlo en el sitio de Windows Azure de acuerdo a las instrucciones que vienen en el correo y en adelante, podremos subir nuestras soluciones a la nube.

    He querido postear esta información antes de explicar realmente como programar para Azure, pues me gustaría que la audiencia vaya adelantando el proceso de adquisición de tokens, para que cuando ya sepan cómo y tengan desarrollos para Windows Azure, ya hayan redimido su token y puedan probar sus aplicaciones online. Para este fin, también he publicado un video, que muestra más detalladamente los pasos a seguir:

    Los espero en una nueva entrega donde comenzaremos con el típico "Hola (mundo) Nube"

  • WarNov Developer Evangelist

    Métodos Parciales (Partial Methods)

    • 0 Comments

    Una gran adición del Framework 2.0 en cuanto a codificación, fueron las clases parciales. Surgieron como una excelente solución sobretodo para los generadores automáticos de código, pues anteriormente cuando no habían clases parciales y uno trabajaba sobre una clase generada por alguna herramienta, el trabajo ejecutado se perdía cada vez que se regeneraba dicha clase.

    Gracias a las clases parciales entonces, uno podía generar un archivo "paralelo" que hacía referencia a la misma clase, pero que no se veía afectado en las regeneraciones automatizadas. Todo esto con la gran ventaja de que a pesar de que estuvieran en archivos distintos, la clase aparecían al resto del mundo como una sola (intellisense, compilación, etc).

    Otro uso interesante, es la posibilidad de dividir grandes clases en unidades con funcionalidades comunes, para obtener una mayor administrabilidad de las mismas y para permitir que varios desarrolladores estuviesen trabajando sobre una misma clase (en las versiones parciales en archivos distintos)  al mismo tiempo.

    Ya para el Framework 3.5 se incluyeron los métodos parciales que van un paso más allá con este concepto.

    La idea es que en una clase parcial se incluye la firma del método (tiene que ser privado y con tipo de retorno void) y en otra clase se "implementa". Lo pongo entre comillas, porque implementar me lleva a pensar en una interfaz, donde obligatoriamente se tiene que implementar los métodos establecidos por ella. Con los métodos parciales no existe esa OBLIGACION. El desarrollador decide si quiere "implementar" o no los métodos parciales que define la clase parcial.

    Para saber qué metodos parciales incluye una clase, basta con recurrir al intellisense y escribir "partial" y dar espacio; inmediatamente saldrán todos los métodos parciales disponibles.

    Esto resulta muy últil también en el proceso de personalización de código generado automáticamente, tal como pasa con la generación del modelo de datos que ofrece el Entity Framework. Las clases generadas por este framework, agregan métodos parciales para que se puedan controlar los cambios a los atributos en las clases generadas. Entonces si el desarrollador quiere establecer un control granular sobre estos cambios, implementa los métodos parciales en sus clases parciales externas.

    Qué ventajas ofrece esta metodología comparada con una de Interfaces?

    Si se fuera a autogenerar código con una herramienta como el Entity Framework, basado en una interfaz o en una clase base (con métodos virtuales o abstractos), obviamente la implementación de los métodos dictados por la interfaz quedarían en el código autogenerado o se haría muy complicado el proceso de escoger el archivo donde se quiere generar estos métodos y si se quieren generar o no pues tal vez ya han sido modificados.

    Además hay otra ventaja y es que cuando los métodos parciales no son implementados, entonces ni sus firmas ni sus llamados se incluyen en la compilación del código, lo que hace el proceso de compilación y el resultado de la misma, mucho más liviano que cuando se usan interfaces, o cuando se crean métodos virtuales o abstractos.

    En conclusión, vemos como muchas de las innovaciones del Framework .NET tienden a hacer más práctica la programación, sin perder el formalismo que lo ha caracterizado a través de su historia. La aparición de métodos parciales son una buena noticia y entender muy bien su uso nos permitirá desarrollar excelentes piezas de  código con muy poco esfuerzo.

    Pueden encontrar información de referencia aquí.

     

  • WarNov Developer Evangelist

    Antivirus Gratuito: Microsoft Security Essentials

    • 0 Comments

    Cansado de buscar un antivirus gratuito en el que en verdad pueda confiar?

    Ya no es necesario buscar más! Microsoft ofrece uno completamente gratis y no solo es un antivirus, sino toda una suite de seguridad que respeta la libre elección de sus usuarios, su privacidad y no exige registro ni identificación alguna:

    Se trata de Microsoft Security Essentials que brinda seguridad en la que usted puede confiar;  es fácil de obtener y utilizar y brinda una protección silenciosa que no interfiere con el performance de su máquina. Brinda protección en tiempo real para atender las necesidades de seguridad continua de un PC con Windows, lo que ayuda a protegerlo contra virus, spyware y otras amenazas maliciosas. 

    Cualquier usuario del HOGAR con Windows versiones Windows XP, Windows Vista o Windows 7 que tenga una versión ORIGINAL de Windows lo puede descargar GRATUITAMENTE de la RED y usarlo indefinidamente. Es Gratuito y exclusivo para los usuarios con una versión Original de Windows. (Para entornos empresariales está disponible el producto Microsoft Forefront). 

    Los únicos requisitos para correr este software son: Cualquiera de las versiones de 32 o 64 bits de Windows XP SP2 y superior, Windows Vista y Windows 7 incluyendo el modo XP.

    La idea de ofrecer disponibilidad gratuita de este producto únicamente con copias originales de Windows, obedece a que la protección en tiempo real como aquella que se encuentra en Microsoft Security Essentials es una gran herramienta en la lucha contra software malicioso conocido; sin embargo para mejorar el estado general del ecosistema también se requiere tratar el malware en la fuente de distribución. Las fuentes de software falsificado y soluciones temporales de activación maduran con el malware. Una vez infectados, los PC con software no original están más propensos a convertirse en hosts de malware, que propagan software malicioso a otras máquinas en el ecosistema. Conducir más sistemas al software original tiene el potencial de atender mejor las necesidades comerciales y de seguridad del ecosistema en general. Si el PC no aprueba la validación de originalidad, la instalación de Microsoft Security Essentials termina y al usuario se le envía a información sobre cómo resolver los problemas relacionados con software original.

    Uno de los detalles especiales de este producto, es que los usuarios de Microsoft Security Essentials contarán con acceso al soporte de la comunidad y de correo electrónico sin costo alguno.

    Microsoft Security Essentials no estará disponible como una descarga crítica de Windows. El instalador estará disponible como una descarga individual sin costo pero utilizará el servicio Microsoft Update tanto para las descargas de firmas como para las actualizaciones de producto.

    Se puede descargar de http://www.microsoft.com/security_essentials y no se requiere que los consumidores ingresen una ID de Windows Live ni registro para descargar la solución.

    Microsoft ya ha liberado productos para proteger el software de programas malintencionados como Windows Defender que detecta y elimina sólo spyware conocido (tecnología que ayuda a recopilar información acerca de una persona u organización sin su conocimiento o consentimiento). Sin embargo, no está diseñado para brindar protección contra la gama completa de software malicioso, y en específico no evita que virus, gusanos, troyanos, y otro software malicioso infecten su máquina. La nueva solución sin costo será una solución antimalware completa que se encarga de estas amenazas. Esto no significa que Microsoft Security Essentials esté diseñado para reemplazar a Windows Defender. Pero si usted ejecuta Microsoft Security Essentials, no necesita ejecutar Windows Defender. Microsoft Security Essentials deshabilita Windows Defender para administrar la protección en tiempo real del PC, incluyendo antivirus, rootkits, troyanos y spyware.

    Aparte de ser gratuito y ofrecer tantas ventajas, Microsoft cree en la elección del cliente. Al ofrecer Microsoft Security Essentials como una descarga individual e independiente, Microsoft ofrece a los usuarios de Windows la opción de elegir, gratis o de otro tipo, la solución de seguridad de PC que se ajusta mejor a sus necesidades individuales. Además también protege la privacidad de sus usuarios, Microsoft Security Essentials no desencadena un cambio en el estado del PC con Windows sino que lee el valor de originalidad almacenado en la máquina donde está disponible, o de otra manera invoca una API para que valide dónde no exista un estado local. No se ve ni recopila información personal como parte de la validación de originalidad.

    Conózcanlo, instálenlo y recomiéndenlo a sus conocidos para evitarles tediosas búsquedas de antivirus gratuitos!

Page 12 of 14 (334 items) «1011121314