<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rubén Hinojosa Chapel - Blog personal &#187; Tecnologías .NET</title>
	<atom:link href="http://www.hinojosachapel.com/category/dotnet/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hinojosachapel.com</link>
	<description>Consultoria empresarial, Tecnologias .NET, Desarrollo web y Comunicacion digital. Investigacion y Desarrollo en Musica Algoritmica.</description>
	<lastBuildDate>Fri, 16 Jul 2010 17:39:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Pesadilla en una tarde de verano: IIS7 y los módulos HTTP</title>
		<link>http://www.hinojosachapel.com/2010/07/pesadilla-en-una-tarde-de-verano-iis7-y-los-modulos-http.aspx</link>
		<comments>http://www.hinojosachapel.com/2010/07/pesadilla-en-una-tarde-de-verano-iis7-y-los-modulos-http.aspx#comments</comments>
		<pubDate>Fri, 16 Jul 2010 07:17:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tecnologías .NET]]></category>

		<guid isPermaLink="false">http://www.hinojosachapel.com/?p=702</guid>
		<description><![CDATA[Tienes una aplicación web ASP.NET que lleva tiempo funcionando sin problemas. La desarrollaste en Windows XP con Visual Studio 2005. Hacías las pruebas en local con la versión 5 del IIS, la que viene con el XP Professional, o con el servidor de desarrollo de Visual Studio (Cassini), y en producción tenías un Windows Server [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2010/07/iis7.jpg"><img class="aligncenter size-full wp-image-703" title="Internet Information Services 7" src="http://www.hinojosachapel.com/wp-content/uploads/2010/07/iis7.jpg" alt="Internet Information Services 7" width="480" height="359" /></a></p>
<p>Tienes una aplicación web ASP.NET que lleva tiempo funcionando sin problemas. La desarrollaste en Windows XP con Visual Studio 2005. Hacías las pruebas en local con la versión 5 del IIS, la que viene con el XP Professional, o con el servidor de desarrollo de Visual Studio (<strong>Cassini</strong>), y en producción tenías un Windows Server 2003 con la versión 6 del IIS. Todo iba como la seda.</p>
<p>Salió el Visual Studio 2008 y, a la primera oportunidad, te subiste al carro de la modernidad. Y, luego de algunos pequeños ajustes, como adaptar el proyecto a la nueva versión de Crystal Reports, todo seguía como la seda.<br />
 <br />
Pero como en esta vida también hace falta emoción y suspense, la seda dejó de ser lo que era. Los Reyes Magos te trajeron un nuevo ordenador con Vista o Windows 7, o cambiaste el plan de alojamiento del sitio web y ahora tienes Windows Server 2008 en producción. Ambas situaciones tienen un factor común: se llama <strong>Internet Information Services 7</strong>.<br />
 <br />
De pronto la aplicación dejó de funcionar. La que cambió su entorno de ejecución de IIS5/6 a IIS7. Si el problema lo tienes en local, quizás dispones de un tiempo generoso para solucionarlo, pero si el problema surgió con el cambio de plan de alojamiento, ahora el tiempo es tu mayor enemigo. Bueno, el tiempo y el dueño de la web caída.<br />
 <br />
La pregunta es trivial, pero no deja de martillarte tu masa encefálica: ¿qué ha pasado con la web? Miras el código, analizas la arquitectura, ejecutas la aplicación repetidamente&#8230; y por fin descubres que el servidor no entiende las URLs que le escribes porque el responsable de procesarlas, el <a title="URL Rewriting in ASP.NET" href="http://msdn.microsoft.com/en-us/library/ms972974.aspx" target="_blank">módulo HTTP de reescritura de URLs</a>, ha muerto, ha dejado de existir.</p>
<p>¿Qué ha pasado? Que el IIS7 ha cambiado muchas cosas en su modo de trabajar en relación con versiones anteriores. Mantiene, por compatibilidad hacia atrás, la manera de trabajar antigua, ahora conocida como <strong>Modo Clásico</strong>, e incorpora una nueva forma de hacer las cosas, que han denominado <strong>Modo Integrado</strong>. Cuando configuras un nuevo sitio web, el modo de trabajo por defecto es el Integrado. Y si este nuevo sitio web es en realidad una web antigua de ASP.NET, es muy probable que algunas cosas dejen de funcionar, como, por ejemplo, los módulos HTTP.</p>
<p>En el Modo Integrado se ha modificado la manera de registrar los módulos HTTP mediante el archivo web.config. En versiones anteriores del IIS, estos módulos se registraban en la sección &lt;system.web&gt;/&lt;httpModules&gt;. En el Modo Integrado de la versión 7 se registran en la sección &lt;system.webServer&gt;/&lt;modules&gt; del archivo web.config.</p>
<p>Por ejemplo, si has programado el módulo &#8220;<strong>MiModulo</strong>&#8220;, el archivo web.config quedaría así:</p>
<p><strong>En versiones anteriores del IIS</strong></p>
<p>&lt;configuration&gt;<br />
  &lt;system.web&gt;<br />
    &lt;httpModules&gt;<br />
      &lt;add name=&#8221;MiModulo&#8221; type=&#8221;MiModulo&#8221;/&gt;<br />
     &lt;/httpModules&gt;<br />
  &lt;/system.web&gt;<br />
&lt;/configuration&gt;</p>
<p><strong>En el Modo Integrado del IIS7</strong></p>
<p>&lt;configuration&gt;<br />
  &lt;system.webServer&gt;<br />
    &lt;modules&gt;<br />
      &lt;add name=&#8221;MiModulo&#8221; type=&#8221;MiModulo&#8221;/&gt;<br />
    &lt;/modules&gt;<br />
  &lt;/system.webServer&gt;<br />
&lt;/configuration&gt;</p>
<p>Tienes la opción de dejar las cosas como estaban, y configurar el sitio web para que se ejecute en el Modo Clásico, pero de esta manera estarías renunciando a las <a title="Explore el servidor web de Windows Vista y más allá" href="http://msdn.microsoft.com/es-es/magazine/cc163453.aspx" target="_blank">nuevas posibilidades</a> que aporta la última versión del IIS.</p>
<p>Por otra parte, si desarrollas sobre WIndows XP y necesitas un IIS7 local para hacer las pruebas y empezar a utilizar los nuevos recursos, <a title="How to Install IIS7 on Windows XP" href="http://blogs.iis.net/bills/archive/2010/07/12/how-to-install-iis7-on-windows-xp.aspx" target="_blank">ya es posible hacerlo</a>. Microsoft acaba de lanzar una nueva versión del Internet Information Server llamada <a title="Introducing IIS Express" href="http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx" target="_blank">IIS Developer Express</a>, que forma parte de  <a title="Announcing WebMatrix – a small, simple and seamless stack for Web developers" href="http://blogs.iis.net/bills/archive/2010/07/06/announcing-webmatrix-a-small-simple-and-seamless-stack-for-web-developers.aspx" target="_blank">WebMatrix</a>. Este nuevo servidor trabaja con VS2010 y Visual Web Developer 2010 Express, se ejecuta sobre Windows XP y sistemas superiores, y no necesita una cuenta de administrador. <strong>IIS Developer Express</strong> mantiene las mejores características de Cassini (el servidor de desarrollo de Visual Studio) y del IIS7.  Además, es gratis. <img src='http://www.hinojosachapel.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Enlaces de interés:</strong></p>
<p><strong>Tutorial: Crear y registrar un módulo HTTP personalizado<br />
</strong><a title="Tutorial: Crear y registrar un módulo HTTP personalizado" href="http://msdn.microsoft.com/es-es/library/ms227673.aspx  " target="_blank">http://msdn.microsoft.com/es-es/library/ms227673.aspx <br />
</a> <br />
<strong>HttpModule and HttpHandler sections in IIS 7 web.config files<br />
</strong><a title="HttpModule and HttpHandler sections in IIS 7 web.config files" href="http://www.west-wind.com/Weblog/posts/168221.aspx" target="_blank">http://www.west-wind.com/Weblog/posts/168221.aspx</a> <br />
 <br />
<strong>ASP.NET Integration With IIS 7<br />
</strong><a title="ASP.NET Integration With IIS 7" href="http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis-7/" target="_blank">http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis-7/</a></p>
<p><strong>Registering Custom HttpModule in IIS7 Web.config</strong><br />
<a title="Registering Custom HttpModule in IIS7 Web.config" href="http://elijahmanor.com/webdevdotnet/post/Registering-Custom-HttpModule-in-IIS7-Webconfig.aspx" target="_blank">http://elijahmanor.com/webdevdotnet/post/Registering-Custom-HttpModule-in-IIS7-Webconfig.aspx</a><br />
 <br />
<strong>ASP.NET 2.0 Breaking Changes on IIS 7.0</strong><br />
<a title="ASP.NET 2.0 Breaking Changes on IIS 7.0" href="http://learn.iis.net/page.aspx/381/aspnet-20-breaking-changes-on-iis-70/" target="_blank">http://learn.iis.net/page.aspx/381/aspnet-20-breaking-changes-on-iis-70/</a> <br />
 <br />
<strong>URL Rewriting in ASP.NET<br />
</strong><a title="URL Rewriting in ASP.NET" href="http://msdn.microsoft.com/en-us/library/ms972974.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/ms972974.aspx</a><br />
 <br />
<strong>Introducing IIS Express<br />
</strong><a title="Introducing IIS Express" href="http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx" target="_blank">http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx</a></p>
<p><strong>Explore el servidor web de Windows Vista y más allá<br />
</strong><a title="Explore el servidor web de Windows Vista y más allá" href="http://msdn.microsoft.com/es-es/magazine/cc163453.aspx" target="_blank">http://msdn.microsoft.com/es-es/magazine/cc163453.aspx</a></p>
<p><strong>Introducción a IIS 7.0<br />
</strong><a title="Introducción a IIS 7.0" href="http://technet.microsoft.com/es-es/magazine/2008.03.iis7.aspx" target="_blank">http://technet.microsoft.com/es-es/magazine/2008.03.iis7.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinojosachapel.com/2010/07/pesadilla-en-una-tarde-de-verano-iis7-y-los-modulos-http.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo encender el teléfono en Windows Mobile con C#</title>
		<link>http://www.hinojosachapel.com/2010/02/como-encender-el-telefono-en-windows-mobile-con-c.aspx</link>
		<comments>http://www.hinojosachapel.com/2010/02/como-encender-el-telefono-en-windows-mobile-con-c.aspx#comments</comments>
		<pubDate>Thu, 25 Feb 2010 19:53:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Movilidad]]></category>
		<category><![CDATA[Tecnologías .NET]]></category>

		<guid isPermaLink="false">http://www.hinojosachapel.com/?p=673</guid>
		<description><![CDATA[Recientemente un cliente me pidió, como parte de los requerimientos del proyecto, que para realizar ciertas acciones en su aplicación de Windows Mobile se encendiera y apagara el teléfono automáticamente, sin que el usuario tuviera que intervenir. Concretamente, la aplicación tiene que abrir una conexión de datos GPRS, conectarse a un webservice situado en un [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center; "><a href="http://www.hinojosachapel.com/wp-content/uploads/2010/02/encender-telefono.png"><img class="aligncenter size-full wp-image-677" title="encender-telefono" src="http://www.hinojosachapel.com/wp-content/uploads/2010/02/encender-telefono.png" alt="encender-telefono" width="350" height="502" /></a></p>
<p>Recientemente un cliente me pidió, como parte de los requerimientos del proyecto, que para realizar ciertas acciones en su aplicación de Windows Mobile se encendiera y apagara el teléfono automáticamente, sin que el usuario tuviera que intervenir. Concretamente, la aplicación tiene que abrir una conexión de datos GPRS, conectarse a un <em>webservice</em> situado en un servidor de Internet, e intercambiar cierta información con éste. El teléfono no se utiliza para comunicaciones de voz, sólo de datos.</p>
<p>Como era una tarea que nunca antes había realizado, tuve que recurrir a Google para intentar encontrar la solución, alguna solución cercana, a alguna pista que me llevara hacia ella. Pronto la decepción se apropió de mí. Por más que buscaba y buscaba cómo encender el teléfono de Windows Mobile con C#, no encontraba nada, a pesar de que la búsqueda la realizaba en Inglés, <a title="El Inglés es el idioma más extendido en Internet" href="http://www.internetworldstats.com/stats7.htm" target="_blank">el idioma más extendido en la red</a>.</p>
<p>Sin embargo, aunque lentamente, poco a poco me fui acercando a la solución. La causa de la falta de respuestas era que no estaba escribiendo la pregunta correcta. Para un usuario común puede que la frase &#8220;encender el teléfono&#8221; le resultara natural, pero en términos más técnicos el enfoque correcto es &#8220;encender la radio del dispositivo móvil&#8221;. Y en Inglés. Algo así como: <a title="Buscar con Google: turn radio on and off windows mobile c#" href="http://www.google.com/search?q=turn+radio+on+and+off+windows+mobile+c%23&amp;btnG=Buscar&amp;hl=es&amp;lr=&amp;rlz=1C1CHNG_esES344ES344&amp;sa=2" target="_blank">turn radio on and off windows mobile c#</a>. Aunque en este contexto existen otros posibles sinónimos de <em>turn</em>, como <em>switch</em> o <em>toggle</em>.<br />
<span id="more-673"></span><br />
Resulta que en la ROM del dispositivo existe una dll no documentada llamada <strong>ossvcs.dll</strong>, que exporta funciones para controlar los Dispositivos de Radio (<em>Radio Devices</em>). Es decir, los módulos de Bluetooth, Teléfono y Red Inalámbrica (WiFi). <strong>Ossvcs.dll</strong> exporta las funciones por un número de orden y no por su nombre. Estas funciones pertenecen a un API no administrado, por lo que para invocarlas desde nuestro código C# necesitaremos declarar los prototipos mediante p/Invoke. Las funciones que necesitamos son las siguientes:</p>
<p><strong>[DllImport("ossvcs.dll", EntryPoint = "#276", CharSet = CharSet.Unicode)]<br />
private static extern uint GetWirelessDevice(ref IntPtr pDevice, int pDevVal);</strong></p>
<p><strong>[DllImport("ossvcs.dll", EntryPoint = "#273", CharSet = CharSet.Unicode)]<br />
private static extern uint ChangeRadioState(ref RDD pDevice, int dwState, int saveAction);</strong></p>
<p><strong>[DllImport("ossvcs.dll", EntryPoint = "#280", CharSet = CharSet.Unicode)]<br />
private static extern uint FreeDeviceList(IntPtr pDevice);</strong></p>
<p>Nótese cómo <strong>EntryPoint</strong> contiene el número de orden que identifica a la función invocada.</p>
<p>De las tres funciones, la que realmente nos interesa es<strong> ChangeRadioState()</strong>, porque justamente es la que nos permite cambiar el estado de la radio. Es decir, encenderla o apagarla. O dicho de forma llana, encender o apagar el teléfono.</p>
<p>He creado una clase llamada<strong> MobileRadio</strong>, que expone un único método público estático: <strong>SetDeviceState()</strong>. Este método acepta dos argumentos de tipo entero. El primero indica el tipo de dispositivo, y el segundo informa el estado al que se desea cambiar. El tipo de dispositivo puede ser uno de los siguientes: Bluetooth, el Teléfono o la Red Inalámbrica (WiFi). No necesitas conocer de memoria los valores enteros que se pueden traspasar. La clase <strong>MobileRadio</strong> exporta también dos estructuras (<strong>RADIODEVTYPE</strong> y <strong>RADIODEVSTATE</strong>) que contienen las constantes necesarias.</p>
<p>Para encender el teléfono basta la siguiente línea de código:</p>
<p><strong>MobileRadio.SetDeviceState(MobileRadio.RADIODEVTYPE.PHONE, MobileRadio.RADIODEVSTATE.ON);</strong></p>
<p>Y para apagarlo, ¿lo adivinas? <img src='http://www.hinojosachapel.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Para conocer el estado actual del teléfono, si está encendido o apagado, utilizamos la propiedad booleana <strong><a title="La propiedad PhoneRadioOff en la MSDN" href="http://msdn.microsoft.com/es-es/library/microsoft.windowsmobile.status.systemstate.phoneradiooff(en-us).aspx" target="_blank">PhoneRadioOff</a></strong> de la clase <strong>SystemState</strong>, situada en el espacio de nombres <strong>Microsoft.WindowsMobile.Status</strong>:</p>
<p><strong>Microsoft.WindowsMobile.Status.SystemState.PhoneRadioOff</strong></p>
<p>Esta propiedad es verdadera (<em>true</em>) si la radio del dispositivo está apagada, y falsa (<em>false</em>) en caso contrario.</p>
<p>Puedes descargar el proyecto completo desde <a title="Descargar Cómo encender el teléfono en Windows Mobile con C#: Código fuente" href="http://www.hinojosachapel.com/wp-content/uploads/2010/02/encendertelefono.zip">aquí</a>.</p>
<p><strong>Enlaces de interés:</strong></p>
<p><strong>Cómo encender el teléfono en Windows Mobile con C#<br />
</strong><a title="Cómo encender el teléfono en Windows Mobile con C#: Código fuente" href="http://www.hinojosachapel.com/wp-content/uploads/2010/02/encendertelefono.zip">El código fuente del proyecto</a></p>
<p><strong>Turn radio on and off as needed</strong><br />
<a title="Turn radio on and off as needed" href="http://community.intermec.com/t5/General-Development-Developer/Turn-radio-on-and-off-as-needed/m-p/138" target="_blank">http://community.intermec.com/t5/General-Development-Developer/Turn-radio-on-and-off-as-needed/m-p/138</a></p>
<p><strong>Controlling the Radio Devices</strong><br />
<a title="Controlling the Radio Devices " href="http://www.teksoftco.com/articles/article%20007/radiodevices.htm" target="_blank">http://www.teksoftco.com/articles/article%20007/radiodevices.htm</a></p>
<p><strong>Toggle WiFi/BT/Phone using .NET code only!!!</strong><br />
<a title="Toggle WiFi/BT/Phone using .NET code only!!!" href="http://forum.xda-developers.com/showthread.php?t=413159" target="_blank">http://forum.xda-developers.com/showthread.php?t=413159</a></p>
<p><strong>PInvoke.net: A wiki for .NET developers</strong><br />
<a title="PInvoke.net: A wiki for .NET developers" href="http://www.pinvoke.net/" target="_blank">http://www.pinvoke.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinojosachapel.com/2010/02/como-encender-el-telefono-en-windows-mobile-con-c.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cómo hacer una llamada telefónica en Windows Mobile con C#</title>
		<link>http://www.hinojosachapel.com/2009/08/como-hacer-una-llamada-telefonica-en-windows-mobile-con-c.aspx</link>
		<comments>http://www.hinojosachapel.com/2009/08/como-hacer-una-llamada-telefonica-en-windows-mobile-con-c.aspx#comments</comments>
		<pubDate>Thu, 06 Aug 2009 12:24:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Movilidad]]></category>
		<category><![CDATA[Tecnologías .NET]]></category>

		<guid isPermaLink="false">http://www.hinojosachapel.com/?p=582</guid>
		<description><![CDATA[Un teléfono móvil moderno, provisto de Windows Mobile, nos permite abrir archivos de MS Office, leer PDFs, hacer fotos, leer el correo electrónico, acceder a contenidos online por RSS, llevar la agenda de actividades, gestionar nuestros contactos, escuchar música, ver vídeos, chatear, jugar, ejecutar aplicaciones de un amplio rango&#8230; Además, por si no fuera suficiente, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-583" title="Aplicación Teléfono" src="http://www.hinojosachapel.com/wp-content/uploads/2009/08/telefono.jpg" alt="telefono" width="301" height="465" /></p>
<p>Un teléfono móvil moderno, provisto de Windows Mobile, nos permite abrir archivos de MS Office, leer PDFs, hacer fotos, leer el correo electrónico, acceder a contenidos online por RSS, llevar la agenda de actividades, gestionar nuestros contactos, escuchar música, ver vídeos, chatear, jugar, ejecutar aplicaciones de un amplio rango&#8230; Además, por si no fuera suficiente, también sirve para hacer llamadas telefónicas. <img src='http://www.hinojosachapel.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Realizar una llamada telefónica mediante código C# desde una aplicación nuestra de Windows Mobile es algo ridículamente simple, gracias a un recurso que Microsoft ha puesto a nuestra disposición: la clase <a title="Clase Phone" href="http://msdn.microsoft.com/es-es/library/microsoft.windowsmobile.telephony.phone(en-us).aspx" target="_blank">Phone</a>. Esta clase se encuentra definida dentro del ensamblado Microsoft.WindowsMobile.Telephony (en la DLL microsoft.windowsmobile.telephony.dll), por lo que debemos agregar una referencia a este ensamblado en nuestro proyecto de Visual Studio.<span id="more-582"></span></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-584" title="Microsoft.WindowsMobile.Telephony" src="http://www.hinojosachapel.com/wp-content/uploads/2009/08/referencias.jpg" alt="Microsoft.WindowsMobile.Telephony" width="311" height="264" /></p>
<p>Ahora sólo nos resta declarar y crear un objeto de la clase <strong>Phone</strong>, y llamar a su método mágico: <a title="Método Talk() de la clase Phone" href="http://msdn.microsoft.com/es-es/library/aa455391(en-us).aspx" target="_blank">Talk()</a>.</p>
<p>Phone p = new Phone();<br />
p.Talk(numero);</p>
<p>Este método recibe como parámetro un texto (<em>string</em>) que representa el número al cual se desea llamar: public void Talk(string number).</p>
<p>El proceso no es silencioso. Realmente lo que hace es ejecutar (y mostrar) el programa <em>Teléfono</em> del sistema operativo. Delega en él todas las operaciones, como por ejemplo, colgar la llamada.</p>
<p>Puedes descargarte el proyecto completo desde <a title="Descargar proyecto de la aplicación Teléfono" href="http://www.hinojosachapel.com/wp-content/uploads/2009/08/telefono.zip">aquí</a>.</p>
<p>¿Y por qué necesitaríamos realizar llamadas telefónicas desde una aplicación propia? ¿Acaso para escribir una versión mejorada del programa nativo? Yo conozco al menos un caso en que sí es necesario acudir a esta funcionalidad. Hace algunos años tuve que desarrollar una <a title="Aplicación OIGAA" href="http://www.oigaa.com/howitworks/mobile.htm" target="_blank">aplicación de telecomunicaciones</a> que necesitaba, como parte de su funcionamiento, realizar llamadas automáticamente a un cierto número. La aplicación OIGAA convierte los teléfonos móviles en extensiones de la centralita corporativa, permitiendo a sus usuarios responder desde cualquier lugar como si estuvieran en la oficina, y ofreciendo además diversas funcionalidades de valor añadido. Aquí te dejo algunas capturas de pantalla de la aplicación ejecutándose en el emulador de dispositivos móviles.</p>
<ul>
<li><a title="OIGAA: Pantalla de autenticación" href="http://www.hinojosachapel.com/wp-content/uploads/2009/08/oigaa1.jpg">OIGAA: Pantalla de autenticación</a></li>
<li><a title="OIGAA: Conexión y actualización inicial de datos" href="http://www.hinojosachapel.com/wp-content/uploads/2009/08/oigaa2.jpg">OIGAA: Conexión y actualización inicial de datos</a></li>
<li><a title="OIGAA: Agenda de contactos. Posibilidad de iniciar una conexión de VoIP" href="http://www.hinojosachapel.com/wp-content/uploads/2009/08/oigaa3.jpg">OIGAA: Agenda de contactos. Posibilidad de iniciar una conexión de VoIP</a></li>
<li><a title="OIGAA: Configuración del tipo de llamada y el mensaje de presencia" href="http://www.hinojosachapel.com/wp-content/uploads/2009/08/oigaa4.jpg">OIGAA: Configuración del tipo de llamada y el mensaje de presencia</a></li>
</ul>
<p><strong>Enlaces de interés:</strong><br />
<a href="http://www.hinojosachapel.com/wp-content/uploads/2009/08/telefono.zip">Código completo del ejemplo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinojosachapel.com/2009/08/como-hacer-una-llamada-telefonica-en-windows-mobile-con-c.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cómo migrar una aplicación .NET de 32 a 64 bit</title>
		<link>http://www.hinojosachapel.com/2008/11/como-migrar-una-aplicacion-net-de-32-a-64-bit.aspx</link>
		<comments>http://www.hinojosachapel.com/2008/11/como-migrar-una-aplicacion-net-de-32-a-64-bit.aspx#comments</comments>
		<pubDate>Sat, 01 Nov 2008 13:25:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tecnologías .NET]]></category>

		<guid isPermaLink="false">http://www.hinojosachapel.com/?p=455</guid>
		<description><![CDATA[Con el lanzamiento de la versión 2.0 de la plataforma .NET, Microsoft incluyó soporte para entornos de 64 bit basados en microprocesadores Itanium y x64. Las anteriores versiones 1.1 y 1.0 no ofrecían este tipo de soporte. El entorno de desarrollo de aplicaciones .NET (SDK, Visual Studio 2005) permite compilar las aplicaciones en tres modos [...]]]></description>
			<content:encoded><![CDATA[<p>Con el lanzamiento de la versión 2.0 de la plataforma .NET, Microsoft incluyó soporte para entornos de 64 bit basados en microprocesadores Itanium y x64. Las anteriores versiones 1.1 y 1.0 no ofrecían este tipo de soporte.</p>
<p>El entorno de desarrollo de aplicaciones .NET (SDK, Visual Studio 2005) permite compilar las aplicaciones en tres modos diferentes: sólo para ser ejecutadas sobre 32 bit, sólo para ser ejecutadas sobre 64 bit, o compiladas sólo para lenguaje intermedio (MSIL). En este último caso los ensamblados no contienen información específica de la plataforma hardware de destino, por lo que se conoce como modo agnóstico.</p>
<p>Teóricamente, una aplicación .NET compilada en modo agnóstico, el modo por defecto en que compila Visual Studio 2005, se puede ejecutar indistintamente en entornos de 32 ó 64 bit. Bastaría con desplegarla en cualquiera de los dos entornos. Sin embargo, no siempre el escenario es tan simple.<br />
<span id="more-455"></span><br />
<strong>La clave para que una aplicación sea multiplataforma es la ausencia de dependencias del hardware en el código.</strong> Por lo tanto, para migrar una aplicación de 32 a 64 bit es necesario investigar la aplicación para determinar si existen dependencias de bajo nivel. Si se detectaran, habría que estudiar cada caso ya que no existen recetas universales. Por dependencias de bajo nivel entendemos la utilización de APIs nativas (como la Win32) o de objetos<em> COM</em>.</p>
<p>Esta investigación debe dirigirse en dos direcciones: (1) descubrir y corregir las posibles dependencias del código fuente de la aplicación (nuestro código), y (2) analizar y evaluar las componentes de terceros. Si alguna de estas componentes no cumpliera los requisitos debería ser sustituida por otra equivalente válida.</p>
<p>De forma resumida, se dice que una aplicación está escrita con código seguro si sólo se ejecuta en el entorno del CLR, o sea, no se utilizan punteros de forma explícita ni llamadas de tipo pInvoke (llamadas a código no administrado, como la <em>API Win32</em>). Esto implicaría que nuestro código no esté atado al hardware, que es lo que buscamos para que la aplicación pueda ejecutarse correctamente sobre 32 y 64 bit.</p>
<p>Una pregunta común en esta situación es: ¿Cómo saber en qué entorno se ejecuta la aplicación? Cuando ejecutemos la aplicación migrada, sería útil conocer si realmente está corriendo sobre 64 bit. Sabemos que los punteros sobre 32 bit ocupan 4 bytes, mientras que sobre 64 bit tienen un tamaño de 8 bytes. Entonces, basta con conocer en tiempo de ejecución este dato.</p>
<p>La estructura <em>IntPtr</em>, del espacio de nombres <em>System</em>, nos resultará útil para averiguarlo. Esta estructura contiene una propiedad entera estática llamada <em>Size</em>, que nos devuelve justamente lo que necesitamos: un <strong>4</strong> si estamos en .NET 32 bit, o un <strong>8</strong> si estamos sobre 64 bit.</p>
<p>Puede verse claramente ahora que una aplicación que utilice punteros podría realizar operaciones que dependan de su tamaño. Si la aplicación &#8220;piensa&#8221; que está sobre 32 bit, pero está sobre 64, el resultado de estas operaciones no tiene que ser el que se esperaba. Con gran probabilidad se generará un error.</p>
<p>Conocer las zonas de nuestro código que no son seguras nos ayudará a decidir si las convertimos en código seguro, o si las hacemos dependientes de una arquitectura específica.</p>
<p>Para investigar si el código de nuestra aplicación es seguro Microsoft ofrece con el SDK una herramienta que se llama <em>Peverify.exe</em>, que podemos utilizar para analizar todas las DLLs que genera el proyecto.</p>
<p>Deberemos eliminar todas las referencias a objetos COM, buscando soluciones alternativas en cada caso, siempre basadas en código administrado.</p>
<p>Por último, debemos verificar en el entorno de desarrollo Visual Studio 2005 que la compilación de la solución se realice en modo agnóstico (<em>Any CPU</em>), que es el modo por defecto.</p>
<p>Hasta aquí habríamos &#8220;limpiado&#8221; o &#8220;asegurado&#8221; nuestro código para que se ejecute transparentemente sobre 32 o 64 bit pero, ¿qué pasa si dependemos de componentes de terceros? Estas también tienen que haber sido desarrolladas con código seguro y haber estado compiladas en modo agnóstico. Si no se cumplen estas dos condiciones habría que sustituir las componentes inadecuadas para 64 bit por otras que sí lo sean.</p>
<p>Para conocer si han sido escritas con código seguro podemos usar nuevamente la herramienta <em>PEVerify</em>, analizando cada uno de los ensamblados ajenos.</p>
<p>El problema de conocer cómo han sido compilados estos ensamblados ajenos se resuelve mediante la <strong>Reflexión</strong>, la capacidad del entorno de ejecución de .NET de acceder a los metadatos de los ensamblados y obtener información sobre los mismos. Si obtenemos el mensaje de <em>ILOnly</em>, es decir, modo agnóstico (sólo lenguaje intermedio), ya hemos llegado a la meta. Si no fuera así, tendrá que buscar componentes sustitutas que le ofrezcan las mismas funcionalidades y, además, sean aptas para entornos de 64 bit o multiplataforma. Depende de cuáles sean sus objetivos.</p>
<p>El siguiente ejemplo muestra cómo obtener la información que buscamos:</p>
<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2008/11/reflection_ex.gif"><img class="size-full wp-image-456 aligncenter" title="Ejemplo de Reflexión" src="http://www.hinojosachapel.com/wp-content/uploads/2008/11/reflection_ex.gif" alt="" width="500" height="291" /></a></p>
<p>Al ejecutar <em>GetAssemblyInfo()</em> obtendremos la siguiente cadena de caracteres:</p>
<p>Ensamblado de System.DateTime: &#8216;mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#8242;. Compilado para: &#8216;ILOnly, Required32Bit&#8217; &#8211; Plataforma: &#8216;I386&#8242;</p>
<p>Es decir, la versión de <em>System.DateTime</em> que estamos utilizando pertenece al ensamblado <em>mscorlib</em>, que está compilado en modo agnóstico.</p>
<p><strong>Enlaces de interés:</strong></p>
<p><strong>Migrating 32-bit Managed Code to 64-bit</strong><br />
<a href="http://msdn.microsoft.com/en-us/library/ms973190.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/ms973190.aspx</a></p>
<p><strong>64-Bit .NET Framework<br />
</strong><a href="http://msdn.microsoft.com/es-es/netframework/aa496329(en-us).aspx" target="_blank">http://msdn.microsoft.com/es-es/netframework/aa496329(en-us).aspx</a></p>
<p><strong>64-bit (From Wikipedia, the free encyclopedia)<br />
</strong><a href="http://es.wikipedia.org/wiki/64_bits" target="_blank">http://es.wikipedia.org/wiki/64_bits</a></p>
<p><strong>Microsoft 64-bit Computing Overview<br />
</strong><a href="http://www.microsoft.com/servers/64bit/overview.mspx" target="_blank">http://www.microsoft.com/servers/64bit/overview.mspx</a></p>
<p><strong>Herramienta PEVerify Tool (Peverify.exe)</strong><br />
<a href="http://msdn.microsoft.com/es-es/library/62bwd2yd(VS.80).aspx" target="_blank">http://msdn.microsoft.com/es-es/library/62bwd2yd(VS.80).aspx</a></p>
<p><strong>System.IntPtr.Size<br />
</strong><a href="http://msdn.microsoft.com/es-es/library/system.intptr.size(VS.80).aspx" target="_blank">http://msdn.microsoft.com/es-es/library/system.intptr.size(VS.80).aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinojosachapel.com/2008/11/como-migrar-una-aplicacion-net-de-32-a-64-bit.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guille Community Tour 2008 en Barcelona</title>
		<link>http://www.hinojosachapel.com/2008/10/guille-community-tour-2008-en-barcelona.aspx</link>
		<comments>http://www.hinojosachapel.com/2008/10/guille-community-tour-2008-en-barcelona.aspx#comments</comments>
		<pubDate>Wed, 08 Oct 2008 22:54:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Tecnologías .NET]]></category>

		<guid isPermaLink="false">http://localhost/hinojosachapel.com/?p=299</guid>
		<description><![CDATA[Si desarrollas para .NET, es muy probable que algunas de tus búsquedas en Internet te hayan llevado a las páginas del Guille. Pues bien, el Guille está realizando una gira por los grupos de usuarios de .NET de España durante los meses de Octubre a Diciembre. Esta semana (ayer) visitó Barcelona, donde estuvo acompañado por David Salgado, &#8220;evangelista&#8221; de Microsoft. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille08.jpg"><img class="size-full wp-image-443 aligncenter" title="Guille Community Tour 2008" src="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille08.jpg" alt="" width="500" height="155" /></a></p>
<p>Si desarrollas para .NET, es muy probable que algunas de tus búsquedas en Internet te hayan llevado a las páginas del <a title="El sitio del Guille" href="http://www.elguille.info/" target="_blank">Guille</a>. Pues bien, el Guille está realizando una <a title="Guille Community Tour 2008" href="http://www.microsoft.com/spanish/msdn/spain/eventos/communitytour.mspx" target="_blank">gira</a> por los grupos de usuarios de .NET de España durante los meses de Octubre a Diciembre. Esta semana (ayer) visitó Barcelona, donde estuvo acompañado por <a title="El blog de david Salgado." href="http://geeks.ms/blogs/dsalgado/" target="_blank">David Salgado</a>, &#8220;evangelista&#8221; de Microsoft.</p>
<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille4.jpg"><img class="aligncenter size-full wp-image-444" title="El Guille en Barcelona 2008" src="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille4.jpg" alt="" width="350" height="263" /></a></p>
<p>El encuentro comenzó puntualmente a las 18:00 horas. Con un tono jocoso e informal, el Guille nos fue introduciendo en las nuevas características de la plataforma .NET desde la perspectiva de la versión 9.0 de Visual Basic.NET. Entre chiste y chiste, habló de Ensamblados Amigos, Relajación de Delegados, Agilidad del <em>Runtime</em> y Tipos Anulables. Me sorprendió saber que esta última característica de los Tipos Anulables (<em>Nullable Types</em>) se introdujo en VB.NET con el <a title="Los Tipos Anulables en VB se introdujeron con VS2008." href="http://msdn.microsoft.com/en-us/library/bb981315(VS.80).aspx" target="_blank">Visual Studio 2008</a>, puesto que ya la teníamos en C# desde la versión 2.0 de la plataforma y <a title="Los Tipos Anulables en C#" href="http://msdn.microsoft.com/en-us/library/1t3y8s4s(VS.80).aspx" target="_blank">Visual Studio 2005</a>. Lo mismo ocurre con la Relajación de Delegados (<a title="Covarianza y Contravarianza en los Delegados." href="http://msdn.microsoft.com/es-es/library/ms173174(VS.80).aspx" target="_blank">Covarianza y Contravarianza</a>).<br />
<span id="more-299"></span></p>
<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille1.jpg"><img class="aligncenter size-full wp-image-445" title="El Guille en Barcelona 2008" src="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille1.jpg" alt="" width="350" height="263" /></a></p>
<p>A continuación, el Guille presentó el Operador Ternario, Los Métodos Parciales, la Inferencia de Tipos, los Tipos Anónimos y <a title="El proyecto LINQ" href="http://msdn.microsoft.com/es-es/library/bb308959.aspx" target="_blank">LINQ</a>, uno de los recursos más novedosos de Visual Basic.NET 9.0 (y también de C# 3.0). Explicó, además, las nuevas posibilidades para inicializar objetos y colecciones, las <a title="Las Expresiones Lambda." href="http://msdn.microsoft.com/es-es/library/bb397687.aspx" target="_blank">Expresiones Lambda</a> y los Métodos de Extensión. Varias de estas nuevas características se introdujeron para darle soporte a LINQ.</p>
<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille5.jpg"><img class="aligncenter size-full wp-image-446" title="El Guille en Barcelona 2008" src="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille5.jpg" alt="" width="350" height="263" /></a></p>
<p>Durante casi exactamente dos horas, los asistentes al evento disfrutamos de las habilidades comunicativas y la sabiduría del conferencista. Con un lenguaje claro, directo y sencillo, fue exponiendo los fundamentos de los nuevos recursos de VB 9.0, a la vez que respondía las preguntas del público. Finalmente dió paso a su compañero David Salgado, con quien había bromeado en varias ocasiones sobre la clásica disputa de Visual Basic.NET vs C#.</p>
<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille2.jpg"><img class="aligncenter size-full wp-image-447" title="El Guille en Barcelona 2008" src="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille2.jpg" alt="" width="350" height="303" /></a></p>
<p>A diferencia del Guille, David no trajo una presentación de PowerPoint. Prefirió ir armándola en vivo mientras explicaba los conceptos, a partir de los intereses manifestados por los participantes. Comenzó hablando de la capacidad de <em>multitargeting</em> del Visual Studio 2008. O sea, ahora Ud. puede decidir para qué versión de la plataforma quiere compilar su proyecto: 2.0 o 3.5. Si aún trabaja con proyectos de la versión 2.0, puede resultarle útil hacerlo con Visual Studio 2008, y sacarle provecho a las nuevas funcionalidades del entorno que aumentan la productividad. Por ejemplo, si desarrolla un proyecto de ASP.NET ahora puede beneficiarse del <a title="Vídeo que muestra la nueva funcionalidad de IntelliSense para JavaScript en Visual Studio 2008" href="http://msdn.microsoft.com/es-es/vs2005/bb821303(en-us).aspx" target="_blank"><em>IntelliSense</em> cuando escriba código JavaScript</a>.</p>
<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2008/10/david1.jpg"><img class="aligncenter size-full wp-image-448" title="David Salgado en Barcelona 2008" src="http://www.hinojosachapel.com/wp-content/uploads/2008/10/david1.jpg" alt="" width="350" height="287" /></a></p>
<p>David explicó el <a title=".NET Framework Client Profile" href="http://msdn.microsoft.com/es-es/library/cc656912.aspx" target="_blank"><em>Client Profile</em></a>, un subconjunto de la versión completa de <a title="Visual Studio 2008 Service Pack 1 and .NET Framework 3.5 Service Pack 1" href="http://msdn.microsoft.com/es-es/vstudio/products/cc533447(en-us).aspx" target="_blank">.NET Framework 3.5 SP1 </a>destinado a las aplicaciones cliente que proporciona un subconjunto simplificado de las características de WPF, Windows Forms, WCF y ClickOnce. Hizo énfasis en las ventajas de <a title="ASP.NET MVC: Creación de aplicaciones web sin formularios Web Forms" href="http://msdn.microsoft.com/es-es/magazine/cc337884.aspx" target="_blank">ASP.NET MVC</a>, fundamentalmente para equipos de desarrollo grandes. Ejemplificó la utilidad de <a title="Datos 2.0: Exponer y consumir datos en un mundo de servicios web" href="http://msdn.microsoft.com/es-es/magazine/cc748663.aspx" target="_blank">ADO.NET Data Services</a> y de <a title="Utilizar datos dinámicos de ASP.NET" href="http://msdn.microsoft.com/es-es/library/cc488545.aspx">ASP.NET Dynamic Data</a>. Esta última tecnología permite generar un completo sitio web de mantenimiento de una base de datos. Hasta ahora el sitio web de mantenimiento lo hacíamos &#8220;a mano&#8221;, o utilizábamos una herramienta como <a title="El sitio web oficial de Iron Speed" href="http://www.ironspeed.com/" target="_blank">Iron Speed</a>. En <a title="Your First Scaffold and What is Dynamic Data?" href="http://www.asp.net/learn/3.5-sp1/video-289.aspx" target="_blank">ASP.NET </a> puedes ver un <a title="Your First Scaffold and What is Dynamic Data?" href="http://www.asp.net/learn/3.5-sp1/video-289.aspx" target="_blank">vídeo</a> que explica cómo generar el sitio (en Inglés).</p>
<p style="text-align: center;"><a href="http://www.hinojosachapel.com/wp-content/uploads/2008/10/david21.jpg"><img class="aligncenter size-full wp-image-449" title="David Salgado en Barcelona 2008" src="http://www.hinojosachapel.com/wp-content/uploads/2008/10/david21.jpg" alt="" width="350" height="253" /></a></p>
<p>Respecto a la <a title="Internet Explorer 8" href="http://www.microsoft.com/spain/windows/internet-explorer/beta/welcome/tour.html" target="_blank">próxima versión de Internet Explorer</a>, David no ahorró elogios. Destacó la fidelidad a los estándares del nuevo IE8, el cuidado de la privacidad mientras navegamos (<em><a title="Browse privately" href="http://www.microsoft.com/windows/internet-explorer/beta/features/browse-privately.aspx" target="_blank">InPrivacy Browsing</a></em>), mayor seguridad y privacidad al evitar que sitios de terceros realicen un perfil de nuestros hábitos (<em><a title="InPrivate Blocking" href="http://www.microsoft.com/windows/internet-explorer/beta/features/browse-privately.aspx?tabid=2&amp;catid=1" target="_blank">InPrivacy Blocking</a></em>), nuevos mecanismos que facilitan la ejecución de tareas asociadas a las páginas (<a title="Acelerators" href="http://www.microsoft.com/windows/internet-explorer/beta/features/accelerators.aspx" target="_blank"><em>Accelerators</em></a><em>, </em>antes conocidos como <em>Activities</em>), mejoras en el rendimiento de JavaScript, herramientas integradas para desarrolladores&#8230;</p>
<p>Como siempre sucede, el tiempo no alcanza para ver todo lo que se podría ver. Microsoft se ha encargado en los últimos años de atiborrarnos de nuevas tecnologías, y resulta un poco difícil seguirle el ritmo. Sin embargo, hay que decir que también ha realizado un gran trabajo para poner a disposición de la comunidad un sinfín de recursos para el aprendizaje de estas nuevas tecnologías, que evolucionan a una velocidad de vértigo. Y eventos como el <a title="El cartel del evento" href="http://www.hinojosachapel.com/wp-content/uploads/2008/10/guille_community_tour_2008.png"><em>Guille Community Tour 2008</em> </a>forman parte de sus líneas de actuación. Muchas gracias, Guille y David, por ayudarnos a transitar el infinito camito del conocimiento.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinojosachapel.com/2008/10/guille-community-tour-2008-en-barcelona.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
