<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">.NET o no .NET, esa es la cuestión</title><subtitle type="html">Artículos, comentarios, noticias e ideas sobre la programción .NET y nativa, generalmente sobre C++ y C++/CLI, aunque siempre habrá un poco de todo.</subtitle><id>http://geeks.ms/blogs/rfog/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.ms/blogs/rfog/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.ms/blogs/rfog/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2011-07-23T17:19:05Z</updated><entry><title>"Vivo o muerto" y el C++</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2012/01/09/quot-vivo-o-muerto-quot-y-el-c.aspx" /><id>/blogs/rfog/archive/2012/01/09/quot-vivo-o-muerto-quot-y-el-c.aspx</id><published>2012-01-09T11:40:30Z</published><updated>2012-01-09T11:40:30Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Llevo bastante tiempo sin leer novedades literarias, y menos aún las de esta clase: &lt;em&gt;Vivo o muerto&lt;/em&gt;, Tom Clancy y Grant Blackwood. Y suena a lo que es: un bestseller que aprovecha el tirón del 11S y que forma parte de la serie Jack Ryan del autor. Para los que no saben de qué va, estos libros son novelas de entretenimiento en los que el personaje Jack Ryan, primero analista de la CIA y luego más cosas, termina en medio de los berenjenales más típicos de este tipo de obras: terrorismo, espionaje, etc.. Las novelas estarían mejor si no tuvieran ese pro-USA tan acérrimo. Pero bueno, es lo que hay.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Si os preguntáis qué hace una entrada como esta en un blog como este, os lo diré: id a la página 168 de la edición de Umbriel de 2011 (la única por ahora) y leed conmigo:&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;min-height:17.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;“Y aunque hubieran examinado aquél [un CD grabado], no habrían visto más que un galimatías incomprensible: datos sólidamente cifrados en lenguaje de programación C++, carentes por completo de sentido.”&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;min-height:17.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Sí, yo también me he asustado, y no poco. Vale, es una pifia del traductor, ¿no? Pues no, en el original pone:&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;min-height:17.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;“Even if that one had been examined, it would have been shown to contain gibberish, robustly encrypted data written in C++ computer code that made no sense at all,”&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;min-height:17.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Bueno, pues ya lo sabéis, chicos, el C++ también sirve para encriptar datos. Ya sé que el &lt;em&gt;obfuscated code&lt;/em&gt; puede ser difícil de entender, pero tanto como para incluir elementos encriptados en su código…&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Desde luego hay quien oye campanas y se imagina belenes.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;En fin.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202664" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="c++" scheme="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B00_/default.aspx" /><category term="chapuzas" scheme="http://geeks.ms/blogs/rfog/archive/tags/chapuzas/default.aspx" /><category term="humor" scheme="http://geeks.ms/blogs/rfog/archive/tags/humor/default.aspx" /><category term="criptografía y criptología" scheme="http://geeks.ms/blogs/rfog/archive/tags/criptograf_ED00_a+y+criptolog_ED00_a/default.aspx" /><category term="criptograf&amp;#237;a y criptolog&amp;#237;a" scheme="http://geeks.ms/blogs/rfog/archive/tags/criptograf_26002300_237_3B00_a+y+criptolog_26002300_237_3B00_a/default.aspx" /></entry><entry><title>RAD Studio XE2: ¿Pruebas de integración? ¿Para qué?</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/11/29/rad-studio-xe2-191-pruebas-de-integraci-243-n-191-para-qu-233.aspx" /><id>/blogs/rfog/archive/2011/11/29/rad-studio-xe2-191-pruebas-de-integraci-243-n-191-para-qu-233.aspx</id><published>2011-11-29T11:12:24Z</published><updated>2011-11-29T11:12:24Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Ya las hará el cliente y protestará. En el caso de que tengamos ganas, le ayudaremos. Si no, que se joda.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Esa parece ser la filosofía de Embarcadero para su producto RAD Studio XE2. Para hacernos una idea, lo que ahora trae el XE2 es lo que debería haber traído el XE original, pero ya sabemos, después de varios (muchos) años intentando convertir a la VCL en multiplataforma, llegan, compran un producto cualquiera, y en menos de seis meses lo integran en su RAD Studio, sustituyendo a la vetusta VCL que, por cierto, dio nacimiento a .NET cuando Microsoft se llevó a Anders de Borland.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;El sistema de desarrollo es un tanto churrimangui, aunque parece ser que funciona. La idea es tener una máquina Windows con RAD Studio instalado. Puede ser una máquina virtual corriendo dentro de OS X, pero tened mucho cuidado con la compartición de perfiles y demás: en un tris tenéis que volver a activar, porque una de las cosas que mira el entorno para detectar que no lo han &lt;em&gt;tocado&lt;/em&gt; es el nombre del equipo en la red. En fin.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Luego instalas un servidor en OS X, lo que, junto a un debugger de plataforma cruzada, puedes editar y compilar en la máquina Windows y ejecutar y depurar en el MAC. Digo churrimangui porque no es a lo que nos tiene habituados Borland, digo Embarcadero. Encima todo el tema al lado del MAC es por línea de comandos. Cualquier programador de hardware, o ya puestos de teléfonos y similares, verá el paralelismo evidente.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Pero bueno, no es de eso de lo que quiero hablar aquí. Hasta el 32 de diciembre del 2011, hay una oferta que si compras alguna versión del producto, te regalan otros. A veces ha sido comprar C++ Builder (o Delphi) y obtener el otro gratis. La de este año consiste en que te regalan más componentes y otros programas de la casa.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Uno de los productos es FastCube, componentes que te ayudan al análisis de datos. En mi caso no creo que me hagan falta, pero podría ser interesante para aquellos que hagan programas de gestión y tengan que presentar datos analizados.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Pues bien, las pruebas de integración de este producto con RAD Studio no se han hecho. No porque si instalas el componente, el producto deja de funcionar. No se trata de algunas configuraciones en concreto, ni que ocurra en ciertas máquinas: pasa siempre.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Si uno se pone a buscar en internet el error que da C++ Builder (que es el que falla, Delphi funciona bien), no encuentras absolutamente nada sobre el tema. Aplicando un poco de lógica, podemos llegar a varias posibles conclusiones:&lt;/p&gt;
&lt;ul style="list-style-type:disc;"&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;font:14.0px Cochin;"&gt;Nadie está usando C++ Builder, o si lo está, no ha instalado dichos componentes.&lt;/li&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;font:14.0px Cochin;"&gt;Desde que han sacado la oferta, no han vendido ni una sola copia de C++ Builder o de RAD Studio.&lt;/li&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;font:14.0px Cochin;"&gt;Nadie está usando el producto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Os dejo con la reflexión antes de pasar a la solución.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;El problema se genera cuando la instalación del producto (que no es de Embarcadero, pero deberían haber hecho el test de integración antes de ponerlo a disposición de la gente tan alegremente) estropea por completo las rutas por defecto del compilador. Es decir, si abrimos el IDE (ya sea la versión completa de RAD Studio o personalidad de C++Builder), y nos vamos a Tools -&amp;gt; Options -&amp;gt; C++ Options -&amp;gt; Paths and Directories, las rutas de &lt;em&gt;Include Path&lt;/em&gt; y de &lt;em&gt;Library Path&lt;/em&gt; quedan completamente inutilizadas porque FastCube, en su soberana sabiduría, ha decidido que nadie más que él debe estar ahí.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Desinstalar el producto no soluciona nada, porque dichas rutas se quedan sin restaurar.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Por lo tanto, la solución pasa por volver a colocar allí dichas rutas. En mi caso son:&lt;/p&gt;
&lt;ul style="list-style-type:disc;"&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;font:14.0px Cochin;"&gt;&lt;strong&gt;Include:&lt;/strong&gt; $(CG_BOOST_ROOT)\boost\tr1\tr1;$(CG_BOOST_ROOT);$(BDSINCLUDE);$(BDSINCLUDE)\dinkumware;$(BDSINCLUDE)\windows\crtl;$(BDSINCLUDE)\windows\sdk;$(BDSINCLUDE)\windows\rtl;$(BDSINCLUDE)\windows\vcl;C:\Program Files (x86)\FastReports\LibD16;$(BDS)\RaveReports\Lib;C:\Program Files (x86)\Raize\CS5\Lib\RS-XE2\Win32&lt;/li&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;font:14.0px Cochin;"&gt;&lt;strong&gt;Lib:&lt;/strong&gt; $(BDSLIB)\win32\release;$(BDSLIB)\win32\release\psdk;C:\Program Files (x86)\FastReports\LibD16;$(BDS)\RaveReports\Lib;C:\Program Files (x86)\Raize\CS5\Lib\RS-XE2\Win32&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;No te garantizo que la instalación haya tocado otras cosas, pero en mi caso, con volver a colocar ahí dichas cadenas, se soluciona el tema.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Por lo tanto, otro coscorrón más para Embarcadero. Y ya os diré cómo funciona el producto, porque voy a usarlo para un proyecto personal.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;min-height:17.0px;"&gt; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201925" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="windows" scheme="http://geeks.ms/blogs/rfog/archive/tags/windows/default.aspx" /><category term="bugs" scheme="http://geeks.ms/blogs/rfog/archive/tags/bugs/default.aspx" /><category term="C++ Builder" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B00_+Builder/default.aspx" /><category term="MAC" scheme="http://geeks.ms/blogs/rfog/archive/tags/MAC/default.aspx" /></entry><entry><title>Win/MAC: arranque dual y jodimiento de particiones</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/11/19/win-mac-arranque-dual-y-jodimiento-de-particiones.aspx" /><id>/blogs/rfog/archive/2011/11/19/win-mac-arranque-dual-y-jodimiento-de-particiones.aspx</id><published>2011-11-19T12:14:42Z</published><updated>2011-11-19T12:14:42Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Os lo juro. Estoy hasta los putísimos cojones de Windows, de MAC y de la madre que los parió a todos. El primero por pensarse que todo le pertenece, incluyendo las particiones  HFS+, y el segundo por pensar que todos los usuarios son tontos del culo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;No tengo muchas ganas de escribir, así que voy a ser bastante escueto.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Escenario: Windows/MAC con Boot Camp y arranque dual. Como Windows asigna las unidades como le sale de los cojones, entro en el Administrador de Discos y las cambio a los valores que quiero.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Vale, todo bien en Windows. Inicio OS X y… una de las tres particiones no se carga. Es decir, habiendo cambiado la letra de unidad a &lt;strong&gt;dos&lt;/strong&gt; particiones HFS+ desde Windows, &lt;strong&gt;una&lt;/strong&gt; de ellas luego no se carga desde OS X porque Windows, en su maravilloso afán de poseerlo todo, ha decidido cambiar cierta cadena de las tablas internas del disco por “&lt;span style="color:#29303b;"&gt;Microsoft Basic Data”. Hay que joderse con tomate. ¿No saben reconocer una partición ajena y no tocar nada? Pues parece ser que no, que tienen ganas de joder la marrana.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Bueno, la Utilidad de Discos de OS X se ve incapaz de recuperar la partición. Hala, nueva pérdida de datos. Cuatro máquinas virtuales y un montón de descargas.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Pues no, hay solución. Está &lt;a href="http://steelpangolin.wordpress.com/2009/03/15/invalid-bs_jmpboot-in-boot-block-000000/"&gt;aquí&lt;/a&gt;. Otro &lt;em&gt;geek&lt;/em&gt; de la más alta alcurnia se ha encontrado con el mismo problema y ha creado una aplicación en Python para solucionar el problema. Lo único que hace es cambiar dicha cadena por su valor por defecto. Y entonces OS X reconoce la partición como suya y la monta.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Olé sus cojones.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Os cuento cómo hacerlo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Desmonta el disco completo en donde esté la partición afectada. Luego graba el fichero &lt;a href="http://bat-country.us/code/GPTools/trunk/gpt_surgeon.py?view=markup"&gt;&lt;em&gt;gpt_surgeon.py&lt;/em&gt;&lt;/a&gt; en disco (ojo con grabar el html y no el contenido del mismo). Aquí viene cuando Apple piensa que somos imbéciles o así. Tu grabas un archivo, que te lo pone como texto de lectura escritura. Pero tu lo quieres de ejecución, porque si no ya puedes darle de sopapos porque se negará a correr.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Hay que añadir el bit de ejecución. ¿Cómo? Ahí está el problema. Desde la interfaz gráfica no se puede, porque CMD-I sólo te dejar cambiar entre lectura y escritura, pero no ejecución.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Quizás haya algún botón por algún lado para activarlo, pero no lo he encontrado, así que tienes que abrir una ventana de terminal y cambiarlo &lt;em&gt;ala &lt;/em&gt;UNIX: &lt;strong&gt;“chmod u+x gpt_surgeon.py”&lt;/strong&gt;. Claro, puede que algún imbécil siga la secuencia desde el Finder y sea capaz de cambiarle los permisos a un troyano. En fin, viva la ergonomía y usabilidad maqueras.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Luego sigues la secuencia explicada en el enlace de arriba:&lt;/p&gt;
&lt;ul style="list-style-type:disc;"&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;font:14.0px Cochin;color:#29303b;"&gt;./gpt_surgeon.py list /dev/disk&amp;lt;n&amp;gt;, en donde &amp;lt;n&amp;gt; es el disco &lt;em&gt;malo&lt;/em&gt;.&lt;/li&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;font:14.0px Cochin;color:#29303b;"&gt;Localiza la partición jodida, en la que debe aparecer el infame texto de “Microsoft Basic Data”.&lt;/li&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;font:14.0px Cochin;color:#29303b;"&gt;sudo ./gpt_surgeon.py repair /dev/disk&amp;lt;n&amp;gt; &amp;lt;y&amp;gt;, en donde &amp;lt;y&amp;gt; es la partición rota. &lt;/li&gt;
&lt;li style="margin:0.0px 0.0px 0.0px 0.0px;font:14.0px Cochin;color:#29303b;"&gt;Al poco, OS X (o el script) montará todas las unidades, habiendo reparado la estropeada.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;color:#29303b;"&gt;Y ya está, esta ha sido la crónica del día de hoy. Cagontó…&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Cochin;color:#29303b;min-height:14.0px;"&gt; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201768" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="windows" scheme="http://geeks.ms/blogs/rfog/archive/tags/windows/default.aspx" /><category term="chapuzas" scheme="http://geeks.ms/blogs/rfog/archive/tags/chapuzas/default.aspx" /><category term="bugs" scheme="http://geeks.ms/blogs/rfog/archive/tags/bugs/default.aspx" /><category term="tips" scheme="http://geeks.ms/blogs/rfog/archive/tags/tips/default.aspx" /><category term="MAC" scheme="http://geeks.ms/blogs/rfog/archive/tags/MAC/default.aspx" /><category term="Apple" scheme="http://geeks.ms/blogs/rfog/archive/tags/Apple/default.aspx" /><category term="Interoperabilidad" scheme="http://geeks.ms/blogs/rfog/archive/tags/Interoperabilidad/default.aspx" /></entry><entry><title>C++/CX (II). C++/CX vs WRL</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/11/04/c-cx-ii-c-cx-vs-wrl.aspx" /><id>/blogs/rfog/archive/2011/11/04/c-cx-ii-c-cx-vs-wrl.aspx</id><published>2011-11-04T19:13:32Z</published><updated>2011-11-04T19:13:32Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Bueno, una vez que hemos visto lo que hay &lt;a href="http://geeks.ms/blogs/rfog/archive/2011/10/31/c-cx-windows-8-y-el-nuevo-subsistema-winrt-i.aspx"&gt;dentro del nuevo Windows 8&lt;/a&gt;, y comprobado que WinRT &lt;a href="http://geeks.ms/blogs/rfog/archive/2011/11/02/191-winrt-un-subsistema-no-no-lo-es.aspx"&gt;no es un subsistema&lt;/a&gt; sino algo por encima de Win32 como es .NET, vamos a contaros las dos formas que hay de programar con C++ para la interfaz Metro.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Ya lo he comentado antes, pero voy a repetirlo aquí por mor de claridad. En Windows 8 hay dos escritorios diferentes. Por un lado tenemos el clásico de toda la vida que es prácticamente idéntico al de Windows 7, y por otro el de la interfaz Metro. Si no cambian las cosas, los equipos que lleven un procesador x86 tendrán acceso indistinto a los dos, mientras que aquellos que lleven procesador ARM sólo verán la interfaz Metro.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Eso quiere decir que habrá dos tipos de aplicaciones: las clásicas y las Metro. Las primeras sólo podrán compilarse para x86 (de 32 o de 64 bits) y sólo funcionarán en las máquinas Intel. Si estamos en la interfaz Metro y lanzamos una aplicación de este tipo, el sistema cambiará al escritorio clásico.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Las segundas podrán compilarse para x86 o para ARM y en ambos casos funcionarán en sus propios sistemas, pero siempre bajo la interfaz Metro. Es decir, si queremos que nuestra aplicación Metro escrita con código nativo pueda correr en los dos tipos de arquitectura, tendremos que proveer dos compilaciones.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Con .NET (C# y &lt;a href="http://VB.NET"&gt;VB.NET&lt;/a&gt;) viene a pasar lo mismo, aunque en este caso creo que con especificar AnyCPU será suficiente para que la aplicación corra en ambas arquitecturas. Y de nuevo tendremos los dos tipos de aplicaciones: de escritorio y Metro, con las mismas reglas.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Por lo tanto, cualquier programa escrito en cualquier lenguaje que funcione ahora mismo en Windows 7, no debe tener ningún problema en ejecutarse en la siguiente versión, pero siempre en el escritorio clásico. Y podremos seguir escribiéndolos como hasta ahora.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Eso quiere decir que tenemos dos API diferentes e incompatibles entre sí. Por un lado tenemos el API de Win32 clásico y tradicional, sobre el que se construyen bibliotecas de terceros y el .NET. Aquí podemos meter VB6, Delphi, C#, C++/CLI, QT… Vamos, lo que hasta ahora.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Y para Metro hay una nueva API que se llama WinRT. Creo que hay cosas compartidas con Win32, pero no me hagáis mucho caso porque todavía no he visto nada. De todos modos si las hubiera, podemos tomarlas como si fueran nuevas, porque son excluyentes, al menos de momento.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Es decir, o bien desarrollas para Win32 o bien para WinRT, pero no puedes tener un ejecutable que use partes del otro más allá de las que MS ha querido compartir, y entre ellas no se encuentra C++/CX.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Por lo tanto también hay dos versiones de .NET. La de la interfaz Metro se construye sobre WinRT, y la clásica sobre Win32. Nos podemos hacer a la idea de que, aunque tengamos un API con nombres similares, por dentro funciona todo diferente (lo que no es cierto, pero a efectos prácticos sí que lo es, ya que las aplicaciones Metro deberán ir firmadas y el proceso de firmado garantiza que no vas a salirte de las API estándar -¿De qué me sonará eso?).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;No obstante, WinRT no está escrito con C++/CX si no que está hecho con C++ clásico. Y en cierto modo es lógico, ya que no es más que una extensión a Win32, que es C y C++. Además, independientemente de mis diatribas personales, es algo bueno que le añada funcionalidad a un API que lleva tanto tiempo funcionando con regularidad y sin grandes problemas. Imaginaos los bugs que podría tener algo escrito desde cero.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Por lo tanto, podemos desarrollar aplicaciones para Metro sin usar .NET ni C++/CX. Podemos utilizar C++ y una biblioteca de plantillas llamada WRL (Windows Runtime Library), que viene a ser algo así como el ATL de Metro.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Microsoft no recomienda usarla, más que nada porque es compleja y porque de momento no hay documentación alguna sobre ella, pero está ahí, y es la base de Metro.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Si queremos echarle un vistazo, podemos acercarnos a “Program Files (x86)\Windows Kits\8.0\Include\winrt\wrl” y ver qué hay dentro. Tomaos un par de aspirinas antes.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Básicamente se trata de toda la infraestructura y parafernalia para acceder a los objetos COM y componentes de Metro.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;C++/CX ocupa el nicho de lenguaje nativo para Metro, con lo que es más rápido que C# y que &lt;a href="http://VB.NET"&gt;VB.NET&lt;/a&gt;, y es con el único con el que se puede acceder a DirectX (y por tanto a la creación de juegos). También es nativo. Es decir, que no es .NET y compila al código máquina que todos conocemos y de hecho es idéntico al C++ de toda la vida.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Lo que ocurre es que contiene una serie de extensiones que nos van a facilitar la vida a la hora de operar con Metro y sus componentes. Soporta clases parciales, se entiende bien con XAML e instanciar o crear un componente COM es un juego de niños comparado a como se hace con Win32.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Digamos que con esas extensiones nos ahorramos una buena faena a la hora de programar, y será el compilador el que sustituya esa &lt;em&gt;azúcar sintáctica&lt;/em&gt; por el código necesario.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;En siguientes entradas os contaré más sobre C++/CX.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201533" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="Sistemas Operativos" scheme="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx" /><category term="rationale" scheme="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2300_/default.aspx" /><category term="lenguajes" scheme="http://geeks.ms/blogs/rfog/archive/tags/lenguajes/default.aspx" /><category term="Interoperabilidad" scheme="http://geeks.ms/blogs/rfog/archive/tags/Interoperabilidad/default.aspx" /><category term="C++/CX" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B002F00_CX/default.aspx" /></entry><entry><title>¿WinRT un subsistema? No, no lo es</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/11/02/191-winrt-un-subsistema-no-no-lo-es.aspx" /><id>/blogs/rfog/archive/2011/11/02/191-winrt-un-subsistema-no-no-lo-es.aspx</id><published>2011-11-02T16:41:00Z</published><updated>2011-11-02T16:41:00Z</updated><content type="html">&lt;p&gt;Bueno, al final no ha costado mucho encontrarlo. B&amp;aacute;sicamente, el resultado de esta investigaci&amp;oacute;n es:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_4ACD74FC.png"&gt;&lt;img height="138" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_thumb_5F00_08EBB110.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O con otras palabras: WinRT y Metro se ejecutan, como todo lo dem&amp;aacute;s, sobre Win32, con las ventajas y los inconvenientes que eso pueda tener. No me malinterpret&amp;eacute;is: no hay nada malo que la arquitectura sea diferente a la indicada en el gr&amp;aacute;fico de arriba, lo que est&amp;aacute; mal es que Microsoft nos mienta tan descaradamente. Simplemente eso.&lt;/p&gt;
&lt;p&gt;Si lo han hecho as&amp;iacute;, por algo ser&amp;aacute; y sus motivos tendr&amp;aacute;n, y es entonces cuando, ya definitivamente, yo ten&amp;iacute;a raz&amp;oacute;n: Windows ya no es Windows NT, y su grandiosa arquitectura por bloques se ha perdido en el camino. Y esto s&amp;iacute; que es malo, bastante malo, porque estamos volviendo a un batiburrillo de c&amp;oacute;digo como es, por cierto, el OS X (quiz&amp;aacute;s alg&amp;uacute;n d&amp;iacute;a hable de ello).&lt;/p&gt;
&lt;p&gt;Vosotros mismos pod&amp;eacute;is comprobarlo sin problema alguno y de forma muy r&amp;aacute;pida. Ten&amp;eacute;is que construir dos aplicaciones, una WinRT en C++/CX y otra cl&amp;aacute;sica de Win32. No hay m&amp;aacute;s que utilizar las plantillas por defecto sin ning&amp;uacute;n cambio.&lt;/p&gt;
&lt;p&gt;Eso s&amp;iacute;, hay que hacerlo a partir de la versi&amp;oacute;n Developer de 64 bits de Windows 8, e instalar una versi&amp;oacute;n de la MSDN, porque la Express creo que no es capaz de generar programas Win32 puros.&lt;/p&gt;
&lt;p&gt;He llamado &amp;ldquo;TestWin32&amp;rdquo; a mi aplicaci&amp;oacute;n tradicional, que genera una ventana de Windows normal y corriente utilizando directamente el API de Win32. A la Metro la he llamado &amp;ldquo;TestSplitApplication&amp;rdquo;. Una vez generadas, tenemos que compilarlas. Visual Studio se os quedar&amp;aacute; m&amp;aacute;s o menos as&amp;iacute;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_33C6A5D3.png"&gt;&lt;img height="161" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_thumb_5F00_55B49908.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si ahora nos vamos a la carpeta en donde est&amp;aacute; almacenado el proyecto (que podemos hacer desde el mismo IDE posicion&amp;aacute;ndonos en el nombre de la soluci&amp;oacute;n en el Explorador y elegimos &lt;i&gt;Open Folder in Windows Explorer&lt;/i&gt;), carpeta &lt;i&gt;Debug&lt;/i&gt;, encontraremos el ejecutable del programa nativo (&lt;i&gt;TestWin32.exe&lt;/i&gt;) y dentro de la carpeta &lt;i&gt;TestSplitApplication&lt;/i&gt;, el de la aplicaci&amp;oacute;n Metro.&lt;/p&gt;
&lt;p&gt;(Por cierto, en uno de esos lapsus teclae tan habituales en mi, le he dado el nombre de &amp;ldquo;TestSplitApplicarion&amp;rdquo; en lugar del correcto.)&lt;/p&gt;
&lt;p&gt;Ahora debemos conseguir el &lt;a href="http://www.dependencywalker.com/"&gt;&lt;i&gt;Dependency Walker&lt;/i&gt;&lt;/a&gt;, aunque existen otras herramientas de l&amp;iacute;nea de comandos que nos permiten hacer lo mismo dentro del SDK, lo interesante es utilizar esta porque lo veremos todo de un golpe. El mayor problema es que se trata de una utilidad que hace tiempo que no se incluye en ning&amp;uacute;n SDK, por lo que hay que conseguirla de &lt;a href="http://www.dependencywalker.com/"&gt;forma externa&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Una vez obtenida la versi&amp;oacute;n de 32 bits, porque nuestros proyectos son de dicho tipo, la ejecutamos sobre cada uno de los dos programas. Este es el resultado:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_7E53050F.png"&gt;&lt;img height="161" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_thumb_5F00_19B00966.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;iquest;Lo veis? Ambos programas importan las mismas DLL, las de Win32 como KERNEL32.DLL y USER32.DLL.&lt;/p&gt;
&lt;p&gt;Es decir que ambos son aplicaciones Win32 nativas.&lt;/p&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;p&gt;Si nos diera por abrir, por ejemplo, uno de los dos KERNEL32.DLL, ver&amp;iacute;amos que ambas DLL son la misma con las mismas dependencias y exportaciones. Por lo tanto, ambas aplicaciones dependen del mismo subsistema.&lt;/p&gt;
&lt;p&gt;Reitero que es una tonter&amp;iacute;a, pero no lo es cuando intentan enga&amp;ntilde;arte.&lt;/p&gt;
&lt;p&gt;Lo que s&amp;iacute; parece han hecho ha sido &lt;i&gt;romper&lt;/i&gt; KERNEL32.DLL en otros ficheros m&amp;aacute;s peque&amp;ntilde;os que contemplan subconjuntos de lo que en versiones anteriores hab&amp;iacute;a en &amp;eacute;l. Quiz&amp;aacute;s de esta forma reduzcan la huella de memoria evitando cargar sub ficheros cuando estos no se vayan a utilizar.&lt;/p&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;p&gt;Esto nos lleva a un tercer problema: parecer ser que una aplicaci&amp;oacute;n Metro no puede ejecutar funciones de Win32, y una de Win32 tampoco de WinRT.&lt;/p&gt;
&lt;p&gt;&amp;iexcl;&amp;iexcl;Pero si es el mismo subsistema!!&lt;/p&gt;
&lt;p&gt;Pues bien, estamos ante una limitaci&amp;oacute;n artificialmente impuesta por Microsoft sin ning&amp;uacute;n motivo t&amp;eacute;cnico aparente&amp;hellip; con lo guapo que ser&amp;iacute;a hacer aplicaciones Win32 con C++/CX&amp;hellip;&lt;/p&gt;
&lt;p&gt;Se me ocurren un par de trucos para poder forzar esto, pero no creo que valga la pena hacerlo en una versi&amp;oacute;n tan temprana como esta. Quiz&amp;aacute;s cuando salga la definitiva, si tengo ganas y si nadie m&amp;aacute;s se me adelanta, lo intente.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201435" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="Sistemas Operativos" scheme="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx" /><category term="windows" scheme="http://geeks.ms/blogs/rfog/archive/tags/windows/default.aspx" /><category term="Visual Studio" scheme="http://geeks.ms/blogs/rfog/archive/tags/Visual+Studio/default.aspx" /><category term="rationale" scheme="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx" /><category term="Win32" scheme="http://geeks.ms/blogs/rfog/archive/tags/Win32/default.aspx" /><category term="Biblioteca de C++" scheme="http://geeks.ms/blogs/rfog/archive/tags/Biblioteca+de+C_2B002B00_/default.aspx" /><category term="Interoperabilidad" scheme="http://geeks.ms/blogs/rfog/archive/tags/Interoperabilidad/default.aspx" /><category term="C++/CX" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B002F00_CX/default.aspx" /></entry><entry><title>C++/CX  (I). Windows 8 y el nuevo subsistema WinRT</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/10/31/c-cx-windows-8-y-el-nuevo-subsistema-winrt-i.aspx" /><id>/blogs/rfog/archive/2011/10/31/c-cx-windows-8-y-el-nuevo-subsistema-winrt-i.aspx</id><published>2011-10-31T14:34:00Z</published><updated>2011-10-31T14:34:00Z</updated><content type="html">&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_47C30F25.png"&gt;&lt;img height="137" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_thumb_5F00_6774799E.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Observad con detalle la imagen de arriba. Fijaos en que est&amp;aacute; dividida en dos grandes bloques. A poco que os haya preocupado la arquitectura l&amp;oacute;gica de Windows, os dar&amp;eacute;is cuenta de que hay nueva chica en la oficina: WinRT. &lt;/p&gt;
&lt;p&gt;Ya habl&amp;eacute; de algo as&amp;iacute; &lt;a href="http://geeks.ms/blogs/rfog/archive/2011/03/19/mac-rationale-vs-windows-rationale-en-el-desarrollo.aspx"&gt;aqu&amp;iacute;&lt;/a&gt;, pero en relaci&amp;oacute;n con la arquitectura de Apple comparada con la de Windows, y de los &amp;uacute;ltimos cambios que Microsoft ha ido haciendo para adecuar su plataforma NT para que sea funcional y &amp;uacute;til para el usuario medio, dejando un poco de lado la arquitectura tradicional.&lt;/p&gt;
&lt;p&gt;Pues bien, parece ser que me tengo que comer mis palabras con patatas (no, no &lt;i&gt;esas patatas&lt;/i&gt;, Z). Volviendo al gr&amp;aacute;fico anterior, WinRT es un nuevo subsistema igual que lo es Win32. Para aquellos que no tengan claro qu&amp;eacute; es, os cuento un poco la arquitectura te&amp;oacute;rica de Windows NT.&lt;/p&gt;
&lt;p&gt;El sistema operativo cuenta con un kernel (s&amp;iacute;, como el de Linux, pero con muchas m&amp;aacute;s cosas dentro de &amp;eacute;l y mucho m&amp;aacute;s din&amp;aacute;mico), que en teor&amp;iacute;a se asienta sobre una capa HAL que abstrae a dicho n&amp;uacute;cleo de la arquitectura f&amp;iacute;sica. En su momento hubo HAL para ARM y para otras plataformas. En la actualidad s&amp;oacute;lo la hay para x86, tanto en versi&amp;oacute;n de 32 como de 64 bits.&lt;/p&gt;
&lt;p&gt;O eso cre&amp;iacute;a tras haber hecho un somero an&amp;aacute;lisis de las tripas de Windows 7. Pues bien, si Microsoft a&amp;ntilde;ade soporte para ARM (y recordemos que van a salir procesadores de este tipo de 64 bits), dicha capa debe ser o bien reimplementada o bien ya exist&amp;iacute;a y simplemente estaba inactiva. O lo que me parece m&amp;aacute;s l&amp;oacute;gico: recompilar todo el sistema operativo para que se ejecute en dicha arquitectura, cambiando lo que haya que cambiar, dado que eso de traducir cualquier otro procesador a x86, sobre todo desde un ARM, suena a fantas&amp;iacute;a animada de ayer y de hoy.&lt;/p&gt;
&lt;p&gt;Por otro lado, Windows se mueve mediante subsistemas. Uno de ellos es Win32. Otro lo fue OS/2 y tambi&amp;eacute;n Posix (s&amp;iacute;, en un pasado lejano, Windows NT era capaz de ejecutar comandos de unix con las primitivas de desarrollo que tiene la parte est&amp;aacute;ndar Posix de Unix). Es decir, un subsistema suministra cierta abstracci&amp;oacute;n sobre el n&amp;uacute;cleo, proporcionando un API mucho m&amp;aacute;s rico y potente. Y de paso lo a&amp;iacute;sla para que las aplicaciones sean incapaces de tumbarlo.&lt;/p&gt;
&lt;p&gt;En otras palabras, Win32 se ejecuta en el anillo 3 y el n&amp;uacute;cleo en el cero, y es Win32 el que, cuando una aplicaci&amp;oacute;n pide alg&amp;uacute;n recursos del sistema (por ejemplo un puerto serie), el que se encarga de mover la petici&amp;oacute;n y de realizar tareas intermedias, evitando as&amp;iacute; que un mal uso por parte de una aplicaci&amp;oacute;n genere una pantalla azul. &lt;/p&gt;
&lt;p&gt;Digamos que una aplicaci&amp;oacute;n en el anillo 3 jam&amp;aacute;s podr&amp;aacute; tumbar al sistema ejecut&amp;aacute;ndose en el anillo 0, o al menos esa es la teor&amp;iacute;a. A veces un par&amp;aacute;metro mal pasado puede terminar en una ca&amp;iacute;da completa, pero no es lo habitual, y cada vez menos.&lt;/p&gt;
&lt;p&gt;Pues bien, aparte de Win32, ahora tenemos un nuevo subsistema llamado WinRT. O eso dice, al menos la teor&amp;iacute;a y as&amp;iacute; nos lo presenta Microsoft en sus gr&amp;aacute;ficos y en la escas&amp;iacute;sima informaci&amp;oacute;n de la que disponemos.&lt;/p&gt;
&lt;p&gt;Una de mis pr&amp;oacute;ximas tareas es la de intentar averiguar si esto es as&amp;iacute; o no lo es. No es la primera vez que Microsoft miente descaradamente, como cuando dijo de XAML no iba a necesitar de Win32 y que desaparec&amp;iacute;an los bucles de mensajes y que se ejecutar&amp;iacute;a sobre DirectX&amp;hellip; Hasta donde s&amp;eacute;, todav&amp;iacute;a eso no es del todo cierto.&lt;/p&gt;
&lt;p&gt;Tambi&amp;eacute;n nos dijo que .NET iba a ser un subsistema, y realmente se ha quedado como una capa sobre Win32&amp;hellip;&lt;/p&gt;
&lt;p&gt;Por lo tanto, estad atentos al blog. Adem&amp;aacute;s, el dibujo original de Microsoft deja mucho que desear respecto a la claridad, presentando Internet Explorer y .NET como subsistemas independientes de Win32, lo que es, a todas luces, completamente falso:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_3B577CAD.png"&gt;&lt;img height="138" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/image_5F00_thumb_5F00_0E673B34.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;p&gt;Volviendo al gr&amp;aacute;fico de arriba, podemos ver algunos detalles que creo no son del todo ciertos, pero nos dan una idea de la arquitectura del nuevo WinRT (sobre la que se basa la interfaz METRO que llevar&amp;aacute;, junto al escritorio tradicional, Windows 8).&lt;/p&gt;
&lt;p&gt;(Una de las cosas por las que dudo que WinRT sea un subsistema completo es el hecho de que Windows 8 consuma menos memoria que el 7 y de que se pueda producir ese intercambio tan r&amp;aacute;pido entre los dos escritorios, lo que me hace pensar que, de nuevo, se trata de algo sobre Win32).&lt;/p&gt;
&lt;p&gt;En WinRT hay dos interfaces de desarrollo principales: XAML y HTML. Es decir, podemos hacer aplicaciones &lt;i&gt;cl&amp;aacute;sicas&lt;/i&gt; basadas en el primer modelo y &lt;i&gt;modernas&lt;/i&gt; en el segundo.&lt;/p&gt;
&lt;p&gt;A simple vista puede parecer que en ambas se utiliza una misma variaci&amp;oacute;n del XML, pero no es as&amp;iacute;. En el caso de HTML/CSS nuestra aplicaci&amp;oacute;n no ser&amp;aacute; otra cosa m&amp;aacute;s que una &lt;i&gt;p&amp;aacute;gina web&lt;/i&gt; ejecut&amp;aacute;ndose dentro de una sesi&amp;oacute;n m&amp;aacute;s o menos oculta de Internet Explorer. Tendremos acceso a esas dos tecnolog&amp;iacute;as (incluyendo HTML5) y JavaScript como &lt;i&gt;lenguaje&lt;/i&gt; de desarrollo. &lt;/p&gt;
&lt;p&gt;En el caso de XAML, estamos ante la &lt;i&gt;&amp;uacute;ltima&lt;/i&gt; evoluci&amp;oacute;n de las interfaces de usuario din&amp;aacute;micas en las que la interfaz est&amp;aacute; completamente (o lo m&amp;aacute;s posible) separada del c&amp;oacute;digo en s&amp;iacute;, lo que permite una soltura nunca vista hasta ahora. O al menos esa es la teor&amp;iacute;a y casi os dir&amp;iacute;a que la pr&amp;aacute;ctica.&lt;/p&gt;
&lt;p&gt;XAML es muy potente. Demasiado, casi dir&amp;iacute;a. Se trata de una especie de colecci&amp;oacute;n de contenedores jer&amp;aacute;rquicos que pueden actuar como tales o como elementos finales, y pueden &lt;i&gt;mutar&lt;/i&gt; de un tipo a otro con una facilidad pasmosa. De hecho, cambiar el aspecto visual de una aplicaci&amp;oacute;n XAML puede llegar a ser cosa de unas pocas &amp;ndash;muy pocas- l&amp;iacute;neas de c&amp;oacute;digo, con el a&amp;ntilde;adido de que quien haya desarrollado con .NET y la versi&amp;oacute;n anterior, est&amp;aacute; casi listo para esta nueva (que por cierto no es mi caso, pese a ver en su momento las ventajas evidentes del nuevo modelo).&lt;/p&gt;
&lt;p&gt;Por lo tanto, los programadores de .NET que hayan abandonado Windows Forms por la nueva forma, lo tendr&amp;aacute;n bastante f&amp;aacute;cil. Los dinosaurios como yo mismo tendremos ciertas dificultades en adaptarnos&amp;hellip; o no.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Record&amp;aacute;is C++/CLI, el C++ del .NET? Pues bien, la &amp;uacute;nica pega para que dicha extensi&amp;oacute;n de C++ pudiera utilizar XAML es que no se soportan las clases parciales como en C o en VB.NET. Por desgracia, eso sigue siendo as&amp;iacute;, y la interfaz cl&amp;aacute;sica continua estando vedada para los programadores de C++ en .NET, quedando limitados a Windows Forms y a un IDE que no es que se muestre muy estable manejando el lenguaje&amp;hellip;&lt;/p&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;p&gt;Bueno, ahora, por fin, entra C++/CX. &amp;iquest;Qu&amp;eacute; es? Nada m&amp;aacute;s y nada menos que una nueva extensi&amp;oacute;n a C++, con una sintaxis muy similar a C++/CLI pero con un prop&amp;oacute;sito muy diferente: el de soportar METRO y XAML. Y no, no es .NET. Es nativo.&lt;/p&gt;
&lt;p&gt;Supongo que Microsoft se plante&amp;oacute; ante una disyuntiva muy pero que muy gorda: el rendimiento de .NET es suficiente para un PC, pero no lo es para una plataforma m&amp;oacute;vil como una tableta. No estoy diciendo que sea malo, estoy diciendo que eso de tener una m&amp;aacute;quina virtual consumiendo memoria y recursos, un &lt;i&gt;jitter&lt;/i&gt; ejecut&amp;aacute;ndose detr&amp;aacute;s de todo, y un post-compilador pasando MSIL a c&amp;oacute;digo nativo no es de recibo para un Tablet.&lt;/p&gt;
&lt;p&gt;Delante de todos est&amp;aacute; el fracaso de Android. Por favor, absteneros fundamentalistas y otros p&amp;aacute;jaros de similar cala&amp;ntilde;a: Android es un fracaso. Puede que aguante unos cuantos a&amp;ntilde;os, pero terminar&amp;aacute; por caer estrepitosamente, tanto por problemas t&amp;eacute;cnicos (demasiado consumo de memoria, demasiada lentitud, demasiadas capas una encima de otra, demasiadas ca&amp;iacute;das) como por comerciales (demasiada fragmentaci&amp;oacute;n, demasiado abandono de terminales a medio hacer), etc..&lt;/p&gt;
&lt;p&gt;Por lo tanto, para competir en igualdad de condiciones, tenemos que darle ca&amp;ntilde;a a iOS. Se debe hacer algo similar, y ese algo es WinRT y C++/CX. No hay m&amp;aacute;quina virtual .NET, ni nada oculto (o eso quiero creer), tan solo un motor de ejecuci&amp;oacute;n, una interfaz y el propio sistema operativo. O en otras palabras: objetive-c, cocoa y lo que quiera que haya en el n&amp;uacute;cleo de iOS (parece ser que un BSD recortadito).&lt;/p&gt;
&lt;p&gt;Otro problema es la arquitectura. Ya se ha demostrado que x86 es demasiado pesado y demasiado hambriento de energ&amp;iacute;a como para ser &amp;uacute;til en el mercado m&amp;oacute;vil, por lo que hay que subirse al carro de ARM, que son micros mucho menos complejos y por tanto consumen mucho menos y andan m&amp;aacute;s &lt;i&gt;sueltos&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Por lo tanto se necesita algo diferente, algo mucho m&amp;aacute;s liviano. Y eso, de nuevo, es WinRT. Por lo tanto, la combinaci&amp;oacute;n ganadora es C++/CX, XAML y, c&amp;oacute;mo no, C# y VB.NET corriendo sobre una variaci&amp;oacute;n de .NET llamada .NET 4.5 WinRT (y que funcionar&amp;aacute; m&amp;aacute;s lento y consumir&amp;aacute; m&amp;aacute;s bater&amp;iacute;a que una aplicaci&amp;oacute;n realizada con C++/CX).&lt;/p&gt;
&lt;p&gt;Pero el n&amp;uacute;cleo, el centro de todo, es C++ y WinRT. Luego est&amp;aacute; .NET, encima igual que en Win32. Como debe ser. Y de nuevo abst&amp;eacute;ngase fundamentalistas. Si lo han hecho por algo ser&amp;aacute;. Quien cae del &amp;aacute;rbol a tiempo todav&amp;iacute;a puede recuperarse.&lt;/p&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;p&gt;C++/CX no es .NET. Es nativo. Y la parte CX no es m&amp;aacute;s que un envoltorio c&amp;oacute;mo para los interfaces COM, ese animal mitol&amp;oacute;gico con el que los programadores de C++ nos tenemos que enfrentar de tiempo en tiempo y que nos pone los pelos de punta.&lt;/p&gt;
&lt;p&gt;Es decir, la parte CX s&amp;oacute;lo se utiliza para interactuar con XAML y los componentes que se hayan creado a tal efecto. Luego, nuestro c&amp;oacute;digo ser&amp;aacute; C++ normal y corriente, con la STL, los &lt;i&gt;streams&lt;/i&gt; (que personalmente pienso que no son muy &amp;uacute;tiles), Boost o lo que queramos usar y est&amp;eacute; disponible. Desarrollo determinista por completo, sin recolector de basura (a no ser que nos hagamos uno), sin elementos ocultos excepto el envolvente COM que han llamado CX y que nos servir&amp;aacute; para interactuar con los componentes.&lt;/p&gt;
&lt;p&gt;Otra ventaja de C++/CX sobre .NET es que, si quieres hacer un juego sobre DirectX, tendr&amp;aacute;s que usarlo ya que ni C# ni VB.NET est&amp;aacute;n soportados, de nuevo como debe ser.&lt;/p&gt;
&lt;p&gt;Ah, y con soporte para clases parciales, lo que&amp;hellip; bueno, mejor lo dejamos para m&amp;aacute;s adelante.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201432" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="c++/cli" scheme="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B002F00_cli/default.aspx" /><category term="c++" scheme="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B00_/default.aspx" /><category term="Sistemas Operativos" scheme="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx" /><category term="windows" scheme="http://geeks.ms/blogs/rfog/archive/tags/windows/default.aspx" /><category term="lenguajes" scheme="http://geeks.ms/blogs/rfog/archive/tags/lenguajes/default.aspx" /><category term="Win32" scheme="http://geeks.ms/blogs/rfog/archive/tags/Win32/default.aspx" /><category term="Biblioteca de C++" scheme="http://geeks.ms/blogs/rfog/archive/tags/Biblioteca+de+C_2B002B00_/default.aspx" /><category term="C++/CX" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B002F00_CX/default.aspx" /></entry><entry><title>Code Complete 2, Steve McConnell</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/10/27/code-complete-2-steve-mcconnell.aspx" /><id>/blogs/rfog/archive/2011/10/27/code-complete-2-steve-mcconnell.aspx</id><published>2011-10-27T18:51:12Z</published><updated>2011-10-27T18:51:12Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Ñas. Por fin lo he leído. Más de un año para acabarlo. Entre lo que os conté con mi jefe y la empresa, y cierto bajón existencial, dejé de leer temas técnicos, pero creo que he vuelto, o eso espero.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Bueno, al rollo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Lo primero de todo, y pese a que me vais a llamar de todo, el libro no me ha aportado nada nuevo, salvo quizás en los últimos capítulos cuando habla de integraciones y manejo de grandes grupos de programadores, entre los que no me cuento. Es decir, o bien programo solo o bien en pareja o para un tercero, haciendo rutinas de bajo nivel o bibliotecas (DLL, como las llama mi jefe).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Lo único ha sido la sorpresa de encontrar veinte años de experiencia condensados en un solo libro. Y lo que falta, que no es poco. Pero bueno, lo cierto es que este libro tienes que leerlo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Si no lo has hecho, cómpralo y ponte a ello, porque seguro que te va a resultar constructivo. Y si te dice cosas nuevas, vuélvelo a leer cada año o cada seis meses. O si eres de los que va despacio, cuando termines por una punta, cógelo por la otra.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Es increíble lo que pueden dar ochocientas páginas, pero lo dan.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Te pego una cita, sacada de &lt;a href="http://www.antronio.com/topic/1002952-code-complete-2-el-libro-esencial-de-los-programadores/"&gt;aquí&lt;/a&gt;:&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;min-height:17.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 36.0px;font:10.0px Cochin;"&gt;Si sólo tienes oportunidad de leer un libro sobre desarrollo de software en toda tu vida, procura que sea éste. Code Complete es prácticamente la biblia del desarrollo de software, además de una de las mejores guías prácticas sobre la programación de todos los tiempos. Es un libro muy fácil de leer, entretenido, y tremendamente práctico, con montones de recomendaciones útiles para cada fase del ciclo de vida del software. El simple hecho de leerlo te hará mejor programador. Seguro.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 36.0px;font:10.0px Cochin;min-height:12.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Con eso creo que basta.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201402" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="rationale" scheme="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx" /><category term="libros" scheme="http://geeks.ms/blogs/rfog/archive/tags/libros/default.aspx" /><category term="lenguajes" scheme="http://geeks.ms/blogs/rfog/archive/tags/lenguajes/default.aspx" /></entry><entry><title>El compilador como servicio</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/10/21/el-compilador-como-servicio.aspx" /><id>/blogs/rfog/archive/2011/10/21/el-compilador-como-servicio.aspx</id><published>2011-10-21T17:16:52Z</published><updated>2011-10-21T17:16:52Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Me he quedado poco menos que estupefacto con &lt;a href="http://blogs.msdn.com/b/somasegar/archive/2011/10/19/roslyn-ctp-available-now.aspx"&gt;esta entrada&lt;/a&gt; del blog de SomaSegar. Y no, no penséis mal, que no es malo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Básicamente viene a decirnos que está disponible la CTP de “Roslyn”, que según entiendo es una extensión -de momento- a Visual Studio 2010 SP1. De hecho nos la &lt;a href="http://msdn.microsoft.com/es-es/roslyn"&gt;podemos bajar&lt;/a&gt; y jugar con ella.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Comienza diciendo que los compiladores se han venido haciendo en C++ nativo, pero que ya es hora de cambiar y que han rehecho los compiladores de C# y de Visual Basic desde cero en… Visual Basic.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Hay que joderse. La primera en la boca. ¿Pero no decían que el compilador y el propio .NET estaban hechos en C# (lo siento, no encuentro la referencia)? Ahora no, ahora resulta que C# está escrito en C++.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Y la segunda, también: C# está hecho en Visual Basic.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;O están tontos, o yo no me entero, o mienten más que hablan. Para nada me extraña de que hubieran mentido en lo de hacer C# en C++, de hecho es lo lógico y coherente, ¡pero construirlo todo en VB?&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;De todos modos dejemos esto aquí, corramos un estúpido velo, y centrémonos en el meollo del artículo: compilador como servicio.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Es decir, en Visual Studio 11 los compiladores de C# y VB no serán ejecutables, sino servicios expuestos al público (espero que haya uno para invocarlo desde la línea de comandos), de modo que cualquiera podrá compilar.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;No solo eso, sino que dejarán de ser una &lt;em&gt;caja negra&lt;/em&gt; que, a partir de un código fuente, genera una salida compilada, sino que podremos acceder a los diferentes estados del proceso de compilación, e incluso podremos realizar solo unos pasos, como análisis semántico o la obtención del código IL (ensamblador del .NET).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Eso posibilita la creación de &lt;em&gt;scripts&lt;/em&gt; en una consola interactiva. ¿Recuerdan la consola aquella que tenía el Visual FoxPro que permitía ir encadenando comandos como si programáramos? Pues lo mismo, pero en VB y en C#. Vamos, que reinventan la rueda.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;En la entrada original hay un par de imágenes enseñando lo que puede hacer.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;min-height:17.0px;"&gt; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201299" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="Visual Studio" scheme="http://geeks.ms/blogs/rfog/archive/tags/Visual+Studio/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2300_/default.aspx" /><category term="lenguajes" scheme="http://geeks.ms/blogs/rfog/archive/tags/lenguajes/default.aspx" /></entry><entry><title>Paragon HFS+ para Windows o cómo reventar un MAC</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/10/18/paragon-hfs-para-windows-o-c-243-mo-reventar-un-mac.aspx" /><id>/blogs/rfog/archive/2011/10/18/paragon-hfs-para-windows-o-c-243-mo-reventar-un-mac.aspx</id><published>2011-10-18T20:07:50Z</published><updated>2011-10-18T20:07:50Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Cuando uno está en esto del &lt;em&gt;switching indeciso&lt;/em&gt;, que no sabe si irse para Pinto o para Valdemoro, le pueden pasar cosas como la que os voy a contar.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Todos sabéis que desde hace unos años Apple permite la ejecución de Windows sobre su hardware compatible, y que suministra no sólo los drviers (que funcionan cojonudos), sino las herramientas necesarias para tener un arranque dual sin mucho problema. Por tener, hasta tenemos soporte de lectura para el formato de ficheros HFS+, con lo que veremos sin problemas las unidades del MAC, aunque no podremos escribir en ellas.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Una suposición personal es que, así, no podremos trastear en un sistema de ficheros en el que es peligroso tocar si no está cargado el sistema operativo. (Lo que viene a ser igual que con Windows, ya que si tenemos arranque dual, la instalación que no se haya iniciado podría ser fácilmente estropeada por algún zarpas, léanseme: yo mismo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Pues bien, hasta aquí todo perfecto.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Supongamos ahora que queremos soporte de escritura. Porque somos así de chulos y así de molones, porque nosotros lo valemos. O simplemente porque tenemos una unidad de disco externo con nuestro MAC que también queremos usar en Windows.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Vale, la formateamos con FAT32 y listo. No os lo aconsejo. Aparte de que es un sistema de ficheros no muy robusto, carece de sistema de permisos y tiene otras limitaciones en cuanto a los nombres de los ficheros. Y si encima tienes ya ocupados unos cuantos gigas, como que se hace cuesta arriba la conversión.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;¿Podemos escribir en HFS+ desde Windows? La respuesta corta es que sí. La larga es que mejor no lo hagas. Me explico.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;&lt;a href="http://www.paragon-software.com"&gt;Paragon Software Group&lt;/a&gt; cuenta con un &lt;a href="http://www.paragon-software.com/home/hfs-windows/"&gt;driver para Windows&lt;/a&gt; (tanto de 32 como de 64 bits) que permite eso mismo: leer y escribir sin problemas sobre particiones HFS+. O eso dicen.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;En mi caso ha sido un desastre total. No sólo me ha jodido la partición donde estaba el OS X (que no tendría mayor problema) sino que también ha destrozado otra sobre la que no estaba escribiendo, alojada en un disco externo por FireWire 800.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Me tocó reinstalar el OS X desde el DVD de Lion (porque de paso borré todo el disco interno del iMAC e hice una instalación limpia para ver si se me iban los problemas al actualizar a la 10.7.2) y olvidarme de los datos que había en el disco externo, algo así como medio Tera en máquinas virtuales, ISOs descargadas y otras copias de seguridad…&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Cochin;"&gt;Así que ya sabéis, tomaos con calma el “HFS+ for Windows” y probadlo extensamente antes de pasar a producción.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201243" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="Sistemas Operativos" scheme="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx" /><category term="windows" scheme="http://geeks.ms/blogs/rfog/archive/tags/windows/default.aspx" /><category term="chapuzas" scheme="http://geeks.ms/blogs/rfog/archive/tags/chapuzas/default.aspx" /><category term="bugs" scheme="http://geeks.ms/blogs/rfog/archive/tags/bugs/default.aspx" /><category term="MAC" scheme="http://geeks.ms/blogs/rfog/archive/tags/MAC/default.aspx" /><category term="seguridad" scheme="http://geeks.ms/blogs/rfog/archive/tags/seguridad/default.aspx" /></entry><entry><title>iCloud o la flagrante tontería</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/10/16/icloud-o-la-flagrante-tonter-237-a.aspx" /><id>/blogs/rfog/archive/2011/10/16/icloud-o-la-flagrante-tonter-237-a.aspx</id><published>2011-10-16T11:09:38Z</published><updated>2011-10-16T11:09:38Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;¿Sabéis lo que es iCloud? Aunque digáis que sí, me juego un gallifante a que no. ICloud es una mierda envuelta en papel brillante, un trozo de bisutería rodeado de oro del que cagó el moro.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Acabo de comprobarlo. Tengo dos iMAC, un iPad, un iPod y un iPhone (este del curro, que todavía no he actualizado).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Como sabéis, hace unos días salieron todas las actualizaciones de golpe, tanto para el escritorio como para los dispositivos móviles. En mi caso la actualización a Lion 10.7.2 se realizó sin problemas, salvo una notable ralentización del sistema una vez reiniciado, ralentización que parece es temporal ya que ahora funciona todo casi igual de rápido que antes… excepto algún que otro &lt;em&gt;rosetón multicolor de la muette&lt;/em&gt; que deja mi i7 de cuatro núcleos dobles y 12 GB de RAM como autista unos segundos… Eso no lo hacía antes de aplicar el parche.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;No obstante, la actualización de los dispositivos móviles ha sido más que penosa. En primer lugar falló la descarga y la actualización. Me dio el infausto “internal error” causado por la caída de los servidores de Apple. Hay que joderse, con la expectativa generada y que la empresa no fuera capaz de preverlo con antelación. Joder, hasta Microsoft, el denostado Microsoft, cuando saca un producto nuevo que es muy esperado, aumenta y confía en terceros para las descargas…&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Pero no todo termina ahí, no. El iPod se actualizó más o menos bien, a la tercera o la cuarta, pero el iPad hubo de sufrir bastantes intentos. O bien se quedaba autista o bien simplemente fallaba. Como tengo casi 40 GB de datos en él, y la interrupción se producía casi al final, la cosa llevaba su tiempo. Al final, restauración de fábrica, instalación de las aplicaciones y vuelta a meter los datos. Menos mal que soy un chico previsor y los tengo en el MAC, listos en sus carpetas. Eso sí, todavía estoy configurando programas…&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;¡Quietos parados, fanboys! A ver. Uno mete el iPad, te dice que tiene una actualización, le dices que sí, y a medias falla. No hay otra. No es mi culpa. Es de Apple. Por el motivo que sea. Mi iPad está impoluto, sin Jailbreak, sin cosas raras. Ya que está todo cerrado, debería funcionar a la primera, porque si no me vuelvo a Windows que me deja hacer lo que quiera sin más, y si falla puedo achacarlo a mi ineptitud, no a la de Apple. [Como colofón a esto, no soy el primero que ha tenido problemas. Básicamente la actualización a iOS 5 ha sido pésima. También quiero pensar que no se trata de un intento de que estampe mi iPad 1 contra la pared y me compre un 2.]&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Bueno, ahora sí, ahora hablemos de la &lt;em&gt;magia&lt;/em&gt; de la cosa esa del iCloud. ¿Os pensáis que es una versión mejorada de Dropbox? Juas, ni se le acerca. Hasta el infausto &lt;em&gt;SkyDrive&lt;/em&gt; de Microsoft es mejor.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;No, no es que vaya mal, es que no cumple mis expectativas. Es una decepción total, más que total, humillante. Lo único que te va a guardar iCloud son los documentos de Pages, de Office (a mi no me lo hace), tus fotos y los calendarios… pero los que crees en la nube. Es decir, la cacareada sincronización sólo se va a producir entre los documentos &lt;em&gt;políticamente correctos&lt;/em&gt; que, como siempre, le vengan en gana a Apple. No mis documentos. No mis fotos ya hechas, no los documentos que yo quiera, no.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Y encima, como elemento de &lt;em&gt;obsolescencia programada&lt;/em&gt;, si quieres tus documentos en la nube, paga por nuevas versiones que lo soporten. Asco me da. Decepción. Tristeza.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;En serio, tengo una extraña sensación que me parece que, conforme va pasando el tiempo, es más fuerte y coherente: cuanta más cuota de mercado coge Apple, más se parece a los peores tiempos de Microsoft, con fallos estúpidos, dejadez en atender los requisitos de los clientes y olvidarse de que uno debe estar al loro con las actualizaciones de seguridad y que no debe esperar dos meses a, por ejemplo, invalidar una entidad certificadora. Es una especie de &lt;em&gt;deja-vu&lt;/em&gt;, una sensación como de inquietud y de malestar… Ahora que Jobs ya no está, quizás la cosa mejore… aunque lo más seguro es que empeore.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Básicamente, maldita la hora en que me pasé a Apple.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201203" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="bugs" scheme="http://geeks.ms/blogs/rfog/archive/tags/bugs/default.aspx" /><category term="rationale" scheme="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx" /><category term="MAC" scheme="http://geeks.ms/blogs/rfog/archive/tags/MAC/default.aspx" /><category term="Apple" scheme="http://geeks.ms/blogs/rfog/archive/tags/Apple/default.aspx" /><category term="Interoperabilidad" scheme="http://geeks.ms/blogs/rfog/archive/tags/Interoperabilidad/default.aspx" /></entry><entry><title>Más sobre C++ AMP</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/10/01/ma-s-sobre-c-amp.aspx" /><id>/blogs/rfog/archive/2011/10/01/ma-s-sobre-c-amp.aspx</id><published>2011-10-01T11:52:00Z</published><updated>2011-10-01T11:52:00Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Ya os comentaba en otra entrada del blog algo sobre la nueva biblioteca de paralelismo masivo llamada C++ AMP que traerá la nueva versión de Visual Studio, que ahora, tras el lanzamiento BUILD de hace unos días, se llama Visual Studio 11. Eso no quiere decir que vaya a salir este año, sino que se trata del número de versión. Si Visual Studio 2010 era la 10 (una mera coincidencia), la 11 quizás salga en 2012, más o menos cuando Windows 8.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;min-height:14.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Una pequeñísima introducción sobre C++ AMP&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Es una biblioteca de C++ escrita para poder ejecutar código paralelo de forma independiente del hardware y a la vez aprovechar el hardware actual de los PC (léase procesadores multi núcleo y tarjetas de vídeo 3D) sin tener que complicarnos mucho la cabeza. También está pensada para aprovechar los futuros desarrollos de forma transparente para el programador.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;También forma parte de Visual C++, por lo que no es necesario nada extra, y se encuentra perfectamente integrada en el producto, por lo que las tareas habituales como compilación y depuración son transparentes para el usuario.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Tan sólo necesita una extensión del compilador de C++ (el famoso &lt;em&gt;restrict&lt;/em&gt; del que os hablé en la otra entrada), tiene una sintaxis similar a la de la STL, y es muy fácil trabajar con vectores multidimensionales de forma independiente del hardware.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Para los que no lo sepáis, una de las limitaciones de los procesadores SIMD (Single Instruction Multiple Data), que parafraseado podría ser Una Sola Instrucción Para Muchos Datos, está en su limitación respecto al tamaño de los arrays que pueden ejecutar de una sola tacada. Es decir, imaginaos que tenéis que rotar un cuerpo 3D compuesto por X polígonos. La rotación se puede hacer con una sola instrucción ejecutada para cada uno de los polígonos. Algo así como un bucle &lt;em&gt;for&lt;/em&gt; que recorra todos y cada uno de ellos, aplicando la misma transformación. Con un SIMD, uno carga los datos en cada &lt;em&gt;pipeline&lt;/em&gt; (o como se llame) y luego ejecuta la instrucción sobre todos ellos a la vez. El problema viene cuando tienes más polígonos que &lt;em&gt;pipelines&lt;/em&gt;, y tienes que hacerlo &lt;em&gt;a pedazos&lt;/em&gt;. Añade que el tamaño de cada pedazo no solo es diferente para cada procesador SIMD, sino también para cada versión (SIMD=Tarjeta de vídeo 3D). Con esta biblioteca te olvidas de todo eso. Ya lo hace ella sola.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Está basada en &lt;em&gt;DirectCompute&lt;/em&gt;, una ampliación añadida a DirectX 11.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;min-height:14.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;¿Puedo ejecutar C++ AMP?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Una opción es instalarte todo el tema (compilador, Direct X, etc) y probar a ejecutar un programa. Otra más sencilla es bajarte el programa que se describe en esta entrada y ejecutarlo. No requiere nada especial, y no usa C++ AMP para determinar si tu hardware lo permite o no.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;En mi caso, ni el PC del curro, ni la máquina virtual, ni el portátil lo soportan. Pero sí mi PC principal, y seguro que el iMAC con Windows 8 instalado, que va a ser una de mis próximas tareas.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;De todos modos, si el programa te dice que NO tienes hardware, no te preocupes, ya que la instalación del SDK de DirectX 11 o de Visual Studio 11 te creará un dispositivo emulado que no va a funcionar muy rápido que digamos, pero que al menos te permitirá ejecutar los programas.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Para aquellos vagos que no quieran leerse la entrada, o que simplemente no sepan inglés, aquí está el programilla.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;min-height:14.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Usando C++ AMP&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Necesitas tener Visual Studio 11 en algún Windows (incluyendo la versión 8). Usar esto es tan fácil como incluir &lt;em&gt;amp.h&lt;/em&gt; y añadir el espacio de nombre &lt;em&gt;concurrency&lt;/em&gt; en tu proyecto. Ya está, ya puedes escribir código funcional.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Uno de los ejemplos más sencillos (y afuncionales) podría ser:&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;min-height:14.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;color:#b22822;"&gt;&lt;span style="color:#103ffb;"&gt;#include&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&amp;quot;stdafx.h&amp;quot;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;color:#103ffb;"&gt;#include&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#b22822;"&gt;&amp;lt;amp.h&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;color:#b22822;"&gt;&lt;span style="color:#103ffb;"&gt;#include&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&amp;lt;iostream&amp;gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;min-height:11.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;"&gt;&lt;span style="color:#103ffb;"&gt;using&lt;/span&gt; &lt;span style="color:#103ffb;"&gt;namespace&lt;/span&gt; concurrency;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;color:#103ffb;"&gt;using&lt;span style="color:#000000;"&gt; &lt;/span&gt;namespace&lt;span style="color:#000000;"&gt; std;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;min-height:11.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;"&gt;&lt;span style="color:#103ffb;"&gt;int&lt;/span&gt; &lt;span style="color:#83289a;"&gt;_tmain&lt;/span&gt;(&lt;span style="color:#103ffb;"&gt;int&lt;/span&gt; &lt;em&gt;argc&lt;/em&gt;, &lt;span style="color:#3aa2bb;"&gt;_TCHAR&lt;/span&gt;* &lt;em&gt;argv&lt;/em&gt;[])&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;"&gt;{&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;"&gt;&lt;span style="white-space:pre;"&gt; &lt;/span&gt;cout&amp;lt;&amp;lt;acos(0.123456)&amp;lt;&amp;lt;endl;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;color:#103ffb;"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="white-space:pre;"&gt; &lt;/span&gt;&lt;/span&gt;return&lt;span style="color:#000000;"&gt; 0;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;"&gt;}&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;min-height:11.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Lo que a todas luces sirve para poco pero nos permite ver que todo funciona bien, ya que la función &lt;em&gt;acos&lt;/em&gt; viene dentro del espacio de nombres &lt;em&gt;concurrency&lt;/em&gt; como podríamos comprobar si escribiéramos&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;min-height:11.0px;"&gt;&lt;span style="white-space:pre;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:9.5px Consolas;"&gt;concurrency::a&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;min-height:14.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Y dejáramos al sistema de IntelliSense que se abra y nos muestre las funciones disponibles.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;min-height:14.0px;"&gt; &lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Más ejemplos&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Un buen sitio para aprender más sobre esto, en pequeñas dosis, es el blog de &lt;a href="http://blogs.msdn.com/b/nativeconcurrency/"&gt;&lt;em&gt;Parallel Programming in Native Code&lt;/em&gt;&lt;/a&gt;, que es de donde yo he sacado todo esto. De todos modos, en esta entrada del citado blog tenéis algunos puntos de entrada: &lt;a href="http://blogs.msdn.com/b/nativeconcurrency/archive/2011/09/13/c-amp-in-a-nutshell.aspx"&gt;&lt;em&gt;C++ AMP in a nutshell&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:14.2px;font:12.0px Cochin;"&gt;Otro ejemplo, que de momento no he podido ejecutar porque lo he compilado con Visual C++ 11 en un Windows 7 virtualizado, es el ejemplo del SDK de DirextX llamado “N-Body Simulation Sample” y que ha sido portado &lt;a href="http://blogs.msdn.com/b/nativeconcurrency/archive/2011/09/20/c-amp-n-body-simulation-sample.aspx"&gt;aquí&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200879" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="c++" scheme="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B00_/default.aspx" /><category term="windows" scheme="http://geeks.ms/blogs/rfog/archive/tags/windows/default.aspx" /><category term="Visual Studio" scheme="http://geeks.ms/blogs/rfog/archive/tags/Visual+Studio/default.aspx" /></entry><entry><title>Aventuras de un instalador de Windows 8</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/09/26/aventuras-de-un-instalador-de-windows-8.aspx" /><id>/blogs/rfog/archive/2011/09/26/aventuras-de-un-instalador-de-windows-8.aspx</id><published>2011-09-26T18:58:41Z</published><updated>2011-09-26T18:58:41Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Bueno, como ya os comenté en la &lt;a href="http://geeks.ms/blogs/rfog/archive/2011/09/25/wintablet-info-windows-8-y-los-tablet.aspx"&gt;entrada anterior&lt;/a&gt;, hablamos y hablaremos sobre Windows 8 y su orientación a los Tablet en &lt;a href="http://wintablet.info/"&gt;este blog&lt;/a&gt;.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Por lo tanto, la entrada del título la podéis leer &lt;a href="http://wintablet.info/2011/09/aventuras-de-un-instalador-de-windows-8/"&gt;aquí&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200750" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="Sistemas Operativos" scheme="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx" /><category term="windows" scheme="http://geeks.ms/blogs/rfog/archive/tags/windows/default.aspx" /></entry><entry><title>WinTablet.info: Windows 8 y los Tablet</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/09/25/wintablet-info-windows-8-y-los-tablet.aspx" /><id>/blogs/rfog/archive/2011/09/25/wintablet-info-windows-8-y-los-tablet.aspx</id><published>2011-09-25T09:43:55Z</published><updated>2011-09-25T09:43:55Z</updated><content type="html">&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;Ya sabéis que me gusta meter baza en los nuevos productos de Microsoft más que a un pollo la mierda. No creo que os pille de sorpresa, pero en este caso estamos hablando de caviar Beluga ya que encima tenemos dominio y web propia.&lt;/p&gt;
&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;Sí, lo que leéis, el RFOG ha sido invitado a participar en un &lt;a href="http://wintablet.info/"&gt;blog&lt;/a&gt; de temática exclusiva sobre Windows 8 y su orientación hacia los Tablet. Sin restricción de temática, sin censura y con libertad total de publicar lo que quiera (no, que no se os abran los ojos como platos, de momento no voy a poner porno).&lt;/p&gt;
&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;Bueno, después de la presentación chula, vienen los detalles. Nos hemos juntado cuatro interfectos de entre los indeseables de la internet y que encima somos granos en el culo de las grandes corporaciones y nos hemos decidido a poner los puntos sobre las íes en el tópico descrito más arriba. La idea fue originalmente de &lt;a href="http://tinta-e.blogspot.com/"&gt;Juan Luis Chulilla&lt;/a&gt;, quien la propuso a &lt;a href="http://ultramobilepc-tips.blogspot.com/"&gt;Ctitanic&lt;/a&gt; y a mi. No hace falta decir que tardamos 100 milisegundos en decir que sí, que es el tiempo medio de reacción entre el ojo y el cerebro (para aquellos que tengan neuronas, claro). Luego se nos unió Mahjong, y así formamos el &lt;em&gt;cuarteto concertante&lt;/em&gt; (la referencia es de Verne).&lt;/p&gt;
&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;Dicho y hecho, sólo faltaba arremangarse y empezar a escribir, así que el sitio ya contiene entradas chulas, aunque todavía anda algo en obras y debéis poneos casco no sea que se os caiga algún ladrillo en la cocorota.&lt;/p&gt;
&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;Para aquellos que todavía estéis en Babia, os comento. Windows 8 es la siguiente versión de Windows 7, y viene en &lt;em&gt;modo dual&lt;/em&gt;. Es decir, que trae dos&lt;em&gt;Shell&lt;/em&gt; de usuario. La primera es la que todos ya conocemos, con su menú inicio, su explorador y su Internet Explorer, con las &lt;em&gt;mejoras&lt;/em&gt; pertinentes. Lo pongo en cursiva porque hay mucha gente a la que la &lt;em&gt;Ribbon&lt;/em&gt; en el Explorador no les mola nada… a mí sí.&lt;/p&gt;
&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;La segunda interfaz se llama Metro y está destinada a los Tablet, sean del tipo que sean. Si habéis visto Windows Phone ya tenéis una idea de qué es. Como siempre con las tecnologías de Microsoft, debajo hay más de lo que parece, y también ahora ocurre así.&lt;/p&gt;
&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;A simple vista Metro parece nada más que una interfaz de apretar botones, pero dentro existe un motor basado en DirectX muy potente e interesante, envuelto en una capa que se programa con C# y una variante de C++/CLI. Y no es .NET, es nativa. De esto os contaré más aquí, pero en otro momento.&lt;/p&gt;
&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;Finalmente también hay una &lt;em&gt;preview&lt;/em&gt; de la siguiente versión de Visual Studio que es capaz de generar ejecutables para esta nueva plataforma, y de esto también hablaré por aquí.&lt;/p&gt;
&lt;p style="text-align:justify;text-indent:18px;margin:0px;"&gt;Bueno, lo dicho, daos una vuelta por &lt;a href="http://wintablet.info/"&gt;WinTablet.info&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200711" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="c++/cli" scheme="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B002F00_cli/default.aspx" /><category term="Sistemas Operativos" scheme="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx" /><category term="Visual Studio" scheme="http://geeks.ms/blogs/rfog/archive/tags/Visual+Studio/default.aspx" /><category term="rationale" scheme="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2300_/default.aspx" /><category term="hardware" scheme="http://geeks.ms/blogs/rfog/archive/tags/hardware/default.aspx" /><category term="Biblioteca de C++" scheme="http://geeks.ms/blogs/rfog/archive/tags/Biblioteca+de+C_2B002B00_/default.aspx" /><category term="C++ Builder" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B00_+Builder/default.aspx" /></entry><entry><title>Novedades en el futuro Visual C++ 2011 (o vNext)</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/09/16/novedades-en-el-futuro-visual-c-2011-o-vnext.aspx" /><id>/blogs/rfog/archive/2011/09/16/novedades-en-el-futuro-visual-c-2011-o-vnext.aspx</id><published>2011-09-16T18:53:00Z</published><updated>2011-09-16T18:53:00Z</updated><content type="html">&lt;p&gt;Microsoft ya est&amp;aacute; planeando y compilando la siguiente versi&amp;oacute;n de Visual Studio, que ellos han llamado temporalmente &lt;em&gt;vNext&lt;/em&gt; o, recientemente, 2011, para indicarnos que se trata de la siguiente versi&amp;oacute;n. No hay nada definitivo, ni fecha de salida ni qu&amp;eacute; va a traer, pero haciendo un poco de gur&amp;uacute;, y teniendo en cuenta el ciclo bianual de salida, posiblemente tengamos algo el a&amp;ntilde;o que viene por estas fechas o un poco antes. Y no, no estoy haciendo uso de ninguna informaci&amp;oacute;n privilegiada, que &amp;uacute;ltimamente a los MVP nos dicen lo mismo que a los dem&amp;aacute;s.&lt;/p&gt;
&lt;p&gt;No obstante ya se empiezan a publicar algunas novedades sobre lo que va a traer. No son definitivas y quiz&amp;aacute;s al final no las incluyan, pero tienen cosas bastante interesantes. Pese a referiros a los enlaces originales, os cuento yo aqu&amp;iacute; algunas cosillas. Iremos cronol&amp;oacute;gicamente conforme han ido saliendo, ya que el inter&amp;eacute;s tambi&amp;eacute;n va en ese sentido.&lt;/p&gt;
&lt;p&gt;Seg&amp;uacute;n &lt;a href="http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html"&gt;Sumit Kumar&lt;/a&gt;, van a potenciarlo hasta el nivel de C# y m&amp;aacute;s all&amp;aacute;. Vamos a tener color para m&amp;aacute;s elementos sem&amp;aacute;nticos, de hecho hablan de hasta veinte &lt;em&gt;tokens&lt;/em&gt; a los que podremos aplicar diferentes colores. Es decir, podremos distinguir a simple vista si un nombre es una variable local o global, una macro, &amp;nbsp;una plantilla, un par&amp;aacute;metro, un espacio de nombre, una enumeraci&amp;oacute;n&amp;hellip; cosa que no est&amp;aacute; nada mal.&lt;/p&gt;
&lt;p&gt;Tambi&amp;eacute;n habilitan la selecci&amp;oacute;n de una misma referencia en todo el c&amp;oacute;digo fuente. Es decir, cuando pongamos el cursor sobre un s&amp;iacute;mbolo, dicho s&amp;iacute;mbolo se selecciona en todo el texto.&lt;/p&gt;
&lt;p&gt;Tambi&amp;eacute;n traer&amp;aacute; un analizador heur&amp;iacute;stico en los desplegables, que se abrir&amp;aacute;n autom&amp;aacute;ticamente y nos mostrar&amp;aacute;n los tipos m&amp;aacute;s comunes y m&amp;aacute;s probables pese a que empecemos a teclearlos mal.&lt;/p&gt;
&lt;p&gt;Y, para equipararse a otros lenguajes, se a&amp;ntilde;aden los &lt;em&gt;Code Snippets&lt;/em&gt;, que son bloques de c&amp;oacute;digo listos para insertar.&lt;/p&gt;
&lt;p&gt;Ne da un poco de corte explicar lo de arriba, porque todo eso ya lo hace Visual Assist de Whole Tomato&amp;hellip; pero bien est&amp;aacute; que lo traiga de forma nativa&amp;hellip; si funciona. Recordemos que no es la primera vez que el IntelliSense falla por completo en un producto de Microsoft. Esperemos que esta vez acierten a la primera.&lt;/p&gt;
&lt;p&gt;Otra cosa que nos cuenta Sumit, y que personalmente yo no le veo mucho sentido, es que el Explorador de Soluciones traer&amp;aacute; una vista de clases. Es decir, cuando abramos un fichero en dicha ventana, tendremos acceso a todas las clases y todos los s&amp;iacute;mbolos de forma autom&amp;aacute;tica.&lt;/p&gt;
&lt;p&gt;Si quer&amp;eacute;is ver las capturas de pantalla de todo lo que he explicado, haced clic en el enlace de arriba y ver&amp;eacute;is todo eso en marcha.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/vcblog/archive/2011/09/06/10206959.aspx"&gt;Amit Mohindra&lt;/a&gt; nos explica otras novedades en torno al IDE. La m&amp;aacute;s destacable es que ahora no existe asistente para actualizar la soluci&amp;oacute;n. Es decir, si abrimos una soluci&amp;oacute;n escrita con Visual Studio 2008 o superior, no nos pedir&amp;aacute; actualizarla y podremos usarla aprovechando las mejoras del nuevo IDE, y todav&amp;iacute;a podremos seguir abri&amp;eacute;ndola con la versi&amp;oacute;n anterior.&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; surge un problema potencial, y es el uso de los nuevos compiladores. Es decir, imaginad que no tenemos instalado Visual Studio 2008 en la m&amp;aacute;quina en la que abrimos la soluci&amp;oacute;n pero s&amp;iacute; Visual Studio vNext&amp;hellip; Pues bien, existir&amp;aacute; la forma de utilizar el nuevo compilador. Este tema est&amp;aacute; todav&amp;iacute;a pendiente de estudio, por lo que no est&amp;aacute; claro c&amp;oacute;mo lo van a hacer.&lt;/p&gt;
&lt;p&gt;Otra cosa interesante va a ser la creaci&amp;oacute;n de plantillas de proyectos. En versiones anteriores hab&amp;iacute;a que crear una serie de ficheros bastante complicados de entender. Ahora esto podr&amp;aacute; hacerse mediante un asistente. &lt;a href="http://msdn.microsoft.com/en-us/library/dd885241.aspx"&gt;Aqu&amp;iacute;&lt;/a&gt; y &lt;a href="http://msdn.microsoft.com/en-us/library/6db0hwky(v=VS.100).aspx"&gt;aqu&amp;iacute;&lt;/a&gt; se explican algunas cosas m&amp;aacute;s sobre esto.&lt;/p&gt;
&lt;p&gt;Siguiendo con la lista de novedades, y conforme se van publicando en los blogs de Microsoft, ahora nos toca hablar de una caracter&amp;iacute;stica que yo considero muy pero que muy potente en relaci&amp;oacute;n a la ejecuci&amp;oacute;n de c&amp;oacute;digo en paralelo.&lt;/p&gt;
&lt;p&gt;Recientemente Microsoft ha sacado una biblioteca que ha dado en llamar C++AMP, y de la que podemos leer por &lt;a href="http://www.danielmoth.com/Blog/C-Accelerated-Massive-Parallelism.aspx"&gt;aqu&amp;iacute;&lt;/a&gt;. Ignoro si forma parte de alg&amp;uacute;n est&amp;aacute;ndar (lo siento, ando un poco desactualizadillo en estos temas), pero creo que s&amp;iacute;, al menos en su especificaci&amp;oacute;n si no en la implementaci&amp;oacute;n. Las siglas se conocen como Accelerated Massive Parallelism, y tiene que ver con los procesadores de uso generl multin&amp;uacute;cleo y los vectoriales SIMD (de los cuales forman parte los chips de las tarjetas de v&amp;iacute;deo modernas).&lt;/p&gt;
&lt;p&gt;Evidentemente esto no sirve para un programa de gesti&amp;oacute;n de datos, pero s&amp;iacute; para juegos y otras aplicaciones que necesiten un rendimiento alto y que realicen tareas que se puedan ejecutar en paralelo. Digamos que es la soluci&amp;oacute;n que Microsoft est&amp;aacute; implementando en el mundo nativo (C++) como soluci&amp;oacute;n a los problemas actuales de paralelismo, y personalmente no lo veo nada mal.&lt;/p&gt;
&lt;p&gt;Pues bien, &lt;a href="http://blogs.msdn.com/b/nativeconcurrency/archive/2011/09/05/restrict-a-key-new-language-feature-introduced-with-c-amp.aspx"&gt;DanielMoth&lt;/a&gt; nos cuenta que en vNext tendremos una nueva palabra reservada llamada &lt;em&gt;restrict&lt;/em&gt; y que nada tiene que ver con su equivalente de C99, que MS no implementa. B&amp;aacute;sicamente la idea es utilizar dicho t&amp;eacute;rmino para indicar d&amp;oacute;nde se debe ejecutar un m&amp;eacute;todo, si en el procesador principal o en el SIMD (tarjeta de v&amp;iacute;deo).&lt;/p&gt;
&lt;p&gt;Es decir, si nosotros ponemos algo como&lt;/p&gt;
&lt;pre&gt;void myFunction(int a) restrict(cpu)&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;Le estamos diciendo al compilador que esta funci&amp;oacute;n deber&amp;aacute; ser ejecutada por la CPU del sistema, mientras que si lo indicamos as&amp;iacute;:&lt;/p&gt;
&lt;pre&gt;void myFunction(int a) restrict(direct3d)&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;Estaremos indicando que eso se debe ejecutar en el procesador gr&amp;aacute;fico.&lt;/p&gt;
&lt;p&gt;E incluso es posible algo como esto:&lt;/p&gt;
&lt;pre&gt;void myFunction(int a) restrict(direct3d, cpu) //o restrict(cpu, direct3d)&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;Que indica que se podr&amp;aacute; o deber&amp;aacute; ejecutar en ambos procesadores.&lt;/p&gt;
&lt;p&gt;Lo chulo de esto es que se trata de una indicaci&amp;oacute;n transparente para el programador, y que debe ser la implementaci&amp;oacute;n la que se encargue de toda la martingala para que pueda ejecutarse en uno o en otro sitio.&lt;/p&gt;
&lt;p&gt;Tambi&amp;eacute;n podremos sobrecargar el m&amp;eacute;todo, de forma que podr&amp;iacute;amos tener tres funciones id&amp;eacute;nticas pero con diferente &lt;em&gt;restricci&amp;oacute;n&lt;/em&gt;, de forma que ser&amp;iacute;a el compilador y el motor de tiempo de ejecuci&amp;oacute;n el que decidiera qu&amp;eacute; y c&amp;oacute;mo ejecutar.&lt;/p&gt;
&lt;p&gt;Toda una chulada.&lt;/p&gt;
&lt;p&gt;De todos modos, esto est&amp;aacute; un poco en el aire, y todav&amp;iacute;a no tienen claro algunas partes de la implementaci&amp;oacute;n y c&amp;oacute;mo va a terminar funcionando, pero es una caracter&amp;iacute;stica muy guapa. Ojal&amp;aacute; implementen algo similar para los threads y la sincronizaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Otra cosa que s&amp;iacute; han hecho es optimizar el &lt;a href="http://msdn.microsoft.com/en-us/library/dd492418.aspx"&gt;PPL&lt;/a&gt; (otra librer&amp;iacute;a de ejecuci&amp;oacute;n en paralelo, esta con algo m&amp;aacute;s de solera), ganando en algunos casos hasta un 20% de mejoras en el rendimiento con s&amp;oacute;lo recompilar el c&amp;oacute;digo existente con la nueva implementaci&amp;oacute;n de PPL que traer&amp;aacute; vNext. &lt;a href="http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html"&gt;Aqu&amp;iacute;&lt;/a&gt; lo ten&amp;eacute;is con m&amp;aacute;s detalle.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200563" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="c++" scheme="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B00_/default.aspx" /><category term="Visual Studio" scheme="http://geeks.ms/blogs/rfog/archive/tags/Visual+Studio/default.aspx" /><category term="lenguajes" scheme="http://geeks.ms/blogs/rfog/archive/tags/lenguajes/default.aspx" /></entry><entry><title>Ya está aquí C++Builder XE2: Una porquería de producto</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/09/04/ya-est-225-aqu-237-c-builder-xe2-una-porquer-237-a-de-producto.aspx" /><id>/blogs/rfog/archive/2011/09/04/ya-est-225-aqu-237-c-builder-xe2-una-porquer-237-a-de-producto.aspx</id><published>2011-09-04T13:50:25Z</published><updated>2011-09-04T13:50:25Z</updated><content type="html">&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Ya está aquí, ya ha llegado, la que prácticamente es la versión más mierdosa que jamás han sacado de C++Builder.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Pensaba que no se podía caer más bajo en ofrecer una versión de una herramienta de desarrollo, pero lo cierto es que sí, y se llama C++Builder XE2.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Ya estamos acostumbrados al ciclo de salida anuales de los productos de Embarcadero, con versión tras versión de un producto bastante inacabado y que sólo comienza a funcionar bien tras dos o tres parches, como es el caso de la última versión hasta ahora, la XE, que sólo ha comenzado a ser más o menos estable tras el Update 3, pero sin que solucionen bugs históricos como los que impiden trabajar con las versiones no parcheadas de Boost o que hacen casi inusables las que ofrecen parcheadas, eso sin contar con el pobre rendimiento de los ejecutables…&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Pues bien, la única mejora destacable, y destacable de verdad, en C++Builder XE2, es que puede generar ejecutables para OS X. Sí, lo que leéis. Pero ¿vosotros habéis visto un ejecutable corriendo sobre OS X y compilado con esta herramienta? Si la respuesta es afirmativa es que sois bastante más suertudos que yo, porque, pese a tener la versión de prueba, no lo he conseguido.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;El sistema de compilación cruzada funciona más o menos así:&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Hay una nueva biblioteca visual que se llama FireMonkey y que es calcada a la VCL pero con la característica de que es multiplataforma, por lo que debéis olvidaros de simplemente recompilar vuestros anteriores proyectos. Hay que construirlos desde cero con esta nueva biblioteca. La ventaja es que los componentes se llaman casi igual y puede serte válido mucho código ya escrito.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Bueno, una vez que tienes instalada esta versión de Bulider, tienes que instalar una especie de servidor en el MAC donde vayas a depurar. Sí, C++Builder no se ejecuta dentro de un MAC, sino que sigue siendo una aplicación nativa Windows. Sí que puedes hacerlo desde una máquina virtual, pero ojo con la licencia de activación, que se suele perder cada cierto tiempo por algún problema con el sistema de ficheros, y tienes que reactivar el producto, y cuando llegas a cierto límite tienes que al menos enviar un correo explicando qué te pasa y por qué quieres más activaciones.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Una vez que tienes instalado y lanzado el servidor en tu MAC (tras leerte bastante documentación y tras varias pruebas en falso), tienes que añadir la plataforma en tu proyecto FireMonkey (nombre ridículo donde lo haya). Luego tienes que crear un perfil y asociarlo al proyecto. Y finalmente ejecutarlo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Vale. Todo el tema del perfil y demás está hecho de aquella manera, con una especie de asistente mierdoso y con poca documentación, pero una vez lo tienes todo hecho… no te funcionará. Ni siquiera compilará.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;¿Por qué? Muy sencillo: aparte del tema de la pérdida de la licencia, el IDE del RAD Studio no es compatible con carpetas compartidas de una máquina virtual. Igual que ocurre con Visual Studio, que parecen productos calcados…&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Vale, tienes que tener tu proyecto en una carpeta local de la máquina virtual. Ahora sí que compila. Pero al lanzar el ejecutable, el lado servidor empieza a soltar error sobre error con librerías no instaladas, recursos faltantes y demás que hacen que, al menos yo, deje de mirar esta mierda de producto.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Lo dicho: si vais a comprar la versión de C++Builder porque genera ejecutables de plataforma cruzada, no lo hagáis hasta por lo menos la versión XE1000000000 o superior, porque simplemente da asquito.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Eso sin mencionar que la compilación tanto para Windows como para MAC es de 32 bits. Sí, lo dicho, C++Builder todavía no trae compilador de 64 bits (aunque Delphi XE2 sí que lo trae, pero no para OS X).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-align:justify;text-indent:18.0px;font:14.0px Cochin;"&gt;Vamos, lo dicho, una mierda pinchada en un palo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200339" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="c++" scheme="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B00_/default.aspx" /><category term="escariotrop&amp;#237;as gimn&amp;#233;sicas" scheme="http://geeks.ms/blogs/rfog/archive/tags/escariotrop_26002300_237_3B00_as+gimn_26002300_233_3B00_sicas/default.aspx" /><category term="chapuzas" scheme="http://geeks.ms/blogs/rfog/archive/tags/chapuzas/default.aspx" /><category term="C++ Builder" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B00_+Builder/default.aspx" /><category term="Apple" scheme="http://geeks.ms/blogs/rfog/archive/tags/Apple/default.aspx" /></entry><entry><title>Qué grandes palabras, sí señor</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/08/14/qu-233-grandes-palabras-s-237-se-241-or.aspx" /><id>/blogs/rfog/archive/2011/08/14/qu-233-grandes-palabras-s-237-se-241-or.aspx</id><published>2011-08-14T12:54:54Z</published><updated>2011-08-14T12:54:54Z</updated><content type="html">Me vais a permitir un exabrupto off-topic total con este blog (y en general con todos mis blogs en donde lo voy a poner), pero son unas grandes palabras dichas por un grande y que por desgracia son más ciertas de lo que parece.&lt;br /&gt;&lt;br /&gt;
El artículo de Javier Armentia está bien, pero todavía están mejor las palabras de José Luis Sampedro y que reflejan toda mi indignación sobre la visita del Papa y ya de paso de otros temas más que candentes.&lt;br /&gt;&lt;br /&gt;
Me refiero a esto: &lt;a href="http://javarm.blogalia.com/historias/70247"&gt;http://javarm.blogalia.com/historias/70247&lt;/a&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=199404" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="escariotrop&amp;#237;as gimn&amp;#233;sicas" scheme="http://geeks.ms/blogs/rfog/archive/tags/escariotrop_26002300_237_3B00_as+gimn_26002300_233_3B00_sicas/default.aspx" /><category term="redneutral" scheme="http://geeks.ms/blogs/rfog/archive/tags/redneutral/default.aspx" /></entry><entry><title>Aprobado: C++0x ya es C++11</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/08/13/aprobado-c-0x-ya-es-c-11.aspx" /><id>/blogs/rfog/archive/2011/08/13/aprobado-c-0x-ya-es-c-11.aspx</id><published>2011-08-13T10:16:00Z</published><updated>2011-08-13T10:16:00Z</updated><content type="html">&lt;p&gt;Leo en el blog de Sutter, la representaci&amp;oacute;n de Microsoft como compa&amp;ntilde;&amp;iacute;a en el comit&amp;eacute; internacional de estandarizaci&amp;oacute;n de C++, que, por fin, el nuevo est&amp;aacute;ndar ha sido aprobado por unanimidad y que pasa a llamarse, como ya se esperaba, C++11.
&lt;/p&gt;
&lt;p&gt;
Un poco m&amp;aacute;s y lo tentemos que llamar C++12.
&lt;/p&gt;
&lt;p&gt;
El rey ha muerto. &amp;iexcl;Viva el rey!
&lt;/p&gt;
&lt;p&gt;
Ahora a ver qu&amp;eacute; tal lo hace Microsoft con su pr&amp;oacute;ximo compilador, y a ver si &lt;span style="text-decoration:line-through;"&gt;Borland&lt;/span&gt;Embarcadero se pone las pilas y tambi&amp;eacute;n hace algo, aunque lo m&amp;aacute;s seguro sea para C++Builder XE3 el a&amp;ntilde;o que viene o el otro, porque el XE2 ya est&amp;aacute; terminado y a punto de salir, por cierto con compilaci&amp;oacute;n cruzada para MAC OS&amp;hellip;
&lt;/p&gt;
&lt;p&gt;La noticia original: http://herbsutter.com/2011/08/12/we-have-an-international-standard-c0x-is-unanimously-approved/&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=199354" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="c++" scheme="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B00_/default.aspx" /><category term="rationale" scheme="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx" /><category term="lenguajes" scheme="http://geeks.ms/blogs/rfog/archive/tags/lenguajes/default.aspx" /><category term="Biblioteca de C++" scheme="http://geeks.ms/blogs/rfog/archive/tags/Biblioteca+de+C_2B002B00_/default.aspx" /><category term="C++ Builder" scheme="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B00_+Builder/default.aspx" /></entry><entry><title>OS X Lion: Ver la carpeta Librería desde dentro del Time Machine</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/08/05/os-x-lion-ver-la-carpeta-librer-237-a-desde-dentro-del-time-machine.aspx" /><id>/blogs/rfog/archive/2011/08/05/os-x-lion-ver-la-carpeta-librer-237-a-desde-dentro-del-time-machine.aspx</id><published>2011-08-05T15:37:47Z</published><updated>2011-08-05T15:37:47Z</updated><content type="html">De nuevo volvemos a Lion y a sus chipirtifláuticas nuevas características súper fashion de la muette.

