MSDN Blogs
  • WarNov Developer Evangelist

    Configurando identidades y Accesos en IIS 7.5

    • 3 Comments

    Abstract:

    Veremos que IIS 7.5 tiene un nuevo manejo de identidad virtual independiente para sus Application Pools, y que por ende debemos buscarlos de una manera especial cuando queramos asignarles permisos sobre los recursos del servidor, como lo son el sistema de archivos.

    Nivel: Intermedio. Tecnologías: IIS (IIS Application Pool Identities)

     

    Windows 7 y Windows 2008 R2 vienen con IIS 7.5 por defecto.

    Para muchas personas IIS 7.5 puede ser un mundo totalmente diferente; sobre todo si vienen de IIS 6.0 y anteriores. Obviamente estos grandes cambios fueron generados para hacer al servidor más usable, con más características y además más seguro.

    Hablemos de un cambio en seguridad que debemos tener en cuenta si queremos probar o poner en producción nuestros sitios en IIS 7.5.

    IIS es un servidor que corre sobre Windows. Los procesos que corren sobre Windows requieren de un usuario en nombre del cual corren. Aplicaciones como Word, corren en nombre del usuario logueado en el sistema. Pero servicios como IIS corren con usuarios internos del sistema que no requieren de un proceso de logueo que dificultaría lanzar dichos servicios.

    Las últimas versiones de IIS corrían con la identidad de NETWORKSERVICE (tal vez lo recuerden en instalaciones como las de SQLSERVER). Este usuario tiene las limitaciones de un usuario estándar así que los privilegios son bajos, por lo que ofrece cierta seguridad ya que un bug en el servicio no podría ser usado para afectar la máquina.

    Sin embargo, dado que muchos servicios comenzaron a usar este usuario para ejecutarse, lo que sí puede pasar, es que servicios maliciosos corriendo con este usuario puedan afectar y manipular otros servicios o aplicaciones con este mismo usuario, sobre todo cuando hablamos de aplicaciones de terceros que corren sobre IIS.

    Así que esto fue solucionado en IIS 7.5 a través de lo que hoy conocemos como IIS Application Pool Identities. Un mecanismo que permite crear identidades virtuales únicas para cada Application Pool en IIS. Recordemos que en IIS un Application Pool es un entorno de ejecución para las aplicaciones Web que nos permite administrarlas eficientemente. Dicho esto, si por ejemplo para instalar el CMS Orchard usamos un APPPool dedicado llamado Orchard, veremos como IIS crea un usuario virtual llamado Orchard para correr el proceso w3wp.exe (responsable de servir el sitio web como tal):

    image

    Es muy importante tener esto en cuenta sobre todo cuando nuestra aplicación requiere acceder recursos del sistema como el sistema de archivos, pues deberemos darle permisos de lecto-escritura al usuario que ha iniciado el proceso w3wp.exe. En IIS 6 y 7 lo hacíamos con el usuario NETWORKSERVICE pero en IIS 7.5 deberemos especificar el usuario virtual del AppPool donde está corriendo la app. Para lograr esto con la interfaz gráfica hay cierto detalle que no nos permite hacerlo directamente como con cualquier otro usuario, dado que es una identidad virtual:

    image

    Aquí vemos que queremos darle permisos de lecto-escritura sobre el folder App_Data a la identidad orchard que es sobre la cual corre el sitio, pero vemos que la herramienta no encuentra ese nombre (dado que es virtual). Para poderlo encontrar deberemos asegurarnos de que estamos buscando en Built-in security principals, usando la locación de la máquina donde está el server y finalmente anteponiendo IIS APPPOOL\<nombre del pool>:

    image

    Entonces al dar click en Check Names obtendremos:

    image

    Con lo que ya tendremos la identidad justa para accionarle los permisos requeridos.

    Conclusión:

    Vimos entonces que IIS 7.5 tiene un nuevo manejo de identidad virtual independiente para sus Application Pools, y que por ende debemos buscarlos de una manera especial cuando queramos asignarles permisos sobre los recursos del servidor, como lo son el sistema de archivos.

  • WarNov Developer Evangelist

    Solución a problemas en el registro al App Hub de Windows Phone 7 en Colombia

    • 5 Comments

    Hace pocos días se oficializó la disponibilidad del App Hub de Windows Phone 7 para Colombia, de manera que los desarrolladores de aplicaciones móviles para esta plataforma que estén operando en Colombia pueden desbloquear sus teléfonos para desarrollo y así mismo publicar sus aplicaciones globalmente.

    Sin embargo, varias personas me comentaron de un extraño error según el cual cuando se trataban de registrar al App Hub de Windows Phone 7 les aparecía esto y no podían continuar con el proceso, produciéndose una gran frustración, pues el ansia de ver la aplicación en nuestros teléfonos es muy alta:

    clip_image001

    Invalid Value for Field Country

    Cómo es esto posible si Colombia oficialmente ya está establecido en el App Hub?

    En general en Colombia no usamos el código postal. Es por eso que siempre que nos piden escribirlo generalmente en portales internacionales, escribimos cualquier cifra y si a veces eso falla, entonces escribimos un código postal de Estados Unidos como 90211 y con eso basta.

    Después de una amplia investigación junto con el equipo de soporte encontré que el error obedece a que hay una validación sobre el campo de código postal y se chequea que éste sea válido para Colombia. Aunque ud. no lo crea Colombia tiene códigos postales y éstos son de 6 cifras. Pero lo más problemático es que el error emitido no es correcto, pues aparece: “País no válido” y eso es lo que nos deja perdidos.

    SoluciónSi coloca por ejemplo 110110 en ese campo, Voilá… podrá seguir con el proceso sin problemas!!!

    Eso sí, asegúrese de que tanto el país asociado con su el Live Id usado para registrarse en el App Hub; como el país escogido dentro del App Hub durante el registro, sean Colombia. De lo contrario, tendrá problemas en el registro. Para chequear a qué país está asociado su Live ID, ingrese a http://account.live.com. Allí lo podrá cambiar a Colombia sin problemas.

    He solicitado al equipo de Ingeniería del APP HUB, que el campo de código postal no sea obligatorio en Colombia. Así que mientras actualizan el portal, por favor regístrese usando el código postal 110110.

    Bienvenido a experimentar sus aplicaciones en sus dispositivos!!!

  • WarNov Developer Evangelist

    Instalando Orchard en IIS 7.5 y SQL Server 2008R2

    • 2 Comments

    Abstract: En este video describo como instalar el CMS Orchard en la siguiente configuración: Windows 7 Ultimate + IIS 7.5 + SQL Server 2008 R2.
    Nivel: Básico

    Este es el segundo en una serie de posts acerca de el CMS Open Source basado en ASP.NET MVC 3, llamado Orchard. Si desea una introducción a los CMS y en especial a Orchard le recomiendo: Teoría de CMSs con Orchard y luego leer este post.

    Posts de esta serie:

     

    Contenido:

    Las instalaciones del CMS Orchard son muy pero muy sencillas. Sobretodo si se usa el Web Platform Installer WebPI (Un wizard que nos lo deja instalado automáticamente solo dando Next, Next, Next…). Es por eso que el video a continuación no se enfoca en este tipo de instalación sino en lo que yo llamaría instalación cruda de Orchard. Es decir, descargar la carpeta del aplicativo, instalarla en IIS y configurar una DB en SQL Server para su uso.

    Orchard puede ejecutarse bien sea en el IIS Express (Servidor web gratuito que viene en el WebPI), o en el ASP.NET Development Server de Visual Studio o en el IIS full (6, 7, 7.5), tal como lo veremos en este ejemplo.

  • WarNov Developer Evangelist

    Teoría de CMSs con Orchard

    • 0 Comments

    Esta es la primera entrega en una serie de posts acerca de este moderno sistema de manejo de contenidos basado en ASP.NET MVC. Aquí explicaré conceptos básicos de los CMS y de la plataforma como tal. Orchard es un CMS de última generación creado por la comunidad con alto apoyo de Microsoft. Es gratuito y Open Source.

    Nivel: Básico.
    Advertencia: Uso sustantivos técnicos en inglés y en español indistintamente.

    Posts de esta serie:

    Conceptos de CMS

    Un CMS esencialmente apunta a ayudarnos a construir sitios web usando piezas pre construidas que vienen en diferentes formas y tamaños para nuestros fines.

    C

    La C de CMS significa contenido y hace referencia a todo aquello en el sitio que tiene información. Por ejemplo un post de un blog, un comentario, un producto y hasta un menú de navegación o un logo.

    M

    Management o administración. Es el conjunto de herramientas que nos permite administrar el sistema. Se conoce como Admin Panel, Dashboard o back-end. Como se indica el acceso es restringido a administradores.

    clip_image001

    S

    De sistema que indica que todo lo anterior está completamente integrado para brindar una experiencia consistente durante la administración de nuestro sitio.

    Front End

    Es la parte visible de nuestro sitio.

    clip_image002

    Setup

    En general, todo CMS requiere de un Setup y es el proceso requerido para tener el sitio corriendo. Después de esto habrá que trabajar mucho en el contenido.

    clip_image003

     

     

    Conceptos de Orchard

    Content Item: Pieza de contenido que a menudo tiene una url asociada. Por ejemplo, páginas, posts o productos.

    Content Type

    Determinan la clase de contenido relativa a un Item. Por ejemplo un blog post es un ítem de tipo blog post.

    Content Part

    En Orchard los tipos de contenido están formados de pequeñas partes llamadas content parts. Son unidades atómicas de contenido que definen un comportamiento específico y que son reusables en muchos tipos de contenido.

    clip_image004

    Por ejemplo los comentarios, los tags o los ratings son Content Parts porque definen un comportamiento que puede ser reusado. Como regla se tiene que solo puede haber una parte de cada tipo en cada tipo de contenido. Por ejemplo, no encontraremos en un blog post dos secciones de comentarios distintas.

    Content Field

    Campos de contenido que pueden ser agregados a un tipo de contenido. Tienen un nombre y un tipo y pertenecen a un Content Type específico. Por ejemplo un producto puede tener un campo de texto representando su nombre, un campo numérico representando su precio y otro representando su peso. Como vemos, estos campos probablemente sólo tienen sentido hablando de un producto.

    Module

    Los módulos son las extensiones que se construyen para enriquecer la funcionalidad de Orchard. Estos módulos se organizan dentro de un sub directorio que puede ser encontrado en la carpeta Modules dentro del sitio web de Orchard. Estos módulos se pueden encontrar en la galería de Orchard.

    clip_image005

    Feature

    Un módulo puede contener una o más características que son un agrupamiento lógico de funcionalidades que pueden ser habilitadas o deshabilitadas individualmente. Por ejemplo, un módulo de autenticación personalizada puede tener diversas características (features) para OpenId, Facebook, LiveID, Twitter, etc. que pueden ser activadas o desactivadas.

    Hay que tener en cuenta sin embargo que una característica puede depender de otra que puede existir en el mismo o en otro módulo.

    clip_image006

    Manifest

    El manifiesto es un pequeño archivo de texto que describe un módulo o un tema en el sistema:

    clip_image008

    Interfaz Gráfica (UI Composition)

    Dado que Orchard maneja contenido com´puesto de partes, se necesita un mecanismo que orqueste la parte visual de la aplicación teniendo en cuenta la naturaleza del contenido que hace la composición. Por esto es importante hablar de la UI:

    Theme

    Al diseñar un sitio web es muy importante que seamos capaces de modificar su apariencia visual en cada sencillo aspecto. Orchard provee una clara y limpia separación entre la administración del contenido y del despliegue visual de dichos contenidos.

    Un tema es un paquete que contiene todo el look and feel de un sitio Orchard. Puede consistir de una combinación de hojas de estilo, imágenes, distribuciones, plantillas y hasta código personalizado. Los temas se pueden crear heredando de otros; cosa muy útil si se trata de hacer solo pequeñas modificaciones sobre un tema existente.

    clip_image009

    Layout

    Es un archivo dentro de un tema que define la organización generar de las páginas que lo usan. Un layout típicamente define un conjunto de zonas donde los contenidos o widget pueden ser insertados.

    clip_image010

    Template

    Cada parte de contenido, cada campo y cada widget necesita ser gráficamente representado en el front-end transformando los datos que representa en un elemento que pueda ser leído por los usuarios del sitio. Un template o plantilla es la “receta” que formatea esos datos y los transforma en HTML para que el browser los despliegue. Se puede pensar en un template como en HTML plano con “campos” bien definidos en los que los datos se insertan.

    Shape

    Antes de que algo pueda ser mostrado usando una plantilla, ese algo debe ser transformado en una forma o shape, que no es más que un objeto bastante versátil que contiene toda la información requerida para poder mostrarlo. Antes de que pueda ser renderizado por las plantillas, todo debe ser mapeado en un árbol de formas que es una especie de representación abstracta de los contenidos de la página final. La ventaja de estos árboles de formas, es que cualquier módulo puede modificarlas o crear unas nuevas.

    Los layout, zinas, widgets y content parts todos se representan como shapes en el proceso de renderizado.

    Placement

    Cuando se renderizan los elementos de la página, Orchard requiere saber en qué orden hacerlo. Para esto existen los archivos Placement.info que son XML que describen reglas usadas para determinar qué shapes van en qué zonas y en qué orden. Esto posibilita no solo que pueda ser personalizado el renderizado de cada shape, sino que también se pueda personalizar el orden en que se ejecuta este renderizado.

    clip_image013

    Zone

    Las zonas son partes específicas de un layout que pueden ser personalizadas insertando en ellas Widgets. En algunos temas, las zonas son colapsibles lo que significa que pueden desaparecer si no tienen widgets activos.

    clip_image014

    Widget

    Un Widget es un pequeño fragmento de interfaz de usuario que puede ser añadido a algunas o a todas las páginas del sitio. Por ejemplo tag clouds, mapas, formulario de búsqueda, etc.

    Layer (Capa)

    Una capa es un grupo de widgets (con su posicionamiento y orden) que es activada por una regla específica.

    Por ejemplo podríamos armar una capa llamada HomePage que se activara solo al llegar a esta página. También podríamos tener por ejemplo una capa por defecto que siempre estuviese activa y otra capa solo para usuarios autenticados.

    Cuando más de una capa está activa en una página, todos los widgets de esas capas se muestran al mismo tiempo. Orchard los ordena basándose en sus posiciones.

     

    Seguridad

    Usuarios y Roles

    En Orchard los usuarios pueden tener roles que pueden ser vistos como estereotipos de usuarios que tienen un conjunto común de permisos que definen quién puede hacer qué en el sitio. Cualquier usuario puede tener varios roles.

    Los dueños de los sitios pueden crear sus propios roles, pero Orchard viene con un conjunto de roles predefinidos que deberían cumplir la mayoría de los requerimientos de los sitios.

    · Administrador: Todos los permisos

    · Editor: No crea contenido pero edita y publica contenido creado por autores

    · Moderador: Valida contenido creado por usuarios como los comentarios

    · Autor: Escribe y publica su propio contenido

    · Contribuidor: Escribe contenido pero no necesariamente tiene derecho a publicarlo

    · Anónimo: usuario desconocido. Alguien que no se ha logueado.

    · Autenticado: Cualquier usuario logueado

    Los roles autenticados o anónimo no se pueden asignar manualmente sino que han de ser determinados dinámicamente en tiempo de ejecución.

    Privilegios y Permisos

    En Orchard los permisos son asignados a los roles, pero no son explícitamente denegados. En otras palabras si un usuario pertenece a cualquier role con algún permiso, éste tiene ese permiso. Para revocar este permiso es necesario bien sea retirar al usuario del role que tiene este permiso o revocar el permiso de dicho rol.

    Algunos permisos son garantizados efectivamente. Esto significa que no han sido explícitamente permitidos, pero que se adquieren de manera implícita a través de otro permiso. Por ejemplo, si se otorga el permiso de “Site Owner”, implícitamente se garantizan el resto de permisos.

    clip_image015

    Tanto los permisos como sus ajustes aplican por módulo. Esto significa que si usted construye su propio módulo, a éste habrá de especificársele los permisos que lo acompañan.

    Site Owner

    También conocido como el súper usuario, es un usuario especial definido en tiempo de instalación que tiene todos los derechos sobre el sitio. Puede ser modificado desde la pantalla de administración del sitio si se tiene permiso para hacerlo.

    De esta forma hay un tipo de permiso llamado “Site Owners Permission” que garantiza todos los derechos sobre el sitio y que por defecto se asigna al rol de Administrador. Es altamente recomendado que este grupo de permisos no se asigne a ningún otro rol.

     

     

    Desarrollo

    Cuando se van a crear nuevos módulos para Orchard (Esto no es requerido para operar el sitio), se requiere:

    ASP.NET MVC

    El framework web sobre el que se construyó Orchard.

    Handler

    Es similar a un filtro en MVC dado que contiene código que ejecuta eventos específicos en el ciclo de vida del request. Son usados para ajustar repositorios de datos o para ejecutar operaciones adicionales cuando algún contenido se carga.

    Driver

    Similares a los controladores de MVC pero actuando a nivel de contenido en vez de a un nivel de el request completo. Típicamente preparan las shapes para ser renderizadas y manejan postbacks desde los editores de administración.

    Record

    Es una clase que modela la representación de una content part en la base de datos. Son clases POCO donde cada propiedad es virtual.

    Migration

    Una migración es una descripción de las operaciones que se deben ejecutar cuando se instala por primera vez una característica en un módulo o cuando se actualiza de una versión a la siguiente. Esto permitirá actualizaciones sencillas sin pérdida de datos. Orchard incluye un framework de migración de datos.

    Injection

    La IoC, Inversion of Control o sencillamente inyección se usa ampliamente en Orchard. Cuando una pieza de código requiere una dependencia, esto típicamente requerirá la inyección de una o más instancias de una interface específica. El framework se encargará de seleccionar, instanciar e inyectar las implementaciones adecuadas en tiempo de ejecución.

    Llamado a la Acción!

    Si desea ir trabajando con este CMS, puede descargarlo gratuitamente de http://www.orchardproject.net/  Y espere en mi próxima entrega un video de los diversos tipos de instalación que podemos hacer de este CMS.

  • WarNov Developer Evangelist

    Windows Phone 7 Applications: Tipos de Distribución.

    • 0 Comments

    Abstract:

    Las aplicaciones de Windows Phone 7 siguen un modelo de distribución a través de un Marketplace centralizado en Internet. Este modelo que es bastante popular para las aplicaciones móviles de la mayoría de fabricantes sin embargo ofrece algunos inconvenientes para distribuir aplicaciones a grupos especiales; por ejemplo Beta Testers, o empleados de una compañía. La última actualización del APP Hub de Windows Phone 7 permite dar solución a este problema a través de sus dos nuevos tipos de distribución de aplicaciones: “Targeted” y “Beta”.

    Contenido:

    Hasta hace un tiempo, la única forma de publicar en el App Hub de WP7 era a través del mecanismo de distribución pública según el cual, al estar una aplicación en el Marketplace, esta se hace visible para todo el público sin que podamos por ejemplo elegir quienes sí la pueden comprar/descargar y sin que se puedan poner restricciones de tiempo para su uso. Aunque esto es adecuado para la gran mayoría de aplicaciones, qué pasa si como publicadores queremos poner nuestra app en Beta para que solo unos cuantos la prueben? O tal vez creamos una aplicación para una empresa que obviamente requiere que solo esté disponible para ciertos empleados?

    Para resolver estas situaciones, nuestra nueva versión del App Hub incluye dos nuevos tipos de publicación aparte del tipo “public”. Ahora tenemos “Targeted” y “Beta”.

    Targeted:

    Es el tipo de publicación ideal para empresas. En este, la aplicación se sube como se haría tradicionalmente al App Hub (incluyendo todos los procesos de validación tradicionales), pero manteniéndola oculta en el Marketplace, de manera que sólo los usuarios con el link de dicha aplicación la pueden descargar e instalar. Al finalizar el procedimiento de envío de aplicación al App Hub, habrá la posibilidad de escoger cómo y cuándo hacer pública la aplicación después de que esta pase el proceso de certificación, entonces escogeremos “As son as it’s certified, but make it hidden”. De tal manera que apenas la app pasa la certificación queda lista para ser descargada, pero invisible para quienes no tengan el link. Sin embargo, cuando uno lo desea, puede hacerla visible, convirtiéndola en una aplicación pública tradicional.

    clip_image002

    Luego de ser publicada se recibirá un correo con el link a la aplicación. Este es el que se deberá remitir a la audiencia objetivo. Cualquier persona con el link puede descargar la aplicación, hay que tenerlo en cuenta. No hay límite de personas para descargar la aplicación. Contrario a las publicaciones estándar, no se puede hacer actualización de la aplicación aún. Así que hay que hacer un re-envío en caso de una actualización. No se puede establecer un límite en el tiempo en que la aplicación está disponible para la audiencia (en el tipo “beta” sí). Este tipo de publicación también consume créditos de los que se tienen disponibles de acuerdo al plan de publicación adquirido.

    Beta:

    Una versión beta permite exponer al público una aplicación para su evaluación sin que necesariamente esto signifique ponerla en producción. Una de las ventajas obtenidas en este tipo de publicación, es que el proceso de certificación es automático, de manera que la aplicación queda disponible mucho más rápido. Además es un proceso gratuito que no consume créditos del plan. La aplicación solo es accesible a través de un link (oculta del marketplace) y se posee un completo control sobre quiénes pueden probar la beta, dado que se especifica el Windows Live Id del beta tester, quien descarga e instala la aplicación a través de los mecanismos tradicionales en dispositivos comerciales sin necesidad de estar registrados como developers. Eso sí, las aplicaciones en Beta expiran automáticamente a los 90 días después de su publicación. Lo que quiere decir que el link no funcionará más y que la aplicación no se podrá ejecutar, de tal forma que solo aparecerán dos opciones: desinstalar o dar feedback. Se pueden subir tantas aplicaciones en beta, como queramos, pero siempre las versiones Beta van gratuitas.

    Cuando estemos publicando nuestra app, podremos escoger si queremos que suba en beta privada:

    clip_image004

    De la misma manera, se pueden escribir los Windows Live ID de los testers:

    clip_image006

    Como se aprecia, tenemos hasta un máximo de 100 testers por aplicación en la lista. Esta lista se puede modificar cuando se desee durante los 90 días posteriores (para ningún efecto este tiempo es modificable) a la publicación exitosa de la aplicación. Luego de ejecutar este proceso, y de ser publicada la aplicación, se recibe un correo con la dirección de la misma, para distribuir entre los beta testers. Si el Live Id de la persona que intenta descargar la aplicación no está en el listado consignado anteriormente, dicha persona no podrá acceder a la aplicación.

    A diferencia del modelo “targeted”. Las aplicaciones en Beta no se pueden hacer públicas. Se necesita re-enviarlas.

    Conclusión:

    Vimos que el App Hub de Windows Phone 7 ha evolucionado permitir nuevos modelos de despliegue de aplicaciones orientado a empresas y a “Beta Testers” que facilitan enormemente el ciclo de vida de la aplicación y el alcanzar públicos especiales. Cosa que no se podía con el método de publicación tradicional.

  • WarNov Developer Evangelist

    C++ Sí muerde

    • 0 Comments

    Tal cual. Ha de ser por eso que por ahí circulan tantos mitos falsos de este magnífico lenguaje obra de una gran mejora que a principios de los ochenta hizo el joven Stroustrup sobre el ya mítico C pelao que nació a principios de los 70 como lenguaje para Unix que sí; estaba basado en el lenguaje B que a su vez fue engendrado a partir de BCPL (esto ya parece el Génesis).

    clip_image001

    Bueno; pues la idea de este artículo no es demostrar que C++ Muerde, sino qué hacer para que no nos muerda.

    Eso sí, estaré escribiendo de C++ en el mundo de desarrollo Microsoft. Específicamente en Visual Studio. De hecho, lo que me motivó a escribir esto, es que por ahí a un amigo le dijeron que la aplicaciones C++ hechas con VS nunca podían ser tan rápidas cómo las de C++ nativo. Cosa que aunque es parcialmente cierta, tiene más de falsedad que de verdad.

     

    Verán, con Visual Studio y C++ podemos crear dos tipos de aplicaciones esencialmente.

    1. Nativas: Que corren en los PCs sin necesidad de instalar nada adicional. Se usa la versión de C++ definida por la ISO/IEC. Así que estas sí corren con toda la velocidad posible.

    2. C++/CLI (Administrado): Como bien atina a llamarlas el señor Ivor Horton en su libro Beginning Visual C++, estas son aplicaciones que aunque están creadas con el lenguaje C++, requieren del Framework.net para funcionar (Así que en este caso C++ es uno de los cerca de 20 lenguajes de programación que se pueden trabajar con .NET). Obviamente, se ofrecen funcionalidades más evolucionadas y sencillas para desarrollar más rápida y eficientemente. Pero estas abstracciones tienen un costo a la hora de ejecución que aunque pocas veces llegan a notarse, bajo ciertas circunstancias son cruciales. Recibe el nombre de administrado, porque el Framework.NET se encarga de la seguridad del código y de la optimización del manejo de memoria y otros aspectos que nativamente tenemos que hacer con nuestras propias líneas de código.

    No es más que una de las tantas paradojas que tenemos en nuestra carrera. A mayor abstracción, menor velocidad.

    Piense por ejemplo en ir de un punto A a un punto B. Puede escoger ir en un auto de carreras de esos que para ser rápidos les han quitado la silla del copiloto y acompañantes, el tablero, y todas esas comodidades. O también puede escoger ir en una casa rodante con jacuzzi, televisión satelital y Kinect. En este caso, tiene todas las comodidades; pero la velocidad no es la misma…

    Ciertamente es un poco exagerado el ejemplo, pues la diferencia en velocidades no es tan grande a decir verdad; solo que a veces sí se requiere.

    Otra cosa más de notar sería por ejemplo que al ser más básico, C++ nativo tiene menos restricciones y permite construir cualquier tipo de software, aunque esto signifique comenzar de ceros sin aprovechar piezas prefabricadas como las que componen .NET.

    De hecho sobre el propio C++ nativo se han tratado de crear abstracciones propias para poderle programar más fácil. Es así como surgió la librería estándar de C++ que es la que se usa en la mayoría de programas creados con este lenguaje. Microsoft creó MFC (Microsoft Foundation Classes) para abstraer el acceso a los recursos del sistema operativo e intervenir la interfaz gráfica de Windows. Como es de suponerse, programar con estas librerías, es más sencillo, pero al ejecutar la velocidad no es la misma. Igual se puede acceder al API de Windows sin necesidad de MFC para ir más rápido (eso si se considera un Programmer Hero! Pues crear una aplicación con unas cuantas ventanas usando solo C++ nativo puede tomarle meses mientras con C++ administrado o a través de MFC, ese tiempo se reduce a un par de semanas). Además, sí puede decirse por ejemplo que un programa creado con MFC es más rápido (aunque no se note) que uno creado con C++ administrado.

     

    image

    Para cerrar hasta aquí podría decir entonces, que en general las diferencias en tiempos de ejecución no son tan abismales como sí las de desarrollo. Pero sé de aplicaciones que estando en .NET han tenido que devolverse por cuestiones de performance. Por ejemplo, el cliente de Evernote para Windows, una aplicación con una interfaz gráfica muy enriquecida y específica que almacena notas de todo tipo y hace búsquedas complejas sobre ellas, estaba hecho en WPF; se devolvió a C++ (programado con Visual Studio) para lograr un mayor rendimiento.

    Sin embargo Evernote debe en gran parte su éxito a lo fácil que les fue crear la aplicación en sus primeras versiones gracias a las grandes abstracciones brindadas por WPF y al poder de .NET. Luego ya con todo lo ganado en esas versiones, decidieron incrementar el número de funcionalidades; cosa que requería más trabajo de ingeniería, pero se podían dar ese lujo dado que ya tenían algo en producción que les daba revenue.

    No quiero decir que deben pasar todas sus apps a C++. Solo que cuando lo necesitemos allí estará.

    Para terminar esta entrega aquí les dejo este gráfico que me ayudo recopilar @raptorttk del libro de Horton, para que vean las opciones de cuando programar C++ en Visual Studio se trata:

     

    graficoCPP3

  • WarNov Developer Evangelist

    Windows Phone 7 Convence

    • 2 Comments

    Windows Phone 7 es el sistema operativo para teléfonos móviles creado por Microsoft orientado completamente a consumidores finales (a diferencia de anteriores versiones dirigidas a usuarios corporativos).

    clip_image001

    Con un diseño totalmente innovador que le ha significado ser ganador de tres premios distintos en los Premios Internacionales de la Excelencia en Diseño (IDEA) entre ellos el de la mejor Experiencia Interactiva de Producto, WP7 garantiza una experiencia de usuario inigualable representada por sus más de 3 millones de dispositivos vendidos a la fecha y un marketplace con gran crecimiento en la industria que a hoy ajusta más de 25.000 aplicaciones de las cuales la mayor porción está representada por juegos con un 17%.

    Estas cifras representan resultados brillantes sobretodo en un campo tan competido y difícil como el de los teléfonos celulares. Tanto que firmas como Gartner y IDC auguran que para 2015, el marketshare de WP7 estará por encima de grandes hoy en día como RIM y Apple y solo justo atrás de Android, pero sin el gran problema de la segmentación que sufren los desarrolladores sobre esta plataforma. Y lo anterior sin haber considerado gigantescas alianzas recientes que ofrecen aún más ventajas para el futuro del producto, tal como sucedió con Nokia y Skype.

    Pero no solo la experiencia de usuario y el diseño es destacable tras el desarrollo de esta plataforma. El que Microsoft esté tras el producto implica que pone en el mismo toda su madurez desarrollando productos complementarios que por supuesto se integran transparentemente con la funcionalidad del teléfono. Tal como sucede con la XBOX y Kinect (el dispositivo electrónico de consumo más vendido en la historia). A tal punto, que juegos de XBOX se pueden integrar completamente con las versiones de teléfono y gran porcentaje del código creado para un juego en XBOX, puede ser usado para su versión en el teléfono y además en la PC. Igual sucede con servicios como Skydrive que nos permite almacenar archivos en la nube y trabajar integralmente con Office en la Web.

    Es un gran momento para ser desarrollador colombiano de aplicaciones y juegos para Windows Phone. Somos uno de los 3 países en Hispanoamérica en tener acceso local marketplace antes de finalizar el año cuando se espera también que tengamos comercialización oficial de los dispositivos. Hay un gran futuro por explotar y nada mejor que comenzar desde ahora a prepararnos.

  • WarNov Developer Evangelist

    WP7 Japonés

    • 2 Comments

    El primer teléfono Windows Phone 7.5 en Japón es resistente al agua y tiene una cámara de 13.2 MP con 32 GB de almacenamiento. Además viene en japoneses colores Smile

    clip_image001

    Es el IS12T de Toshiba:

    image

    Se estima que en Colombia tengamos los primeros modelos para Octubre aunque no sabemos si estos TOSHIBA se distribuirán por estas latitudes.

  • WarNov Developer Evangelist

    Azu - lerado!

    • 0 Comments

    Abstract: Liberación del Windows Azure Accelerator for Web Roles. Una tecnología que permite desplegar sitios Web en Windows Azure sin necesidad de usar el portal de manera directa desde Visual Studio y WebMatrix, y además reduciendo los tiempos de 15 minutos a menos de 30 segundos.

     

    Me complace anunciarles la liberación del Acelerador de Windows Azure para Web Roles. Este acelerador hace más rápido y fácil desplegar uno o más sitios a través de múltiples instancias de Web Role logrando tiempos de despliegue asombrosos de menos de 30 segundos!

    clip_image002

    • Otras características:
    • Tiempos de despliegue menores a 30 minutos
    • Despliegue de sitios a múltiples roles usando las herramientas de Web Deploy de Visual Studio y WebMatrix.
    • Grabar paquetes de despliegue de Web Deploy y configuraciones de IIS en el storage de Windows Azure para proveer durabilidad.
    • Un template para Visual Studio que nos permite crear un host de web deploy.
    • Código abierto y disponible en paquetes de NuGet para construir soluciones personalizadas.

    Descárguenlo de aquí

Page 1 of 1 (9 items)