<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET o no .NET, esa es la cuestión : C++ Builder, rationale, C#</title><link>http://geeks.ms/blogs/rfog/archive/tags/C_2B002B00_+Builder/rationale/C_2300_/default.aspx</link><description>Etiquetas: C++ Builder, rationale, C#</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Multiplataforma de la buena (mismo código fuente)</title><link>http://geeks.ms/blogs/rfog/archive/2012/07/03/multiplataforma-de-la-buena-mismo-c-243-digo-fuente.aspx</link><pubDate>Tue, 03 Jul 2012 18:32:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:205955</guid><dc:creator>Rafael Ontivero</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/rfog/rsscomments.aspx?PostID=205955</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/rfog/commentapi.aspx?PostID=205955</wfw:comment><comments>http://geeks.ms/blogs/rfog/archive/2012/07/03/multiplataforma-de-la-buena-mismo-c-243-digo-fuente.aspx#comments</comments><description>&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Antes de empezar, y de que me deis ca&amp;ntilde;a de la buena, quiero decir que todo esto son elucubraciones personales m&amp;iacute;as y que lo m&amp;aacute;s seguro nadie est&amp;eacute; de acuerdo conmigo. Dicho esto, vamos al meollo del asunto.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Ya sab&amp;eacute;is que me he ido distanciando un poco de la plataforma Windows a la vez que me he acercado a la de Apple sin realizar el cambio total. De Linux no quiero hablar, porque cada vez que tengo que hacer algo con &amp;eacute;l, sudo tinta china y al final, tras muchos cabezazos, suelo terminar desistiendo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Lo &amp;uacute;ltimo fue compilar el SDK de lector del libros electr&amp;oacute;nicos Boox i62HD. Tras instalar una Debian 6 x86 virtual en vmWare Fusion (el Workstation del MAC) por segunda vez, ya que la primera fall&amp;oacute; estrepitosamente porque el instalador s&amp;iacute; que reconoci&amp;oacute; el discos duro SCSI pero luego el kernel instalado no, fui incapaz de compilarlo.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Primero me encontr&amp;eacute; con una serie de paquetes que no estaban presentes y que el comprobador del SDK no avis&amp;oacute; que faltaban, lo que te obliga a recorrer la cadena de errores para descubrir que te falta esto o aquello.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Lo &amp;uacute;ltimo, y que todav&amp;iacute;a est&amp;aacute; sin solucionar, es que falta una dependencia en un fichero de proyecto, en concreto incluir &amp;ldquo;-l z&amp;rdquo; en el lugar correcto, que es enlazar con la biblioteca zlib. En mi caso el problema no es saber qu&amp;eacute; falta, sino d&amp;oacute;nde a&amp;ntilde;adirlo. Tras varios intentos infructuosos y muchas p&amp;aacute;ginas de internet le&amp;iacute;das, no consegu&amp;iacute; solucionarlo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Hab&amp;iacute;a un bug similar si instalabas el SDK en un linux x64, pero el m&amp;iacute;o era x86, y el parche existente intentaba modificar ficheros que no existen (al menos en mi instalaci&amp;oacute;n).&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Pues bien, ni me han hecho ni *** caso ni tampoco lo han solucionado, lo que me lleva a preguntarme c&amp;oacute;mo cojones est&amp;aacute;n programando. Y menos mal que us&amp;eacute; una Debian, que es la misma distribuci&amp;oacute;n que usan los que han creado el SDK, que si llego a instalarme otra cosa&amp;hellip;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Esto es un ejemplo de la desidia reinante en Linux. Lo dije en un foro hace tiempo. Los programadores de linux me parecen muy poco profesionales, tendentes a montar cualquier cosa que les parezca &lt;em&gt;c00l&lt;/em&gt; y luego, cuando viene la hora de la verdad y demostrar que se es un programador con dos cojones, pasan del tema porque eso de solucionar bugs ya no es tan fascinante como lo otro, y encima solventar cualquier cosa son un mont&amp;oacute;n de horas en las que no estamos subiendo nuestra supuesta &lt;em&gt;cach&amp;eacute; c00l&lt;/em&gt; en la comunidad.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Aparte de deleznable, me parece una pr&amp;aacute;ctica muy poco seria y que sigue dejando a Linux como lo que es: o bien un juguete para ni&amp;ntilde;os falsamente &lt;em&gt;interesantes&lt;/em&gt;, o bien algo destinado a servidores de bajo coste, y si no contadme c&amp;oacute;mo es el &amp;uacute;nico sistema operativo que ha reventado con el segundo extra a&amp;ntilde;adido hace unos d&amp;iacute;as.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Por lo tanto, para mi el desarrollo en Linux queda completamente descartado a corto y largo plazo, por lo menos hasta que se pongan un cohete en el culo, cosa que dudo mucho que ocurra jam&amp;aacute;s (y espero equivocarme).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Luego vino el tema del &lt;em&gt;swtiching&lt;/em&gt;. Lo cierto es que tras el entusiasmo inicial, la cosa deja mucho que desear en cuanto a usabilidad y, s&amp;iacute;, rendimiento. Ya lo he ido comentando por este blog con anterioridad. OS X Lion y Mountain Lion, si los comparamos con XP, son la rehostia, pero comparados con Windows 7 dejan mucho, pero mucho que desear. La usabilidad es p&amp;eacute;sima, aparte de ciertos problemas de ergonom&amp;iacute;a a los que al final uno termina acostumbr&amp;aacute;ndose.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Tambi&amp;eacute;n es cierto que cuando le coges el tranquillo ya no hay vuelta atr&amp;aacute;s, m&amp;aacute;s que nada por la integraci&amp;oacute;n de todos los elementos, m&amp;aacute;s todav&amp;iacute;a si tienes un iPad o un iPhone. Puedes conseguir casi lo mismo en Windows, pero no de forma tan integrada ni coherente.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Respecto al rendimiento, dir&amp;eacute; que por fin tengo un MAC que funciona como yo quiero, tras gastarme m&amp;aacute;s de 300 euros en a&amp;ntilde;adirle un segundo disco SSD al iMac de 27&amp;rdquo;. Es decir, en este momento mi m&amp;aacute;quina principal es un iMac de mediados del 2011 con un i7 a 3.4 GHz, un disco SSD de 256GB como disco de sistema para el OS X y uno de 1TB como secundario para datos. En este momento el disco FireWire de 2TB que usaba como secundario lo tengo como copia de Time Machine y, aparte de que arranca en 8 segundos (antes tardaba m&amp;aacute;s de dos minutos y el disco segu&amp;iacute;a rascando hasta casi los diez), s&amp;oacute;lo veo la roseta multicolor de la muerte cuando se para el disco mec&amp;aacute;nico y tiene que arrancar. Adem&amp;aacute;s, la carga de aplicaciones, incluso las pesadas como Pages o Word, es pr&amp;aacute;cticamente instant&amp;aacute;nea.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Y justo ahora, mientras escribo esto en Scrivener, tengo abierta una m&amp;aacute;quina virtual en Unity con Windows 7 x86 en la que se est&amp;aacute; instalando el SP1 de Visual Studio 2010 porque he instalado el AtmelStudio, que es un IDE basado en el Microsoft para generar ejecutables para los microprocesadores de Atmel.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Acabo de hacer una pausa para lanzar el JTAG MK-II, conectarlo a Windows y verificar que el AtmelStudio lo reconoce y funciona, todo ello virtualizado. Que es una de las cosas a las que quer&amp;iacute;a llegar. Con un buen producto de virtualizaci&amp;oacute;n, uno puede tener lo mejor de ambos mundos. Un equipo silencioso a m&amp;aacute;s no poder que ejecuta de forma transparente tanto aplicaciones Windows como OS X sin mayor complicaci&amp;oacute;n que molestarse un poco en configurar las cosas, y encima con un rendimiento equivalente a si se ejecutara en real.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Evidentemente tenemos BootCamp, pero os aseguro que Windows no funciona igual que en un PC real, y perdemos todas las cosas buenas que puedes hacer con un MAC.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Pero no es a eso a lo que me refiero. M&amp;aacute;s bien todo esto es una especie de parche o pegote. De lo que realmente quiero hablar es de desarrollar para al menos Windows y MAC sin tener que crear dos programas diferentes.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Descartamos de entrada que un mismo ejecutable pueda funcionar en ambas plataformas. Por parte de los dos contendientes queda descartado. Microsoft podr&amp;iacute;a haber hecho .NET para OS X o Apple Cocoa para Windows, pero no creo que eso vaya a ocurrir nunca jam&amp;aacute;s.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;La &amp;uacute;nica posible soluci&amp;oacute;n es Mono, pero ignoro sin un EXE de Windows se lanzar&amp;aacute; en un MAC o no, y lo voy a descartar por razonamientos que expondr&amp;eacute; m&amp;aacute;s adelante.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Por lo tanto, la otra posible soluci&amp;oacute;n es compatibilidad en el c&amp;oacute;digo fuente. Que yo conozca, s&amp;oacute;lo tenemos dos grandes contendientes: QT y lo que ahora es Embarcadero pero que todos conocemos como Delphi y/o C++Builder.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;De QT he hablado ya por aqu&amp;iacute;, pero no como plataforma cruzada. He estado us&amp;aacute;ndolo un poco, en un proyecto en donde trabajaba, pero s&amp;oacute;lo para generar aplicaciones Windows.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;En principio QT es multiplataforma si no te sales del propio Framework, y de hecho he podido compilar un mismo c&amp;oacute;digo fuente en ambas plataformas sin m&amp;aacute;s que compilar o bien desde Windows o bien desde OS X. Hay que tener mucho cuidado y usar el propio Creator de QT, y todos los ficheros servir&amp;aacute;n sin problema. Eso s&amp;iacute;, necesitas dos ordenadores, uno para cada plataforma. Tres si quieres tambi&amp;eacute;n Linux.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Esto nos trae a lo que hemos tratado antes. Como no es posible ejecutar OS X desde una m&amp;aacute;quina Windows (no sin violar licencias y sin &lt;em&gt;hacks&lt;/em&gt; y sin limitaciones y fallos aleatorios), la &amp;uacute;nica soluci&amp;oacute;n es tener un MAC m&amp;aacute;s o menos potente y usar un Windows virtualizado, compartiendo la carpeta de desarrollo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;En mi caso, pese a no estar haciendo nada m&amp;aacute;s que estudiar ahora que estoy en paro y tengo tiempo para &lt;em&gt;jugar&lt;/em&gt; con todo esto, tengo una carpeta en donde est&amp;aacute; todo mi c&amp;oacute;digo fuente, carpeta que est&amp;aacute; compartida con SkyDrive y de ese modo puedo verla tambi&amp;eacute;n en mi ordenador Windows (no el virtualizado), aparte de hacer copia de seguridad de forma autom&amp;aacute;tica.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Ojo con sincronizar mediante SkyDrive entre real y virtual, porque el tema no es instant&amp;aacute;neo y puedes armar un buen jaleo. La soluci&amp;oacute;n es compartir una carpeta de tu MAC en tu Windows virtual. Con Fusion la cosa funciona muy bien, y hasta Embarcadero ha solucionado los problemas que ten&amp;iacute;a para compilar sobre carpetas de red (Microsoft siempre lo ha tenido resuelto, incluso dando la posibilidad de cachear localmente los ficheros intermedios).&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Si nos damos cuenta, con QT tenemos que compilar y ejecutar en cada m&amp;aacute;quina, lo que en principio no es un gran problema, pero s&amp;iacute; cuando quieres algo que no est&amp;aacute; en el Framework. Ah&amp;iacute; si que tienes que, mediante compilaci&amp;oacute;n condicional, sacarte tu mismo las casta&amp;ntilde;as del fuego. Dada mi escasa experiencia con QT multiplataforma, no puedo asegurar si es algo muy habitual o no.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;El otro participante es Embarcadero, con su FireMonkey bajo Delphi/C++ Builder. La historia de todo esto es un poco rocambolesca, ya que la empresa ha llevado muchos a&amp;ntilde;os implementando compilaci&amp;oacute;n condicional en su VCL. S&amp;oacute;lo hay que mirar el c&amp;oacute;digo fuente de cualquier versi&amp;oacute;n (creo que desde la 2009) y ver c&amp;oacute;mo muchos ficheros tienen secciones para Windows, MAC y Linux.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Uno, por tanto, se esperaba que cualquier d&amp;iacute;a anunciaran que la VCL se hab&amp;iacute;a convertido en multiplataforma y que se podr&amp;iacute;a compilar para estos tres sistemas operativos.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Pero no, Embarcadero compr&amp;oacute; un producto a medio hacer y en seis meses lo transform&amp;oacute; en su FireMonkey, que anunci&amp;oacute; a bombo y platillo con su nueva versi&amp;oacute;n de RAD Studio XE2. Que por cierto se encuentra completamente lleno de bugs y no hay entrada de blog explicando esta o aquella caracter&amp;iacute;stica que no hable de que hay un problema y que han tenido de resolverlo de alguna manera. Y es que seis meses es muy poco tiempo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;FireMonkey es una gran idea implementada muy pobremente. La idea es usar el IDE de Delphi o de C++ Builder para, a partir de un mismo c&amp;oacute;digo fuente, generar un ejecutable Windows o MAC, pero siempre desde Windows, por lo que estamos ante el mismo problema que antes.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;La ventaja aqu&amp;iacute; es que puedes hacerlo todo desde Windows, hasta depurar. Es decir, es necesario instalar un servidor en el lado MAC, servidor que te va a permitir enviar el &lt;em&gt;bundle OS X&lt;/em&gt; al MAC y depurarlo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Y como todo primer producto, est&amp;aacute; completamente lleno de bugs y da muchos problemas, tanto el IDE como la depuraci&amp;oacute;n remota y el framework en s&amp;iacute;. Embarcadero lleva sacados cinco parches, uno de ellos tan grande que exige reinstalarlo todo, que mejoran algo pero no mucho.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Y para m&amp;aacute;s INRI, son aplicaciones de 32 bits, cosa que en los MAC se est&amp;aacute; acabando a pasos agigantados.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Esperemos que el XE3, que saldr&amp;aacute; este verano, mejor algo la cosa.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Nos falta comentar Mono, el C# multiplataforma y de c&amp;oacute;digo abierto. Ya he hablado algo de &amp;eacute;l &lt;a href="http://geeks.ms/blogs/rfog/archive/2012/05/30/monotouch-muy-bonito-pero-una-guarrer-237-a.aspx"&gt;aqu&amp;iacute;&lt;/a&gt; con anterioridad, pero ahora voy a matizar un poco m&amp;aacute;s. Mono engloba una serie de tecnolog&amp;iacute;as m&amp;aacute;s o menos integradas que comparten un mismo lenguaje de programaci&amp;oacute;n: C#.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Basado en &lt;em&gt;ports&lt;/em&gt;, todo el meollo se centra en un IDE (disponible para ambas plataformas, como el de QT) que permite crear aplicaciones basadas en los ya citados &lt;em&gt;ports&lt;/em&gt;, de los que disonemos de varios seg&amp;uacute;n qu&amp;eacute; plataforma.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Por un lado tenemos el de Windows.Forms, que nos permitir&amp;aacute; generar c&amp;oacute;digo compatible con la tecnolog&amp;iacute;a de Microsoft y ejecutar en Windows, MAC y Linux. GTK# es otro de ellos. Tambi&amp;eacute;n est&amp;aacute; MonoMAC, en exclusiva para MAC. Hay m&amp;aacute;s pero nos detenemos aqu&amp;iacute;.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;La idea es que cada &lt;em&gt;port&lt;/em&gt; conserva la idiosincrasia de cada &lt;em&gt;origen&lt;/em&gt;. Es decir, el API de GTK# es el GTK pero traducido a C#, y as&amp;iacute; con todos. Es una buena idea y en general, se puede generar c&amp;oacute;digo para Windows y MAC sin problemas mayores que los que tendr&amp;iacute;amos con QT.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Pero ahora viene el t&amp;iacute;o de la rebaja. Hemos visto algunas pegas que tienen todos estos sistemas de desarrollo, pero no son las peores de todas. De todos modos, si desarrollas para MAC necesitar&amp;aacute;s un MAC, y lo mismo para Windows, as&amp;iacute; que llevar a cabo esas tareas en ambas m&amp;aacute;quinas no es todo lo malo que se puede esperar, y de hecho en todos los casos existen soluciones bastante &amp;oacute;ptimas, aunque lo m&amp;aacute;s deseable ser&amp;iacute;a el acercamiento de Embarcadero, con compila en un sitio, ejecuta en dos.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;La mayor pega de todas consiste en que pr&amp;aacute;cticamente ninguno de estos sistemas pinta los controles como nativos. QT podr&amp;iacute;a salvarse por los pelos, pero ni FireMonkey ni Mono, salvo MonoMac, aparecen como aplicaciones nativas. En la documentaci&amp;oacute;n de algunos productos la llaman hasta &amp;ldquo;alien&amp;rdquo;. Ya os pod&amp;eacute;is imaginar. Y si bien en Windows un usuario normal puede aceptar ciertos interfaces ex&amp;oacute;ticos, un fanboy (perd&amp;oacute;n, maquero) de pro seguro que te manda a la mierda con todas sus palabras, y encima con raz&amp;oacute;n.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;El caso de MonoMac no se aplica, ya que no podremos compartir c&amp;oacute;digo fuente con Windows puesto que se trata de un envoltorio sencillo sobre el propio Cocoa con la idiosincrasia de OS X.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Por lo tanto, el &amp;uacute;nico Framework que s&amp;eacute; de forma fehaciente que ha entrado en la App Store de los MAC ha sido QT tras aplicar unos parches para evitar que el propio QT modificara ficheros dentro del &lt;em&gt;bundle&lt;/em&gt;. De todos modos no s&amp;eacute; qu&amp;eacute; pasar&amp;aacute; con el Sandboxing y si QT (y los dem&amp;aacute;s) lo soportan.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Finalmente, est&amp;aacute; completamente claro que, a fecha de hoy, desarrollar en multiplataforma de manera coherente continua prohibido, principalmente por limitaciones de los Frameworks existentes que de problemas t&amp;eacute;cnicos, dado que el rendimiento y las herramientas base (como compiladores de plataforma cruzada o lenguajes comunes en diferentes plataformas), est&amp;aacute;n m&amp;aacute;s que maduros.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Tan s&amp;oacute;lo habr&amp;iacute;a que crear un Framework que utilizara los controles nativos de cada plataforma, cosa que a fecha de hoy no existe (m&amp;aacute;s sobre esto luego).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;&amp;iquest;Qu&amp;eacute; nos queda, pues? Tan sencillo y tan complejo como dividir nuestra aplicaci&amp;oacute;n en dos partes. La primera, la parte visual, tendremos que hacerla diferente para cada plataforma. Objective-C en MAC, Win32 (MFC, o cualquier otro que pinte nativo), y la parte no visual o el n&amp;uacute;cleo de nuestro programa en alg&amp;uacute;n lenguaje com&amp;uacute;n, como puede ser C++ y STL y mantener al loro todo el tema para que compile y funcione en todos los sistemas de destino&amp;hellip;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Es m&amp;aacute;s trabajo, pero creo que es la &amp;uacute;nica forma de mantener un interfaz visual nativo y coherente. El problema viene cuando nuestra aplicaci&amp;oacute;n es demasiado simple de modo que mantener esta estructura es m&amp;aacute;s costoso que crear dos programas de forma independiente.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Aparte, claro est&amp;aacute;, la bajada de rendimiento al tener que desacoplar ambas partes, aunque esto es muy bueno y deber&amp;iacute;a ser una constante en cualquier desarrollo no trivial, aunque estemos haci&amp;eacute;ndolo solo para Windows o s&amp;oacute;lo para MAC. No obstante, a veces la ca&amp;iacute;da de rendimiento es tal, o el programa es tan meramente visual que este acercamiento no es aplicable.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Si os dais cuenta no he entrado en el tema de c&amp;oacute;digo abierto versus c&amp;oacute;digo cerrado, y es que para el programador medio, se la trae floja si tiene el fuente o no de lo que est&amp;eacute; usando: no lo va a mirar porque o bien no tiene tiempo o bien no est&amp;aacute; capacitado.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Tampoco he cubierto el tema Metro de Windows 8, que est&amp;aacute; de lado del tema m&amp;oacute;vil, en el que no he entrado pese a haber tambi&amp;eacute;n Frameworks gen&amp;eacute;ricos. Aqu&amp;iacute; estamos igual, pero ahora las plataformas son Windows Phone, Windows Metro (o RT), Android e iOS, y si las de Windows y MAC son disparejas, no os digo estas. Y, a fecha de hoy, que yo sepa, no hay ning&amp;uacute;n Framework multiplataforma y compatible. FireMonkey promete llegar a Android, Metro y a C++ en pr&amp;oacute;ximas versiones, pero si ya con dos plataformas la cosa est&amp;aacute; como est&amp;aacute;, no quiero saber cuando haya tantas&amp;hellip;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Me falta hablar de un jugador que no he nombrado y que tiene muy buena pinta, quiz&amp;aacute;s la mejor de todas pero, como apenas lo he probado, lo dejo para una futura entrada. Se llama wxWidgets y hace tiempo que habl&amp;eacute; de &amp;eacute;l aqu&amp;iacute;, pero para Windows. Estamos ante un Framework con mucha solera en el mundo del desarrollo y que usan empresas como Google en su producto Google Drive a trav&amp;eacute;s de wxPython.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;Y la mayor ventaja est&amp;aacute; en que, aparte de estar disponible para alguna que otra plataforma embebida, los controles son los nativos de cada sistema operativo.&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;***&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/qt.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/qt.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;QT en Windows y OS X (Fijaos c&amp;oacute;mo los controles son casi nativos en cada sistema).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;min-height:17.0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/firemonkey.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/firemonkey.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;FireMonkey en Windows y OS X (Esto no pasa la MAC App Store ni a golpe de talonario. Por no aparecer ni el men&amp;uacute; aparece donde debe).&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/wx1.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/wx1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;font:12.0px Helvetica;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/wx2.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/rfog/wx2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0.0px 0.0px 0.0px 0.0px;text-indent:18.0px;font:14.0px Calibri;"&gt;WxWidgets en OS X (Todos los controles son nativos).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=205955" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B00_/default.aspx">c++</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/windows/default.aspx">windows</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/interop/default.aspx">interop</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx">rationale</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/lenguajes/default.aspx">lenguajes</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/Biblioteca+de+C_2B002B00_/default.aspx">Biblioteca de C++</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B00_+Builder/default.aspx">C++ Builder</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/MAC/default.aspx">MAC</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/QT/default.aspx">QT</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/Apple/default.aspx">Apple</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/Interoperabilidad/default.aspx">Interoperabilidad</category></item><item><title>WinTablet.info: Windows 8 y los Tablet</title><link>http://geeks.ms/blogs/rfog/archive/2011/09/25/wintablet-info-windows-8-y-los-tablet.aspx</link><pubDate>Sun, 25 Sep 2011 09:43:55 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200711</guid><dc:creator>Rafael Ontivero</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/rfog/rsscomments.aspx?PostID=200711</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/rfog/commentapi.aspx?PostID=200711</wfw:comment><comments>http://geeks.ms/blogs/rfog/archive/2011/09/25/wintablet-info-windows-8-y-los-tablet.aspx#comments</comments><description>&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;</description><category domain="http://geeks.ms/blogs/rfog/archive/tags/c_2B002B002F00_cli/default.aspx">c++/cli</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/Sistemas+Operativos/default.aspx">Sistemas Operativos</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/rationale/default.aspx">rationale</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/hardware/default.aspx">hardware</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/Biblioteca+de+C_2B002B00_/default.aspx">Biblioteca de C++</category><category domain="http://geeks.ms/blogs/rfog/archive/tags/C_2B002B00_+Builder/default.aspx">C++ Builder</category></item></channel></rss>