Ahora hablamos de cómo mirar dentro de la Librería de nuestra carpeta de usuario cuando estamos dentro de Time Machine porque queremos recuperar algo de allí.

No, no se ve. Aparte de que es un poco complicado acceder a la carpeta de usuario porque Apple nos quiere ocultar cada vez más el sistema de ficheros de OS X, cuando entras en ella la carpeta Librería no está aunque le hayas cambiado el atributo de oculto…

Mola, ¿no?

Si buscas por la red verás un montón de páginas que explican cómo hacerlo, matando el Finder y con otras técnicas un tanto barrocas. La mía no es que sea muy directa, pero al menos no le tocamos las pelotas al sistema operativo y se hace todo de forma ordenada.

Lo primero que hay que hacer es montar la unidad en donde se guarda la copia de seguridad. Hay varias formas, como lanzar una copia de seguridad manual, entrar en el Time Machine y luego salir o simplemente haciendo clic en la unidad en donde estemos realizando la copia.

Una vez montada, es tan fácil como abrir un Terminal y movernos al &lt;em&gt;home&lt;/em&gt; de la copia que queramos. Partimos de la carpeta &amp;quot;/Volumes&amp;quot; y nos vamos adentrando en la copia. También podemos hacer doble clic en el disco montado en el escritorio o seguir navegando por el Finder… La cosa es llegar al &lt;em&gt;home&lt;/em&gt; de la fecha que nos interese, ya sea por terminal o con el Finder.

Una vez allí podemos pulsar CTRL-I (o Ver información) sobre la ruta, para saber dónde estamos. Si hemos usado el terminal no tenemos que hacer nada más que, una vez en nuestro &lt;em&gt;home&lt;/em&gt;, picar &amp;quot;cd Library&amp;quot; y estaremos dentro.

Si lo hemos hecho con el Finder, ahora es turno de abrir un Terminal y seleccionar y copiar la ruta completa que nos aparece en la ventana de información, picar &amp;quot;cd &amp;quot; en el terminal y pegar dicha ruta sobre el mismo. Al pulsar Enter estaremos en la misma situación que el párrafo de arriba.

Ahora viene el truco del almendruco. Podemos usar el terminal para copiar lo que queramos con los comandos de Unix (ya sabéis, cp), pero resulta mucho más cómo hacerlo con el Finder. Por lo tanto ahora picamos

&lt;cite&gt;pwd&lt;/cite&gt;

en el terminal y presionamos enter. Justo arriba del cursor nos aparece la ruta completa en donde estamos. La seleccionamos con el ratón y la copiamos.

Hacemos clic sobre el escritorio para que en el menú del sistema nos aparezca el del Finder. Elegimos &amp;quot;Ir -&amp;gt; Ir a la carpeta&amp;quot; y en cajetín, pegamos la URL que acabamos de copiar. Se nos abrirá una ventana del Finder en todo su esplendor.

[Sí, ya sé que hay una forma muy fácil de mostrar la Libería, que es explica en infinidad de sitios, pero sólo sirve para la carpeta de la cuenta actual, no dentro del Time Machine.]

Por supuesto también vale hacer esto para entrar en la Libería del &lt;em&gt;home&lt;/em&gt; actual de nuestra cuenta de usuario.

Otra forma para, desde cualquier carpeta, ir retrocediendo carpetas padre, es pulsar Commando+Flecha Arriba o, sobre el título de la carpeta en el Finder, retroceder haciendo clic con el botón secundario del ratón.&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=198876" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="configuraci&amp;#243;n" scheme="http://geeks.ms/blogs/rfog/archive/tags/configuraci_26002300_243_3B00_n/default.aspx" /><category term="escariotrop&amp;#237;as gimn&amp;#233;sicas" scheme="http://geeks.ms/blogs/rfog/archive/tags/escariotrop_26002300_237_3B00_as+gimn_26002300_233_3B00_sicas/default.aspx" /><category term="chapuzas" scheme="http://geeks.ms/blogs/rfog/archive/tags/chapuzas/default.aspx" /><category term="rationale" scheme="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx" /><category term="MAC" scheme="http://geeks.ms/blogs/rfog/archive/tags/MAC/default.aspx" /><category term="Apple" scheme="http://geeks.ms/blogs/rfog/archive/tags/Apple/default.aspx" /></entry><entry><title>OS X Lion: Activar la repetición de teclas</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/07/31/os-x-lion-activar-la-repetici-243-n-de-teclas.aspx" /><id>/blogs/rfog/archive/2011/07/31/os-x-lion-activar-la-repetici-243-n-de-teclas.aspx</id><published>2011-07-31T18:38:17Z</published><updated>2011-07-31T18:38:17Z</updated><content type="html">&lt;p&gt;Sin muchas ganas de escribir una nueva entrada, voy a poner algo interesante que corrige una de las cagadas de OS X Lion: la repetición de las teclas que llevan caracteres especiales.&lt;/p&gt;
&lt;p&gt;Como os comenté en la &lt;a href="http:///blogs/rfog/archive/2011/07/23/os-x-lion-mucho-rugido-y-pocas-nueces.aspx"&gt;entrada anterior,&lt;/a&gt; Apple la había cagado a base de bien con el tema de la repetición de teclas. Supongo que para un usuario Ruso o Báltico, la cosa puede resultarle interesante, pero no para la mayoría del resto del mundo.&lt;/p&gt;
&lt;p&gt;Si la opción fuera configurable no habría problema: se cambia y ya está, pero no lo es, o al menos no lo es de forma sencilla ya que no aparece por ningún lado en la configuración.&lt;/p&gt;
&lt;p&gt;Sin embargo sí que existe una forma de volver la cosa a su estado original, y es mediante un comando tecleado en el terminal de OS.&lt;/p&gt;
&lt;p&gt;Abrís la aplicación de terminal (tal y como se escribe), y pegáis el texto:&lt;/p&gt;
&lt;p style="color:#333333;font-family:Helvetica, Arial, sans-serif;font-size:15px;line-height:20px;"&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;font color="#333333" face="Helvetica, Arial, sans-serif"&gt;&lt;span style="font-size:15px;line-height:20px;"&gt;defaults write -g ApplePressAndHoldEnabled -bool false&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;p&gt;&lt;font color="#333333" face="Helvetica, Arial, sans-serif"&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Y pulsáis enter. Ya está cambiado. No sé si es necesario reiniciar o cerrar la sesión abierta porque simplemente lo piqué y seguí con el MAC encendido y no tuve oportunidad de comprobarlo hasta que reinicié al día siguiente.&lt;/p&gt;
&lt;p&gt;Y es que, a veces, sólo a veces, esas webs sensacionalistas pro Apple sirven para algo, ya que de esto me enteré &lt;a href="http://www.applesfera.com/curiosidades/os-x-lion-nueva-manera-de-acentuar-palabras-e-introducir-simbolos"&gt;aquí&lt;/a&gt;.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=198604" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="Sistemas Operativos" scheme="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx" /><category term="tips" scheme="http://geeks.ms/blogs/rfog/archive/tags/tips/default.aspx" /><category term="Apple" scheme="http://geeks.ms/blogs/rfog/archive/tags/Apple/default.aspx" /></entry><entry><title>OS X LION: Mucho rugido y pocas nueces</title><link rel="alternate" type="text/html" href="/blogs/rfog/archive/2011/07/23/os-x-lion-mucho-rugido-y-pocas-nueces.aspx" /><id>/blogs/rfog/archive/2011/07/23/os-x-lion-mucho-rugido-y-pocas-nueces.aspx</id><published>2011-07-23T15:19:05Z</published><updated>2011-07-23T15:19:05Z</updated><content type="html">&lt;p&gt;Como ya sabréis, hace un par de días que ha salido Lion, la nueva encarnación de MAC OS X de Apple. Tras estar usándolo un poco, estas son mis conclusiones.&lt;/p&gt;  &lt;p&gt;Como ya nos tiene acostumbrados el &lt;i&gt;mago &lt;/i&gt;Steve, mucho ruido y pocas nueces. Lion no es más que una lavada de cara de Snow Leopard, con ciertas concesiones a la usabilidad y a los usuarios que no han tocado en su *** vida un ordenador o que vienen de manejar su iPhone, iPad, etc…&lt;/p&gt;  &lt;p&gt;Sigue careciendo de cosas evidentes por sí mismas, como una combinación de teclas global para llamar al Finder igual que Win+E llama a la Shell de Windows. De verdad, os lo aseguro, no me entra en la cabeza cómo los lumbreras de Apple no se han percatado de ello. (Disclaimer para fanboys y demás morralla: CMD-Espacio y&amp;#160; ALT-CMD-Espacio, ya me las conozco, pero navegad con ellas por los archivos).&lt;/p&gt;  &lt;p&gt;La chorrada más gorda de todas las novedades que trae es el famoso Launchpad que, hablando en plata, es una mierda pinchada en un palo. No por el concepto, sino por la implementación. Está bien eso de enseñar los iconcillos de las aplicaciones todos a una, como Fuenteovejuna, pero la implementación deja mucho que desear porque no se puede manejar con el teclado. Lo único que puedes hacer es cerrarlo con la tecla de escape o cambiar de página con los cursores.&lt;/p&gt;  &lt;p&gt;Si bien el tema del Launchpad puede ser algo relativo a gustos, el de la repetición del teclado es de imbéciles. Sí, de imbéciles. No sé a qué lumbreras de Apple se le habrá ocurrido eso, pero habría que condenarlo a no acercarse jamás a un ordenador el resto de su triste y miserable vida.&lt;/p&gt;  &lt;p&gt;En Lion, &lt;b&gt;¡no hay repetición de tecla!&lt;/b&gt; Es decir, si tu vas a escribir una X y muchas D seguidas, te vas a cansar de mantener la D apretada. Lo que te va a aparecer es el *** globito de mierda como en iOS para que elijas, pulsando un número la tecla especial que has decidido poner. &lt;/p&gt;  &lt;p&gt;Vamos a ver una cosa. Hasta los teclados de los portátiles llevan los acentos y demás teclas. De hecho, todos los teclados de todos los ordenadores de Apple son prácticamente idénticos. ¿Por qué cojones ponen eso? Y lo peor de todo es que no puedes volver atrás.&lt;/p&gt;  &lt;p&gt;Otra de las &lt;i&gt;features&lt;/i&gt; que se han estado cantando a bombo y platillo es lo de que el ordenador se abre igual que se cerró: &lt;b&gt;¡Mentira cochina!&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Me explico. Abres Word, editas un documento y lo cierras con CMD-W. Abres iTunes, sincronizas tu iPhone y lo cierras de la crucecita. Haces lo mismo con más programas. Digamos que dejas Mail viéndose en la pantalla. Entonces reinicias tu MAC. Cuando se vuelve a cargar, se supone que vas a tener Mail en pantalla y los demás programas cargados y residentes.&lt;/p&gt;  &lt;p&gt;¡Pues no! ¡Se abren absolutamente todos como si hubieran estado abiertos antes! Por lo que tendrás que cerrarlos de nuevo, uno a uno menos Mail. Lo dicho: una mierda completamente inútil.&lt;/p&gt;  &lt;p&gt;Mail, el programa de correo de Apple. ¿Cuántas tonterías e imbecilidades se pueden llegar a decir de esa mierda de programa? Os aseguro que muchas, muchísimas. Muy bonito, muy cuco, muy bien organizado, pero como tengas más de diez mensajes leídos en la bandeja de entrada, te las vas a ver putas para encontrar los nuevos no leídos, a no ser que los tengas ordenados por leído… Y no, no vale hacer una carpeta inteligente porque entonces sólo te pone el mensaje sin leer pero sin el contexto de los otros. Y con carpetas IMAP no se entera de que el mensaje está ya leído en una de ellas y lo deja sin leer si aparece en otra, teniendo que volver a marcarlo como leído… Y no hablo del iCal y la mierda esa de simulación de arrancar página que tarda una eternidad… La usabilidad en el *** culo.&lt;/p&gt;  &lt;p&gt;***&lt;/p&gt;  &lt;p&gt;Si no lo sabéis, y a falta del Air, que tendré en breve, tengo dos iMAC. El primero de todos es un Mid 2008 (para aquellos que no estén al tanto, un Core2Duo con 4 GB de RAM y monitor de 24”). El segundo es uno nuevo, el Mid 2011 pero con esteroides: i7, 27” de pantalla y 12 GB de RAM (compradas aparte). Con un segundo monitor de 24” normal y corriente y el MY BOOK STUDIO EDITION II que ya tenía como disco secundario.&lt;/p&gt;  &lt;p&gt;La bajada del león fue rápida, y tras copiarlo a un USB, empecé la actualización de ambos equipos a la vez. Mientras el antiguo estuvo listo en cosa de media hora, el nuevo, sí, el nuevo, tardó cerca de una. Mientras que el viejo iba como una moto después de actualizar, el nuevo se colgaba y hacía cosas rarísimas. Debería haber sido justo al revés. &lt;/p&gt;  &lt;p&gt;Lo cierto es que el sistema me quedó prácticamente inusable, con extraños cuelgues de aplicaciones e incluso del sistema entero. De hecho hubo momentos en los que ni funcionaba ni internet. Al final, siguiendo documentos no oficiales (porque los oficiales te dicen que instales Snow Leopard y luego Lion encima, aunque el error se presente al hacer eso mismo –y que conste que no soy el único que está teniendo serios problemas con la instalación), me hice un DVD e instalé en limpio. Ahora sí, ahora va todo bien.&lt;/p&gt;  &lt;p&gt;Otras cosas como Airdrop sí que están bien, y ya podría Microsoft aprender algo de Apple, porque por ejemplo su Homegroup apesta… cuando funciona, que no siempre lo hace. Y sí, la nueva versión de OS X tiene sus cosas guapas que aumentan la productividad, pero de eso ya han hablado otros largo y tendido.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=198260" width="1" height="1"&gt;</content><author><name>RFOG</name><uri>http://geeks.ms/members/RFOG/default.aspx</uri></author><category term="escariotrop&amp;#237;as gimn&amp;#233;sicas" scheme="http://geeks.ms/blogs/rfog/archive/tags/escariotrop_26002300_237_3B00_as+gimn_26002300_233_3B00_sicas/default.aspx" /><category term="Sistemas Operativos" scheme="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx" /><category term="chapuzas" scheme="http://geeks.ms/blogs/rfog/archive/tags/chapuzas/default.aspx" /><category term="hardware" scheme="http://geeks.ms/blogs/rfog/archive/tags/hardware/default.aspx" /><category term="Apple" scheme="http://geeks.ms/blogs/rfog/archive/tags/Apple/default.aspx" /></entry></feed>
