<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3033548414831637355</id><updated>2012-01-06T11:50:42.794-03:00</updated><category term='Bag'/><category term='Windows XP'/><category term='Virtual PC'/><category term='Voice Recognition'/><category term='Thinkpad'/><category term='CBZ'/><category term='Encoding'/><category term='.NET Framework 4.0'/><category term='Cool'/><category term='Windows Server 2008'/><category term='Palm'/><category term='Windows'/><category term='Web'/><category term='ASP.NET'/><category term='Que hay en mi mochila'/><category term='zInject'/><category term='Visual Studio 2008'/><category term='Pagefile'/><category term='netflix'/><category term='iPhoto'/><category term='iPod'/><category term='Debugger'/><category term='Beta'/><category term='Mac'/><category term='Mac OS X'/><category term='Mono'/><category term='HotSync'/><category term='Virtualizacion'/><category term='iMac'/><category term='CodeCamp'/><category term='Computación'/><category term='ORDER BY'/><category term='Sincronizacion'/><category term='CBR'/><category term='WSE'/><category term='MSSQL'/><category term='SyncToy'/><category term='Windows Vista'/><category term='VMWare'/><category term='azure'/><category term='Volta'/><category term='F#'/><category term='Blogger'/><category term='Licencias'/><category term='C# 3.0'/><category term='MTGDeck'/><category term='Word 2007'/><category term='Interop'/><category term='Developers'/><category term='Firefox'/><category term='iPhone'/><category term='WTFPL'/><category term='Piratas'/><category term='TestDrive'/><category term='Razor'/><category term='HTML'/><category term='Outlook 2007'/><category term='ActiveSync'/><category term='Windows Seven'/><category term='Internet Explorer'/><category term='DragonBall'/><category term='APS'/><category term='Hollywood'/><category term='C# 4'/><category term='Blog'/><category term='Interface Builder'/><category term='Writer'/><category term='WebServices'/><category term='Twitter'/><category term='Microsoft'/><category term='MVC'/><category term='WhatsInMyBag'/><category term='apple'/><category term='Mochila'/><category term='Visual Studio 2005'/><category term='PSP'/><category term='.Net'/><category term='OneNote'/><category term='hosts'/><category term='MonoDevelop'/><category term='Windows Live Writer'/><category term='Firewall'/><category term='.NET Framework 3.5'/><category term='Oracle'/><category term='Vacaciones'/><category term='Lemmings'/><category term='Keyboard'/><category term='Codeplex'/><category term='Visual Studio 2010'/><category term='C++'/><category term='TOP'/><category term='Steve Jobs'/><category term='Browsers'/><category term='Reconocimiento de Voz'/><category term='Framework'/><category term='Huevadas'/><category term='Smartphone'/><category term='Lightsabre'/><category term='Código'/><category term='Office 2007'/><category term='Comet'/><category term='Facebook'/><category term='Magic'/><category term='sillicon valey'/><category term='Mobile'/><category term='Certificados'/><category term='TFS'/><category term='Annonymous Types'/><category term='ALT.NET'/><category term='Comics'/><category term='Java'/><category term='API'/><category term='VLC'/><category term='Rapidshare'/><category term='OpenSource'/><category term='Sql Server 2005'/><category term='Explosion'/><category term='C#'/><category term='DataAccess'/><category term='Superheroe'/><category term='workerRoles'/><category term='WCF'/><category term='Linq'/><category term='Linux'/><category term='Proxy'/><category term='Notebook'/><category term='Cocoa'/><category term='Ubuntu'/><category term='SVN'/><category term='WPF'/><title type='text'>zPod</title><subtitle type='html'>El blog amigo del Nerd moderno</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default?start-index=101&amp;max-results=100'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>113</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-864030254677873988</id><published>2011-05-16T00:58:00.001-03:00</published><updated>2011-05-16T00:58:06.572-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hosts'/><title type='text'>Update para el archivo de hosts</title><content type='html'>&lt;p style="clear: both"&gt;Para quienes deseen seguir teniendo una internet mas feliz, les dejo un update de mi archivo de hosts redirigiendo las urls de muchos adservers a 127.0.0.1:&lt;/p&gt;&lt;p style="clear: both"&gt;127.0.0.1 ads.e-planning.net&lt;br /&gt;127.0.0.1 ads.us.e-planning.net&lt;br /&gt;127.0.0.1 codenew.impresionesweb.com&lt;br /&gt;127.0.0.1 ads.doubleclick.net&lt;br /&gt;127.0.0.1 ad.doubleclick.net&lt;br /&gt;127.0.0.1 pubads.g.doubleclick.net&lt;br /&gt;127.0.0.1 googleads.g.doubleclick.net&lt;br /&gt;127.0.0.1 pagead2.googlesyndication.com&lt;br /&gt;127.0.0.1 api.ad.ly&lt;br /&gt;127.0.0.1 api.140proof.com&lt;br /&gt;127.0.0.1 api.ads.oneriot.com&lt;br /&gt;127.0.0.1 echofonads.appspot.com&lt;br /&gt;127.0.0.1 ds.clickexperts.net&lt;br /&gt;127.0.0.1 ad.metanetwork.com&lt;br /&gt;127.0.0.1 d2.zedo.com&lt;br /&gt;127.0.0.1 ad.harrenmedianetwork.com&lt;br /&gt;127.0.0.1 ads.intextual.net&lt;br /&gt;127.0.0.1 s0.2mdn.net&lt;br /&gt;127.0.0.1 content.yieldmanager.edgesuite.net&lt;br /&gt;127.0.0.1 adserving.cpxinteractive.com&lt;br /&gt;127.0.0.1 deMR.opt.fimserve.com&lt;br /&gt;127.0.0.1 bs.serving-sys.com&lt;/p&gt;&lt;p style="clear: both"&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-864030254677873988?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/864030254677873988/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=864030254677873988' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/864030254677873988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/864030254677873988'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2011/05/update-para-el-archivo-de-hosts.html' title='Update para el archivo de hosts'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1320934614828708864</id><published>2011-04-10T21:44:00.001-03:00</published><updated>2011-04-10T21:44:35.980-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Material de la última charla de C# 4 y .NET 4</title><content type='html'>&lt;p style="clear: both"&gt;Les dejo el material de la última charla que dimos con RodolfoF en el MUG sobre C# 4, .NET 4 y unos pequeños avances de la próxima versión de C#!&lt;/p&gt;&lt;p style="clear: both"&gt;Lo pueden bajar de &lt;a href="http://prototypes.shockbyte.com.ar/misc/MUG_CSharp.zip" target="_blank"&gt;aca&lt;/a&gt;.&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Hasta la próxima!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1320934614828708864?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1320934614828708864/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1320934614828708864' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1320934614828708864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1320934614828708864'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2011/04/material-de-la-ultima-charla-de-c-4-y.html' title='Material de la última charla de C# 4 y .NET 4'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-609728785920002050</id><published>2011-03-21T10:50:00.001-03:00</published><updated>2011-03-21T10:50:49.793-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Razor'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><title type='text'>Material de la charla del Run WebCamp 2011</title><content type='html'>&lt;p style="clear: both"&gt;Les dejo el material que usamos con RodoF durante la charla del Run WebCamp 2011.&lt;/p&gt;&lt;p style="clear: both"&gt;Link: &lt;a href="http://www.mediafire.com/file/jue4b8cij5hn997/MaterialWebcamp.zip" target="_blank"&gt;Material WebCamp&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Saludos!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-609728785920002050?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/609728785920002050/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=609728785920002050' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/609728785920002050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/609728785920002050'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2011/03/material-de-la-charla-del-run-webcamp.html' title='Material de la charla del Run WebCamp 2011'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7371997837000538951</id><published>2011-01-09T15:35:00.001-03:00</published><updated>2011-01-09T15:35:01.408-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netflix'/><title type='text'>Como usar Netflix desde afuera de USA</title><content type='html'>&lt;p style="clear: both"&gt;Desde hace mas o menos un mes, estoy subscripto a &lt;em&gt;Netflix&lt;/em&gt;, el servicio de streaming &lt;em&gt;legal&lt;/em&gt; de películas mas popular de Estados Unidos. El único inconveniente es que, pese a ser un excelente servicio y tener un muy buen precio (8 US$ al mes, cantidad de películas ilimitadas por streaming), solo está disponible accediéndolo desde USA o Canada.&lt;br /&gt;Por suerte, la forma para verificar la ubicación de cada cliente no es ta &lt;em&gt;estricta&lt;/em&gt; como debería, y los chequeos solo se hacen en ciertos momentos de la navegación por el sitio.&lt;/p&gt;&lt;p style="clear: both"&gt;A continuación les cuento como hacer para poder suscribirse a Netflix desde Argentina (o cualquier otro lugar fuera de los Estados Unidos) y poder utilizarlo sin problemas:&lt;/p&gt;&lt;p style="clear: both"&gt;Primero que todo debemos poder saltear la verificación de ubicación geográfica. Para esto, registramos una cuenta en &lt;a href="http://www.overplay.net" target="_blank"&gt;OverPlay&lt;/a&gt;. OverPlay es un servicio pago que provee VPNs de alta velocidad por todo el mundo y - atentos a esto - &lt;em&gt;una VPN de baja velocidad gratuita a USA&lt;/em&gt;.&lt;br /&gt;Con la cuenta de OverPlay, bajamos de la página el cliente correspondiente a nuestro sistema operativo para conectarse a las VPNs de OverPlay, lo abrimos y elegimos la que diga &lt;em&gt;USA-Free&lt;/em&gt;. Nos conectamos ingresando el usuario y contraseña recién registrados y listo: toda navegación que hagamos de acá en adelante pasará por la VPN y los servidores a los que nos conectemos creerán que tenemos una conexión de aproximadamente 1Mbps.&lt;/p&gt;&lt;p style="clear: both"&gt;Una vez conectados a la VPN, deben crear una nueva cuenta en &lt;a href="http://www.netflix.com" target="_blank"&gt;http://www.netflix.com&lt;/a&gt;. Para poder hacerlo deberán pagar con tarjeta de crédito e indicar alguna dirección dentro de USA. Pueden buscar cualquier dirección en las páginas amarillas o similar, ya que solamente es necesaria para el plan de envío de DVDs a casa, que no vamos a usar por razones obvias.&lt;/p&gt;&lt;p style="clear: both"&gt;El plan a elegir es, como comenté antes, el de películas únicamente por streaming, a 8 US$ por mes, con el primer mes gratis.&lt;/p&gt;&lt;p style="clear: both"&gt;Con la VPN activa y la cuenta de Netflix ya creada, solamente nos resta ver nuestra primer película. Pero acá aparece otro problema: ¿Cómo vamos a ver bien una película por streaming si, como mucho, tenemos 1 Mbps de conexión?&lt;/p&gt;&lt;p style="clear: both"&gt;En este momento van a comprender por que dije que la verificación de ubicación geográfica no es tan estricta como debería: en el momento que hacemos click en el botón de &lt;em&gt;Play&lt;/em&gt; para ver la película se cargará el player Silverlight de Netflix y empezará a mostrar información de status sobre la carga de la película. La clave de todo este método es, en el momento que aparezca el mensaje &lt;em&gt;Downloading movie information&lt;/em&gt;, desconectarnos lo mas rápido posible de la VPN y de esta manera, el proceso de streaming se hará directamente por nuestra conexión, sin pasar por la VPN.&lt;/p&gt;&lt;p style="clear: both"&gt;Listo! Espero que esto les sirva a todos los que quieran utilizar un servicio de primer mundo, a 10000Km de distancia.&lt;/p&gt;&lt;p style="clear: both"&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7371997837000538951?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7371997837000538951/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7371997837000538951' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7371997837000538951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7371997837000538951'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2011/01/como-usar-netflix-desde-afuera-de-usa.html' title='Como usar Netflix desde afuera de USA'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5285241444817364315</id><published>2011-01-08T13:59:00.001-03:00</published><updated>2011-01-08T13:59:46.911-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hosts'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>Nuevo chiche y una mejor forma de ver la Internet</title><content type='html'>&lt;p style="clear: both"&gt;Buenas! Este post tiene dos partes:&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;Tengo chiche nuevo!&lt;/strong&gt; &lt;br /&gt;Cambié la MacBook Pro de 13 pulgadas que tenía por la nueva MacBook Air de 11. Por ahora muy contento, así que después de darle un poco mas de uso escribiré alguna mini-reseña para compradores indecisos.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dejo acá una nueva actualización para el archivo de hosts de sus computadores, para que puedan evitar todo tipo de publicidad dentro de los sitios web que visiten, independientemente de la plataforma o browser que usen. &lt;br /&gt;Para el que no sepa mucho de que estoy hablando, peguen las lineas que dejo a continuación en el archivo &lt;em&gt;/etc/hosts&lt;/em&gt; en OS X o cualquier variante de Unix, Linux, BSD o similar, o en &lt;em&gt;C:\Windows\System32\Drivers\etc\hosts&lt;/em&gt; en cualquier versión de Windows.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;Archivo de hosts:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;127.0.0.1 ads.e-planning.net&lt;br /&gt;127.0.0.1 codenew.impresionesweb.com&lt;br /&gt;127.0.0.1 ads.doubleclick.net&lt;br /&gt;127.0.0.1 pubads.g.doubleclick.net&lt;br /&gt;127.0.0.1 googleads.g.doubleclick.net&lt;br /&gt;127.0.0.1 pagead2.googlesyndication.com&lt;br /&gt;127.0.0.1 api.ad.ly&lt;br /&gt;127.0.0.1 api.140proof.com&lt;br /&gt;127.0.0.1 api.ads.oneriot.com&lt;br /&gt;127.0.0.1 ds.clickexperts.net&lt;br /&gt;127.0.0.1 ad.metanetwork.com&lt;br /&gt;127.0.0.1 d2.zedo.com&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5285241444817364315?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5285241444817364315/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5285241444817364315' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5285241444817364315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5285241444817364315'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2011/01/nuevo-chiche-y-una-mejor-forma-de-ver.html' title='Nuevo chiche y una mejor forma de ver la Internet'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3099368738230010663</id><published>2010-11-15T15:29:00.001-03:00</published><updated>2010-11-15T15:29:56.605-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='azure'/><category scheme='http://www.blogger.com/atom/ns#' term='workerRoles'/><title type='text'>Material de la charla de Azure Worker Roles</title><content type='html'>A pesar de la tardanza, les dejo para bajar el material del bootcamp que dimos junto a mi &lt;em&gt;baticompañero&lt;/em&gt; &lt;a href="http://weblogs.shockbyte.com.ar/rodolfof" target="_blank"&gt;Rodolfo Finochietti&lt;/a&gt; sobre Azure Worker Roles.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://prototypes.shockbyte.com.ar/misc/Azure_Worker_Role.zip" target="_blank"&gt;Material para bajar&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/div&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3099368738230010663?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3099368738230010663/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3099368738230010663' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3099368738230010663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3099368738230010663'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/11/material-de-la-charla-de-azure-worker.html' title='Material de la charla de Azure Worker Roles'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6402165562355704380</id><published>2010-09-08T17:45:00.001-03:00</published><updated>2010-09-11T10:14:56.348-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeCamp'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Ejemplos y slides del Codecamp 2010</title><content type='html'>&lt;p style="clear: both"&gt;Lo prometido es deuda: dejo acá para que bajen los slides y ejemplos de las charlas que di en el CodeCamp 2010 junto a &lt;em&gt;Rodolfo Finochietti&lt;/em&gt; y &lt;em&gt;Ariel "Fuera de Pista" Krakovsky.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;"Como hacer sitios a-la-Facebook con ASP.NET MVC": &lt;a href="http://www.mediafire.com/file/rk8z94kcb92h8mu/SitiosALaFacebookMVC.zip" target="_blank"&gt;slides y ejemplos&lt;/a&gt;.&lt;br /&gt; "Patos y abogados trabajando en paralelo" (Nuevos features de .NET 4 y C# 4): &lt;a href="http://www.mediafire.com/file/yimdzqjnwtz/Net4Samples.zip" target="_blank"&gt;ejemplos&lt;/a&gt; y &lt;a href="http://www.mediafire.com/file/axbb2fdddgxv5dx/Presentacion%20VS2010.pptx" target="_blank"&gt;slides&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;"ASP.NET MVC 2 (y 3!)": &lt;a href="http://prototypes.shockbyte.com.ar/misc/CodeCamp2010_ASP_NET_MVC.zip" target="_blank"&gt;ejemplos y slides&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6402165562355704380?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6402165562355704380/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6402165562355704380' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6402165562355704380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6402165562355704380'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/09/ejemplos-y-slides-del-codecamp-2010.html' title='Ejemplos y slides del Codecamp 2010'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8860348487291216810</id><published>2010-08-16T10:51:00.001-03:00</published><updated>2010-08-16T10:51:12.529-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Razor'/><category scheme='http://www.blogger.com/atom/ns#' term='Comet'/><title type='text'>Ejemplos y presentación de la charla: NextWeb - La web está cambiando, ASP.NET también</title><content type='html'>&lt;p style="clear: both"&gt;Les dejo para bajar los ejemplos de ASP.NET MVC, Comet y Razor que estuvimos mostrando en la charla del 11 de agosto con mis compañeros de &lt;a href="http://www.lagash.com" target="_blank"&gt;Lagash&lt;/a&gt; &lt;a href="http://weblogs.shockbyte.com.ar/rodolfof" target="_blank"&gt;Rodolfo Finochietti&lt;/a&gt; y Diego Gonzalez y &lt;a href="http://blogs.msdn.com/b/masaez/" target="_blank"&gt;Miguel Angel Saez&lt;/a&gt; por parte de Microsoft&lt;/p&gt;&lt;p style="clear: both"&gt;Presentación: &lt;a href="http://www.mediafire.com/file/b3bayl9flv5r23c/nextWeb%20ASP.NET%20MVC%203.pptx" target="_blank"&gt;acá&lt;/a&gt;.&lt;br /&gt;Ejemplos: &lt;a href="http://www.mediafire.com/file/4al4akc9068dzc3/nextWebSamples.zip" target="_blank"&gt;acá&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8860348487291216810?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8860348487291216810/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8860348487291216810' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8860348487291216810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8860348487291216810'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/08/ejemplos-y-presentacion-de-la-charla.html' title='Ejemplos y presentación de la charla: NextWeb - La web está cambiando, ASP.NET también'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5205228956653474616</id><published>2010-07-07T00:56:00.003-03:00</published><updated>2010-07-07T01:05:17.302-03:00</updated><title type='text'>Nuevo chiche: iPad!</title><content type='html'>Después de estar todo un día jugando con este chiche nuevo, debo decir tres cosas:&lt;br /&gt;&lt;br /&gt;1. Steve tenía razón, es mágico&lt;br /&gt;2. Es increíble el esfruezo y dedicación que le pone la gente que hace toda la hackatoneria (Nota del autor: no se debe usar la palabra pirata en estos casos. Un pirata es un tipo que roba barcos, tiene loros y le falta una pata) para los iDevices. Pocas apps funcionan tan bien como las relacionadas con este mundillo!&lt;br /&gt;3. Escribir en esta porquería es bastante mas cómodo de lo que pensaba!!&lt;br /&gt;&lt;br /&gt;Hasta la próxima!&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Zaiden&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5205228956653474616?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5205228956653474616/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5205228956653474616' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5205228956653474616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5205228956653474616'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/07/nuevo-chiche-ipad.html' title='Nuevo chiche: iPad!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7752329039143020358</id><published>2010-06-23T15:33:00.001-03:00</published><updated>2010-06-23T15:33:13.323-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Encoding'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>StringWriter y con distintos Encodings</title><content type='html'>&lt;p style="clear: both"&gt;Recientemente me topé con un pequeño problema al armar una consigna de un trabajo práctico del colegio: La idea era armar un helper para que los chicos puedan bajar facilmente archivos XML.&lt;/p&gt;  &lt;p style="clear: both"&gt;El problema fue que yo me encargaba de bajar el stream del archivo, lo retocaba un poco y luego lo pasaba desde un &lt;em&gt;XDocument&lt;/em&gt; a un string utilizando un &lt;em&gt;StringWriter&lt;/em&gt;, entonces al escribir el string, lo hacía agregando el header de XML de &lt;em&gt;encoding="utf-16"&lt;/em&gt;. Todo esto no sería un problema si no fuese porque, la idea detrás de esto era que asi como les llegaba el string, lo pudiesen guardar a disco con &lt;em&gt;StreamWriter&lt;/em&gt;, utilizando los constructores mas simples, sin tener que especificar encodings.&lt;/p&gt;  &lt;p style="clear: both"&gt;Dado que StringWriter no permite modificar el encoding que utiliza, la solución fue crear una subclase de &lt;em&gt;StringWriter&lt;/em&gt; y hacer &lt;em&gt;override&lt;/em&gt; de la propiedad &lt;em&gt;Encoding&lt;/em&gt;.&lt;/p&gt;  &lt;p style="clear: both"&gt;La pequeña clase quedó asi:&lt;/p&gt;  &lt;pre&gt;&lt;br /&gt;class UTF8StringWriter : StringWriter&lt;br /&gt;{&lt;br /&gt;	public override System.Text.Encoding Encoding&lt;br /&gt;	{&lt;br /&gt;		get&lt;br /&gt;		{&lt;br /&gt;			return System.Text.Encoding.UTF8;&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;  &lt;p style="clear: both"&gt;Espero que les sea útil!&lt;/p&gt;  &lt;p style="clear: both"&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;  &lt;p style="clear: both"&gt;&lt;/p&gt;  &lt;br class="final-break" style="clear: both" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7752329039143020358?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7752329039143020358/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7752329039143020358' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7752329039143020358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7752329039143020358'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/06/stringwriter-y-con-distintos-encodings.html' title='StringWriter y con distintos Encodings'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8023069536988459725</id><published>2010-06-21T16:42:00.001-03:00</published><updated>2010-06-21T16:42:40.153-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Encoding'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Problemas al querer cargar un XML de un string Unicode</title><content type='html'>&lt;p style="clear: both"&gt;Hace poco, por cierta necesidad me encontré con un error bastante extraño. Al intentar leer un XML con un XmlDocument obtenía el siguiente error: "Data at the root level is invalid. Line 1, position 1".&lt;/p&gt;&lt;p style="clear: both"&gt;El string obtenido provenía de un stream, el cual se iba leyendo de a partes.&lt;/p&gt;&lt;p style="clear: both"&gt;Luego de varias idas y vueltas, encontré finalmente la casua del problema: al escribirse el stream original, se estaba haciendo lo siguiente:&lt;/p&gt;&lt;pre style="clear: both"&gt;var writer = new StreamWriter(stream, Encoding.Unicode);&lt;br /&gt;writer.Write(text);&lt;br /&gt;&lt;/pre&gt;&lt;p style="clear: both"&gt;El problema que traía esto es que, por la forma en la que se estaba leyendo el stream del otro lado (codigo externo, revisado gracias al amigo Lutz!) se estaba interpretando mal la marca de uso de Unicode, al comienzo del string.&lt;/p&gt;&lt;p style="clear: both"&gt;Para poder solucionar esto, bastó con reemplazar las lineas en la que se crea y usa el StreamWriter, por la siguiente:&lt;/p&gt;&lt;pre style="clear: both"&gt;var writer = new StreamWriter(stream, new UnicodeEncoding(false, false));&lt;br /&gt;writer.Write(text);&lt;br /&gt;&lt;/pre&gt;&lt;p style="clear: both"&gt;Esta forma de crear el encoding, le indica que no se deberá incluir la marca de Unicode al comienzo del string, solucionando el problema antes mencionado&lt;/p&gt;&lt;p style="clear: both"&gt;Espero poder ayudar a alguien con esto. &lt;br /&gt;Saludos!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8023069536988459725?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8023069536988459725/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8023069536988459725' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8023069536988459725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8023069536988459725'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/06/problemas-al-querer-cargar-un-xml-de-un.html' title='Problemas al querer cargar un XML de un string Unicode'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8761896771235860776</id><published>2010-06-07T11:45:00.001-03:00</published><updated>2010-06-07T11:45:46.420-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Seven'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificados'/><title type='text'>Uso de certificados emitidos por Windows 2008 R2 desde .NET Framework</title><content type='html'>&lt;p style="clear: both"&gt;Si tienen la suerte de tener que utilizar certificados con un template &lt;em&gt;v3&lt;/em&gt; desde &lt;em&gt;Windows Vista o superior&lt;/em&gt;, y los mismos fueron emitidos por un &lt;em&gt;Windows Server 2008 R2&lt;/em&gt;, se encontrarán con una feliz excepción (&lt;em&gt;Invalid provider type specified.&lt;/em&gt;) al intentar obtener la propiedad PrivateKey de una instancia de X509Certificate.&lt;/p&gt;&lt;p style="clear: both"&gt;Esto ocurre, como bien se explica en &lt;a href="http://blogs.msdn.com/b/alejacma/archive/2009/12/22/invalid-provider-type-specified-error-when-accessing-x509certificate2-privatekey.aspx" target="_blank"&gt;este post&lt;/a&gt; debido a que la forma en que &lt;em&gt;Windows Vista y Seven&lt;/em&gt; almacenan este tipo de certificado - utilizando &lt;em&gt;Microsoft Software Key Storage Provider&lt;/em&gt; - solamente está soportado por &lt;em&gt;CryptoAPI&lt;/em&gt;, pero no por las librerías provistas por &lt;em&gt;.NET Framework 4.0&lt;/em&gt; o anterior.&lt;/p&gt;&lt;p style="clear: both"&gt;La forma de solucionar esto es utilizando las librerías provistas por los amigos del equipo de &lt;a href="http://www.codeplex.com/clrsecurity" target="_blank"&gt;CLR Security&lt;/a&gt;:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Incluir "&lt;em&gt;using Security.Cryptography.X509Certificates;&lt;/em&gt;" en el archivo que utilizará los certificados para traer los extension methods para la clase &lt;em&gt;X509Certificate2&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Preguntar por &lt;em&gt;HasCngKey()&lt;/em&gt; en la instancia de &lt;em&gt;X509Certificate2&lt;/em&gt; para saber si la clave esta almacenada de esta forma. En caso afirmativo, crear una nueva instancia de &lt;em&gt;RSACng&lt;/em&gt; utilizando el método &lt;em&gt;GetCngPrivateKey()&lt;/em&gt; como parámetro.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Hasta la próxima!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Zaiden&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8761896771235860776?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8761896771235860776/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8761896771235860776' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8761896771235860776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8761896771235860776'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/06/uso-de-certificados-emitidos-por.html' title='Uso de certificados emitidos por Windows 2008 R2 desde .NET Framework'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2118667178802288987</id><published>2010-05-28T23:23:00.001-03:00</published><updated>2010-05-28T23:23:55.632-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WTFPL'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSource'/><title type='text'>Indignado</title><content type='html'>&lt;p style="clear: both"&gt;Acabo de leer &lt;a href="http://www.osnews.com/story/23376/FSF_Apple_s_iTunes_Store_Terms_of_Service_at_Odds_with_GPL" target="_blank"&gt;este&lt;/a&gt; articulo en OSNews y quedé completamente indignado.&lt;/p&gt;&lt;p style="clear: both"&gt;Como puede ser que haya gente cuyo único motivo para vivir sea molestar a otros porque tal o cual código fue creado bajo una licencia que - supuestamente - le da libertades, pero resulta que el programa o código no puede ser publicado en tal o cual lugar o, por ejemplo, no puede hacer linkeo a código propietario o - peor aún - otro código supuestamente tambien libre, pero con &lt;em&gt;libertad distinta&lt;/em&gt;, por lo que por incompatibilidades de licencia no se pueden usar.&lt;/p&gt;&lt;p style="clear: both"&gt;Estamos todos locos acaso???&lt;/p&gt;&lt;p style="clear: both"&gt;Por este motivo decidí hacer explícito algo que di por sentado todo este tiempo con respecto al código publicado aca, y por el cual comenzaré a hacer campaña a favor:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;Diga NO al uso de licencias como la GPL y SI a la WTFPL, también conocida como &lt;strong&gt;Do What The Fuck You Want To Public Licence&lt;/strong&gt; (&lt;a href="http://en.wikipedia.org/wiki/WTFPL" target="_blank"&gt;http://en.wikipedia.org/wiki/WTFPL&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Básicamente, esta licencia dice que cualquiera puede hacer &lt;em&gt;lo que quiera&lt;/em&gt; con el código.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;ESO&lt;/em&gt; es libertad. &lt;br /&gt;&lt;em&gt;Ma' que GPL ni ocho cuartos...&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;He dicho.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2118667178802288987?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2118667178802288987/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2118667178802288987' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2118667178802288987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2118667178802288987'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/05/indignado.html' title='Indignado'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8961515386267788562</id><published>2010-05-28T18:13:00.001-03:00</published><updated>2010-05-28T18:13:52.969-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Presentación de Visual Studio 2010</title><content type='html'>El jueves estuvimos haciendo la presentación de Visual Studio 2010 en el aula magna de la UAI junto con &lt;a href="http://weblogs.shockbyte.com.ar/" target="_blank"&gt;Rodolfo Finochietti&lt;/a&gt;, &lt;a href="http://blog.salias.com.ar/" target="_blank"&gt;Martín Salías&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/masaez/" target="_blank"&gt;Miguel Saez&lt;/a&gt;, Victor Passador y la gente del &lt;a href="http://www.mug.org.ar/" target="_blank"&gt;MUG&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Dejo aca para que bajen la &lt;a href="http://www.mediafire.com/?tgurfbzjloz" target="_blank"&gt;presentación&lt;/a&gt; y los &lt;a href="http://www.mediafire.com/file/yimdzqjnwtz/Net4Samples.zip" target="_blank"&gt;ejemplos de código&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt; &lt;/div&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8961515386267788562?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8961515386267788562/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8961515386267788562' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8961515386267788562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8961515386267788562'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/05/presentacion-de-visual-studio-2010.html' title='Presentación de Visual Studio 2010'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1489155750614391686</id><published>2010-04-11T03:00:00.001-03:00</published><updated>2010-04-11T03:00:25.620-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>iTip: Velocidad en el iPhone</title><content type='html'>Paso un pequeño tip para aumentar la velocidad general del iPhone (al menos, en el 3G). Vaciar de forma regular las llamadas y SMSs recientes.&lt;br /&gt;&lt;div&gt;Después de hacerlo pude notar una mejora considerable en la performance del teléfono.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Gracias &lt;a href="http://blogs.southworks.net/jhalife/" target="_blank"&gt;Johnny&lt;/a&gt; por la data!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/div&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1489155750614391686?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1489155750614391686/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1489155750614391686' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1489155750614391686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1489155750614391686'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/04/itip-velocidad-en-el-iphone.html' title='iTip: Velocidad en el iPhone'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-17531838518322923</id><published>2010-03-22T18:53:00.001-03:00</published><updated>2010-03-22T18:53:25.641-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>Ya no funciona el boton de los auriculares del iPhone? No estés tan seguro...</title><content type='html'>&lt;p style="clear: both"&gt;Después de unos seis meses de estar usando sin problema los auriculares con micrófono y "click-control" del iPhone, de un día para el otro dejaron de funcionar para atender llamadas y pasar los temas la iPod app.&lt;/p&gt;&lt;p style="clear: both"&gt;Mucha gente me había comentado que después de un tiempo empezaron a tener este problema y como en nuestro amado país argentino - también conocido como &lt;em&gt;La Porongonia Rebelde&lt;/em&gt; - los Apple Resellers no se pueden hacer cargo del service de los iPhones, ya que eso es tarea de la compañía de celulares que lo vendió, pero Claro insiste en que no pueden hacer nada, la gente en general decide que la "vida útil" del botón caducó.&lt;/p&gt;&lt;p style="clear: both"&gt;Mentiras!&lt;/p&gt;&lt;p style="clear: both"&gt;Resulta que el iPhone tiene su propio ombligo, y el mismo - como buen ombligo - se llena de pelusa.&lt;/p&gt;&lt;p style="clear: both"&gt;Si llegan a tener este problema, existe una buena chance de que &lt;em&gt;revolviendo&lt;/em&gt; con un clip por el agujero de los auriculares saquen una gran bola de mugre acumulada, la cual parece ser inofensiva para el uso normal de los auriculares y, sin embargo, letal para su boton mágico.&lt;/p&gt;&lt;p style="clear: both"&gt;Bueno, espero que les sirva esto antes de ir corriendo a comprar auriculares nuevos.&lt;/p&gt;&lt;p style="clear: both"&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-17531838518322923?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/17531838518322923/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=17531838518322923' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/17531838518322923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/17531838518322923'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/03/ya-no-funciona-el-boton-de-los.html' title='Ya no funciona el boton de los auriculares del iPhone? No estés tan seguro...'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5167374438058048877</id><published>2010-03-17T09:38:00.001-03:00</published><updated>2010-03-21T18:40:50.023-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Slides de la charla: .NET 4 a Fondo!</title><content type='html'>&lt;p style="clear: both"&gt;El último lunes, junto a &lt;a href="http://weblogs.shockbyte.com.ar/" target="_blank"&gt;Rodo&lt;/a&gt; y Max, dimos la charla ".NET 4 a Fondo!" en el aula magna de la UAI, auspiciada por el MUG.&lt;/p&gt;&lt;p style="clear: both"&gt;En la misma hicimos una repasada por las principales características de la próxima versión de .NET Framework, mostrando la versión RC de Visual Studio 2010 (la cual, debo decir, mejoró muchísimo desde las betas... sobre todo en la velocidad) y explicando con mas detenimiento las nuevas características relacionadas a programación dinámica dentro de C# 4, programación en paralelo y Code Contracts.&lt;/p&gt;&lt;p style="clear: both"&gt;Aca les dejo los &lt;a href="http://www.mediafire.com/file/ny2kjinemzg/Net4AFondo.pptx.zip" target="_blank"&gt;slides&lt;/a&gt; y &lt;a href="http://www.mediafire.com/file/yimdzqjnwtz/Net4Samples.zip" target="_blank"&gt;ejemplos&lt;/a&gt; de la charla para bajarlos.&lt;br /&gt;&lt;br /&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5167374438058048877?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5167374438058048877/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5167374438058048877' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5167374438058048877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5167374438058048877'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2010/03/slides-de-la-charla-net-4-fondo.html' title='Slides de la charla: .NET 4 a Fondo!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2590094815350454176</id><published>2009-12-31T11:46:00.001-03:00</published><updated>2009-12-31T11:46:44.166-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><title type='text'>Nueva (y por ahora última) versión de TweetMyFace</title><content type='html'>&lt;p style="clear: both"&gt;Ya está la versión Release (1.1) de &lt;strong&gt;TweetMyFace&lt;/strong&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;La pueden bajar de acá: &lt;a href="http://tweetmyface.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=37990" target="_blank"&gt;http://tweetmyface.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=37990&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2590094815350454176?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2590094815350454176/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2590094815350454176' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2590094815350454176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2590094815350454176'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/12/nueva-y-por-ahora-ultima-version-de.html' title='Nueva (y por ahora última) versión de TweetMyFace'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3967005652129567605</id><published>2009-12-23T12:15:00.001-03:00</published><updated>2009-12-23T12:15:51.970-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><title type='text'>Recibí tus notificaciones de Facebook por Twitter: TweetMyFace</title><content type='html'>En estos días quise hacer un pequeño experimento con el API de Facebook para C# y el resultado fue &lt;strong&gt;TweetMyFace&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;div&gt;&lt;br /&gt;La idea de esta aplicación crear un nuevo usuario de Twitter que se utilizará para publicar las notificaciones que recibe un usuario de Facebook.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Idealmente, el único seguidor de este usuario de Twitter será el mismo dueño de la cuenta de Facebook que se está monitoreando, por lo que podrá recibir en su cliente de Twitter favorito todas las notificaciones de Facebook al instante.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Si, ya se... no tiene mucha utilidad, pero fue lo que salió.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Lo pueden bajar de: &lt;a href="http://tweetmyface.codeplex.com" title="TweetMyFace" target="_blank"&gt;http://tweetmyface.codeplex.com&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/div&gt;&lt;div&gt;&lt;br style="text-decoration: underline;" /&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/div&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3967005652129567605?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3967005652129567605/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3967005652129567605' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3967005652129567605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3967005652129567605'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/12/recibi-tus-notificaciones-de-facebook.html' title='Recibí tus notificaciones de Facebook por Twitter: TweetMyFace'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1348594444564525584</id><published>2009-12-15T21:20:00.001-03:00</published><updated>2009-12-16T22:23:20.522-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debugger'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoDevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='Linq'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><title type='text'>Un pequeño paso para el hombre, un gran paso para el Mono!</title><content type='html'>&lt;p style="clear: both"&gt;Como bien dice el título, hoy es un gran día para Mono!&lt;br /&gt;Aca de publicarse la versión 2.6 del Mono Framework (implementación libre y multiplataforma de .NET) junto con la versión 2.2 de MonoDevelop (IDE)&lt;/p&gt;&lt;p style="clear: both"&gt;Dentro de la extensa lista de features - la cual pueden ver en &lt;a href="http://www.go-mono.com" title="GoMono!" target="_blank"&gt;www.go-mono.com&lt;/a&gt; - dos de ellas llamaron poderosamente mi atención:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Soporte e integración del debugger en MonoDevelop en las tres plataformas principales (si, si: esto incluye &lt;strong&gt;Mac OS X&lt;/strong&gt;!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Soporte básico para LINQ-2-SQL gracias al proyecto DBLinq&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Esto quiere decir que la factibilidad de realizar proyectos importantes en .NET abstrayéndose de la plataforma acaba de dos pasos gigantescos!&lt;br /&gt; &lt;br /&gt;Por lo poco que probé el debugger funcionó bastante bien, llevando al olvido mis incontables horas de PRINTF-Oriented-Debugging sobre .NET en OS X.&lt;/p&gt;&lt;p style="clear: both"&gt;Los ejemplos básicos que pude probar de LINQ-2-SQL funcionaron perfectamente e incluso proyectos como &lt;strong&gt;NerdDinner&lt;/strong&gt; se pueden ejecutar sin problemas con un simple &lt;em&gt;click&lt;/em&gt; en el botón de &lt;em&gt;Debug&lt;/em&gt; de MonoDevelop (siempre y cuando tengamos acceso a una base SQL Server, obviamente).&lt;/p&gt;&lt;p style="clear: both"&gt;Intenté llevar un paso mas adelante el funcionamiento de la nueva implementación de esta API al intentar ejecutar el proyecto en el cual estoy trabajando actualmente, solo para encontrarme que aún no está implementado el uso de &lt;em&gt;DataLoadOptions&lt;/em&gt; en el &lt;em&gt;DataContext&lt;/em&gt; de SQL, por lo que eso tendrá que esperar un tiempo más.&lt;/p&gt;&lt;p style="clear: both"&gt;Igualmente, muchas felicitaciones al equipo de Mono por el gran trabajo que hacen día a día!&lt;/p&gt;&lt;p style="clear: both"&gt;Tanto Mono Framework como MonoDevelop pueden ser descargados desde el sitio oficial de mono: &lt;a href="http://www.go-mono.com" title="GoMono!" target="_blank"&gt;http://www.go-mono.com&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1348594444564525584?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1348594444564525584/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1348594444564525584' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1348594444564525584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1348594444564525584'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/12/un-pequeno-paso-para-el-hombre-un-gran.html' title='Un pequeño paso para el hombre, un gran paso para el Mono!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7941850981088986517</id><published>2009-11-25T00:29:00.000-03:00</published><updated>2009-11-25T14:22:06.728-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Run Reloaded - Ejemplos</title><content type='html'>&lt;p style="clear: both"&gt;Durante el día de hoy estuve dando una charla junto a Diego Gonzalez sobre las novedades de C# 4.0, .NET 4.0 Visual Studio 2010 en el marco del evento de &lt;em&gt;Microsoft&lt;/em&gt; &lt;strong&gt;Run Reloaded&lt;/strong&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div&gt;Dejo para poder bajar, retocar e investigar los ejemplos de código que utilizamos durante la sesión.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/?5dz4bmwr3mx" title="Code Contracts" target="_blank"&gt;Code Contracts&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://www.mediafire.com/?mzjdwtjtjmi" title="DynamicObject" target="_blank"&gt;DynamicObject&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://www.mediafire.com/?tzj2nmn2qtn" title="Tasks y DLR" target="_blank"&gt;Tasks y DLR&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;La presentación la pueden bajar &lt;a href="http://www.mediafire.com/?mdnfmwq3wyw" title=".NET 4.0" target="_blank"&gt;aca&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div&gt;Un saludo!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7941850981088986517?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7941850981088986517/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7941850981088986517' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7941850981088986517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7941850981088986517'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/11/run-reloaded-ejemplos.html' title='Run Reloaded - Ejemplos'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7975764879585571</id><published>2009-10-14T23:28:00.001-03:00</published><updated>2009-10-14T23:31:10.477-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='zInject'/><title type='text'>Nuevo proyecto: zInject, o "Cómo hacer Inyección de Código para cualquier hijo de vecino"</title><content type='html'>&lt;p style="clear: both"&gt;Hace tiempo que tenía la idea de hacer un programa para poder inyectar código sobre assemblies ya compiladas dando vueltas por la cabeza. Finalmente, hoy fue el día de crear su versión 0.1&lt;/p&gt;&lt;p style="clear: both"&gt;Les presento &lt;strong&gt;zInject&lt;/strong&gt;!&lt;/p&gt;&lt;p style="clear: both"&gt;Cual es la idea detrás de esto? Simple...&lt;br /&gt;Supongamos que yo tengo un proyecto &lt;em&gt;hecho y derecho&lt;/em&gt;, con una clase cuyos métodos son M1, M2 y M3.&lt;/p&gt;&lt;pre style="clear: both"&gt;&lt;br /&gt;public class M&lt;br /&gt;{&lt;br /&gt;    public void M1()&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void M2()&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void M3()&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p style="clear: both"&gt;&lt;br /&gt; Un día viene el jefe y me dice: "De ahora en mas, tenemos que verificar cuanto demora la ejecución de los siguientes métodos: M1, M2 y M3.&lt;br /&gt;En ese momento uno piensa: "Bien, tendría que hacer nuevos métodos que se ejecuten antes y después de M1, M2 y M3 y que los mismos calcules cuanto tardó cada ejecución.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style="clear: both"&gt;&lt;br /&gt;public class M&lt;br /&gt;{&lt;br /&gt;    public void M1()&lt;br /&gt;    {&lt;br /&gt;        Empezo("M1");&lt;br /&gt;        ...&lt;br /&gt;        Termino("M1");&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void M2()&lt;br /&gt;    {&lt;br /&gt;        Empezo("M2");&lt;br /&gt;        ...&lt;br /&gt;        Termino("M2");&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="clear: both"&gt;    public void M3()&lt;br /&gt;    {&lt;br /&gt;        Empezo("M3");&lt;br /&gt;        ...&lt;br /&gt;        Termino("M3");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p style="clear: both"&gt;Esto trae una serie de problemas. Agregar esto ensucia el código de M1, M2 y M3 por las llamadas a los nuevos métodos al principio y al final. Peor aún, si tengo que agregar nuevos "comportamientos" al principio o al final del método, el código termina siendo incomprensible! Ni hablar en caso de que cada comportamiento (como seguridad o auditoria) a agregar implique mas de una sola linea de código...&lt;/p&gt;&lt;p style="clear: both"&gt;Para solucionar llega &lt;strong&gt;zInject&lt;/strong&gt;. &lt;br /&gt;Para usarlo, definimos un atributo que hereda de &lt;em&gt;InjectionBaseAttribute&lt;/em&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;pre style="clear: both"&gt;    &lt;br /&gt;public class TiempoAttribute : InjectionBaseAttribute&lt;br /&gt;    {&lt;br /&gt;        public TiempoAttribute() &lt;br /&gt;        { &lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="clear: both"&gt;        public override void BeforeExecute(string method, object target)&lt;br /&gt;        {&lt;br /&gt;            Empezo(method);&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="clear: both"&gt;        public override void AfterExecute(string method, object target)  &lt;br /&gt;        {&lt;br /&gt;            Termino(method); &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p style="clear: both"&gt;Después, simplemente agregamos el atributo a los métodos que se desea:&lt;/p&gt;&lt;pre style="clear: both"&gt;&lt;br /&gt;public class M&lt;br /&gt;{&lt;br /&gt;    [Tiempo]&lt;br /&gt;    public void M1()&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    [Tiempo]&lt;br /&gt;    public void M2()&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    [Tiempo]&lt;br /&gt;    public void M3()&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p style="clear: both"&gt;Ahora, dirán... Todo muy lindo, pero... ¿Cómo se ejecuta el código del atributo?&lt;br /&gt;&lt;br /&gt;Para poder hacer esto hay que ejecutar el &lt;em&gt;injector&lt;/em&gt; propiamente dicho. Esto se puede hacer tanto ejecutándolo desde linea de comandos una vez compilado el assembly, como usando una Post Build Action dentro de Visual Studio. Esta utilidad agregará dentro del IL del assembly las llamadas necesarias a los metodos ExecuteBefore y ExecuteAfter&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;To Do:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Evitar totalmente el uso de Reflection. Actualmente, el código inyectado utiliza reflection para ejecutar las acciones de los atributos, simplemente por simplicidad del desarrollo. A futuro, se inyectará directamente la llamda al atributo concreto.&lt;/li&gt;&lt;li&gt;Poder customizar cuales atributos aplicar y cuales no&lt;br /&gt;&lt;/li&gt;&lt;li&gt;UI para Windows/OS X/Linux&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Quitar dependencias contra librerías externas&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Les dejo la dirección del proyecto en CodePlex para bajar los binarios compilados y el código completo para bajarlo con sus tests para bajarlo y ver como se usa.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://zInject.codeplex.com" title="zInject" target="_blank"&gt;http://zInject.codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Cualquier sugerencia es bienvenida!&lt;/p&gt;&lt;p style="clear: both"&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7975764879585571?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7975764879585571/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7975764879585571' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7975764879585571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7975764879585571'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/10/nuevo-proyecto-zinject-o-hacer.html' title='Nuevo proyecto: zInject, o &amp;quot;Cómo hacer Inyección de Código para cualquier hijo de vecino&amp;quot;'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7962017619330892515</id><published>2009-10-08T15:17:00.001-03:00</published><updated>2009-10-08T15:17:32.456-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interop'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='WSE'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificados'/><title type='text'>Interoperabilidad de WebServices con certificados entre .NET con WSE y Java</title><content type='html'>&lt;p style="clear: both"&gt;Pese a que el "espíritu" del standard de WebServices, WS-Security, y demas yerbas planteadas en las RFC supondrían una facilidad para la interoperabilidad ente diferentes plataformas, al intentar llevarlas a la realidad las asperezas surgen... y explotan en nuestra cara.&lt;/p&gt;&lt;p style="clear: both"&gt;Hace un tiempo, en Lagash tuvimos que implementar un TokenManager (entre otras cosas) para poder traducir los llamados hechos desde WSE 3 a Java, utilizando certificados de seguridad.&lt;/p&gt;&lt;p style="clear: both"&gt;Luego de estar funcionando sin problemas por casi dos años, el servicio comenzó a fallar al momento de recibir la respuesta de un pedido, con un mensaje que decía "WSE590: Failed to resolve the following key info"... y mostraba uno de los nodos de Key Info, conteniendo &lt;em&gt;supuestamente&lt;/em&gt; el Subject Key Identifier del certificado necesario para desencriptar el mensaje.&lt;/p&gt;&lt;p style="clear: both"&gt;El problema resultó ser que, dado que el nuevo certificado que comenzaron a usar no contenía la extensión de Subject Key Identifier, para poder identificarlo, tanto Java como WSE generaban un hash del certificado. El &lt;em&gt;gran problema gran&lt;/em&gt; era que los hashes eran calculados de forma distinta!&lt;/p&gt;&lt;p style="clear: both"&gt;Para poder solucionarlo, dentro del input filter de los mensajes hubo que reemplazar la porción de SOAP que indica el certificado a utilizar por una creada a mano que indique el certificado concreto (que, de hecho, siempre es el mismo que se utiliza al enviar el mensaje original).&lt;/p&gt;&lt;p style="clear: both"&gt;Para mas información: &lt;a href="http://support.microsoft.com/kb/922779/en-us" target="_blank"&gt;http://support.microsoft.com/kb/922779/en-us&lt;/a&gt; (el problema no es &lt;em&gt;exactamente&lt;/em&gt; el mismo, pero el approach para solucionarlo es muy similar).&lt;/p&gt;&lt;p style="clear: both"&gt;Saludos!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7962017619330892515?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7962017619330892515/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7962017619330892515' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7962017619330892515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7962017619330892515'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/10/interoperabilidad-de-webservices-con.html' title='Interoperabilidad de WebServices con certificados entre .NET con WSE y Java'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4315493886298004591</id><published>2009-10-04T19:24:00.001-03:00</published><updated>2009-10-04T19:24:58.291-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><title type='text'>WPF y VMWare Fusion</title><content type='html'>&lt;p style="clear: both"&gt;Si alguna vez tratan de usar WPF desde una maquina virtual en VMWare Fusion, notarán que la aplicación se torna inusable.&lt;br /&gt;Para poder solucionar esto hay que desactivar la aceleración por hardware de WPF dentro de la VM. Esto se hacer creando el siguiente DWORD dentro del registro de windows:&lt;br /&gt;HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration&lt;br /&gt;y seteando su valor a 1.&lt;/p&gt;&lt;p style="clear: both"&gt;Fuente: &lt;a href="http://blog.joachim.at/?p=19" target="_blank"&gt;http://blog.joachim.at/?p=19&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4315493886298004591?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4315493886298004591/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4315493886298004591' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4315493886298004591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4315493886298004591'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/10/wpf-y-vmware-fusion.html' title='WPF y VMWare Fusion'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8453935202696381114</id><published>2009-09-27T23:17:00.001-03:00</published><updated>2009-09-27T23:17:56.111-03:00</updated><title type='text'>Extensiones para Monobjc</title><content type='html'>Aca dejo para bajar los fuentes de zPod.Objc.dll, librería que contiene la implementación de la clase KVCBase y algunos helpers para trabajar con Monobjc en la Mac.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?00izmomfwnn" target="_blank"&gt;Fuentes de zPod.Objc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Saludos!&lt;br /&gt;Z&lt;/div&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8453935202696381114?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8453935202696381114/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8453935202696381114' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8453935202696381114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8453935202696381114'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/09/extensiones-para-monobjc.html' title='Extensiones para Monobjc'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6995356416814158411</id><published>2009-09-26T18:11:00.001-03:00</published><updated>2009-09-26T18:11:40.613-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Yapa</title><content type='html'>&lt;p style="clear: both"&gt;Como yapa, dejo también la presentación de la charla introductoria a ASP.NET MVC que dimos con RodoF en la UTN de Rosario el viernes&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://www.mediafire.com/download.php?fhnmnycmm3a" target="_blank"&gt;ASP.NET MVC&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6995356416814158411?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6995356416814158411/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6995356416814158411' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6995356416814158411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6995356416814158411'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/09/yapa.html' title='Yapa'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8323453622379515747</id><published>2009-09-26T18:04:00.003-03:00</published><updated>2010-10-18T00:16:53.290-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoDevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeCamp'/><title type='text'>CodeCamp 2009</title><content type='html'>&lt;p style="clear: both"&gt;Para quienes no pudieron ir a alguna de las charlas del CodeCamp 2009 en las que participe, o quieren repasar el contenido, dejo disponible lo mostrado en el evento.&lt;/p&gt;&lt;p style="clear: both"&gt;Saludos!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://www.mediafire.com/download.php?gbzbmyzttg0" target="_blank"&gt;Monos y Manzanas - Programando para Mac en .NET&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;u&gt;&lt;a href="http://www.mediafire.com/download.php?d3nim3mdjmi" target="_blank"&gt;Conociendo al Dúo Dinámico: C# 4 y VS2010&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8323453622379515747?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8323453622379515747/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8323453622379515747' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8323453622379515747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8323453622379515747'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/09/codecamp-2009.html' title='CodeCamp 2009'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5066209595174966650</id><published>2009-08-07T00:51:00.001-03:00</published><updated>2009-08-07T00:53:14.518-03:00</updated><title type='text'>NerdDinnerBA: conclusión 2</title><content type='html'>El beber es perjudicial para la salud&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5066209595174966650?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5066209595174966650/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5066209595174966650' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5066209595174966650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5066209595174966650'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/08/nerddinnerba-conclusion-2.html' title='NerdDinnerBA: conclusión 2'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8148639996909126652</id><published>2009-08-07T00:47:00.001-03:00</published><updated>2009-08-07T00:50:04.848-03:00</updated><title type='text'>NerdDinnerBA: conclusión 1</title><content type='html'>Definición de JavaScript:&lt;br /&gt;- lenguaje de los conejos&lt;br /&gt;- madriguera&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Z&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8148639996909126652?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8148639996909126652/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8148639996909126652' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8148639996909126652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8148639996909126652'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/08/nerddinnerba-conclusiones.html' title='NerdDinnerBA: conclusión 1'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2026551491218949102</id><published>2009-07-31T09:41:00.001-03:00</published><updated>2009-07-31T09:41:37.701-03:00</updated><title type='text'>Como hacer que nant funcione con mono en OS X</title><content type='html'>&lt;p style="clear: both"&gt;En el sitio de &lt;a href="http://www.monobjc.net/" title="Monobjc" target="_blank"&gt;Monobjc&lt;/a&gt;, dice que para compilar y armar el paquete de aplicación para un programa hecho con una interfaz Cocoa y Monobjc se debe utilizar un script de nant que ellos proveen.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div&gt;El problema es que al intentar ejecutarlo nant se queja diciendo que le faltan ciertas librerías.&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div&gt;&lt;br /&gt;Para poder solucionarlo hay que hacer dos cosas:&lt;br /&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Crear un SymLink de /Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config a /usr/bin/pkg-config&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Editar el archivo /Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/mono.pc y comentar la linea que comienza con "Requires"&lt;/li&gt;&lt;/ul&gt;Con esto hecho, podrán utilizar sin problemas el script de nant para armar los .app de mono!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Saludos!&lt;br /&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2026551491218949102?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2026551491218949102/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2026551491218949102' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2026551491218949102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2026551491218949102'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/07/como-hacer-que-nant-funcione-con-mono.html' title='Como hacer que nant funcione con mono en OS X'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6593712768870293983</id><published>2009-07-23T11:27:00.001-03:00</published><updated>2009-07-23T11:27:36.105-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>.NET Tip: Validación de requests con SSL usando System.Net.WebClient</title><content type='html'>&lt;p style="clear: both"&gt;¿Cuantas veces han querido hacer un request a una página por HTTPS y su certificado no era válido? Posiblemente nunca, pero en caso de querer hacerlo se encontrarán con que, por default, &lt;em&gt;System.Net.WebClient&lt;/em&gt; rechazará el pedido por motivos de seguridad. Para poder pasar esta validación por arriba hay que hacer el pequeño triquiñuelo de agregar un callback a &lt;em&gt;ServicePointManager.ServerCertificateValidationCallback&lt;/em&gt; antes de hacer el request utilizando el WebClient:&lt;/p&gt;&lt;pre style="clear: both"&gt;public void RequestSSL(string url)&lt;br /&gt;{&lt;br /&gt;	ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);&lt;br /&gt;	using (WebClient client = new WebClient())&lt;br /&gt;	{&lt;br /&gt;		client.DownloadString(url);&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="clear: both"&gt;private static bool ValidateRemoteCertificate(&lt;br /&gt;	object sender,&lt;br /&gt;	X509Certificate certificate,&lt;br /&gt;	X509Chain chain,&lt;br /&gt;	SslPolicyErrors policyErrors)	&lt;br /&gt;{&lt;br /&gt;	return true;&lt;br /&gt;}&lt;/pre&gt;&lt;p style="clear: both"&gt;Espero que a alguien le sirva!&lt;br /&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6593712768870293983?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6593712768870293983/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6593712768870293983' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6593712768870293983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6593712768870293983'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/07/net-tip-validacion-de-requests-con-ssl.html' title='.NET Tip: Validación de requests con SSL usando System.Net.WebClient'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4701093824783088981</id><published>2009-07-18T12:22:00.000-03:00</published><updated>2009-07-18T12:28:13.642-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Probando Blogo desde la Mac</title><content type='html'>&lt;p style="clear: both"&gt;Mr. Kus me pasó el link a este programa de blogging para Mac, frente a mi pedido de algún soft que pudiese reemplazar a mi querido &lt;em&gt;Live Writer&lt;/em&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Por ahora parece bastante bueno. Cuando tenga un post mas largo para escribir, espero poder confirmarlo.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/SmHqCxDhJOI/AAAAAAAAAXY/2hQVf1wEW8M/s800/Picture_1-full1.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_TEAv5Jw76vg/SmHqAKzuywI/AAAAAAAAAXU/_xOMm_9xy2E/s800/Picture_1-thumb1.png" height="237" width="225" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4701093824783088981?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4701093824783088981/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4701093824783088981' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4701093824783088981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4701093824783088981'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/07/probando-blogo-desde-la-mac.html' title='Probando Blogo desde la Mac'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_TEAv5Jw76vg/SmHqAKzuywI/AAAAAAAAAXU/_xOMm_9xy2E/s72-c/Picture_1-thumb1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-962388213652321672</id><published>2009-07-14T23:13:00.003-03:00</published><updated>2010-10-18T00:17:38.201-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interface Builder'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoDevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Monos y Manzanas: Key Value Coding y Configuración</title><content type='html'>&lt;p&gt;Hacia el final de la entrega anterior de &lt;em&gt;Monos y Manzanas&lt;/em&gt; estuve contando sobre como utilizar los bindings de Cocoa con Monobjc. En el capítulo final de esta serie de posts veremos como es posible agilizar la implementación de clases que utilicen &lt;em&gt;Key Value Coding&lt;/em&gt; (KVC de ahora en mas) desde .NET y como agregar un panel de preferencias para modificar la configuración de la aplicación y que la misma sea persistida de forma automática.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Ante todo, fe de erratas: una persona del equipo de MonobjC con la cual me contacté, me acalró que no es necesario crear una instancia que nadie usa de NSAutoReleasePool en el bootstrapping de la aplicación, ya que eso se hace automáticamente.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;En el último ejemplo mostrado, cada vez que se quería implementar una propiedad que pudiese ser utilizada para los bindings con KVC era necesario crear los setters y getters, indicarles que iban a ser llamados como mensajes de ObjectiveC y llamar a las notificaciones de cambios de propiedad.   &lt;br /&gt;Para no tener que hacer esto por cada propiedad que queramos exponer al runtime de ObjectiveC, crearemos un nuevo atributo el cual &lt;em&gt;indique&lt;/em&gt; que esa propiedad podrá ser utilizada con KVC:&lt;/p&gt;  &lt;pre&gt;using System;&lt;br /&gt;&lt;br /&gt;namespace zPod.Objc&lt;br /&gt;{&lt;br /&gt;   public class KeyValueCodingAttribute : Attribute&lt;br /&gt;   {&lt;br /&gt;       public KeyValueCodingAttribute (string propertyName)&lt;br /&gt;       {&lt;br /&gt;           PropertyName = propertyName;&lt;br /&gt;       }&lt;br /&gt;      &lt;br /&gt;       public string PropertyName&lt;br /&gt;       {&lt;br /&gt;           get;&lt;br /&gt;           set;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Teniendo esto, las propiedades que querramos exponer se verán así:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;[KeyValueCoding("modelo")]&lt;br /&gt;public BrowserModel Modelo&lt;br /&gt;{&lt;br /&gt;   get;&lt;br /&gt;   set;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Muy lindo hasta ahora pero... ¿Como le indicamos al runtime de ObjectiveC que deberá tomar la propiedad "modelo" al intentar llamar al mensaje "modelo" o "setModelo:"? Simple, sobreescribiendo el llamado a los mensajes "setValue:forUndefinedKey:" y "valueForUndefinedKey"&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;[ObjectiveCMessage("setValue:forUndefinedKey:")]&lt;br /&gt;public override void SetValueForUndefinedKey (Id val, NSString key)&lt;br /&gt;{&lt;br /&gt;   this.ResolveSetValueForUndefinedKey(val, key);&lt;br /&gt;}&lt;br /&gt;      &lt;br /&gt;[ObjectiveCMessage("valueForUndefinedKey:")]&lt;br /&gt;public override Id ValueForUndefinedKey (NSString key)&lt;br /&gt;{&lt;br /&gt;   return this.ResolveValueForUndefinedKey(key);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Al no encontrar una clave definida, Cocoa avisa a la clase que se intento leer o dar valor a la clave utilizando estos mensajes.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;En estas implementaciones se está llamando a los métodos &lt;em&gt;ResolveSetValueForUndefinedKey &lt;/em&gt;y &lt;em&gt;ResolveValueForUndefinedKey&lt;/em&gt;. Los mismos son extension methods creados para la clase &lt;em&gt;NSObject &lt;/em&gt;que resuelven cual es la propiedad que deberá ser devuelta o modificada utilizando reflection para saber si tienen el atributo definido anteriormente. El código de estos métodos se incluye dentro de los fuentes de este ejemplo.&lt;/p&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;Hacia el final de la entrega anterior de &lt;em&gt;Monos y Manzanas&lt;/em&gt; comenté que Cocoa proveía un controller especial llamado &lt;em&gt;NSUserDefaultsController&lt;/em&gt; que permite guardar automáticamente las preferencias del usuario.&lt;br /&gt;Ahora vamos a ver como crear un nuevo panel de preferencias donde configurar la URL Home de nuestro browser.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Volviendo al Interface Builder, agregamos un nuevo NSPanel y le agregamos un TextField para ingresar la URL Home&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_TEAv5Jw76vg/Sl067tmhupI/AAAAAAAAAWg/7iny61_lM88/s1600-h/Picture%201%5B3%5D.png"&gt;&lt;img title="Picture 1" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="88" alt="Picture 1" src="http://lh3.ggpht.com/_TEAv5Jw76vg/Sl068KDxcDI/AAAAAAAAAWk/_qcxNbXNoew/Picture%201_thumb%5B1%5D.png?imgmax=800" width="378" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Para poder abrir el panel desde el menu de preferencias, conectamos la opción &lt;em&gt;Preferences...&lt;/em&gt; del menú con el panel creado, asociándolo a la acción &lt;em&gt;makeKeyAndOrderFront:&lt;/em&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_TEAv5Jw76vg/Sl06_HyFsNI/AAAAAAAAAWo/AXkip_OhlLg/s1600-h/Picture%203%5B3%5D.png"&gt;&lt;img title="Picture 3" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="388" alt="Picture 3" src="http://lh4.ggpht.com/_TEAv5Jw76vg/Sl07Cc99WJI/AAAAAAAAAWs/Q2oq1wdnstc/Picture%203_thumb%5B1%5D.png?imgmax=800" width="385" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Dado que se necesita únicamente una instancia de este panel, lo configuramos como se muestra en la siguiente imagen. Lo mas importante es desmascar las opciones &lt;em&gt;Released When Closed&lt;/em&gt; y &lt;em&gt;Visible at launch&lt;/em&gt; para que no se muestre al incio, pero que al cerrar la ventana solamente se oculte y no se destruya el objeto.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/Sl07DnlWGlI/AAAAAAAAAWw/MkIE6B0yt9E/s1600-h/Picture%202%5B5%5D.png"&gt;&lt;img title="Picture 2" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="531" alt="Picture 2" src="http://lh3.ggpht.com/_TEAv5Jw76vg/Sl07Et2_rlI/AAAAAAAAAW0/LlalSVZYflo/Picture%202_thumb%5B3%5D.png?imgmax=800" width="229" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Creamos el binding para el &lt;em&gt;value&lt;/em&gt; del TextField, conectándolo con la instancia de &lt;em&gt;SharedUserDefaultsController&lt;/em&gt;, utilizando la clave &lt;em&gt;values&lt;/em&gt; y el model key path &lt;em&gt;homePage&lt;/em&gt;.&lt;br /&gt;Al utilizar este controller, los valores conectados serán persistidos automáticamente.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/Sl07F_YJ-CI/AAAAAAAAAW4/_nUjnxw3OlY/s1600-h/Picture%204%5B3%5D.png"&gt;&lt;img title="Picture 4" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="558" alt="Picture 4" src="http://lh5.ggpht.com/_TEAv5Jw76vg/Sl07HC4_qiI/AAAAAAAAAW8/qmWUXE_y_34/Picture%204_thumb%5B1%5D.png?imgmax=800" width="232" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Como último paso dentro del Interface Builder, agregamos un nuevo boton para ir a la home, agregamos una nueva acción llamada &lt;em&gt;goHome:&lt;/em&gt; al &lt;em&gt;BrowserController&lt;/em&gt; y los asociamos de la misma manera que el boton &lt;em&gt;Go&lt;/em&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_TEAv5Jw76vg/Sl07H114X1I/AAAAAAAAAXA/P-J9eJFD3yQ/s1600-h/Picture%205%5B3%5D.png"&gt;&lt;img title="Picture 5" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="287" alt="Picture 5" src="http://lh5.ggpht.com/_TEAv5Jw76vg/Sl07IUWa2GI/AAAAAAAAAXE/34yStQRQLD0/Picture%205_thumb%5B1%5D.png?imgmax=800" width="425" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Volviendo a C#, Dentro del código del &lt;em&gt;BrowserController&lt;/em&gt;, modificamos el método &lt;em&gt;AwakeFromNib&lt;/em&gt; y agregamos el método que responda al mensaje &lt;em&gt;goHome:&lt;/em&gt;, para que al iniciar la aplicación vaya a la URL definida como home y, en caso de no haber nada, definirle un valor default (recuenden que en &lt;em&gt;_userDefaults&lt;/em&gt; tenemos guardada una instancia de &lt;em&gt;SharedUserDefaultsController&lt;/em&gt;):&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;[ObjectiveCMessage("goHome:")]&lt;br /&gt;public void GoHome(Id sender)&lt;br /&gt;{&lt;br /&gt;   NSString home = _userDefaults.ValueForKeyPath("values.homePage");&lt;br /&gt;   this.Modelo.WillChangeValueForKey("url");&lt;br /&gt;   this.Modelo.Url = home;&lt;br /&gt;   this.Modelo.DidChangeValueForKey("url");&lt;br /&gt;   Browse(sender);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[ObjectiveCMessage("browse:")]&lt;br /&gt;public void Browse(Id sender)&lt;br /&gt;{&lt;br /&gt;   NSString url = this.Modelo.Url;&lt;br /&gt;   browser.MainFrameURL = url;&lt;br /&gt;   _userDefaults.SetValueForKeyPath("CocoaBrowser - " + url, "values.title"); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[ObjectiveCMessage("awakeFromNib")]&lt;br /&gt;public void AwakeFromNib ()&lt;br /&gt;{&lt;br /&gt;   NSString home = _userDefaults.ValueForKeyPath("values.homePage");&lt;br /&gt;   if (home == null)&lt;br /&gt;   {&lt;br /&gt;       _userDefaults.SetValueForKeyPath(new NSString("http://zPod.com.ar"), "values.homePage");&lt;br /&gt;   }&lt;br /&gt;  &lt;br /&gt;   GoHome(null);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Listo! Ahora a compilar y a disfrutar de su nuevo browser con botón de Home &lt;em&gt;para Mac hecho en .NET&lt;/em&gt;!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_TEAv5Jw76vg/Sl07LOtfAAI/AAAAAAAAAXI/1YCbIkjyh28/s1600-h/Picture%206%5B4%5D.png"&gt;&lt;img title="Picture 6" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="352" alt="Picture 6" src="http://lh3.ggpht.com/_TEAv5Jw76vg/Sl07MqofNLI/AAAAAAAAAXM/PvRNewsjymc/Picture%206_thumb%5B2%5D.png?imgmax=800" width="451" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Con esto queda finalizada la serie de posts: &lt;em&gt;Monos y Manzanas&lt;/em&gt;. El código completo lo pueden bajar de &lt;a href="http://www.mediafire.com/download.php?uwyx5ommlmz" target="_blank"&gt;aca&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-962388213652321672?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/962388213652321672/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=962388213652321672' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/962388213652321672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/962388213652321672'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/07/monos-y-manzanas-key-value-coding-y.html' title='Monos y Manzanas: Key Value Coding y Configuración'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_TEAv5Jw76vg/Sl068KDxcDI/AAAAAAAAAWk/_qcxNbXNoew/s72-c/Picture%201_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-748460031132191235</id><published>2009-07-12T11:05:00.003-03:00</published><updated>2009-07-12T16:13:15.954-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interface Builder'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoDevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><title type='text'>Monos y Manzanas: Binding entre la UI y el Modelo</title><content type='html'>&lt;p&gt;En el último post expliqué como hacer una aplicación sencilla para Mac cuya UI estaba hecha con Interface Builder, y el resto de la &lt;em&gt;plomería de fondo&lt;/em&gt; utilizaba C#, gracias a &lt;em&gt;Mono&lt;/em&gt; y el bridge &lt;em&gt;Monobjc&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;Dada la &lt;em&gt;extrema&lt;/em&gt; simplicidad de nuestro &lt;em&gt;CocoaBrowser&lt;/em&gt;, hubieron algunos conceptos que escaparon al ejemplo inicial. &lt;/p&gt;  &lt;p&gt;En esta nueva entrega de &lt;em&gt;Monos y Manzanas&lt;/em&gt; veremos como hacer uso del &lt;em&gt;binding&lt;/em&gt; provisto por &lt;em&gt;Cocoa&lt;/em&gt; y el &lt;em&gt;Interface Builder&lt;/em&gt; para &lt;em&gt;conectar&lt;/em&gt; nuestra interfaz gráfica al Modelo de nuestra aplicación.&lt;/p&gt;  &lt;p&gt;Por ahora, definiremos una nueva clase &lt;em&gt;BrowserModel&lt;/em&gt;, la cual representará el “modelo” de nuestra apliación de juguete.&lt;/p&gt;  &lt;pre&gt;public class BrowserModel&lt;br /&gt;{&lt;br /&gt; private string _url;&lt;br /&gt; public string GetUrl()&lt;br /&gt; {&lt;br /&gt;  return _url;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void SetUrl(string newUrl)&lt;br /&gt; {&lt;br /&gt;  _url = newUrl;&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Posiblemente se pregunten: &lt;em&gt;Por qué la propiedad esta definida con metodos Get y Set, en vez se ser una propiedad “normal” de C#, al estilo “public string Url { get; set'; }”? &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Es por un requerimiento del bridge con Objective-C y el binding con la UI, pero vamos a verlo bien mas adelante.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;La idea es que lo que usuario tipee dentro del TextField utilizado para ingresar la URL de nuestro browser actualice automáticamente nuestro modelo y, en caso de actualizar el modelo desde otro lugar, se actualice automáticamente el TextField.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Para poder hacer esto, agregaremos un nuevo campo a la clase BrowserController que nos de acceso al modelo, y lo haremos visible para el bridge, con los siguientes getter y setter:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;[ObjectiveCClass]&lt;br /&gt;public class BrowserController : NSObject&lt;br /&gt;{&lt;br /&gt; //&lt;br /&gt; // Mucho codigo antes...&lt;br /&gt; //&lt;br /&gt;&lt;br /&gt; private BrowserModel _modelo = new BrowserModel();&lt;br /&gt;&lt;br /&gt; [ObjectiveCMessage(&amp;quot;modelo&amp;quot;)]&lt;br /&gt; public BrowserModel getModelo()&lt;br /&gt; {&lt;br /&gt;  return _modelo;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [ObjectiveCMessage(&amp;quot;setModelo:&amp;quot;)]&lt;br /&gt; public void setModelo(BrowserModel nuevoModelo)&lt;br /&gt; {&lt;br /&gt;  WillChangeValueForKey(&amp;quot;modelo&amp;quot;);&lt;br /&gt;  _modelo = nuevoModelo;&lt;br /&gt;  DidChangeValueForKey(&amp;quot;modelo&amp;quot;);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //&lt;br /&gt; // Mucho codigo despues...&lt;br /&gt; //&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Esta forma de crear los campos permite a ObjectiveC utilizar la clase con algo conocido como &lt;em&gt;Key Value Coding&lt;/em&gt;, accediendo a ciertas propiedades de nuestra clase como si fuesen pares Clave - Valor, tanto para leer como para escribir. &lt;br /&gt;&lt;br /&gt;Los métodos &lt;em&gt;WillChangeValueForKey&lt;/em&gt; y &lt;em&gt;DidChangeValueForKey&lt;/em&gt; permiten avisarle a la UI que hubo un cambio en el valor la propiedad.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Para que las propiedades de la clase &lt;em&gt;BrowserModel&lt;/em&gt; sean accesibles de la misma manera, las decoramos de forma similar, quedando como resultado:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;[ObjectiveCClass]&lt;br /&gt;public class BrowserModel : NSObject&lt;br /&gt;{&lt;br /&gt; // Constructores requeridos por NSObject&lt;br /&gt; public BrowserModel()&lt;br /&gt; {&lt;br /&gt; }&lt;br /&gt;  &lt;br /&gt; public BrowserModel (IntPtr nativePointer) : base(nativePointer)&lt;br /&gt; {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private string _url;&lt;br /&gt;&lt;br /&gt; [ObjectiveCMessage(&amp;quot;url&amp;quot;)]&lt;br /&gt; public string GetUrl()&lt;br /&gt; {&lt;br /&gt;  return _url;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; [ObjectiveCMessage(&amp;quot;setUrl:&amp;quot;)]&lt;br /&gt; public void SetUrl(string newUrl)&lt;br /&gt; {&lt;br /&gt;  WillChangeValueForKey(&amp;quot;url&amp;quot;);&lt;br /&gt;  _url = newUrl;&lt;br /&gt;  DidChangeValueForKey(&amp;quot;url&amp;quot;);&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Como pueden ver, es requisito agregar el atributo &lt;em&gt;[ObjectiveCClass]&lt;/em&gt; y hacer heredar la clase de &lt;em&gt;NSObject&lt;/em&gt; (o algún hijo) para que la misma sea visible desde ObjectiveC. Al hacer esto, deberán agregar los dos constructores indicados en el código.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Dado que ahora el URL a navegar será indicado por las propiedades del modelo, podemos sacar la referencia al TextField del &lt;em&gt;BrowserController&lt;/em&gt; y modificar el metodo Browse de la siguiente manera:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;[ObjectiveCClass]&lt;br /&gt;public class BrowserController : NSObject&lt;br /&gt;{&lt;br /&gt; //&lt;br /&gt; // Mucho codigo antes...&lt;br /&gt; //&lt;br /&gt;&lt;br /&gt; [ObjectiveCMessage(&amp;quot;browse:&amp;quot;)]&lt;br /&gt; public void Browse(Id sender)&lt;br /&gt; {&lt;br /&gt;  string url = this.fModelo.getUrl();&lt;br /&gt;  browser.MainFrameURL = url;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //&lt;br /&gt; // Mucho codigo despues...&lt;br /&gt; //&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Con esto listo, solo resta hacer los bindings propiamente dichos en el Interface Builder.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;El primer paso será agregar un &lt;em&gt;ObjectController&lt;/em&gt; desde la &lt;em&gt;Library&lt;/em&gt;. Este tipo de controller nos permite hacer binding facilmente a un objeto concreto del modelo. En caso de querer hacer binding contra Arrays, Diccionarios y otros tipos de datos, existen controllers mas apropiados.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/Slntex3VJWI/AAAAAAAAAWA/2J0S8ytZyDE/s1600-h/Picture%201%5B5%5D.png"&gt;&lt;img title="Picture 1" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="532" alt="Picture 1" src="http://lh3.ggpht.com/_TEAv5Jw76vg/SlntgVHI7gI/AAAAAAAAAWE/LwfpePgLhhI/Picture%201_thumb%5B3%5D.png?imgmax=800" width="248" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Dentro de los atributos del &lt;em&gt;ObjectController&lt;/em&gt;, agregar una nueva clave llamada “url”, la cual usaremos como nexo entre el modelo y la UI.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_TEAv5Jw76vg/Slntg9UCvfI/AAAAAAAAAWI/5HbXUrxMM2k/s1600-h/Picture%202%5B4%5D.png"&gt;&lt;img title="Picture 2" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="597" alt="Picture 2" src="http://lh4.ggpht.com/_TEAv5Jw76vg/SlnthrLA75I/AAAAAAAAAWM/vvjrgvLzXuY/Picture%202_thumb%5B2%5D.png?imgmax=800" width="252" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Dentro de los bindings del &lt;em&gt;ObjectController&lt;/em&gt;, indicamos que el &lt;em&gt;Controller Content&lt;/em&gt; debe hacer binding con el &lt;em&gt;BrowserController&lt;/em&gt;, utilizando como &lt;em&gt;Model Key Path&lt;/em&gt; “modelo”. Esto hará referencia a la propiedad &lt;em&gt;modelo&lt;/em&gt; que creamos – e hicimos visible con setter y getter para ObjectiveC – dentro de la clase creada en C#.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/SlntidB_KRI/AAAAAAAAAWQ/ZceZIbvuuac/s1600-h/Picture%203%5B3%5D.png"&gt;&lt;img title="Picture 3" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="612" alt="Picture 3" src="http://lh6.ggpht.com/_TEAv5Jw76vg/SlntjsGuFQI/AAAAAAAAAWU/TggQGUdpF0Q/Picture%203_thumb%5B1%5D.png?imgmax=800" width="254" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Finalmente, seleccionamos el TextField de la URL y dentro de la solapa de bindings indicamos que se deberá hacer el binding con el&lt;em&gt; ObjectController&lt;/em&gt;, utilizando “selection” como &lt;em&gt;Controller Key y “url” como Model Key Path&lt;/em&gt;. Para que el modelo se actualice &lt;em&gt;cada vez que se modifica &lt;/em&gt;el TextField y no únicamente al terminar de editarlo cambiando el foco, deberemos marcar el check de “Continuosly Update Value”.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/Slntkv_C5xI/AAAAAAAAAWY/CAom32P2cSg/s1600-h/Picture%204%5B3%5D.png"&gt;&lt;img title="Picture 4" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="622" alt="Picture 4" src="http://lh6.ggpht.com/_TEAv5Jw76vg/SlntmMa45cI/AAAAAAAAAWc/TZ-1t2GXvqc/Picture%204_thumb%5B1%5D.png?imgmax=800" width="258" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Como yapa, en esta versión de los fuentes, podrán ver como hacer binding contra una clase especial llamada &lt;em&gt;NSUserDefaultsController&lt;/em&gt;, la cual nos permite mantener guardadas las preferencias del usuario haciendo binding contra las mismas. En este ejemplo se utiliza para guardar el titulo de la ventana de la aplicación, aunque su utilidad mas común es dentro de los paneles de preferencias.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;El código lo pueden bajar de &lt;a href="http://www.mediafire.com/download.php?mghzgyn0y0y" target="_blank"&gt;aca&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-748460031132191235?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/748460031132191235/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=748460031132191235' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/748460031132191235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/748460031132191235'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/07/monos-y-manzanas-binding-entre-la-ui-y.html' title='Monos y Manzanas: Binding entre la UI y el Modelo'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_TEAv5Jw76vg/SlntgVHI7gI/AAAAAAAAAWE/LwfpePgLhhI/s72-c/Picture%201_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4309538633168858697</id><published>2009-07-08T01:32:00.002-03:00</published><updated>2009-07-08T08:47:22.420-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interface Builder'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoDevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Monos y Manzanas: Como hacer aplicaciones Cocoa con .NET</title><content type='html'>&lt;p&gt;Desde que soy usuario de OS X he intentado varias veces desarrollar alguna aplicación que pueda aprovechar todo el poder de la plataforma .NET y las delicias gráficas de las interfaces gráficas creadas con &lt;strong&gt;Cocoa &lt;/strong&gt;y sus frameworks para Mac. &lt;/p&gt;  &lt;p&gt;La necesidad de utilizar .NET sobre el sistema operativo impulsado por &lt;em&gt;Steve Jobs &lt;/em&gt;está cubierta desde hace un buen tiempo por la gente de &lt;strong&gt;Mono &lt;/strong&gt;y su implementación multiplataforma del CLR y gran mayoría de las librerías incluidas en el &lt;em&gt;.NET Framework&lt;/em&gt;.    &lt;br /&gt;El problema radicaba en como poder interactuar de forma simple y comoda con una UI hecha en Cocoa y no con el - &lt;em&gt;bastante sovietico &lt;/em&gt;- port de &lt;em&gt;Windows.Forms &lt;/em&gt;que incluye Mono, o con librerías graficas como &lt;em&gt;GTK &lt;/em&gt;que se ven bastante &lt;em&gt;alienigenas&lt;/em&gt; dentro de la Mac. &lt;/p&gt;  &lt;p&gt;Investigando un poco, encontré que existen varios proyectos que hacen de &lt;em&gt;bridge&lt;/em&gt; entre el mundo de Mono&lt;em&gt; &lt;/em&gt;y .NET y los frameworks provistos por Cocoa.    &lt;br /&gt;Inicialmente, utilicé la librería publicada en el mismo sitio de Mono: &lt;strong&gt;Cocoa#&lt;/strong&gt;. El problema fue que, pese a su simplicidad, tenía demasiados problemas de performance y estabilidad, por lo que quedó descartada. &lt;/p&gt;  &lt;p&gt;Hace no mucho leí de otro bridge que, apartentemente, tiene bastante aceptación: &lt;strong&gt;Monobjc&lt;/strong&gt;. Estas librerías permiten utilizar tanto una interfaz creada en Cocoa y sus frameworks desde una aplicación .NET como exponer - &lt;em&gt;con ciertas restricciones &lt;/em&gt;- clases hechas en .NET dentro de una aplicación nativa hecha en Cocoa y ObjectiveC. &lt;/p&gt;  &lt;p&gt;En este caso voy a explicar, paso a paso, como crear una nueva aplicación que nos permita navegar por la web cuya (única) View esté desarrollada con Cocoa utilizando el &lt;em&gt;Interface Builder &lt;/em&gt;y el Controller y (ausente) Model estén hechos en C#&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Requerimientos&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Mac OS X Leopard &lt;/li&gt;    &lt;li&gt;XCode + Interface Builder (se baja gratis de la página de apple) &lt;/li&gt;    &lt;li&gt;Bridge de Monobjc (&lt;a href="http://www.monobjc.net"&gt;http://www.monobjc.net&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Mono Runtime y MonoDevelop (&lt;a href="http://go-mono.com"&gt;http://go-mono.com&lt;/a&gt;) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Para empezar vamos a crear una nueva &lt;strong&gt;View &lt;/strong&gt;utilizando &lt;em&gt;Interface Builder &lt;/em&gt;(se recomienda tener al menos conocimientos básicos sobre como utilizar Interface Builder). &lt;/p&gt;  &lt;p&gt;Al abrir Interface Builder seleccionamos el template de &lt;em&gt;Cocoa Application&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_TEAv5Jw76vg/SlQhC61_SfI/AAAAAAAAAVI/cPJtRyHf98Y/s1600-h/1.%20NuevaApp%5B4%5D.png"&gt;&lt;img title="1. NuevaApp" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="298" alt="1. NuevaApp" src="http://lh4.ggpht.com/_TEAv5Jw76vg/SlQhDkh1hYI/AAAAAAAAAVM/at31uQKYgD0/1.%20NuevaApp_thumb%5B2%5D.png?imgmax=800" width="373" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Una vez creado el proyecto, podremos ver la ventana principal creada para la aplicación, su menú, el listado de objetos existentes, el inspector donde podrémos modificar propiedades de los controles y la librería de controles disponibles desde Cocoa&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/SlQhGy0qSoI/AAAAAAAAAVQ/P5Qa7GYtgVw/s1600-h/2.%20Empezar%5B3%5D.png"&gt;&lt;img title="2. Empezar" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="257" alt="2. Empezar" src="http://lh6.ggpht.com/_TEAv5Jw76vg/SlQhIDtV80I/AAAAAAAAAVU/KfAH1XYYh1w/2.%20Empezar_thumb%5B1%5D.png?imgmax=800" width="385" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;En la librería de controles buscamos los controles de &lt;em&gt;WebView&lt;/em&gt;, &lt;em&gt;TextField &lt;/em&gt;y &lt;em&gt;Button &lt;/em&gt;y los agregamos a la ventana, como se ve en la imagen. Pueden modificar las propiedades de estos controles en el inspector para permitirles ajustar su tamaño de acuerdo al resizing de la ventana.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/SlQhIohTIuI/AAAAAAAAAVY/0jOWlNfw7jk/s1600-h/5.%20VentanaLista%5B3%5D.png"&gt;&lt;img title="5. VentanaLista" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="262" alt="5. VentanaLista" src="http://lh3.ggpht.com/_TEAv5Jw76vg/SlQhJewB57I/AAAAAAAAAVc/0PZZa9lTcak/5.%20VentanaLista_thumb%5B1%5D.png?imgmax=800" width="387" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Con la ventana lista, agregamos un nuevo &lt;em&gt;Object&lt;/em&gt; a la ventana que contiene la lista de objetos disponibles, y cambiamos el nombre de su clase por &lt;em&gt;ObjectController&lt;/em&gt;. Este será el objeto que represente al Controller que crearemos desde C# mas adelante.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_TEAv5Jw76vg/SlQhKcBLC2I/AAAAAAAAAVg/wwRerb3DkQc/s1600-h/6.%20NuevoObject%5B4%5D.png"&gt;&lt;img title="6. NuevoObject" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="384" alt="6. NuevoObject" src="http://lh3.ggpht.com/_TEAv5Jw76vg/SlQhLXNRb7I/AAAAAAAAAVk/7GoohU3Ko1k/6.%20NuevoObject_thumb%5B2%5D.png?imgmax=800" width="231" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Dentro de las &lt;em&gt;actions&lt;/em&gt; disponibles para el controller deberemos agregar "&lt;em&gt;browse:&lt;/em&gt;" que corresponderá a la acción de iniciar la navegación del URL escrito en el &lt;em&gt;TextField &lt;/em&gt;anterior.    &lt;br /&gt;De la misma manera, deberémos exponer los Outlets "&lt;em&gt;address&lt;/em&gt;", "&lt;em&gt;window&lt;/em&gt;" y "&lt;em&gt;browser&lt;/em&gt;" como se muestra en la imagen, los cuales asociaremos al TextField, la ventana y el WebView.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_TEAv5Jw76vg/SlQhMGgfB9I/AAAAAAAAAVo/4TvPaKNtIbI/s1600-h/7.%20PropiedadesController%5B4%5D.png"&gt;&lt;img title="7. PropiedadesController" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="511" alt="7. PropiedadesController" src="http://lh4.ggpht.com/_TEAv5Jw76vg/SlQhNEOn5TI/AAAAAAAAAVs/PQYv6dk00X4/7.%20PropiedadesController_thumb%5B2%5D.png?imgmax=800" width="219" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;El último paso de esta parte será hacer el link entre las acciones y outlets definidos en el BrowserController y los controles creados dentro de la UI. Para hacer esto mantenemos apretada la tecla control y dibujamos una linea hacia cada uno de los controles. De esta manera aparecerá un menú para vincularlos hacia los &lt;em&gt;outlets &lt;/em&gt;disponibles en el Controller.    &lt;br /&gt;De forma análoga se debe dibujar una linea desde el botón hacia el BrowserController, para asociar el click a la action "&lt;em&gt;browse:&lt;/em&gt;" &lt;/p&gt;  &lt;p&gt;Para asegurarse de haber vinculado todo de forma correcta, al hacer click derecho sobre el BrowserController se deberá ver un panel similar a este:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_TEAv5Jw76vg/SlQhPv1HxXI/AAAAAAAAAVw/r1NoPmw80fQ/s1600-h/8.%20BindingController%5B3%5D.png"&gt;&lt;img title="8. BindingController" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="300" alt="8. BindingController" src="http://lh4.ggpht.com/_TEAv5Jw76vg/SlQhRTbmJOI/AAAAAAAAAV0/WI9krR2Wcjk/8.%20BindingController_thumb%5B1%5D.png?imgmax=800" width="359" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Con la interfaz lista, guardamos la ventana como un nuevo archivo &lt;strong&gt;NIB &lt;/strong&gt;(&lt;em&gt;ojo! guardar como NIB y NO como XIB!&lt;/em&gt;). &lt;/p&gt;  &lt;p&gt;Ahora, a programar el controller y el &lt;em&gt;bootstrap &lt;/em&gt;de la aplicación en C#    &lt;br /&gt;Para hacerlo, pueden utilizar cualquier IDE de su agrado. En particular, yo uso &lt;strong&gt;MonoDevelop&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;Deberémos crear un proyecto el cual referencie a las assemblies de &lt;em&gt;Monobjc&lt;/em&gt;, &lt;em&gt;Monobjc.Cocoa&lt;/em&gt; y &lt;em&gt;Monobjc.WebKit&lt;/em&gt; ya que son las que utilizamos dentro de la interfaz.    &lt;br /&gt;Dentro del proyecto crearemos dos clases: la primera será el &lt;em&gt;bootstrap &lt;/em&gt;de la aplicación y la segunda sera el &lt;em&gt;BrowserController &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Para hacer el bootstrap deberémos crear una clase muy similar al siguiente ejemplo:&lt;/p&gt;  &lt;pre&gt;using Monobjc;&lt;br /&gt;using Monobjc.Cocoa;&lt;br /&gt;using System;&lt;br /&gt;&lt;br /&gt;namespace zPod.CocoaBrowser&lt;br /&gt;{&lt;br /&gt; public class Program&lt;br /&gt; {&lt;br /&gt;  public Program ()&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void Main (String[] args)&lt;br /&gt;  {&lt;br /&gt;   ObjectiveCRuntime.LoadFramework ("Cocoa");&lt;br /&gt;   ObjectiveCRuntime.LoadFramework ("WebKit");&lt;br /&gt;   &lt;br /&gt;   ObjectiveCRuntime.Initialize ();&lt;br /&gt;   NSApplication.Bootstrap ();&lt;br /&gt;   &lt;br /&gt;   NSAutoreleasePool pool = new NSAutoreleasePool();&lt;br /&gt;   &lt;br /&gt;   NSApplication.LoadNib ("MainWindow.nib");&lt;br /&gt;   NSApplication.RunApplication ();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Las primeras lineas del método Main cargan los frameworks de ObjectiveC que utilizaremos. En este caso "&lt;em&gt;Cocoa&lt;/em&gt;" y "&lt;em&gt;WebKit&lt;/em&gt;".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Luego de cargar los frameworks se inicializa el bridge con el runtime de ObjectiveC y se dispara la aplicación.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Como verán, antes de cargar el NIB se crea un nuevo &lt;em&gt;NSAutoreleasePool&lt;/em&gt;. Esto sirve para evitar leaking por parte de &lt;em&gt;ObjectiveC&lt;/em&gt;. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Finalmente llamamos al metodo &lt;em&gt;LoadNib&lt;/em&gt;, el cual cargará la interfaz grafica creada anteriormente y lanzamos la aplicacion con el método &lt;em&gt;RunApplication&lt;/em&gt;. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La creación del &lt;em&gt;BrowserController &lt;/em&gt;es muy sencilla: en la misma hay que crear propiedades que corresponderán a los outlets definidos en la interfaz y metodos para atrapar las actions disparadas desde la misma. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Las clases marcadas con el atributo &lt;em&gt;[ObjectiveCClass]&lt;/em&gt; serán expuestas al runtime de ObjectiveC. Las propiedades decoradas con el atributo &lt;em&gt;[ObjectiveCField]&lt;/em&gt; representan los outlets y los métodos decorados con &lt;em&gt;[ObjectiveCMessage]&lt;/em&gt; sirven para atrapar las actions disparadas por la View.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using System;&lt;br /&gt;using Monobjc;&lt;br /&gt;using Monobjc.Cocoa;&lt;br /&gt;using Monobjc.WebKit;&lt;br /&gt;&lt;br /&gt;namespace zPod.CocoaBrowser&lt;br /&gt;{&lt;br /&gt; [ObjectiveCClass]&lt;br /&gt; public class BrowserController : NSObject&lt;br /&gt; {&lt;br /&gt;  [ObjectiveCField]&lt;br /&gt;  public NSTextField address;&lt;br /&gt;  &lt;br /&gt;  [ObjectiveCField]&lt;br /&gt;  public WebView browser;&lt;br /&gt;&lt;br /&gt;  [ObjectiveCField]&lt;br /&gt;  public NSWindow window;&lt;br /&gt;&lt;br /&gt;  public BrowserController ()&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public BrowserController (IntPtr nativePointer) : base(nativePointer)&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  [ObjectiveCMessage("browse:")]&lt;br /&gt;  public void Browse (Id sender)&lt;br /&gt;  {&lt;br /&gt;   string url = address.Cell.Title;&lt;br /&gt;   &lt;br /&gt;   browser.MainFrameURL = url;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  [ObjectiveCMessage("awakeFromNib")]&lt;br /&gt;  public void AwakeFromNib ()&lt;br /&gt;  {&lt;br /&gt;   window.Title = "CocoaBrowser - zPod";&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;En este ejemplo, se ve el método AwakeFromNib, el cual se ejecutará al finalizar de cargar la vista. En el mismo, seteamos el título de la ventana.&lt;br /&gt;&lt;br /&gt;Para atrapar la accion "browse", creamos un metodo con su correspondiente atributo y dentro del mismo cambiamos la URL del MainFrame del WebView. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Una vez listo esto, solo queda probar la aplicación.&lt;br /&gt;&lt;br /&gt;Según la documentación de Monobjc, se tendría que poder ejecutar un script de &lt;em&gt;NAnt&lt;/em&gt; que proveen ellos y crear una estructura de directorios específica. Dado que eso no me está funcionando (por algún motivo &lt;em&gt;NAnt &lt;/em&gt;no encuentra a &lt;em&gt;mono&lt;/em&gt;) armé un pequeño script de bash que arma todo lo necesario para tener nuestra App empaquetada y lista para ejecutar. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.mediafire.com/download.php?mdutd4zlnjn" target="_blank"&gt;Aca&lt;/a&gt; dejo para bajar esta aplicación de ejemplo como proyecto de MonoDevelop, el cual al compilarse dejará en el directorio bin/Debug todos los archivos necesarios para armar el paquete. Lo único que hay que hacer es, desde la consola, ir al directorio /bin/Debug del proyecto y ejecutar:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;./MakePackage CocoaBrowser&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Con esto se generará un nuevo paquete de aplicación ejecutable, cuyo resultado es:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_TEAv5Jw76vg/SlQhUFjrMiI/AAAAAAAAAV4/-LOB9RMN_UM/s1600-h/9.%20App%5B4%5D.png"&gt;&lt;img title="9. App" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="302" alt="9. App" src="http://lh4.ggpht.com/_TEAv5Jw76vg/SlQhVohFahI/AAAAAAAAAV8/43hIwUXR8CQ/9.%20App_thumb%5B2%5D.png?imgmax=800" width="499" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ahora, a divertirse! &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Saludos!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4309538633168858697?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4309538633168858697/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4309538633168858697' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4309538633168858697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4309538633168858697'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/07/monos-y-manzanas-como-hacer.html' title='Monos y Manzanas: Como hacer aplicaciones Cocoa con .NET'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_TEAv5Jw76vg/SlQhDkh1hYI/AAAAAAAAAVM/at31uQKYgD0/s72-c/1.%20NuevaApp_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5807979908989272327</id><published>2009-05-24T13:58:00.008-03:00</published><updated>2009-05-24T18:11:14.620-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DataAccess'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Visual Studio 2010 Beta 1: Primeras Impresiones</title><content type='html'>&lt;p&gt;Como ya mencioné en el post anterior, luego de solucionar los problemas severos de performance causados por la combinación WPF + Aceleración de VMWare pude empezar a probar el Beta 1 de Visual Studio 2010.&lt;/p&gt;&lt;p&gt;Por alguna razón oscura que no llego a comprender, en MS decidieron que sería una buena opción hacer que Visual Studio utilice WPF en la capa de presentación.&lt;/p&gt;&lt;p&gt;La ventaja de esto es que la posibilidad de tener cientos y cientos de efectos, transiciones, menúes voladores y demas yerbas, mas la posibilidad de hacer sumamente extensible la UI del afamado IDE.&lt;/p&gt;&lt;p&gt;Pero todo esto viene con un precio... la performance. Si Visual Studio 2008 ya era pesado, la nueva versión salta una o dos categorías mas: iniciar el IDE, abrir una solución chica y compilarla se lleva nada mas y nada menos que 238MB de ram (mas 14MB del PresetantionFontCache).&lt;/p&gt;&lt;p&gt;Igualmente, estos valores y la performance presentada son indicadores que deben ser tomados con pinzas, ya que al ser el Beta 1, todavía queda un largo camino para dar lugar a optimizaciónes (las cuales espero, por el bien de mis VMs, que aparezcan!).&lt;/p&gt;&lt;p&gt;Otro problema que encontré (también atribuible al estado de Beta del producto) fue la cantidad de crashes que tuve. Durante el coding del ejemplo que dejé al final (una tarde) me habra crasheado unas 5 veces... bastante mas de lo tolerable. Esperemos que la estabilidad sea un punto importante a mejorar en la proxima Beta o RC&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Cerrado este tema, pasemos a los "chiches" nuevos que trae:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;.NET 4 (beta) y C# 4&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Nueva version del CLR y del lenguaje estrella de la plataforma .NET. En este otro post (http://zpodblog.blogspot.com/2009/01/material-de-la-conferencia-sobre-c-4.html) pueden bajar una presentación que dimos con RodoF sobre los features nuevos incluidos en el lenguaje (tipado dinámico, parametros opcionales y por nombre, co y contra varianza en parametros de tipos, y algunas cosas mas).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;F#&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Esta versión de Visual Studio es la primera en incluir este lenguaje funcional para la plataforma .NET.&lt;br /&gt;Debo decir que todavía no me puse a ver mucho sobre el mismo, pero será cuestion de encontrar una excusa suficientemente buena como para incluir alguna librería que tenga que hacer en F# para algún proyecto a futuro.&lt;br /&gt;Por ahora los dejo con un bonito ejemplo de como obtener el n-esimo termino de la suceción de fibonacci (no puedo evitar caer en los clásicos) en F#:&lt;/p&gt;&lt;pre&gt;let rec fibonacci elem =&lt;br /&gt;match elem with&lt;br /&gt;| 1 -&gt; 1&lt;br /&gt;| 2 -&gt; 1&lt;br /&gt;| n -&gt; fibonacci (n - 1) + fibonacci (n - 2)&lt;br /&gt;&lt;br /&gt;Printf.printf "Ingrese numero de termino: "&lt;br /&gt;let termino = System.Console.ReadLine();&lt;br /&gt;&lt;br /&gt;Printf.printfn "%i" (fibonacci (System.Int32.Parse termino))&lt;br /&gt;let k = System.Console.ReadKey();&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Parallel Extensions&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Quienes hayan tenido que hacer optimizaciones en algún proyecto sabrán que uno de los primeros puntos a mirar es la paralelización de tareas independientes. Las Parallel Extensions vienen a simplificar este tipo de tareas.&lt;br /&gt;Por ejemplo, en caso de tener una colección y querer aplicar una funcion a cada uno de los elementos, en vez de hacer un viejo y querido "foreach", podemos hacer:&lt;/p&gt;&lt;pre&gt;miColeccion.AsParallel().ForAll(elem =&gt;&lt;br /&gt;{&lt;br /&gt;//codigo a ejecutar por cada elemento de la colección&lt;br /&gt;});&lt;/pre&gt;&lt;p&gt;La gran ventaja de esto es que nos abstraemos de todo el manejo de concurrencia, manteniendo la ganancia de performance.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Sequence Diagram&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Si hacemos click derecho sobre un método, vamos a notar que hay una nueva opción llamada "Generate Sequence Diagram". Al seleccionarla nos pregunta la profundidad máxima para las llamadas del diagrama y si queremos excluir las llamadas a clases dentro de ciertos namespaces (como System, u otros personalizables). Finalmente, nos presenta un diagrama como este:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TEAv5Jw76vg/ShmDqr9MfTI/AAAAAAAAAPw/AR5TiVPLapc/s1600-h/SequenceDiagram.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 278px;" src="http://2.bp.blogspot.com/_TEAv5Jw76vg/ShmDqr9MfTI/AAAAAAAAAPw/AR5TiVPLapc/s320/SequenceDiagram.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5339443602601573682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Este es un feature sumamente útil en caso de tener que comprender lo que hace un código ajeno, sin tener que empezar a navegar todo el código! (y pensar que yo casi me hago una herramienta para generar estos diagramas... por suerte nunca prosperó!)&lt;br /&gt;&lt;br /&gt;Definitivamente, una gran adición al Visual Studio.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bueno, por ahora esto es lo que pude ver. Me queda pendiente el "Architecture View" y varios features mas que ni siquiera llegué a ver.&lt;/p&gt;&lt;p&gt;Como extra, dejo mi primer proyectito hecho en C# 4 que permite acceder datos provenientes de una conexión de ADO.NET levantando los campos como propiedades dinámicas del resultado y pudiendo aplicar un pipeline de filtros que hagan transformaciones sobre el resultado al ser obtenido.&lt;br /&gt;&lt;br /&gt;La idea es poder hacer este tipo de cosas&lt;/p&gt;&lt;pre&gt;using (var conn = new DynamicConnection(realADOConnection, new ImageMapper()))&lt;br /&gt;{&lt;br /&gt;dynamic result = conn.Query("SELECT * FROM Customer WHERE IdCustomer = @0", 37);&lt;br /&gt;/* O tambien&lt;br /&gt;dynamic result = conn.Query("SELECT * FROM Customer WHERE IdCustomer = @IdCustomer",&lt;br /&gt;DynamicConnection.CreateParameter("@IdCustomer", 37));&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;foreach (dynamic row in result) //recorrer el resultado con un foreach&lt;br /&gt;{&lt;br /&gt;   //lectura directa&lt;br /&gt;   int id = row.IdCustomer;&lt;br /&gt;   string name = row.Name;&lt;br /&gt;&lt;br /&gt;   /*&lt;br /&gt;   Aca, el ImageMapper se encarga de leer el campo&lt;br /&gt;   y mapearlo a un Image&lt;br /&gt;   */&lt;/pre&gt;&lt;pre&gt;      Image customerPicture = row.Picture;&lt;br /&gt;   grid.AddRow(id, name, customerPicture);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Obtengo un solo valor&lt;br /&gt;dynamic val = conn.QueryValue("SELECT TOP 1 Name FROM Customer WHERE Id = @0", 37);&lt;br /&gt;MessageBox.Show(val);&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Lo pueden bajar de aca: &lt;a target="_blank" href="http://www.mediafire.com/download.php?mzjdwtjtjmi"&gt;DynamicDataAccess&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5807979908989272327?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5807979908989272327/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5807979908989272327' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5807979908989272327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5807979908989272327'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/05/visual-studio-2008-beta-1-primeras.html' title='Visual Studio 2010 Beta 1: Primeras Impresiones'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TEAv5Jw76vg/ShmDqr9MfTI/AAAAAAAAAPw/AR5TiVPLapc/s72-c/SequenceDiagram.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5668038761682045355</id><published>2009-05-24T11:47:00.003-03:00</published><updated>2009-05-24T11:53:07.228-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><title type='text'>Problemas de super-lentitud con la Beta 1 de Visual Studio 2010?</title><content type='html'>&lt;div&gt;Bueno, en caso de estar trabajando con VMWare, posiblemente el problema sea que está activada la aceleración 3D en la VM.&lt;/div&gt;&lt;div&gt;Aparentemente este supuesto &lt;i&gt;feature&lt;/i&gt; de VMWare tiene problemas para correr cosas hechas en WPF y dado que el nuevo &lt;b&gt;Visual Studio 2010&lt;/b&gt; lo usa extensivamente, la diferencia de velocidad es mayor a &lt;i&gt;100x&lt;/i&gt; una vez desactivada la "aceleración" (o, mejor dicho, &lt;i&gt;desaceleración&lt;/i&gt;)&lt;/div&gt;&lt;div&gt;Ya mejorada la velocidad, con una VM de 2GB es bastante usable, aunque usa unas fuentes sospechosamente borrosas, como todo lo hecho con &lt;b&gt;WPF&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;En breve subo un post con las primeras impresiones del nuevo IDE de Microsoft y el primer proyectito &lt;i&gt;no-charla&lt;/i&gt; (o al menos, no usado en una charla &lt;i&gt;todavía&lt;/i&gt;) de &lt;b&gt;C# 4&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saludos!&lt;/div&gt;&lt;div&gt;&lt;b&gt;Z&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5668038761682045355?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5668038761682045355/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5668038761682045355' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5668038761682045355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5668038761682045355'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/05/problemas-de-super-lentitud-con-la-beta.html' title='Problemas de super-lentitud con la Beta 1 de Visual Studio 2010?'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7286002399589397739</id><published>2009-05-17T20:16:00.005-03:00</published><updated>2009-05-17T20:25:06.529-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Magic'/><category scheme='http://www.blogger.com/atom/ns#' term='MTGDeck'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>MTGDeck Version 0.5</title><content type='html'>&lt;div style="text-align: left;"&gt;Paso a presentarles la primera version Beta (0.5) del MTGDeck!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este programa/juego permite jugar al conocido juego de trading cards "Magic: The Gathering" desde la computadora a través de la red, sin la necesidad de comprar los no-tan-baratos set de cartas, pudiendo probar distintos mazos, combinaciones, estrategias, etc...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El juego esta separado en dos aplicaciones distintas:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;- &lt;i&gt;Servidor:&lt;/i&gt; programa encargado de almacenar la información de las manos de los jugadores y de comunicarlos entre si. El mismo puede servir varias partidas distintas y para jugar siempre será necesario acceso al servidor donde se aloje la partida a la cual se desea ingresar.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;- &lt;i&gt;Cliente&lt;/i&gt;: programa desde el cual - conectándose a un servidor - permite jugar partidas de Magic contra el resto de los jugadores conectados.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Que NO hace el programa&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - NO valida las (complicadas) reglas del juego y cada una de sus cartas. El propósito de este programa es el de reemplazar el set de cartas, y nada mas. El hecho de "jugar" propiamente dicho todavía queda a cargo de los humanos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - NO permite jugar contra la computadora. El único modo de jugar solo es, simplemente, no tener contrincante.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - NO te va a ayudar a ganar minas (aceptémoslo, es un juego bien nerd)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Que SI hace el programa&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - Permite jugar desde uno (practica solo) hasta varios jugadores dentro de la misma partida&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - Permite armar mazos, utilizar cualquier carta que haya existido para Magic: The Gathering, referenciándolas por su nombre en ingles&lt;/div&gt;&lt;div&gt; - ¡Te ahorra dinero! (¡no hoy que ir a comprar cartas!)&lt;/div&gt;&lt;div&gt; - ¡Te proporciona horas y horas de diversión nerd!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Requerimientos&lt;/b&gt;:&lt;/div&gt;&lt;div&gt; - Windows XP o superior con todos sus Service Packs.&lt;/div&gt;&lt;div&gt; - .NET Framework 3.5 con todos sus Service Packs.&lt;/div&gt;&lt;div&gt; - Algun tipo de conexión de red (y al menos la primera vez que se usa cada mazo, conexión a internet).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Info sobre el proyecto: &lt;/b&gt;&lt;/div&gt;&lt;div&gt; - UI hecha con .NET 3.5 en Winforms.&lt;/div&gt;&lt;div&gt; - Para la comunicación entre los clientes y el server se puede utilizar tanto un cliente/server de WCF funcionando con basicHttpBinding - proximamente esto será configurable - y otro cliente/server hecho con old-school Remoting. &lt;/div&gt;&lt;div&gt;Esto tiene dos motivos: por un lado, hay algunas computadoras en los cuales el server de WCF no funciona. Todavía no pude encontrar el problema, pero voy a seguir buscando. El otro motivo es que las librerías de Remoting en Mono estas mucho mas maduras que las de WCF y, pese a que todavía me topo con algunos errores del lado de Mono, pienso que dentro de poco voy a poder tener la app mas cross-platform (si me vuelvo suficientemente loco me pongo a hacer una interfaz nativa para Mac y todo!).&lt;/div&gt;&lt;div&gt;Por default, se utiliza el Client de WCF, pero esto se puede modificar por configuración (y ya que es levantado por reflection... ¡Pueden hacer sus propios clientes y servers en casa!)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;FAQ&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- ¿De dónde bajo el juego?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Esta versión la pueden bajar de &lt;a href="http://mtgdeck.googlecode.com/files/MTG-0.5.rar"&gt;aca&lt;/a&gt;. El código fuente y las futuras versiones las podrán encontrar en el sitio de &lt;a href="http://code.google.com/p/mtgdeck"&gt;MTGDeck en Google Code&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - ¿Cómo empiezo?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;El paquete incluye un pequeño manual de usuario. Ahí esta toda la info necesaria para salir andando.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - Todo muy lindo pero... ¡Cómo armo mi mazo?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;El formato del archivo de mazos es muy simple: cada línea tiene la cantidad de cartas de un tipo, seguida por el nombre de la carta. Las lineas que comienzan con "#" son ignoradas. Junto con el paquete se incluye un ejemplo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Para armar mazos, recomiendo la siguiente página: http://www.essentialmagic.com/decks/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - ¡No puedo conectarme al servidor! ¿Qué pasa?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Posiblemente, el problema sea que el firewall de Windows (o algún otro) no este permitiendo conectarse al puerto 1234 (o el que esté configurado) en la computadora donde el servidor esté ejecutando. Para solucionarlo, habilitar el puerto en el firewall o desactivarlo por completo. &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Durante las pruebas me ha ocurrido que hay máquinas donde el server indica que levantó correctamente, sin embargo es imposible conectarse, incluso desde la máquina local. Cuando tenga identificado este error y lo solucione, avisaré.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - Encontré un error. ¿Cómo lo reporto?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Pueden contactarse conmigo por twitter (&lt;a href="http://twitter.com/pablozaiden"&gt;http://twitter.com/pablozaiden&lt;/a&gt;), por mail o dejando un comentario en el blog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; - Me gustaría que el juego tuviese tal o cual feature. ¿Qué puedo hacer?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Nuevamente, podes contactarme por alguno de los medios nombrados anteriormente y si sos desarrollador podes contribuir con el desarrollo (proximamente)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A continuación dejo unos screenshots del juego en acción:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TEAv5Jw76vg/ShCb_k3d_4I/AAAAAAAAAPo/fXWU1akK1ts/s1600-h/Picture14.png"&gt;&lt;img src="http://2.bp.blogspot.com/_TEAv5Jw76vg/ShCb_k3d_4I/AAAAAAAAAPo/fXWU1akK1ts/s320/Picture14.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5336937074964430722" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 191px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TEAv5Jw76vg/ShCbz5LNu7I/AAAAAAAAAPg/jXN3axRSKV8/s1600-h/Picture8.png"&gt;&lt;img src="http://3.bp.blogspot.com/_TEAv5Jw76vg/ShCbz5LNu7I/AAAAAAAAAPg/jXN3axRSKV8/s320/Picture8.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5336936874257529778" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 230px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saludos!&lt;/div&gt;&lt;div&gt;&lt;b&gt;Z&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7286002399589397739?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7286002399589397739/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7286002399589397739' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7286002399589397739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7286002399589397739'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/05/mtgdeck-version-05.html' title='MTGDeck Version 0.5'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TEAv5Jw76vg/ShCb_k3d_4I/AAAAAAAAAPo/fXWU1akK1ts/s72-c/Picture14.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4385027868648080287</id><published>2009-05-13T09:06:00.004-03:00</published><updated>2009-05-13T09:10:17.831-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Piratas'/><category scheme='http://www.blogger.com/atom/ns#' term='Computación'/><title type='text'>Pirata Informático</title><content type='html'>Hasta donde yo sabía, un pirata es &lt;i&gt;una persona con pata de palo, un loro en el hombro, sed por los doblones y - eventualmente - con la habilidad de ganarle un duelo de insultos al Sword Master&lt;/i&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Por lo tanto, la pregunta que viene al caso es: por que los medios de comunicación se empeñan en llamar &lt;i&gt;pirata&lt;/i&gt; a la gente que encuentra vulnerabilidades en sistemas de software o - mas bizarro aún - comparte música por internet?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4385027868648080287?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4385027868648080287/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4385027868648080287' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4385027868648080287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4385027868648080287'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/05/pirata-informatico.html' title='Pirata Informático'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4522482255311793223</id><published>2009-05-12T23:10:00.005-03:00</published><updated>2009-05-12T23:17:23.886-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developers'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='ALT.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Primera reunion de ALT.NET Argentina</title><content type='html'>&lt;p&gt;Tratando de mantener la vida del blog y siguiendo lo comentado en la lista de mails  ALT.NET Argentina, vamos a hablar un poco de lo que fue la primera reunión del grupo&lt;/p&gt; &lt;p&gt;(para quien no sepa de que trata esto, puede darse una vuelta por:  &lt;a href="http://altdotnet.org/"&gt;http://altdotnet.org/&lt;/a&gt; y/o &lt;a href="http://altnet-argentina.pbworks.com/"&gt;http://altnet-argentina.pbworks.com/&lt;/a&gt; )&lt;/p&gt; &lt;p&gt;Pese a la no-tan-feliz combinación de día/horario para el inicio de esta reunión (sábado a las 9 de la mañana!) el ambiente era muy bueno: muchas caras conocidas - bastante mas dormidas que de costumbre - y muchas ganas por empezar las sesiones pensadas para el día.&lt;/p&gt; &lt;p&gt;A eso de las 10.00, nos fuimos presentando en ronda (no pude evitar tirar un chiste) y pasamos a contar que temas habían propuestos para las sesiones del día y arreglar entre todos los horarios y las salas de cada uno.&lt;/p&gt; &lt;p&gt;Independientemente del tema a tratar en cada una, se utilizó la modalidad de "open space", donde cada uno es libre de opinar y plantear su punto de vista cuando le parezca - siempre y cuando se haga de forma ordenada - y no las clásicas charlas con un orador y muchos escuchas.&lt;/p&gt; &lt;p&gt;Durante el día hubieron 4 franjas donde se llevaron a cabo sesiones simultáneas. En particular, voy a hacer una pequeña reseña sobre las cuatro donde yo participé:&lt;/p&gt; &lt;p&gt;(no recuerdo los nombres concretos, pero con el título de fantasía que puse se entiende)&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;1. SOA: ¿Vivo o muerto? ¿Cáncer o salvación?&lt;/b&gt;&lt;/p&gt; &lt;p&gt;En esta charla hubieron 4 a 6 sillas adelante, dándole al usuario de las mismas el derecho a hablar, siguiendo estas reglas:&lt;/p&gt; &lt;p&gt;- Siempre debe haber una silla vacía&lt;/p&gt; &lt;p&gt;- Si alguien quiere hablar, debe sentarse en una de esas sillas&lt;/p&gt; &lt;p&gt;- Si quedan todas las sillas ocupadas, deberá retirarse quien esté hace mas tiempo (o quien considere que ya no está aportando a la conversación, pero esto queda a criterio de cada uno)&lt;/p&gt; &lt;p&gt;La misma empezó comentando la experiencia de distintas personas que llevaron (o intentaron llevar a cabo) proyectos con arquitecturas que implementaban el patrón SOA y a raíz de esto, muchos - me incluyo - comentamos donde nos parecía que estaban las falencias usuales en este tipo de emprendimientos, cuales eran los beneficios, que costos se pagaban por intentar hacer SOA "porque es la palabra de moda" y cuando valía la pena realmente tener componentes de un proyecto que siguieran este patrón.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;2. Microsoft... ¿Está innovando?&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Este es un tema que propuso Miguel Angel Saez y, pese a que no mucha gente se prendió, me pareció un tópico sumamente interesante para tratar.&lt;/p&gt; &lt;p&gt;Acá charlamos sobre las alternativas a distintos problemas, viendo la forma - o formas - en que lo encaran Microsoft, otras empresas como Sun, Oracle, Amazon, Google, etc. y por último "la comunidad open source".&lt;/p&gt; &lt;p&gt;Para cada uno hablamos sobre cuanto de "inspiración" y cuanto de creatividad hubo en su creación y hacia donde veíamos el rumbo de evolución de cada una de estas tecnologías o productos.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Hacia el final de la sesión estuvimos hablando sobre Windows 7, su comparación con OS X (o inspiración en...) y cual grande - o pequeño - era el salto desde Windows Vista.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;-- Pizza Break --&lt;/b&gt;&lt;/p&gt; &lt;p&gt;El almuerzo fue una gran sesión en si misma: todos hablando con todos sobre lo discutido en las sesiones anteriores, tratando de ver que nos perdimos y contando - mordisco de muzzarella de por medio -  lo que aprendimos de los demás en las charlas que estuvimos.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Y sigue la tarde con...&lt;/p&gt; &lt;p&gt;&lt;b&gt;3. YARF: Yet-Another-Rodo-Framework, o ¿Cuándo debo meter qué cosa?&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Esta vez, pese a ser unos cuantos usamos la vieja y querida ronda para hablarnos entre todos y no tuvimos ningún problema.&lt;/p&gt; &lt;p&gt;Acá se charlo sobre para que tipos de desarrollo pensábamos que era mejor utilizar tal o cual framework o tecnología, o si - como algunos preferimos - hacernos el nuestro propio framework a media.&lt;/p&gt; &lt;p&gt;Hablamos de ventajas y desventajas de pensar necesidades a futuro, cuándo conviene reutilizar y cuándo conviene tirar lo que tenía y volver a pensar desde cero una mejor solución. Tocamos temas como la sobreingeniería de las soluciones planteadas, problemas con la división en capas (ya sea por defecto o por exceso) y varias cosas mas.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;4. .NET hace monerías&lt;/b&gt;&lt;/p&gt; &lt;p&gt;La idea de esta charla fue hablar sobre las experiencias que hayamos tenido utilizando Mono (implementación Open Source de .NET) en distintas plataformas y poder contarles a los que nunca habían escuchado de este proyecto, o no lo habían probado, cual era el estado del mismo y que se podía o no hacer en comparación a .NET.&lt;/p&gt; &lt;p&gt;Durante la charla se mostró un poco de Mono en acción desde una maquina con Linux y mi Mac. Mostramos el REPL de csharp que viene incluido con Mono, explotando el hecho de que el compilador es provisto como "una librería mas". También vimos el plugin de Moonlight - implementación de Mono de Silverlight - corriendo dentro de Firefox en Linux y un pequeño vistazo a la IDE multiplataforma Monodevelop.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Bueno, con esto cierro el post de hoy. Si alguien quiere, pregunte sobre algún tema mas en particular de las sesiones y, de acordarme, con gusto responderé.&lt;/p&gt; &lt;p&gt;Saludos y hasta la próxima (donde pienso que subiré la primer versión beta del MTGDeck)!&lt;/p&gt; &lt;p&gt;&lt;b&gt;Z&lt;/b&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4522482255311793223?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4522482255311793223/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4522482255311793223' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4522482255311793223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4522482255311793223'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/05/primera-reunion-de-altnet-argentina.html' title='Primera reunion de ALT.NET Argentina'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-400756892343171855</id><published>2009-05-10T09:53:00.003-03:00</published><updated>2009-05-10T10:15:09.140-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Magic'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='MTGDeck'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Usando el MTGDeck para intentar devolverle la vida al blog</title><content type='html'>Hace unos 6 meses empecé otro de tantos proyectos que suelo dejar sin terminar... sin embargo el mismo tuvo su breve mención dentro del blog: &lt;span style="font-weight:bold;"&gt;MTGDeck&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La idea de este proyectito era poder jugar al juego de trading cards Magic: The Gathering, sin la necesidad de tener las cartas (probar mazos, combinaciones, etc...).&lt;br /&gt;Como implementar las 192381092381290 reglas que hay para cada carta de Magic era algo impensable, se me ocurró que la funcionalidad del juego sería &lt;span style="font-style:italic;"&gt;únicamente&lt;/span&gt; la de suplantar las cartas (y mesa) del juego. Con esto quiero decir que el seguimiento de las vidas, cumplimiento de reglas, fases del juego, etc... seguirían a cargo de los jugadores.&lt;br /&gt;&lt;br /&gt;Para permitir jugadas de mas de 2 jugadores, encaré el desarrollo de esta aplicación directamente como &lt;span style="font-style:italic;"&gt;client-server&lt;/span&gt;, donde el server guardaría el estado de las manos y cartas jugadas de cada uno de los jugadores y el cliente simplemente le enviaría cuales son los cambios hecho en la mano propia.&lt;br /&gt;&lt;br /&gt;Para desarrollarlo decidí - y no por casualidad - empezar por el server (ya que carece de ese cáncer que mucho conocemos como &lt;span style="font-style:italic;"&gt;la interfaz gráfica&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;No mucho tiempo después ya tenía listo el servidor... y ahí es cuando las cosas se pusieron feas: al empezar a desarrollar el cliente pude hacer un repositorio de cartas que se encargaba de traer la imagen de cada carta, un prototipo de lo que sería la mano de cada jugador... y perdí el interés.&lt;br /&gt;&lt;br /&gt;Siempre lo mismo... en el momento que hay que hacer la UI mis proyectos caen a velocidades estrepitosas.&lt;br /&gt;&lt;br /&gt;Sin embargo, hace unas semanas decidí que era hora de terminar lo que alguna vez empecé y pese a su &lt;span style="font-style:italic;"&gt;no-del-todo-hermosa&lt;/span&gt; interfaz gráfica, el juego parece estar andando.&lt;br /&gt;&lt;br /&gt;Actualmente, el proyecto está en las últimas fases del &lt;span style="font-style:italic;"&gt;alpha&lt;/span&gt;-testing (&lt;span style="font-style:italic;"&gt;gracias Krako!&lt;/span&gt;) y será liberado en breve a las masas!&lt;br /&gt;&lt;br /&gt;Para que se vayan dando una idea, toda la comunicación esta manejada con WCF (actualmente usando BasicHttp), pero por las dudas también hice un conector basado en remoting, hecho &lt;span style="font-style:italic;"&gt;a la old school&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;La interfaz de usuario está hecha en Winforms, pero la idea es que, eventualmente, pueda  ser portada a otras cosas (GTK#, WPF, Web... iPhone?) ya que los servicios que expone el server pueden ser consumidos desde todos los anteriormente nombrados.&lt;br /&gt;&lt;br /&gt;Bueno, con esto cierro. Supongo que durante esta semana estaré poniendo la primer beta y veremos si tiene tanto éxito en &lt;span style="font-style:italic;"&gt;Taringa&lt;/span&gt; como lo tuvo mi RapidshareDownloader (nota al pie: si alguien lo sigue usando, le recomiendo pasar a JDownloader que es mucho mas potente)&lt;br /&gt;&lt;br /&gt;Saludos!&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-400756892343171855?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/400756892343171855/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=400756892343171855' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/400756892343171855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/400756892343171855'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/05/usando-el-mtgdeck-para-intentar.html' title='Usando el MTGDeck para intentar devolverle la vida al blog'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6452516967610835690</id><published>2009-01-21T10:31:00.007-02:00</published><updated>2009-01-21T10:50:20.719-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 4.0'/><title type='text'>Material de la conferencia sobre C# 4</title><content type='html'>Ya está disponible para bajar el material que usamos ayer con &lt;a target="_blank" href="http://weblogs.shockbyte.com.ar/rodolfof/"&gt;RodoF &lt;/a&gt; en la conferencia "Agregando dinamismo al código: C# 4 entra en escena" sobre las nuevas características que van a venir con C# 4 y la próxima versión del .NET Framework.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.mediafire.com/download.php?nu3qjjryzin"&gt;Link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;width: 500px; height: 373px;" src="http://farm4.static.flickr.com/3479/3215457232_c38de397a5.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Hasta la próxima!&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6452516967610835690?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6452516967610835690/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6452516967610835690' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6452516967610835690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6452516967610835690'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2009/01/material-de-la-conferencia-sobre-c-4.html' title='Material de la conferencia sobre C# 4'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3479/3215457232_c38de397a5_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8903124783811716640</id><published>2008-11-15T16:04:00.001-02:00</published><updated>2008-11-15T16:04:05.651-02:00</updated><title type='text'>Chiche nuevo: iPod touch (2da gen)</title><content type='html'>Después de haber probado el ipod de johnny, me vinieron muchas ganas de cambiar mi viejo mp3 player por algo mas novedoso y... Taraaaaa! Ipod touch de 16 gb nomás!!&lt;br /&gt;&lt;br /&gt;El bicho esta muy bueno. Yo pensaba que escribir con el tecladito iba a ser molesto, pero el autocorrector que tiene es tan bueno que escribir este post desde el ipod es casi mas fácil ue desde la mac!&lt;br /&gt;&lt;br /&gt;Lo único de malo que tiene esta version es que (todavía) no se puede hacer el jailbreak, por lo que estoy limitado a las apps disponibles en el app store de apple, que no son pocas, pero bueno... Yo quería usar mono acá!&lt;br /&gt;&lt;br /&gt;Hasta el prox post!&lt;br /&gt;&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8903124783811716640?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8903124783811716640/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8903124783811716640' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8903124783811716640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8903124783811716640'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/11/chiche-nuevo-ipod-touch-2da-gen.html' title='Chiche nuevo: iPod touch (2da gen)'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1605973380897392623</id><published>2008-10-06T12:12:00.003-03:00</published><updated>2008-10-06T12:29:07.804-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Voice Recognition'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeCamp'/><title type='text'>Charla de Voice Recognition y Synthesis con .NET 3.x</title><content type='html'>Este sabado dimos con RodoF una charla en el CodeCamp sobre Voice Recognition y Synthesis utilizando .NET 3.x.&lt;br /&gt;La presentación la pueden bajar de &lt;a href="http://www.mediafire.com/?u0nu4immjye"&gt;aca&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Durante la charla, estuvimos mostrando el proyecto de KeySimulator - VoiceCommander, el cual ya estuve comentando en el blog. Pueden obtener el código desde &lt;a href="http://www.codeplex.com/KeySimVoiceCommander/"&gt;Codeplex&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TEAv5Jw76vg/SOouiE_EiPI/AAAAAAAAAAM/IUdA2ez0h4E/s1600-h/CodeCamp2008VoiceRecognition2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_TEAv5Jw76vg/SOouiE_EiPI/AAAAAAAAAAM/IUdA2ez0h4E/s320/CodeCamp2008VoiceRecognition2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5254063078269815026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1605973380897392623?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1605973380897392623/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1605973380897392623' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1605973380897392623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1605973380897392623'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/10/charla-de-voice-recognition-y-synthesis.html' title='Charla de Voice Recognition y Synthesis con .NET 3.x'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TEAv5Jw76vg/SOouiE_EiPI/AAAAAAAAAAM/IUdA2ez0h4E/s72-c/CodeCamp2008VoiceRecognition2.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4121618505858997323</id><published>2008-09-26T11:02:00.003-03:00</published><updated>2008-09-26T11:06:18.241-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhoto'/><title type='text'>Aplicacion recomendada: Facebook Exporter for iPhoto</title><content type='html'>Ayer me topé con una gran aplicacion que permite exportar directamente nuestros albumes de iPhoto a una cuenta de Facebook. La pueden bajar desde aca: &lt;a href="http://developers.facebook.com/iphoto/"&gt;Facebook Exporter for iPhoto&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Dentro de unos dias voy a tratar de ponerme a ver que APIs expone facebook para ver que nueva aplicacion puedo agregar a la gran seccion de "Cool and Useless"&lt;br /&gt;&lt;br /&gt;Saludos!!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4121618505858997323?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4121618505858997323/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4121618505858997323' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4121618505858997323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4121618505858997323'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/09/aplicacion-recomendada-facebook.html' title='Aplicacion recomendada: Facebook Exporter for iPhoto'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-849861644451821168</id><published>2008-09-24T11:07:00.002-03:00</published><updated>2008-09-24T11:13:26.865-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Error spawning rc.exe - C++ - Visual Studio 2008</title><content type='html'>Como continuación del post anterior, comento como solucionar el error que me llevó a reinstalar el Visual Studio 2008.&lt;br /&gt;&lt;br /&gt;Al intentar compilar proyectos de C++, tiraba el error:&lt;br /&gt;&lt;blockquote&gt;Error spawning rc.exe&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Aparentemente, el problema es que este se instala al elegir el paquete de c++ tools (o algo asi) dentro de la instalación de Visual Studio. Por lo tanto, de no instalarlo no van a poder compilar nada.&lt;br /&gt;&lt;br /&gt;Saludos!&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-849861644451821168?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/849861644451821168/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=849861644451821168' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/849861644451821168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/849861644451821168'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/09/error-spawning-rcexe-c-visual-studio.html' title='Error spawning rc.exe - C++ - Visual Studio 2008'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2019751064683178861</id><published>2008-09-24T10:32:00.004-03:00</published><updated>2008-09-24T11:02:10.491-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><title type='text'>Problemas desinstalando Visual Studio 2008</title><content type='html'>Debido a que mi Visual Studio 2008 decidió - sin mi consentimiento - que no iba a poder compilar proyectos de C++, decidí desinstalarlo y reinstalarlo para ver si algo se arreglaba.&lt;br /&gt;El problema (va, &lt;em&gt;otro&lt;/em&gt; de los problemas) fue que al intentar hacerlo, apareció el siguiente error:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;A problem has been encountered while loading the setup components. Canceling Setup.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Despues de mucho (realmente &lt;em&gt;mucho&lt;/em&gt;) dar vueltas por internet buscando una solución, encontré que el problema era que el hotfix KB952241 (bajado por Windows Update) trajo un bug en el instalador, resultando en el error encontrado.&lt;br /&gt;Habiendolo desinstalado, todo volvió a la normalidad.&lt;br /&gt;&lt;br /&gt;Si a alguien mas le pasa, espero que por leer esto no tenga que pasar tanto tiempo buscando soluciones como yo.&lt;br /&gt;&lt;br /&gt;Un saludo!&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2019751064683178861?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2019751064683178861/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2019751064683178861' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2019751064683178861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2019751064683178861'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/09/problemas-desinstalando-visual-studio.html' title='Problemas desinstalando Visual Studio 2008'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2116773957798212584</id><published>2008-09-22T09:56:00.004-03:00</published><updated>2008-09-22T10:26:56.439-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Voice Recognition'/><category scheme='http://www.blogger.com/atom/ns#' term='Rapidshare'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeCamp'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Rapidshare Downloader y CodeCamp</title><content type='html'>Hola nuevamente!&lt;br /&gt;&lt;br /&gt;Después de algunos meses volví para postear aca.&lt;br /&gt;Para (re)comenzar, voy a dejar una aplicación que hice hace unos meses la cual, dada una lista de links de Rapidshare, los baja automaticamente.&lt;br /&gt;&lt;br /&gt;Debo decir que no es el código mas bonito del mundo, pero cumple con su funcion mas que bien.&lt;br /&gt;&lt;br /&gt;Originalmente, la aplicación funcionaba tanto en Windows como en Linux y OS X con Mono, pero aparentemente desde la beta 1 de Mono 2.0 se rompió algo relacionado con los web requests y no estan saliendo bien los requests hechos por POST, necesarios para esta aplicación, asi que por ahora solo funcionará en Windows (tal vez en Linux tambien, aunque lo dudo mucho).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/?megmt2llgyg"&gt;Programa y Fuentes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Próximamente voy a estar publicando una aplicación que estamos armando con Giga para jugar al Magic PC a PC usando remoting o WCF para conectarse.&lt;br /&gt;&lt;br /&gt;Por otro lado, quiero avisar que el día 4 de Octubre desde las 10.00 hasta las 19.00 se realizará el evento &lt;a href="http://www.microsoft.com/Argentina/CodeCamp/"&gt;Microsoft CodeCamp&lt;/a&gt;, en el cual estaré dando una conferencia con &lt;a href="http://weblogs.shockbyte.com.ar/"&gt;RodoF&lt;/a&gt; sobre el uso del motor de Voice Recognition y Voice Synthesis desde .NET 3.x. No se lo pierdan!&lt;br /&gt;&lt;br /&gt;Saludos!!&lt;br /&gt;&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2116773957798212584?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2116773957798212584/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2116773957798212584' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2116773957798212584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2116773957798212584'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/09/rapidshare-downloader-y-codecamp.html' title='Rapidshare Downloader y CodeCamp'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8554149197677309774</id><published>2008-06-10T09:53:00.002-03:00</published><updated>2008-06-10T10:01:45.433-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lightsabre'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>zPod Reloaded: Vuelta al blog, desde el otro lado de La Fuerza!</title><content type='html'>Si... ya se. No posteo nada desde hace 2 meses.&lt;br /&gt;La verdad es que intenté postear algo, pero no se me ocurrió nada piola...&lt;br /&gt;&lt;br /&gt;Ahora estoy &lt;span class="Apple-style-span" style="font-style: italic;"&gt;oficialmente&lt;/span&gt; del lado de la luz: tengo una MacBook :) Por lo que mis problemas configurando y tuneando drivers locos hechos por gente loca de internet se acabaron (por lo menos por un tiempo... mi viejo quiere probar ponerse OS X en su notebook!)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Actualmente estoy laburando en un proyecto que exprime a fondo los features nuevos de C# 3, asi que si hacemos algo realmente copado, veré de postearlo. &lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ya que no postié nada que valga la pena, les dejo dos videos que muestran &lt;span class="Apple-style-span" style="font-style: italic;"&gt;cuan duro&lt;/span&gt; es trabajar en Lagash :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/K1p-BwxK1vU&amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/K1p-BwxK1vU&amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AG-z-0uJDhc&amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AG-z-0uJDhc&amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Z&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8554149197677309774?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8554149197677309774/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8554149197677309774' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8554149197677309774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8554149197677309774'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/06/zpod-reloaded-vuelta-al-blog-desde-el.html' title='zPod Reloaded: Vuelta al blog, desde el otro lado de La Fuerza!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-463590976500222179</id><published>2008-04-06T17:34:00.003-03:00</published><updated>2008-04-06T17:40:07.150-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Monitor dual en OS X</title><content type='html'>Despues de varios meses de estar usando OS X, pude configurarlo para usar la salida VGA como segundo monitor. Para hacerlo hay que tener instalado el Leopard Graphics Update, usar &lt;a href="http://www.mediafire.com/?02ykgjthljz"&gt;estas&lt;/a&gt; extensiones y arrancar la maquina con el monitor enchufado.&lt;br /&gt;&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-463590976500222179?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/463590976500222179/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=463590976500222179' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/463590976500222179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/463590976500222179'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/04/monitor-dual-en-os-x.html' title='Monitor dual en OS X'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4745146605250057626</id><published>2008-03-24T22:01:00.003-03:00</published><updated>2008-03-24T22:10:23.407-03:00</updated><title type='text'>Frase célebre</title><content type='html'>Hace mucho que no posteo nada, asi que voy a usar una frase célebre de relleno:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Eric_S._Raymond"&gt;Eric Raymond&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4745146605250057626?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4745146605250057626/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4745146605250057626' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4745146605250057626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4745146605250057626'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/03/frase-clebre.html' title='Frase célebre'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5416030993991809648</id><published>2008-03-03T11:17:00.005-02:00</published><updated>2008-03-03T12:30:18.538-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Volta'/><title type='text'>El eslabón que faltaba entre el .NET Framework y los browsers: Volta</title><content type='html'>Hace un mes, mas o menos, mi amigo &lt;a href="http://blogs.southworks.net/johnny"&gt;Johnny&lt;/a&gt; me había comentado al pasar sobre un &lt;span style="font-style: italic;"&gt;compilador de MSIL a Javascript&lt;/span&gt; que estaban haciendo en Microsoft, pero no le di mucha importancia. Pensé que era uno de esos proyectos locos que solo servían como prueba de concepto o similar... hasta que lo vi.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.live.com/volta"&gt;Microsoft Volta&lt;/a&gt; es un proyecto (todavía en estado alpha o, a lo sumo, pre-beta) de Microsoft Live Labs para poder desarrollar aplicaciones web multicapa sin tener que preocuparse por aprender nuevos lenguajes, lidiar con problemas para hacer javascript cross-browser y varias otras cosas.&lt;br /&gt;En cierta manera se puede ver como la respuesta de Microsoft al &lt;a href="http://code.google.com/webtoolkit"&gt;Google Web Toolkit&lt;/a&gt;, aunque todavía bastante menos maduro y obviamente, usando .NET en vez de Java.&lt;br /&gt;&lt;br /&gt;Un ejemplo de lo que nos permite hacer Volta es hacer el diseño en HTML de una página, codificar todo su comportamiento desde cualquier lenguaje que trabaje con el .NET Framework y finalmente, el compilador de Volta generará todo el código y las assemblies necesarias para correr todo lo que se quiera correr desde el cliente, y las clases que deban ser ejecutadas desde el servidor serán llamadas de forma transparente, sin tener que agregar nada aparte de un atributo en la clase, indicándolo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Nota antes de intentar usar esto: para poder crear nuevos proyectos de Volta, es necesario tener instalado Visual Studio 2008 y el Tecnology Preview de Volta. Tener en cuenta que es una de las primeras versiones que salen fuera de Microsoft como preview y aún contiene varios bugs y limitaciones.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Nota sin mucho sentido: como todavía no hay version del Copy Source as HTML para Visual Studio 2008, los ejemplos que voy a mostrar los voy a pegar como imágenes. Perdón por eso, pero hacer que se vea bien el codigo posteado en blogger es una tarea bastante ardua y no tengo muchas ganas de perder tiempo en esto :D&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A continuación les muestro una aplicación de ejmplo que hice, la cual consiste en un simple Chat:&lt;br /&gt;&lt;br /&gt;Mi idea era la siguiente: hacer una página que tenga 2 textboxes, uno para el nick y otro para el mensaje a escribir, un boton para enviar el mensaje y un div donde se vaya escribiendo el texto del chat.&lt;br /&gt;&lt;br /&gt;Para empezar, creé el html de la página:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/2306996193/" title="1 by PabloZaiden, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2383/2306996193_e33fe677cf.jpg" width="500" height="323" alt="1" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez hecho esto, codifiqué la clase que representa esta página y obtuve los controles desde código manejado para poder usarlos:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/2306996207/" title="2 by PabloZaiden, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2078/2306996207_179b374852.jpg" width="499" height="401" alt="2" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En el evento &lt;span style="font-style: italic;"&gt;Click&lt;/span&gt; del boton de la página hice que se llame al método &lt;span style="font-style: italic;"&gt;_btnSend_Click,&lt;/span&gt; el cual se encarga de llamar al metodo &lt;span style="font-style: italic;"&gt;AddMessage&lt;/span&gt; de la clase &lt;span style="font-style: italic;"&gt;ChatState,&lt;/span&gt; la cual es la encargada de mantener el estado del chat, y luego agrega el nuevo texto al div donde se muestra la conversación:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/2306996215/" title="3 by PabloZaiden, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2258/2306996215_61c62d9aaf.jpg" width="500" height="289" alt="3" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para poder mostrar también lo que el resto de la gente escribía en el chat, necesitaba poder pedirle al servidor que me actualice el contenido del div, por lo que creé un Time que se de dispare cada 5 segudos y llame al metodo UpdateChatBox, el cual se encarga de pedir las nuevas lineas agregadas al chat usando el método &lt;span style="font-style: italic;"&gt;GetResponse&lt;/span&gt; de la clase &lt;span style="font-style: italic;"&gt;ChatState&lt;/span&gt; y mostrarlas:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/2306996219/" title="4 by PabloZaiden, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2348/2306996219_c5c9c93ffb.jpg" width="500" height="481" alt="4" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como se habrán dado cuenta, la gran mayoría de todo este código debería correr en el cliente, excepto tal vez por la clase ChatState, la cual debería ejecutar en el servidor, conservando el estado de la conversación. Para hacer esto lo único que hay que hacer es ir a la clase ChatState, hacer click derecho sobre el nombre, ir a &lt;span style="font-style: italic;"&gt;Refactor&lt;/span&gt; y hacer click en &lt;span style="font-style: italic;"&gt;Tire-split to run at origin&lt;/span&gt;. Haciendo esto, se le agregará el atributo &lt;span style="font-style: italic;"&gt;RunAtOrigin&lt;/span&gt;, lo que le indica a Volta que ese código debe ser ejecutado en el servidor y no en el cliente:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/2306996221/" title="5 by PabloZaiden, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3053/2306996221_2fd50b7b32.jpg" width="500" height="324" alt="5" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finalmente, tocando F5 se dispara el browser elegido para debug (se puede usar IE o Firefox) y... listo! Estamos debuggeando nuestra aplicación volta!&lt;br /&gt;&lt;br /&gt;Aca muestro un ejemplo de la aplicación funcionando:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/2306996225/" title="6 by PabloZaiden, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3158/2306996225_61675b091a.jpg" width="500" height="347" alt="6" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Código del ejemplo: &lt;a href="http://www.mediafire.com/?hdxm2xxxd5g"&gt;aca&lt;/a&gt;.&lt;br /&gt;Hasta aca llega el post de hoy. Cuando haga algo mas veo de postearlo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Z&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5416030993991809648?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5416030993991809648/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5416030993991809648' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5416030993991809648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5416030993991809648'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/03/el-eslabn-que-faltaba-entre-el-net.html' title='El eslabón que faltaba entre el .NET Framework y los browsers: Volta'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2383/2306996193_e33fe677cf_t.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4115456804860881253</id><published>2008-02-24T21:39:00.003-02:00</published><updated>2008-02-24T21:54:41.618-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Huevadas'/><title type='text'>Me tomo en whisky y empiezo a nombrar especies?</title><content type='html'>La idea nombrada en el título de este post es lo único que me viene a la mente sobre el momento en que los científicos nombraron "Caballito de mar" al caballito de mar.&lt;br /&gt;&lt;br /&gt;Se me ocurren dos posibles conversaciones:&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;Cientifico A&lt;/strong&gt;: &lt;em&gt;... estás loco. Nadie va a ser tan boludo. Esta bien que la mayoría de la gente es bastante ignorante. Pero supongo que de esta &lt;strong&gt;si&lt;/strong&gt; se darán cuenta.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Científico B&lt;/strong&gt;: &lt;em&gt;Vos haceme caso. La gente del populacho son un grupo de ovejas decerebradas. Vos decile que este bicho inerte es un caballo y lo van a comprar como billete del gordo de navidad...&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;O bien, la otra posibilidad:&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;Luego de haberse tomado 2 ginebras, 5 fernet y 4 whiskys...&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Cientifico A&lt;/strong&gt;: &lt;em&gt;Che, encontré un animal de 15cm de largo, con caparazón ocificado, cabeza tupular, carente de dientes y ninguna extremidad...&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Cientifico B&lt;/strong&gt;: &lt;em&gt;Un caballo!&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Basado en una reflexión original de &lt;em&gt;Luis Piedrahita&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Hasta la próxima!&lt;br /&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4115456804860881253?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4115456804860881253/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4115456804860881253' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4115456804860881253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4115456804860881253'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/02/me-tomo-en-whisky-y-empiezo-nombrar.html' title='Me tomo en whisky y empiezo a nombrar especies?'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3835107269345202496</id><published>2008-02-21T12:19:00.002-02:00</published><updated>2008-02-21T12:29:24.281-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Somos el único animal suficientemente idiota...</title><content type='html'>Se dice que la estupidez humana no tiene límites, ya que somos el único animal suficientemente idiota para &lt;em&gt;tropezar 2 veces con la misma piedra.&lt;/em&gt; Básicamente, intentar dos veces lo mismo y esperar distinto resultado&lt;br /&gt;&lt;br /&gt;Ayer confirme mi humana estupidez.&lt;br /&gt;&lt;br /&gt;Hace ya unos meses había tratado de utilizar la salida VGA de la notebook desde OS X sin mucho éxito. En el camino, casi destruyo la instalacion de mi máquina ya que me quedó lockeada una resolucion fea y no se veía nada en la máquina. Finalmente pude zafarla y volver a hacerlo andar.&lt;br /&gt;&lt;br /&gt;Ayer volví a hacer lo mismo esperando tener éxito esta vez (iluso...). Obviamente, volví a destruir la configuración de la resolución de la maquina. El problema es que esta vez de tantas cosas que toque, dejé al sistema imposible de bootear. Por suerte pude levantar la particion desde el DVD de instalacion de OS X, guardar todos los datos importantes en un Pendrive y finalmente... reinstalar :(&lt;br /&gt;&lt;br /&gt;Conclusión: me terminé durmiendo a las 3.30 de la mañana mientras reinstalaba todo.... por boludo.&lt;br /&gt;&lt;br /&gt;Hasta la próxima!&lt;br /&gt;&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3835107269345202496?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3835107269345202496/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3835107269345202496' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3835107269345202496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3835107269345202496'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/02/somos-el-nico-animal-suficientemente.html' title='Somos el único animal suficientemente idiota...'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1162980766608482319</id><published>2008-02-07T21:59:00.000-02:00</published><updated>2008-02-07T22:04:29.464-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developers'/><category scheme='http://www.blogger.com/atom/ns#' term='Mono'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Un pequeño paso para el hombre, un gran salto para el desarrollo .NET en OS X: La nueva version de Mono incluye el MonoDevelop para Mac!</title><content type='html'>Gente, desde hace unos dias, el paquete de instalación de Mono para OS X incluye una pequeña sorpresa: MonoDevelop!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finalmente los usuarios de OS X tenemos un entorno de desarrollo decente, con completado de codigo y toda la bola para .NET!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Screenshot:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/2249693898/" title="MonoDevelop en OS X by PabloZaiden, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2163/2249693898_32bb4408fe.jpg" width="500" height="313" alt="MonoDevelop en OS X" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hasta la próxima!&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Z&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PD: pese a que ya no va a ser necesario, voy a ver si le programo una interfaz en GTK# o similar al ZSense para poder correrlo en OS X sin depender de Windows.Forms&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1162980766608482319?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1162980766608482319/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1162980766608482319' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1162980766608482319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1162980766608482319'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/02/un-pequeo-paso-para-el-hombre-un-gran.html' title='Un pequeño paso para el hombre, un gran salto para el desarrollo .NET en OS X: La nueva version de Mono incluye el MonoDevelop para Mac!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2163/2249693898_32bb4408fe_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2214995008331864560</id><published>2008-01-20T23:08:00.001-02:00</published><updated>2008-01-21T00:08:32.239-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developers'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Intellisense de bolsillo (y multiplataforma): ZSense!</title><content type='html'>Dado que la gran mayoría de mis amigos están disfrutando de sus vacaciones, ya sea en la costa, el sur o en el exterior, este fin de semana fue bastante aburrido: me quedé en casa practicamente sin hacer nada. Todo parecía seguir asi hasta que me vino una idea a la cabeza...&lt;br /&gt;&lt;br /&gt;Desde que instalé OS X en la laptop estoy queriendo desarrollar aplicaciones .NET usando el port de Mono que hay para OS X. El gran problema que tengo es que al no haber port de MonoDevelop (o al menos, no hay sin tener que recompilar medio universo y bajar nosecuantas librerías extra...) termino levantando una VM con Windows XP y el Visual Studio. No pido tener un IDE que se integre con el debugger ni mucho menos, sino que pido algun editor que tenga IntelliSense para no tener que estar programando con la ayuda abierta constantemente.&lt;br /&gt;&lt;br /&gt;Aqui es donde aparece la idea que me vino el día de hoy: lo que hay que hacer es tener el IntelliSense dentro de una aplicacion hecha en .Net, asi, cuando quiera desarrollar, la puedo usar como referencia.&lt;br /&gt;&lt;br /&gt;Sin mas presentación, les entrego a... &lt;span style="font-weight: bold;"&gt;ZSense!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este es un proyectito bastante chico que hice hoy (pero planeo seguir mejorando con el tiempo) que recibe una linea de código con tipos de .Net y va mostrando en una lista las opciones disponibles para seguir escribiendo la linea.&lt;br /&gt;&lt;br /&gt;Esta primera versión tiene algunos &lt;span style="font-style: italic;"&gt;detalles ásperos&lt;/span&gt;: el tipo inicial debe estar escrito entre comillas dobles. Por ej, una linea válida sería: &lt;span style="font-style: italic;"&gt;"System.Int32".GetHashCode().CompareTo(System.Int32)&lt;/span&gt;&lt;div&gt;Como pueden ver, la manera de indicar que sobrecarga de un método se quiere usar es escribiendo el tipo de dato de cada parámetro, separados por comas.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Si se quieren usar mas assemblies aparte de las predeterminadas, se pueden cargar en la lista de la izquierda.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para mas detalle, vean el código! (si, ya se... hay unas cuantas cosas que podrían estar mejor - como el parsing - pero lo quería sacar andando rápido. Ya tendré tiempo para mejorarlo).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Les dejo &lt;a href="http://www.mediafire.com/?cbycy1pe7en"&gt;aca&lt;/a&gt; la versión inicial. En un rato lo subo a Codeplex asi voy dejando ahi las últimas actualizaciones.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/2207445829/" title="ZSenseMultiPlatform by PabloZaiden, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2361/2207445829_954c02e2ca.jpg" width="500" height="313" alt="ZSenseMultiPlatform" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Screenshot, corriendo el mismo ejecutable en OS X con Mono (todavía hay algunos problemas, pero anda...) y en Windows con VMWare Fusion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Un saludo!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Z&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2214995008331864560?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2214995008331864560/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2214995008331864560' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2214995008331864560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2214995008331864560'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/01/intellisense-de-bolsillo-y.html' title='Intellisense de bolsillo (y multiplataforma): ZSense!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2361/2207445829_954c02e2ca_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3068643083683152107</id><published>2008-01-18T20:50:00.000-02:00</published><updated>2008-01-18T21:06:48.325-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Problema con parametros de tipo string de longitud 0 en Oracle usando System.Data.OracleClient</title><content type='html'>Haciendo unas pruebas para una migración a Enterprise Library, nos encontramos con un problema (no se si intencional o no) utilizando las clases de acceso a datos contra Oracle que trae .NET Framework 1.1.&lt;br /&gt;&lt;br /&gt;Supongamos que uno quiere hacer la siguiente consulta:&lt;br /&gt;&lt;div    style="border: 1pt solid windowtext; padding: 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:10pt;color:black;"&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;SELECT * FROM Countries WHERE Country_id = :c_id&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Si usamos el siguiente código, la aplicacion generará una excepcion por tener un parametro de tipo string con longitud 0:&lt;br /&gt;&lt;div face="Courier New" size="10pt" color="black" style="border: 1pt solid windowtext; padding: 0pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; (IDbConnection conn = &lt;span style="color:blue;"&gt;new&lt;/span&gt; OracleConnection("Password=hr;Persist Security Info=True;User ID=hr;Data Source=localhost"))&lt;/pre&gt;{&lt;pre style="margin: 0px;"&gt;    conn.Open();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;using&lt;/span&gt; (IDbCommand command = conn.CreateCommand())&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        command.CommandType = CommandType.Text;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        command.CommandText = "SELECT * FROM Countries WHERE Country_id = :c_id";&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        IDbDataParameter param = command.CreateParameter();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        param.ParameterName = "c_id";&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        param.DbType = DbType.AnsiStringFixedLength;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        param.Value = String.Empty;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        command.Parameters.Add(param);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;using&lt;/span&gt; (IDataReader reader = command.ExecuteReader())&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;            DumpReader(reader);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;        }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;    conn.Close();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;El error es: &lt;span style="font-weight: bold;"&gt;Parameter 'c_id': No size set for variable length data type: String.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para solucionar esto tenemos dos opciones:&lt;br /&gt;&lt;br /&gt;1. Usar la librería provista por Oracle para .NET para acceder a los datos. Esta librería maneja de forma correcta los Strings vacios. (al menos es asi usando la última version de la librería. Me falta confirmar que con versiones anteriores tambien funcione)&lt;br /&gt;&lt;br /&gt;2. Enviar DbNull.Value como valor del parametro, en vez de String.Empty. En otro blog leí que Oracle maneja de la misma manera tanto a los strings vacíos como a los NULL. Sin embargo yo no estoy 100% seguro de que esto sea asi, asi que de tener confirmación o refutación de esto, por favor haganmelo saber! De todas maneras, mi recomendación es usar ODP.Net&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Hasta la próxima!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3068643083683152107?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3068643083683152107/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3068643083683152107' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3068643083683152107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3068643083683152107'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/01/problema-con-parametros-de-tipo-string.html' title='Problema con parametros de tipo string de longitud 0 en Oracle usando System.Data.OracleClient'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7859644012468544462</id><published>2008-01-11T19:36:00.001-02:00</published><updated>2008-01-11T19:39:58.293-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developers'/><title type='text'>Como reconocer a un buen programador?</title><content type='html'>Dejo aca el link a un post que apareció en Slashdot sobre como reconocer a un buen programador. Muy interesante...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/"&gt;http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/ &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si el sitio no responde intentenlo mas tarde, ya que fue recientemente &lt;span style="font-style: italic;"&gt;slashdotted&lt;/span&gt; (sitio caido debido a haber aparecido en slashdot)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Z&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7859644012468544462?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7859644012468544462/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7859644012468544462' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7859644012468544462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7859644012468544462'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/01/como-reconocer-un-buen-programador.html' title='Como reconocer a un buen programador?'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5598026441267458627</id><published>2008-01-05T00:09:00.001-02:00</published><updated>2008-01-05T16:32:33.361-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CBR'/><category scheme='http://www.blogger.com/atom/ns#' term='Comics'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='CBZ'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Conversor de Cbr a Cbz</title><content type='html'>Hace unos dias me baje unos comics de X-Men y la mayoría estaban con formato Cbr (formato para comics, comprimido con rar). El problema es que el programa que uso en OS X para abrir comics suele tener problemas con algunos archivos comprimidos con rar. Sin embargo, esto no sucede con su contraparte en formato zip (archivos Cbz). Por lo tanto, hice un pequeño programa en C# que agarra todos los archivos CBR en un directorio y los recomprime usando ZIP, creando asi la version CBZ de los mismos. Les dejo &lt;a href="http://www.mediafire.com/?864fmna0emd"&gt;aca&lt;/a&gt; el programa y el fuente por si a alguien le es útil o le interesa.&lt;br /&gt;&lt;br /&gt;Z&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5598026441267458627?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5598026441267458627/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5598026441267458627' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5598026441267458627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5598026441267458627'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2008/01/conversor-de-cbr-cbz.html' title='Conversor de Cbr a Cbz'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5409245438643113861</id><published>2007-12-28T13:19:00.001-03:00</published><updated>2007-12-28T13:21:07.258-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developers'/><title type='text'>Nombres de versiones</title><content type='html'>Éste es un mal que afecta a, por lo menos, el 97% de los desarrolladores: siempre que pensamos que una versión "supuestamente" cerrada es la final, aparece una nueva corrección que contradice la suposición anterior. De esto se desprende la siguiente nomenclatura para los entregables:&lt;br /&gt;&lt;br /&gt;Producto_1.0.zip&lt;br /&gt;Producto_1.0.Final.zip&lt;br /&gt;Producto_1.0.FinalArreglado.zip&lt;br /&gt;Producto_1.0.FinalFinal.zip&lt;br /&gt;Producto_1.0.FinalUsarEste.zip&lt;br /&gt;Producto_1.0.LOS.ANTERIORES.NO.SIRVEN.zip&lt;br /&gt;Producto_1.0.LOS.ANTERIORES.NO.SIRVEN.FIXED.zip&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Y la lista continua...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5409245438643113861?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5409245438643113861/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5409245438643113861' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5409245438643113861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5409245438643113861'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/12/nombres-de-versiones.html' title='Nombres de versiones'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-886881738765844640</id><published>2007-12-21T21:51:00.001-03:00</published><updated>2007-12-21T21:51:58.922-03:00</updated><title type='text'>jPod: Toxic Meetings
</title><content type='html'>Cita extraida del libro &lt;span style="font-weight: bold;"&gt;jPod&lt;/span&gt;, de &lt;span style="font-weight: bold;"&gt;Douglas Coupland&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Here’s my theory about meetings and life; the three things you can’t fake are erections, competence and creativity. That's why meetings become toxic. They put uncreative people in a situation in which they have to be something they can never be. And the more effort they put into concealing their inabilities, the more toxic the meeting becomes. One of the most common creativity-faking tactics is when someone puts their hands in prayer position and conceals their mouth while they nod at you and say, "Mmmmmm. Interesting." If pressed, they’ll add, "I’ll have to get back to you on that." Then they don’t say anything else.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br class="webkit-block-placeholder"&gt;&lt;/span&gt;&lt;br /&gt;La proxima vez que le mandes una invitación a una reunion a alguien... pensalo dos veces. Puede ser que por ésto, ese &lt;span style="font-style: italic;"&gt;alguien&lt;/span&gt; muera un poquito por dentro :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-886881738765844640?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/886881738765844640/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=886881738765844640' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/886881738765844640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/886881738765844640'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/12/jpod-toxic-meetings.html' title='jPod: Toxic Meetings&#xA;'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1245947661465073975</id><published>2007-12-18T20:43:00.000-03:00</published><updated>2007-12-18T20:55:03.023-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Heladera último modelo: Instalando Leopard en la Laptop</title><content type='html'>Después de unas semanas usando Mac OS X 10.4.10 (Tiger) decidí que era hora de ir un paso mas allá e instalar Leopard (10.5).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Haciendola corta, les comento lo que hice:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Instalar Tiger.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Una vez que esta instalado, upgradearlo a Leopard (obviamente, no formatear en el proceso). Yo usé el DVD de ToH RC2 que esta dando vueltas por la red.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. Una vez que esta todo andando, instalar el PC EFI, que nos permitirá instalar las actualizaciones de OS X sin usar un kernel patcheado, sino que el original de Apple (vanilla). Pueden ver como hacerlo &lt;a href="http://www.digitmemo.com/articles/734/howto-install-efi-patch-and-enable-vanilla-os-x-kernel-in-hackintosh/"&gt;aca&lt;/a&gt;. (usar la ultima version. Yo use la 8.0)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Usar el system update y actualizar todo (ahora si, sin miedo gracias al PC EFI)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. Para los drivers de video, usar &lt;a href="http://www.mediafire.com/?8tz9tobcleg"&gt;estos&lt;/a&gt; archivos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6. Para usar teclado en español, usar &lt;a href="http://www.mediafire.com/?7gdxxxwmjzi"&gt;este&lt;/a&gt; layout.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;7. El resto, veanlo del post anterior.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Un saludo!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Z&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PD: Hoy salió un DVD llamado IATKOS que, al parecer es una recopilacion mas bonita para instalar Leopard desde 0, con PC EFI y toda la bola. Si alguien la prueba, comenteme que onda.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1245947661465073975?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1245947661465073975/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1245947661465073975' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1245947661465073975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1245947661465073975'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/12/heladera-ltimo-modelo-instalando.html' title='Heladera último modelo: Instalando Leopard en la Laptop'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3693258291976424104</id><published>2007-12-06T21:39:00.000-03:00</published><updated>2007-12-12T10:19:08.673-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Abajo las PCs, arriba las heladeras: Usando Mac OS X en una Hackintosh</title><content type='html'>Por algun motivo, el cual nunca sabré, me volvió a picar el bichito de curiosidad sobre instalar una versión hackeada de OS X en mi ThinkPad T60p para ver que era eso que siempre asocié mas a un electrodoméstico que a una computadora, y aún asi tanta gente me recomendaba.&lt;br /&gt;&lt;br /&gt;Esta vez, baje una versión un poco mas actualizada del sistema: Mac OS X Tiger 10.4.10 (la última vez habia bajado la 10.4.8).&lt;br /&gt;&lt;br /&gt;A diferencia de lo que se puede leer en posts anteriores, una vez instalado el sistema operativo (siempre hablando de mi disco externo) no fue necesario entrar en modo consola y borrar extenciones o cosas similares: todo anduvo &lt;span style="font-style: italic;"&gt;relativamente&lt;/span&gt; bien. Recalco el &lt;span style="font-style: italic;"&gt;relativamente&lt;/span&gt; ya que el sistema recien instalado se parecía mas a un XP recien instalado que a la felicidad computacional la cual me habían comentado: la resolución era de 1024x768, no habian drivers de video, sonido o wireless. Aunque sea, OS X reconoció las particiones NTFS donde tengo Windows XP instalado y las montó (como solo-lectura). Lo que no tuve problemas para usar &lt;span style="font-style: italic;"&gt;out-of-the-box&lt;/span&gt; fue la placa de red, a la cual le conecté el cable e instantaneamente recibí IP.&lt;br /&gt;&lt;br /&gt;Bueno, manos a la obra. Para poder usar esto necesitaría, como minimo, poder escuchar música, tener red sin depender de un cable, escribir en mis particiones NTFS (donde tengo todo lo que uso diariamente) y por último, pero no menos por eso, tener una resolución decente con aceleración de video por hardware.&lt;br /&gt;&lt;br /&gt;1. El sonido: esto fue bastante fácil, ya que la primera busqueda que hice en InsanelyMac (sitio indispensable para cualquiera que desee tener su &lt;span style="font-style: italic;"&gt;Hackintosh&lt;/span&gt;. &lt;a href="http://www.insanelymac.com/"&gt;www.insanelymac.com&lt;/a&gt;) pude encontrar el driver. Pueden bajarlo desde &lt;a href="http://www.mediafire.com/?2omxivnb1tx"&gt;aca&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2. Red inalámbrica: las cosas empezaban a ponerse feas en este punto. Por lo que estuve leyendo en los foros, no existen drivers para la placa de red inalámbrica que traen las Thinkpad T60p y similares. Hay gente desarrollandolos, pero el proceso es lento y parece que todavía falta bastante hasta que podamos hacer uso de el. Por suerte para mi, hace un tiempo me compré un &lt;span style="font-style: italic;"&gt;MSI USB Wireless Stick&lt;/span&gt;. En la página de MSI no dicen nada de un driver para OS X. Sin embargo, buscando por internet me enteré de que el stick es practicamente igual a otro Ralink o algo asi... La cosa es que ese &lt;span style="font-style: italic;"&gt;si &lt;/span&gt;tiene driver y funciona a la perfección!. Dejo &lt;a href="http://www.mediafire.com/?dy5y7zix371"&gt;aca&lt;/a&gt; el driver para bajarlo.&lt;br /&gt;&lt;br /&gt;3. NTFS: Esto fue probablemente lo mas facil de todo. Dado que abajo del OS X hay un BSD, parece que resulta bastante facil portar muchas aplicaciones hechas para Linux hacia el sistema operativo de Mac y una de ellas es FUSE, herramienta que permite cargar drivers para filesystems (como el de NTFS) en espacio de usuario. Teniendo &lt;a href="http://www.mediafire.com/?dd70mxyzwyj"&gt;Mac-FUSE&lt;/a&gt; y el driver &lt;a href="http://www.mediafire.com/?7s3ydtdf3wm"&gt;NTFS-3G&lt;/a&gt; para Mac, ya estaba solucionado el asunto de las particiones.&lt;br /&gt;&lt;br /&gt;4. El video: La correcta configuración de la placa de video fue, por mucho, lo mas complicado que tuve que hacer para tener funcionando el sistema operativo. El gran problema gran es que la T60p trae una ATI FireGL V5250 como placa de video, la cual no posee drivers para Mac. La única esperanza era encontrar drivers para la x1700 que, basicamente es la misma placa, pero con otro ID. Tampoco hay drivers. Después de mucho tiempo, mucha investigación y edicion de archivejos en hexa, pude armar el driver que necesitaba, modificando unos drivers hechos para la X1600 (creo) que aparecieron en InsanelyMac. Para los que lo necesiten, dejo &lt;a href="http://www.mediafire.com/?112kzz1g1lp"&gt;aca&lt;/a&gt; para bajar las extensiones que hay que agregar/sobreescribir, para que puedan tener la placa de video funcionando con aceleración por hardware y 1680x1050 de resolución. Una vez reemplazadas, hay que ir a la consola y modificar los permisos y ownership de estos archivos (que tienen que estar en /System/Library/Extensions).&lt;br /&gt;Para modificar los permisos hacemos: &lt;span style="font-style: italic;"&gt;chmod -R 755 ExtensionAModificar&lt;br /&gt;&lt;/span&gt;Para modificar el ownership hacemos: &lt;span style="font-style: italic;"&gt;chown -R 0:0 ExtensionAModificar&lt;br /&gt;&lt;/span&gt;Finalmente, hacemos: &lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;touch /System/Library/Extensions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; para avisar que cambio el directorio y listo! Tenemos el video andando.&lt;br /&gt;&lt;br /&gt;Si haciendo algo con drivers o similar llevan a la maquina a un estado que no pueda terminar de arrancar, presionen F8 al arranque y cuando le pide las opciones para booteo pongan: &lt;span style="font-style: italic;"&gt;-v -s -f&lt;/span&gt; y los va a llevar al modo consola, donde pueden volver todo al estado anterior.&lt;br /&gt;&lt;br /&gt;Con esto finalice la instalación de drivers. Lo que quedaba por hacer era empezar a instalar soft y a ver que se podía hacer. En este momento ya van 3 días desde que lo instalé y, la verdad, no dan ganas de volver!!!&lt;br /&gt;&lt;br /&gt;Software que les recomiendo:&lt;br /&gt;- Vmware Fusion: versión de Vmware para OS X, con el feature Unity, el cual permite "sacar" ventanas de la maquina virtual y usarlas como si fuesen una ventana mas de OS X. Muy groso!&lt;br /&gt;- Adium: cliente multiprotocolo de IM. Esta muy bueno, pero todavía estoy decidiendome si uso solo ese, o el Messenger para Mac (que es medio feucho) y el iChat para GTalk.&lt;br /&gt;- VLC: excelente reproductor multimedia. Dale una feta de jamon y te la saca como audio y video. Se banca cualquier cosa.&lt;br /&gt;- Firefox: en general, uso Safari como browser, pero alguno sitios como Blogger o GMail o Managerzone no andan del todo bien o con todos sus features ahi, asi que el viejo y querido lobo de fuego viene al rescate.&lt;br /&gt;&lt;br /&gt;Software que NO les recomiendo, pero que es necesario:&lt;br /&gt;- Microsoft Office 2004: anda lento, mal y es horrible. Sin embargo, necesito el Word para editar varios documentos en el laburo y la integración que tiene Entourage (version Mac del Outlook) con Exchange es un poco mejor que la de las herramientas que trae OS X (tal vez no el mail, pero el address book no lo pude hacer sincronizar con exchange sin Entourage). Otro gran problema es que no hay Universal Binaries de Office 2004, por lo que es bastante mas lento que el resto de las aplicaciones. Por suerte, dentro de un mes ya sale Office 2008. Esperemos que sea bastante mejor que éste.&lt;br /&gt;&lt;br /&gt;Bueno, con esto cierro el post (que, de hecho, fue escrito desde OS X, usando internet inalámbrica, mientras escucho musica en el iTunes :D). Cualquier duda consultenme y voy a hacer lo posible en darles una mano.&lt;br /&gt;&lt;br /&gt;Z en la heladera, digo, OS X :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3693258291976424104?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3693258291976424104/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3693258291976424104' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3693258291976424104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3693258291976424104'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/12/abajo-las-pcs-arriba-las-heladeras.html' title='Abajo las PCs, arriba las heladeras: Usando Mac OS X en una Hackintosh'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-576597912401469618</id><published>2007-11-21T12:47:00.001-03:00</published><updated>2007-11-21T12:50:22.029-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><title type='text'>Windows Vista me destruyó la PC 2 veces en menos de 2 días y otra vez… vuelvo a XP</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;El domingo, luego de instalar una actualización que se bajó de &lt;em&gt;Windows Update&lt;/em&gt;, mi PC dejó de funcionar. Restauré una imagen de &lt;em&gt;Ghost&lt;/em&gt; que tenía creada, pero se ve que algo malo tenía, porque no andaba Windows Update y tiraba algunos errores, por lo que decidí reinstalar. El lunes estuve todo el dia instalando Windows Vista y bajando drivers. Una vez que estuvo todo andando, abrí los updates y bajé todo lo que había para actualizar y… reinicie. Esa fue la última vez que Windows Vista pudo arrancar.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Teniendo mas ira que un ejercito de vikingos en puerta de vírgenes, decidí contar hasta 10, pensar en la tumba de quien no terminó de probar los updates y agarrar la imagen de Windows XP.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Otra vez&lt;/em&gt; en el viejo y querido OS lanzado en 2001 por Microsoft, espero terminar mis idas y venidas por Vista y XP, al menos hasta que salga el SP2 de Vista.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;PD: Encontré para usar con XP un programa que simula (y muy bien) el Exposé (o como se escriba) de OS X. Lo pueden conseguir en &lt;a href='http://www.reflexvision.net/'&gt;http://www.reflexvision.net/&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-576597912401469618?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/576597912401469618/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=576597912401469618' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/576597912401469618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/576597912401469618'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/11/windows-vista-me-destruy-la-pc-2-veces.html' title='Windows Vista me destruyó la PC 2 veces en menos de 2 días y otra vez… vuelvo a XP'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2582977897314942870</id><published>2007-11-08T13:01:00.001-03:00</published><updated>2007-11-21T12:50:03.936-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lemmings'/><category scheme='http://www.blogger.com/atom/ns#' term='DragonBall'/><title type='text'>Post descolgado: Para los fanas de DragonBall y nostálgicos del Lemmings… LBZ3D!</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Gente, les dejo aca un excelente jueguito de pelea en 3D basado en los personajes de DragonBall Z… hechos lemmings!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Es medio exigente con la placa de video, pero el juego esta muy bueno: &lt;a href='http://www.lbz3d.com/v2/'&gt;HomePage&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2582977897314942870?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2582977897314942870/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2582977897314942870' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2582977897314942870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2582977897314942870'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/11/post-descolgado-para-los-fanas-de.html' title='Post descolgado: Para los fanas de DragonBall y nostálgicos del Lemmings… LBZ3D!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-9014658835007696991</id><published>2007-11-05T14:51:00.001-03:00</published><updated>2007-11-05T14:56:25.783-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Copy as HTML en Visual Studio</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Para toda la gente que tenga un blog o similar y tenga que pegar código, le recomiendo que use el &lt;em&gt;CopySourceAsHtml&lt;/em&gt; y a olvidarse de los problemas de Blogger, Word 2007 o Live Writer cuando pegás un pedazo de código!. (&lt;em&gt;Gracias Mariano!&lt;/em&gt;)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Lo pueden bajar de &lt;a href='http://www.jtleigh.com/people/colin/software/CopySourceAsHtml/'&gt;aca&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-9014658835007696991?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/9014658835007696991/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=9014658835007696991' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/9014658835007696991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/9014658835007696991'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/11/copy-as-html-en-visual-studio.html' title='Copy as HTML en Visual Studio'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6839292843309261213</id><published>2007-11-05T14:38:00.001-03:00</published><updated>2007-11-05T14:56:18.220-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebServices'/><category scheme='http://www.blogger.com/atom/ns#' term='Proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Accediendo dinamicamente a WebServices</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Hoy estábamos viendo con uno de los chicos del laburo que necesitaba poder acceder a distintos WebServices (desconocidos para el en tiempo de compilación) y queríamos encontrar una forma cómoda de hacerlo.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Después de buscar un poco, encontramos una solución que pareció bastante piola: usando el WSDL del WebService, generar la clase proxy en runtime y usar los WebMethods por Reflection. Está claro que no es la solución óptima en términos de velocidad, pero con unas clases helper que hice, resulta muy cómodo para usar.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;El siguiente código lee el WSDL y genera la nueva clase en runtime:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red0\green128\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs20 \cf1 try\par ??\cf0 \{\par ??\tab \cf4 //Get the web service description\par ??\cf0 \tab \cf5 Uri\cf0  uri = \cf1 new\cf0  \cf5 Uri\cf0 (wsdlUrl);\par ??\par ??\tab \cf5 WebRequest\cf0  webRequest = \cf5 WebRequest\cf0 .Create(uri);\par ??\tab System.IO.\cf5 Stream\cf0  requestStream = webRequest.GetResponse().GetResponseStream();\par ??\tab \cf5 ServiceDescription\cf0  sd = \cf5 ServiceDescription\cf0 .Read(requestStream);\par ??\tab \cf1 string\cf0  sdName = sd.Services[0].Name;\par ??\par ??\tab \cf4 //Create the ServiceDescriptionImporter\par ??\cf0 \tab \cf5 ServiceDescriptionImporter\cf0  sdImporter = \cf1 new\cf0  \cf5 ServiceDescriptionImporter\cf0 ();\par ??\tab sdImporter.AddServiceDescription(sd, \cf5 String\cf0 .Empty, \cf5 String\cf0 .Empty);\par ??\tab sdImporter.ProtocolName = \cf6 "Soap"\cf0 ;\par ??\tab sdImporter.CodeGenerationOptions = \cf5 CodeGenerationOptions\cf0 .GenerateProperties;\par ??\par ??\tab \cf5 CodeNamespace\cf0  codeNamespace = \cf1 new\cf0  \cf5 CodeNamespace\cf0 (DefaultNamespace);\par ??\tab \cf5 CodeCompileUnit\cf0  compileUnit = \cf1 new\cf0  \cf5 CodeCompileUnit\cf0 ();\par ??\tab compileUnit.Namespaces.Add(codeNamespace);\par ??\par ??\tab \cf4 //Import the ServiceDescription\par ??\cf0 \tab \cf5 ServiceDescriptionImportWarnings\cf0  warnings = sdImporter.Import(codeNamespace, compileUnit);\par ??\par ??\tab \cf1 if\cf0  (warnings == 0) \cf4 //No warnings\par ??\cf0 \tab \{\par ??\tab \tab \cf5 CSharpCodeProvider\cf0  codeProvider = \cf1 new\cf0  \cf5 CSharpCodeProvider\cf0 ();\par ??\tab \tab codeProvider.GenerateCodeFromNamespace(codeNamespace, \cf1 new\cf0  \cf5 StringWriter\cf0 (), \cf1 new\cf0  \cf5 CodeGeneratorOptions\cf0 ());\par ??\par ??\tab \tab \cf4 //Compile the assembly\par ??\cf0 \tab \tab \cf1 string\cf0 [] assemblyReferences = \cf1 new\cf0  \cf1 string\cf0 [2] \{ \cf6 "System.Web.Services.dll"\cf0 , \cf6 "System.Xml.dll"\cf0  \};\par ??\tab \tab \cf5 CompilerParameters\cf0  param = \cf1 new\cf0  \cf5 CompilerParameters\cf0 (assemblyReferences);\par ??\tab \tab param.GenerateExecutable = \cf1 false\cf0 ;\par ??\tab \tab param.GenerateInMemory = \cf1 true\cf0 ;\par ??\tab \tab param.TreatWarningsAsErrors = \cf1 false\cf0 ;\par ??\tab \tab param.WarningLevel = 4;\par ??\par ??\tab \tab \cf5 CompilerResults\cf0  results = codeProvider.CompileAssemblyFromDom(param, compileUnit);\par ??\tab \tab \cf5 Assembly\cf0  assembly = results.CompiledAssembly;\par ??\par ??\tab \tab \cf5 Type\cf0 [] types = assembly.GetExportedTypes();\par ??\tab \tab \cf4 //Get the generated Type\par ??\cf0 \tab \tab \cf1 return\cf0  \cf1 new\cf0  \cf5 DynamicProxyClass\cf0 (types[0], GetMethodNames(sd.PortTypes[0].Operations));\par ??\tab \}\par ??\tab \cf1 else\par ??\cf0 \tab \{\par ??\tab \tab \cf1 throw\cf0  \cf1 new\cf0  \cf5 Exception\cf0 (\cf5 String\cf0 .Format(\cf6 "Importing has warnings: \{0\}"\cf0 , warnings.ToString()));\par ??\tab \}\par ??\}\par ??\cf1 catch\cf0  (\cf5 Exception\cf0  ex)\par ??\{\par ??\tab \cf1 throw\cf0  \cf1 new\cf0  \cf5 Exception\cf0 (\cf6 "Couldn't generate proxy class (see inner exception)"\cf0 , ex);\par ??\}}&lt;br /&gt;--&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Get the web service description&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt; uri = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;(wsdlUrl);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;WebRequest&lt;/span&gt; webRequest = &lt;span style="color: #2b91af;"&gt;WebRequest&lt;/span&gt;.Create(uri);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.&lt;span style="color: #2b91af;"&gt;Stream&lt;/span&gt; requestStream = webRequest.GetResponse().GetResponseStream();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;ServiceDescription&lt;/span&gt; sd = &lt;span style="color: #2b91af;"&gt;ServiceDescription&lt;/span&gt;.Read(requestStream);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; sdName = sd.Services[0].Name;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Create the ServiceDescriptionImporter&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;ServiceDescriptionImporter&lt;/span&gt; sdImporter = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ServiceDescriptionImporter&lt;/span&gt;();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sdImporter.AddServiceDescription(sd, &lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Empty, &lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Empty);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sdImporter.ProtocolName = &lt;span style="color: #a31515;"&gt;"Soap"&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sdImporter.CodeGenerationOptions = &lt;span style="color: #2b91af;"&gt;CodeGenerationOptions&lt;/span&gt;.GenerateProperties;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;CodeNamespace&lt;/span&gt; codeNamespace = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CodeNamespace&lt;/span&gt;(DefaultNamespace);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;CodeCompileUnit&lt;/span&gt; compileUnit = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CodeCompileUnit&lt;/span&gt;();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; compileUnit.Namespaces.Add(codeNamespace);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Import the ServiceDescription&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;ServiceDescriptionImportWarnings&lt;/span&gt; warnings = sdImporter.Import(codeNamespace, compileUnit);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (warnings == 0) &lt;span style="color: green;"&gt;//No warnings&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;CSharpCodeProvider&lt;/span&gt; codeProvider = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CSharpCodeProvider&lt;/span&gt;();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; codeProvider.GenerateCodeFromNamespace(codeNamespace, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;StringWriter&lt;/span&gt;(), &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CodeGeneratorOptions&lt;/span&gt;());&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Compile the assembly&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] assemblyReferences = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[2] { &lt;span style="color: #a31515;"&gt;"System.Web.Services.dll"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"System.Xml.dll"&lt;/span&gt; };&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;CompilerParameters&lt;/span&gt; param = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CompilerParameters&lt;/span&gt;(assemblyReferences);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; param.GenerateExecutable = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; param.GenerateInMemory = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; param.TreatWarningsAsErrors = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; param.WarningLevel = 4;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;CompilerResults&lt;/span&gt; results = codeProvider.CompileAssemblyFromDom(param, compileUnit);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assembly&lt;/span&gt; assembly = results.CompiledAssembly;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Type&lt;/span&gt;[] types = assembly.GetExportedTypes();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Get the generated Type&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DynamicProxyClass&lt;/span&gt;(types[0], GetMethodNames(sd.PortTypes[0].Operations));&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"Importing has warnings: {0}"&lt;/span&gt;, warnings.ToString()));&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;catch&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt; ex)&lt;/p&gt;&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Couldn't generate proxy class (see inner exception)"&lt;/span&gt;, ex);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="BACKGROUND: white"&gt;Acá se puede ver que lo que devuelvo es una &lt;em&gt;DynamicProxyClass&lt;/em&gt;. Esta clase lo que hace es &lt;em&gt;wrappear&lt;/em&gt; la clase generada y exponer solo los métodos del WebService, sus tipos de retorno y sus parámetros. &lt;/p&gt;&lt;p style="BACKGROUND: white"&gt;Si les interesa jugar con esto, dejo para bajar el &lt;a href="http://www.mediafire.com/?bmxqck07yn9"&gt;código completo&lt;/a&gt; de la solución.&lt;br /&gt;&lt;/p&gt;&lt;p style="BACKGROUND: white"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="BACKGROUND: white"&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6839292843309261213?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6839292843309261213/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6839292843309261213' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6839292843309261213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6839292843309261213'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/11/accediendo-dinamicamente-webservices.html' title='Accediendo dinamicamente a WebServices'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3060317950416104135</id><published>2007-10-08T14:11:00.001-03:00</published><updated>2007-11-05T14:54:39.678-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Linq'/><title type='text'>C# 3 y Linq – Parte 2</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Les dejo la segunda parte del artículo, donde se ven más ejemplos y una implementación de Linq hecha sobre una clase propia.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Lo pueden bajar de &lt;a href='http://www.mediafire.com/?350ncm0vgyd'&gt;acá&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;¡Hasta la próxima!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3060317950416104135?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3060317950416104135/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3060317950416104135' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3060317950416104135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3060317950416104135'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/10/c-3-y-linq-parte-2.html' title='C# 3 y Linq – Parte 2'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-452830172591528420</id><published>2007-10-08T13:53:00.001-03:00</published><updated>2007-11-05T14:54:50.989-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Linq'/><title type='text'>C# 3 y Linq – Parte 1</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Hace unos meses, con &lt;em&gt;Ariel Neisen&lt;/em&gt; y &lt;em&gt;Javier Argüello&lt;/em&gt; hicimos un artículo explicando los nuevos &lt;em&gt;features&lt;/em&gt; incluidos en C# 3 y Linq para publicar en la revista &lt;em&gt;.Code&lt;/em&gt;. El artículo ya había sido enviado, sin embargo hace unos días nos enteramos de que la publicación de la revista fue suspendida (aparentemente &lt;em&gt;for good&lt;/em&gt;). Como el artículo ya estaba hecho, decidí publicarlo en el blog.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;La primera parte hace una introducción a las nuevas herramientas del lenguaje y a Linq. La pueden bajar de &lt;a href='http://www.mediafire.com/?ez3ymk3eqet'&gt;acá&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;En un rato estaré publicando la segunda parte.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;¡Hasta la próxima!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-452830172591528420?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/452830172591528420/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=452830172591528420' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/452830172591528420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/452830172591528420'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/10/c-3-y-linq-parte-1.html' title='C# 3 y Linq – Parte 1'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1772512765868372964</id><published>2007-09-03T10:40:00.001-03:00</published><updated>2007-11-05T14:55:14.037-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codeplex'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>SvnBridge: TFS a través de un cliente de SubVersion</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Gente, para quienes tengan que usar TFS en sus proyectos, pero estén acostumbrados a herramientas para control de versión menos &lt;em&gt;invasivas&lt;/em&gt; como el SVN o CVS, les recomiendo el &lt;em&gt;SvnBridge&lt;/em&gt;: un programita que pone un mini-server de SVN en la maquina local, que lo único que hace es wrappear los comandos de SVN a otro server de TFS. Yo lo estoy usando para subir las cosas a &lt;em&gt;Codeplex&lt;/em&gt;. Parece funcionar un poco lento, aunque no se si es por el server de TFS o este programa. Muy bueno&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pueden obtener el código fuente desde acá: &lt;a href='http://www.codeplex.com/SvnBridge'&gt;http://www.codeplex.com/SvnBridge&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Saludos!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1772512765868372964?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1772512765868372964/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1772512765868372964' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1772512765868372964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1772512765868372964'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/09/svnbridge-tfs-travs-de-un-cliente-de.html' title='SvnBridge: TFS a través de un cliente de SubVersion'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5981489228423885601</id><published>2007-09-02T21:28:00.001-03:00</published><updated>2007-09-02T21:44:55.583-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Reconocimiento de Voz'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Cool'/><title type='text'>Key Simulator – Voice Commander</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Gente, para quienes quieran tener la última versión del &lt;em&gt;Voice Commander&lt;/em&gt; que estoy haciendo, pueden bajárselo de &lt;a href='http://www.codeplex.com/KeySimVoiceCommander'&gt;http://www.codeplex.com/KeySimVoiceCommander&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Saludos!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5981489228423885601?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5981489228423885601/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5981489228423885601' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5981489228423885601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5981489228423885601'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/09/key-simulator-voice-commander.html' title='Key Simulator – Voice Commander'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6862679312963325613</id><published>2007-08-31T14:10:00.001-03:00</published><updated>2007-09-02T21:44:44.754-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Reconocimiento de Voz'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Cool'/><title type='text'>Feedback sobre los posts anteriores</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Al parecer, lo que mostre en el post anterior funciona "como viene" nada mas con Windows Vista. Tendría que sentarme a ver bien que pasa sobre XP.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Saludos!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6862679312963325613?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6862679312963325613/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6862679312963325613' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6862679312963325613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6862679312963325613'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/08/feedback-sobre-los-posts-anteriores.html' title='Feedback sobre los posts anteriores'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4828664182099838668</id><published>2007-08-29T11:31:00.002-03:00</published><updated>2008-09-22T10:28:07.331-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Reconocimiento de Voz'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Cool'/><title type='text'>Cool &amp; Useless: Creando nuestra propia aplicación para manejar la PC por medio de la voz, (casi) todo desde código manejado (Parte 2)</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;En el post anterior vimos hace para usar el motor de reconocimiento de voz usando el .Net Framework 3.0 para reconocer las frases que nosotros queremos. Sin embargo, para hacer esto estábamos usando el motor de reconocimiento predeterminado del sistema. Haciendo un pequeño retoque, veremos que es posible usar el motor en cualquier otro idioma.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;El primer requerimiento será bajar el MUI Pack del idioma que queremos usar. El Windows Vista Ultimate que yo tengo instalado trae ya instalado el motor para inglés americano y británico. Desde Windows Update, baje el MUI Pack de español y con esto, se instaló el motor de reconocimiento en español.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Como comenté en el post anterior, Windows no permite el uso del reconocimiento de voz en un idioma distinto al que se está usando en el sistema. Sin embargo, con las siguientes líneas de código es posible inicializar la clase &lt;em&gt;SpeechRecognitionEngine&lt;/em&gt; con cualquier otro motor instalado.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Este ejemplo busca algún motor que esté en español y empieza a reconocer voz con el idioma elegido:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt; SpeechRecognitionEngine sre = null;&lt;br /&gt; foreach (RecognizerInfo config in SpeechRecognitionEngine.InstalledRecognizers())&lt;br /&gt; {&lt;br /&gt;  if (config.Culture.TwoLetterISOLanguageName == "es")&lt;br /&gt;  {&lt;br /&gt;   sre = new SpeechRecognitionEngine(config);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; Choices choises = new System.Speech.Recognition.Choices(&lt;br /&gt;  new string[] { "hola", "como", "estas", "mi nombre es Pablo" });&lt;br /&gt;&lt;br /&gt; GrammarBuilder gb = choises.ToGrammarBuilder();&lt;br /&gt; gb.Culture = sre.RecognizerInfo.Culture;&lt;br /&gt; Grammar grammar = new Grammar(gb);&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; sre.LoadGrammar(grammar);&lt;br /&gt; sre.SpeechRecognized += new EventHandler&lt;SpeechRecognizedEventArgs&gt;(sre_SpeechRecognized);&lt;br /&gt; sre.SetInputToDefaultAudioDevice();&lt;br /&gt; sre.RecognizeAsync(RecognizeMode.Multiple);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Debemos recordar que al inicializar el SpeechRecognitionEngine con un idioma distinto al predeterminado, también debemos cambiar la cultura del GrammarBuilder usado para generar la gramática a cargar. El resto del ejemplo es igual a lo ya visto.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Volviendo a nuestro objetivo de manejar cualquier cosa con la voz, lo que necesitamos hacer ahora es poder simular el uso de teclado.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Si bien el .Net Framework trae la clase &lt;em&gt;System.Windows.Forms.SendKeys&lt;/em&gt; con el método &lt;em&gt;Send&lt;/em&gt;, el cual recibe un String y simula presionar esas teclas, veremos que esto no nos va a servir para simular es uso del teclado en juegos que usen DirectX.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para poder hacer esto, usé la función &lt;em&gt;SendInput()&lt;/em&gt; desde C++ la cual está disponible al incluir el header &lt;em&gt;windows.h . &lt;/em&gt;Esta función sirve para simular desde un nivel mas bajo el input desde teclado, mouse o algún otro dispositivo de hardware (más información en &lt;a href='http://msdn2.microsoft.com/en-us/library/ms646310.aspx'&gt;http://msdn2.microsoft.com/en-us/library/ms646310.aspx&lt;/a&gt;).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A continuación un pequeño ejemplo de cómo usarlo para simular la letra 'A'&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;void SimulateKeyboard()&lt;br /&gt;{&lt;br /&gt;    KEYBDINPUT kb={0};&lt;br /&gt;    INPUT Input={0};&lt;br /&gt; &lt;br /&gt;    kb.wVk = 'A'; &lt;br /&gt;    Input.type = INPUT_KEYBOARD;&lt;br /&gt;    Input.ki = kb;&lt;br /&gt;    ::SendInput(1,&amp;Input,sizeof(Input));&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Teniendo esto, creé un nuevo proyecto de DLL en C++ para poder exportarla y usarla desde código manejado.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Una vez obtenida la DLL que exporta el método creé un proyecto de DLL en C# para poder wrappear esta función y usarla cómodamente desde código manejado.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Con esto ya terminé de armar todas las herramientas necesarias para mi aplicación. Solo restó armar una aplicación que levante una configuración desde un archivo XML con las frases que quería decir, asociadas a las combinaciones de teclas a simular y listo! Ya tenía armado mi simulador de teclado manejado por voz.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Acá les dejo un link al &lt;a target="_blank" href='http://www.mediafire.com/?ddxbvw3eznj'&gt;código del proyecto&lt;/a&gt; entero para que lo bajen. Tengan en cuenta que esto lo hice medio a los apurones así que puede estar bastante buggeado, pero, como diría el Bambino Veira, &lt;em&gt;La Base Está&lt;/em&gt; &lt;span style='font-family:Wingdings'&gt;J&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;Saludos!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4828664182099838668?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4828664182099838668/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4828664182099838668' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4828664182099838668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4828664182099838668'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/08/coolest-useless-creando-nuestra-propia_29.html' title='Cool &amp;amp; Useless: Creando nuestra propia aplicación para manejar la PC por medio de la voz, (casi) todo desde código manejado (Parte 2)'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-828425294275203631</id><published>2007-08-28T23:59:00.003-03:00</published><updated>2008-09-22T10:28:36.743-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reconocimiento de Voz'/><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Cool'/><title type='text'>Cool &amp; Useless: Creando nuestra propia aplicación para manejar la PC por medio de la voz, (casi) todo desde código manejado (Parte 1)</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Después de gastar horas y horas jugando al &lt;em&gt;Star Trek: Bridge Commander&lt;/em&gt;, empecé a pensar que al juego le faltaba algo. En un perfecto simulador de una nave de &lt;em&gt;Star Trek&lt;/em&gt; el capitán debería estar hablando con la tripulación de puente, y no picándole la cabeza (traducción al mundo real de hacer click al mirar hacia un tripulante) para que hagan lo que dice, por lo que me propuse lo siguiente: Hacer íntegramente en .Net una aplicación en la cual pueda reconocer comandos de voz, los mapee a &lt;em&gt;hotkeys &lt;/em&gt;del juego y simule su uso, para que entonces yo pueda gritar: &lt;em&gt;Red alert! Shields up!&lt;/em&gt; Y mi primer oficial levante los escudos y las armas, sin tener que memorizarme los &lt;em&gt;381273981&lt;/em&gt; hotkeys que trae el juego.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para lograr mi objetivo, empecé por donde suponía que iba a tener mayores dolores de cabeza: el &lt;em&gt;Reconocimiento de Voz&lt;/em&gt;. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Desde hace unos días ya había estado entrenando al motor de reconocimiento de voz &lt;em&gt;en ingles&lt;/em&gt; que trae Windows Vista, usando el (pésimo) micrófono incorporado a la laptop. A pesar de todo, el resultado había sido bastante satisfactorio, pudiendo usar con relativa comodidad la maquina mediante órdenes de voz, siempre y cuando este en un ambiente silencioso. La primera vez que instalé Windows Vista había bajado el MUI Pack en español, para poder tener reconocimiento de voz en ese idioma. El problema era que para poder usarlo desde Windows tenía que cambiar el idioma de toda la interfaz de usuario, cosa que prefería evitar, por lo que decidí no bajarlo esta vez.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Investigando en MSDN, encontré que con el Framework 3.0 viene un &lt;em&gt;assembly&lt;/em&gt; llamado &lt;em&gt;System.Speech&lt;/em&gt;, el cual tiene clases que sirven tanto para el reconocimiento como la síntesis de voz.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Si quieren usar este assembly en un proyecto de &lt;em&gt;Visual Studio 2005&lt;/em&gt; y no aparece en el listado de referencias para agregar, vayan a &lt;em&gt;C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\ &lt;/em&gt;(o el equivalente en su máquina) y lo van a encontrar.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Dentro del namespace System.Speech.Recognition encontré las clases &lt;em&gt;SpeechRecognitionEngine y SpeechRecognition&lt;/em&gt;, las cuales use para poder empezar a "escuchar" lo que estaba diciendo, dentro del programa (más información en &lt;a href='http://msdn2.microsoft.com/en-us/library/system.speech.recognition.aspx'&gt;http://msdn2.microsoft.com/en-us/library/system.speech.recognition.aspx&lt;/a&gt;).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A grandes rasgos, noté como diferencia de SpeechRecognition y SpeechRecognitionEngine que el primero levanta la aplicación que Windows Vista usa para reconocimiento de voz, por lo que todo lo que yo diga iba a ser "escuchado" por esta aplicación también; entonces si yo decía entre otras cosas "&lt;em&gt;Open Internet Explorer&lt;/em&gt;" Windows iba a abrir el Internet Explorer, mientras que usando la clase SpeechRecognitionEngine, solo el motor de reconocimiento es activado, pero todo el control queda a manos del desarrollador. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;A continuación, un pequeño ejemplo de cómo usé esta clase:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Speech.Recognition;&lt;br /&gt;using System.Threading;&lt;br /&gt;&lt;br /&gt;namespace ConsoleApplication2&lt;br /&gt;{&lt;br /&gt; class Program&lt;br /&gt; {&lt;br /&gt;  static void Main(string[] args)&lt;br /&gt;  {&lt;br /&gt;   SpeechRecognitionEngine sre = new SpeechRecognitionEngine();&lt;br /&gt;   Choices choises = new Choices(new string[] { "Hello", "Good bye" });&lt;br /&gt;&lt;br /&gt;   GrammarBuilder grammarBuilder = choises.ToGrammarBuilder();&lt;br /&gt;&lt;br /&gt;   sre.LoadGrammar(new Grammar(grammarBuilder));&lt;br /&gt;&lt;br /&gt;   sre.SpeechRecognized += new EventHandler&lt;SpeechRecognizedEventArgs&gt;(sre_SpeechRecognized);&lt;br /&gt;   sre.SetInputToDefaultAudioDevice();&lt;br /&gt;   sre.RecognizeAsync(RecognizeMode.Multiple);&lt;br /&gt;&lt;br /&gt;   Console.ReadKey();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  static void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)&lt;br /&gt;  {&lt;br /&gt;   if (e.Result.Confidence &gt; 0.9)&lt;br /&gt;   {&lt;br /&gt;    Console.WriteLine("Escuché '{0}' con una certeza del {1}%",&lt;br /&gt;     e.Result.Text,&lt;br /&gt;     e.Result.Confidence * 100);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;En el ejemplo se ve como creamos una nueva instancia de la clase &lt;em&gt;Grammar&lt;/em&gt;, mediante el uso de la clase &lt;em&gt;Choises&lt;/em&gt;, con la cual indicamos que es lo que vamos a querer escuchar desde el programa. Una vez creada la nueva gramática se la podemos agregar a la instancia del &lt;em&gt;SpeechRecognitionEngine&lt;/em&gt;. A continuación suscribimos un método nuestro al evento &lt;em&gt;SpeechRecognized &lt;/em&gt;para poder hacer algo cuando el SRE reconozca algo. Como el &lt;em&gt;SRE&lt;/em&gt; puede escuchar no solamente de un micrófono, sino que también de un archivo de sonido, llamamos al método &lt;em&gt;SetInputToDefaultAudioDevice()&lt;/em&gt; para que sepa de donde tiene que escuchar.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para terminar, llamamos al método &lt;em&gt;RecognizeAsync&lt;/em&gt; para poder empezar a reconocer voz de forma asincrónica.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;El método &lt;em&gt;sre_SpeechRecognized&lt;/em&gt; se fija que el reconocimiento tenga una certeza de más del 90% y en ese caso, escribe lo que reconoció en pantalla.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Con esto, ya tenemos la forma de reconocer los comandos de voz que le vamos a querer mandar a las otras aplicaciones. La próxima les voy a mostrar como poder elegir entre varios idiomas para usar en el reconocimiento de texto y como poder simular el uso de teclado en cualquier aplicación, incluso juegos que usan DirectX!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Saludos!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-828425294275203631?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/828425294275203631/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=828425294275203631' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/828425294275203631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/828425294275203631'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/08/coolest-useless-creando-nuestra-propia.html' title='Cool &amp;amp; Useless: Creando nuestra propia aplicación para manejar la PC por medio de la voz, (casi) todo desde código manejado (Parte 1)'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3581442929907069534</id><published>2007-08-11T19:41:00.001-03:00</published><updated>2007-08-11T19:59:54.033-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><title type='text'>Windows Vista – Round 2</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Después de haberle agregado 1GB más de RAM a la Thinkpad T60p, volví a instalarle Windows Vista (y usarlo sin swap). Por ahora, la maquina está teniendo un excelente tiempo de respuesta y un uso de memoria del 40 a 50 porciento en idle (total: 2GB).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Veremos en estas semanas como se sigue comportando, ahora que mucho mas software es compatible con el nuevo sistema operativo de MS.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Saludos!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3581442929907069534?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3581442929907069534/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3581442929907069534' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3581442929907069534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3581442929907069534'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/08/windows-vista-round-2.html' title='Windows Vista – Round 2'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3509955257358092535</id><published>2007-07-31T10:44:00.001-03:00</published><updated>2007-08-07T14:42:25.223-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><title type='text'>La instalación de Windows Vista no se lleva del todo bien con Linux</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Paso a comentarles un problema que tuve y como lo solucioné, al intentar instalar Windows Vista en mi máquina de escritorio.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;La historia es asi: la PC donde se iba a instalar Vista es un AMD Sempron 2400+ con 640MB de RAM con una placa de video ATI Radeon 9600XT con 128MB de memoria. Si bien no está arriba de todo con los requerimientos de hard de Vista, se suponía que tenia que andar bien para lo que la iba a usar (Downloader y Central Multimedia). Esa PC tenía instalado un Ubuntu Linux 7.04 y tenía el disco de 120GB particionado en 2: 90GB en NTFS para datos, 29GB en EXT3 para sistema y 1GB para swap.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Luego de quemar el DVD de Windows Vista me dispongo a instalarlo en la PC. Pongo el DVD, reinicio la máquina. Empieza a bootear desde el DVD, aparece el cartel de Windows Vista y la barrita moviéndose al cargar y… puf! Pantalla en negro. Uno, dos… cinco… diez… treinta minutos sin hacer nada. Reinicio. Vuelvo a intentar. Lo mismo. Empezamos mal.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Como primer problema, sospeché que podía haber algún problema con el DVD, entonces agarre la notebook e intenté instalar Vista en una VM. Instaló sin problemas y en tiempo record. Después, se me ocurrió que podía llegar a ser problemas del monitor LCD (nuevo) que tenía. Algun problema de resoluciones, tasa de refresco o algo asi. Probé con el CRT y tampoco: sin respuesta.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Mi próximo target fue la placa de video. Busque mucho en internet y no parecía haber nada reportado sobre incompatibilidades de mi Motherboard - Placa de Video - Procesador con Windows Vista. Hasta que finalmente se me ocurrió: ¿Será algún problema con la partición EXT3 que tengo? ¿O con la partición NTFS en la cual Linux estuvo trabajando todo este tiempo?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ahí probé correr el GPartEd (Gnome Partition Editor), borrar las particiones Linux y dejar la NTFS solamente. Volví a correr la instalación de Vista y, pese a no poder instalar, la cosa había mejorado un poco: la instalación mostraba una pantalla mas (la que se ve el fondo azul) y me mostraba el puntero del mouse, pero nada mas (y tardaba mucho en poder hacer esto). Lo bueno es que sabia por donde venia el problema: resultaba que una vez (usando Linux) se cortó la luz en mi casa y la partición NTFS quedó marcada como que tenia que ser escaneada por errores (sin embargo, siempre anduvo bien). Esto todavía no se puede hacer desde Linux, asi que nunca lo hice. La forma de solucionarlo fue correr la instalación de Windows XP (que anduvo sin problemas), crear una partición NTFS en el espacio que había quedado al borrar la partición  EXT3, correr el verificador de unidades y recién ahí, volver a instalar Vista, esta vez sin problemas.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Asi que si a alguien le pasa que la instalación se le queda en una pantalla negra, o en la pantalla con fondo azul, puntero del mouse y nada mas, vea si no hay algún problema con las particiones.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Un saludo!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3509955257358092535?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3509955257358092535/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3509955257358092535' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3509955257358092535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3509955257358092535'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/07/la-instalacin-de-windows-vista-no-se.html' title='La instalación de Windows Vista no se lleva del todo bien con Linux'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5905243698120649213</id><published>2007-06-17T15:53:00.001-03:00</published><updated>2007-08-07T14:47:41.299-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thinkpad'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Finalmente, Mac OS X andando en la Thinkpad T60p</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Después de varios intentos de instalar OS X sobre la T60p y 2 DVDs de Mac OS X bajados, pude instalar el flamante sistema operativo de Mac en la notebook.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Por si alguien está teniendo los mismos problemas, les cuento los detalles de esta máquina, como hice para instalarlo y que quedo andando y que no.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Detalles de la máquina, &lt;strong&gt;Lenovo Thinkpad T60p&lt;/strong&gt;&lt;br /&gt;   &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Procesador:&lt;/strong&gt; Intel® Core™2 Duo T7200 (2GHz) &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Memoria:&lt;/strong&gt; 1GB RAM PC2-5300 667MHz DDR2 &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Disco Duro:&lt;/strong&gt; 100GB 7200rpm HD SATA 150 &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Unidad Óptica:&lt;/strong&gt; CDRW/DVDRW Multiburner &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Pantalla:&lt;/strong&gt; 15.4" 1680x1050 LCD Widescreen anti-glare &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Conectividad:&lt;/strong&gt; Intel® 802.11abg Wireless, Bluetooth/Modem, 1Gb Ethernet &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Otros:&lt;/strong&gt; 256MB ATI® Fire GL™ V5250, Ultranav, Thinklight™, Secure Chip, Fingerprint Reader, Batería 9 celdas Li-Ion, Ports: Three USB 2.0 / external DB-15 monitor / infrared (4Mbps) / RJ-11 (modem) / RJ-45 (ethernet) &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Instalación:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;El DVD que me bajé es el de Mac OS X JaS 10.4.8. La instalación es bastante fácil de seguir. Tiene una utilidad para particionar discos que no trae grandes complicaciones (yo lo instalé en un disco externo conectado por USB y anduvo de 10). En el momento de elegir que paquetes instalar, hay que marcar el de Intel SSE3, y los que tengan que ver con el hardware de la maquina (creo que ninguno mas para mi caso).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Una vez terminada la instalación, no hay que sacar el DVD de la lectora y volver a arrancar la instalación. Cuando ya cargó de nuevo, abrir una consola (creo que está en el menú de utilidades), ir al directorio: &lt;em&gt;/Volumes/NombreDelDiscoDondeInstalaronMacOsX/System/Libraries/Extensions/&lt;/em&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Estando ahí, borrar (o mover a algún otro lugar):&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ATI*&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ApplePCCardATA&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ApplePCCardATA16 (Este creo que se llama distinto…)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;IOPCCardFamily (Este decía que había que borrarlo, pero nunca lo tuve)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;AppleHDA&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Una vez hecho esto, salir del programa de instalación, sacar el DVD y bootear felizmente Mac OS X (si no borramos esto, tira un Kernel Panic, indicando que hay que reiniciar la máquina).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Al iniciar Mac OS X, vamos a tener la PC con la red Ethernet funcionando, pero con una resolución de 1024x768 y sin sonido.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para conseguir tener sonido busquen el siguiente driver en la página &lt;em&gt;http://forum.insanelymac.com/&lt;/em&gt; : Conexant_HD_Audio.pkg.zip&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aparentemente, todavía no hay drivers para la placa de video, FireGL v5250 (mismo chip que la X1700) asi que lo mejor que pude conseguir fue subir la resolución a 1400x1050, y no 1680x1050, como debería ser. Tampoco pude activar los efectos 3D por el mismo motivo.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sobre la placa de red wireless el asunto es similar: recién hace poco empezaron a desarrollar un driver que funcione con la placa que trae esta máquina, asi que habrá que esperar unos meses hasta tenerlo andando.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para más información busquen en el foro de InsanelyMac que hay mucha gente que pasó por lo mismo.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ah, si alguien consigue drivers, o como hacer andar bien la placa de video, por favor avíseme!!!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Saludos,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;PD: Si lo instalan, con el Beta de VMWare Fusion pueden correr su instalación de Windows alojada en otra partición como si fuese una máquina virtual y con el nuevo feature &lt;em&gt;Unity&lt;/em&gt; pueden tener las ventanas de Windows directamente en el escritorio de Mac! (pretty cool, ha!)&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5905243698120649213?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5905243698120649213/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5905243698120649213' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5905243698120649213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5905243698120649213'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/06/finalmente-mac-os-x-andando-en-la.html' title='Finalmente, Mac OS X andando en la Thinkpad T60p'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3012829214065281705</id><published>2007-06-09T21:34:00.001-03:00</published><updated>2007-08-07T14:49:32.538-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thinkpad'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>OS X se niega a instalar</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Estuve todo el sabado a la tarde tratando de hacer andar Mac OS X en mi Thinkpad T60p, pero finalmente tuve que resignarme: no hubo forma de hacerlo andar. Siempre que terminaba de instalar, reiniciaba la PC y todo terminaba con un &lt;em&gt;kernel Panic&lt;/em&gt;. Ahora me estoy bajando una versión mas nueva, a ver si con ese puedo instalarlo bien (ahora voy a tratar de hacerlo sobre el disco externo, para no tener que volver a destruir mi partición de XP…). Todo sea por poder usar el VMWare Fusion :D&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3012829214065281705?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3012829214065281705/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3012829214065281705' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3012829214065281705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3012829214065281705'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/06/os-x-se-niega-instalar.html' title='OS X se niega a instalar'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-3606741331803483613</id><published>2007-05-21T13:52:00.001-03:00</published><updated>2007-08-07T14:50:34.597-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework 3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Annonymous Types'/><title type='text'>Generics con tipos anonimos en C# 3.0</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Hace unas semanas bajé el Beta 1 de Visual Studio Code Name Orcas, el cual trae soporte para el .NET Framework 3.5 y las herramientas de lenguaje para C# 3.0&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jugando un poco, primero con LINQ y después con los nuevos &lt;em&gt;chiches&lt;/em&gt; de los &lt;em&gt;tipos anónimos&lt;/em&gt; me encontré con el siguiente problema: pese a que haciendo queries de LINQ los valores de retorno podían venir como un tipo anónimo, yo no podía hacer lo mismo para mis clases.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Básicamente mi motivación era no tener que crear una clase para, por ejemplo, tener una colección de tuplas &lt;em&gt;&amp;lt;Int, String&amp;gt;&lt;/em&gt; para poder hacer algo como esto:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;(este código no compila. La notacion List&amp;lt;{Int, String}&amp;gt; es product de mi imaginación :D)&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;div&gt;&lt;table style="BACKGROUND: #eeece1; BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 638px"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="HEIGHT: 182px"&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console;"&gt;List&amp;lt;{Int, String}&amp;gt; miLista = new List&amp;lt;{Int, String}&amp;gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Lucida Console;"&gt;miLista.Add(new { Elem1 = 1, Elem2 = "A" });&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;miLista.Add(new { Elem1 = 2, Elem2 = "B" });&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;miLista.Add(new { Elem1 = 3, Elem2 = "C" });&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Lucida Console;"&gt;foreach (var tupla in miLista)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(tupla.Elem1);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(tupla.Elem2);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Le comenté esta duda a Diego Gonzalez y después de unos días me averiguó la forma de poder hacer esto y por que no funcionaba mi idea original. Me dijo que el problema es que los tipos genéricos &lt;em&gt;no pueden ser inferidos en el constructor&lt;/em&gt; y es por eso que no se pueden crear las List&amp;lt;T&amp;gt; de esta forma.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para poder crearlas hubo que hacer una clase auxiliar que infiere los tipos desde métodos estáticos y crea las instancias de las clases genéricas con los tipos ya inferidos (por si no se entendió, aca va un ejemplo):&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;(este código SI compila!)&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;div&gt;&lt;table style="BACKGROUND: #eeece1; BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 638px"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="HEIGHT: 183px"&gt;&lt;td style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console;"&gt;using System;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;using System.Collections.Generic;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;using System.Text;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Lucida Console;"&gt;namespace CollectionsTest&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class CollectionGenerator&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public static List&amp;lt;T&amp;gt; NewList&amp;lt;T&amp;gt;(T witness)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return new List&amp;lt;T&amp;gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;class Program&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;static void Main(string[] args)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;var miLista = CollectionGenerator.NewList(&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;new { Elem1 = 1, Elem2 = "A" });&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;miLista.Add(new { Elem1 = 1, Elem2 = "A" });&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;miLista.Add(new { Elem1 = 2, Elem2 = "B" });&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;miLista.Add(new { Elem1 = 3, Elem2 = "C" });&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;foreach (var tupla in miLista)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(tupla.Elem1);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(tupla.Elem2);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Lucida Console;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Básicamente, lo que hace el método &lt;em&gt;NewList&lt;/em&gt; de la clase &lt;span style="TEXT-DECORATION: underline"&gt;&lt;em&gt;CollectionGenerator&lt;/em&gt;&lt;/span&gt; es inferir el tipo de un testigo de una clase genérica y construir una lista del tipo inferido. Una vez hecho esto, ya podemos usar nuestra lista de objetos de un tipo anónimo!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Espero que les sea útil.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Un saludo!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-3606741331803483613?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/3606741331803483613/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=3606741331803483613' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3606741331803483613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/3606741331803483613'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/05/generics-con-tipos-anonimos-en-c-30.html' title='Generics con tipos anonimos en C# 3.0'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6985073962162106650</id><published>2007-05-10T10:22:00.001-03:00</published><updated>2007-08-07T14:51:19.284-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtualizacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC'/><title type='text'>VMWare Workstation 6 (o Player 2) vs. Virtual PC 2007</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Hace poco me bajé el Beta 1 de Visual Studio Orcas y prefería no destruir mi PC en el intento de probarlo me incliné por la opción de la virtualización.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Como cada vez que hago esto desde Windows, llegué a la dicotomía de si debía usar VMWare (el cual siempre supo dar buenos resultados en el pasado), o el nuevo Virtual PC 2007, del cual me habían hablado muy bien.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para empezar, me bajé (de forma gratuita) el Virtual PC 2007 y creé una nueva máquina virtual con Windows XP SP2, todas las actualizaciones y Visual Studio Orcas. Para mi sorpresa (y en comparación con las versiones anteriores de Virtual PC) teniendo una VPC con sólo 256MB de RAM, se podía trabajar con total fluidez y soltura,  sin frenadas ni grandes tiempos de carga (y decir eso sobre Visual Studio no es poca cosa). Lo único que podía notar a veces es que la máquina host se notaba un poco lenta.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para mi suerte, después de 2 días (y por pura casualidad) salió la nueva versión de VMWare. Como andaba con un poco de tiempo, decidí probar cual era el mejor de los dos para lo que quería hacer (de por sí, el VMWare arrancaba con la ventaja de que corre Linux sin problemas, cosa que necesito a veces para la facultad). Bajé el VMWare Player 2.0 para Windows y el trial de VMWare Workstation para Linux (después verán para que). El único asunto es que el VMWare Player no tiene ninguna tool para crear nuevas máquinas virtuales. Aquí es donde &lt;a href='http://www.easyvmx.com'&gt;www.easyvmx.com&lt;/a&gt; entra en juego: una página donde uno puede configurar una maquina virtual como quiere, y la genera! Con esto, ya podemos tener una maquina virtual similar a la creada para VPC. Una vez bajada la VM, procedí a instalar Windows XP.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Una vez ya instalado el sistema operativo salta a la luz otra diferencia del VMWare Player con la versión Workstation o Server: la falta de las VMWare Tools, instalables en la máquina Guest. Igualmente, esto tiene una muy simple solución: vamos al archivo &lt;em&gt;.tgz&lt;/em&gt; que bajamos de la versión trial para Linux de VMWare Workstation y si buscamos un poco vamos a encontrar un archivo llamado &lt;em&gt;Windows.iso&lt;/em&gt; o &lt;em&gt;Linux.iso&lt;/em&gt;, los cuales son las imágenes de CD de las VMWare tools para Windows y Linux respectivamente. Montamos la imagen en la VM e instalamos las tools.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ahora si, ya estamos en igualdad de condiciones para comparar los dos productos. Para ver que me convenía más, decidí correr unos benchmarks. Pese a que estuvieron bastante más parejos que los benchmarks anteriores, VMWare sigue superando a Virtual PC en performance.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Una cosa loca que me paso con los benchmarks es que al hacer un benchmark de disco, VPC sacó incluso más puntaje que la maquina nativa, por lo que pienso que debe estar haciendo alguna trampa en esa categoría…&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Como todavía no quería cerrar el veredicto, me puse a usar la VM para ver como era el tiempo de respuesta y usabilidad. En una palabra, &lt;em&gt;excelente&lt;/em&gt;. Como dato extra, la maquina host queda bastante más &lt;em&gt;viva&lt;/em&gt; al correr la VM que con VPC.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Por lo tanto el veredicto final es: VMWare sigue ofreciendo superior performance, pero ahora es seguido bastante más de cerca por Virtual PC.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;¡Hasta la próxima!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z  &lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6985073962162106650?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6985073962162106650/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6985073962162106650' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6985073962162106650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6985073962162106650'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/05/vmware-workstation-6-o-player-2-vs.html' title='VMWare Workstation 6 (o Player 2) vs. Virtual PC 2007'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-566861413715291182</id><published>2007-04-22T19:03:00.001-03:00</published><updated>2007-08-07T14:52:16.360-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VLC'/><category scheme='http://www.blogger.com/atom/ns#' term='PSP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><title type='text'>Vuelta al Blog, vuelta a XP</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Hace una banda que no escribo nada!!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ya que es un blog bastante nerd, solo voy a poner las cosas &lt;em&gt;nerd-reelevantes&lt;/em&gt;:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Volví a XP. Vista es muy lindo y todo lo que quieran, pero todavía esta verde. Para las cosas de desarrollo y, en general, el uso de la red todavía anda mal. Más aún, con la IBM, XP vuela. Pero vuela &lt;em&gt;en serio&lt;/em&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pude usar bien (tanto en Vista como XP) el acelerómetro de la Thinkpad. En unos días subo unos ejemplos de unos jueguitos tontos que hice.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Salió &lt;em&gt;Ubuntu 7.04 – Feisty Fawn&lt;/em&gt;! Ya lo tengo corriendo y configurado en mi máquina desktop. 10 puntos…&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Salió el custom firmware 3.30 OE para la PSP. Para quienes quieran bajarlo, vayan a la página que recomendé hace unos posts.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Otro tema: para quienes tengan problemas para ver DVDs en la notebook porque se les escucha muy bajito (en WMP), les paso 2 tips:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Usen el VLC. Si le ponen el volumen al taco, se escucha bastante bien.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bajense el ultimo AC3Filter, pongan que tienen salida stereo de 2.0 y suban el volumen de ahí. La diferencia es abismal.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Un saludo!!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-566861413715291182?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/566861413715291182/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=566861413715291182' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/566861413715291182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/566861413715291182'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/04/vuelta-al-blog-vuelta-xp.html' title='Vuelta al Blog, vuelta a XP'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1285072520819518381</id><published>2007-03-20T00:20:00.001-03:00</published><updated>2007-08-07T14:52:39.875-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PSP'/><title type='text'>New Toy: PSP</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Desde el día de hoy soy un feliz poseedor de una PSP (también conocida como &lt;em&gt;Gameboy con Esteroides&lt;/em&gt;).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Este minibichito tiene de 3 a 8 horas de autonomía (dependiendo del volumen, brillo y cosas extras como el WiFi) y capacidad de proceso similar (si no, superior) a la de una PSOne.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Lo mejor de todo es que como vino con un Firmware menor al 2.81 (2.60) pude actualizarlo perfectamente para que use un firmware custom, que permite correr libremente juegos &lt;em&gt;backupeados&lt;/em&gt;, para decirlo de alguna forma y… todos mis juegos de PSOne con una imagen de CD desde un MemoryStick Pro Duo! (si… me compré uno de esos), aparte de emuladores y un montón de cosas mas.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bueno, para quienes la tengan y quieran saber como actualizar su firmware o cosas similares, les dejo unas páginas que me fueron muy útiles:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href='http://homepage.eircom.net/~pspcalo/index.html'&gt;http://homepage.eircom.net/~pspcalo/index.html&lt;/a&gt; - Todo sobre como actualizar a cada firmware, con guías paso a paso. Muy útil.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href='http://foro.tales-tra.com/viewtopic.php?t=109'&gt;http://foro.tales-tra.com/viewtopic.php?t=109&lt;/a&gt; – Popstation. Programa para pasar las imágenes de CD de PSOne al format de la PSP. &lt;em&gt;Must Have.&lt;/em&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Hasta la próxima!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1285072520819518381?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1285072520819518381/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1285072520819518381' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1285072520819518381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1285072520819518381'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/03/new-toy-psp.html' title='New Toy: PSP'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5983773411980494110</id><published>2007-03-19T00:32:00.001-03:00</published><updated>2007-03-19T00:53:44.048-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Superheroe'/><title type='text'>Si fuese un superheroe sería Superman (o Spider-Man) y si fuese un supervillano, sería Dr. Doom</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Dando vueltas por la red encontré unas páginas muy piolas: &lt;a href='http://www.thesuperheroquiz.com/villain/'&gt;http://www.thesuperheroquiz.com/villain/&lt;/a&gt; y &lt;a href='http://www.thesuperheroquiz.com/'&gt;http://www.thesuperheroquiz.com/&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Con unas cuantas preguntas, te dicen que &lt;em&gt;superheroe&lt;/em&gt; o  &lt;em&gt;supervillano&lt;/em&gt; serías. ¡A mi me salió &lt;em&gt;Superman&lt;/em&gt; (y &lt;em&gt;Spider-Man&lt;/em&gt; en segunda instancia) - ahora entiendo por que esos dos son mis superheroes favoritos :D - y como supervillano &lt;em&gt;Dr. Doom&lt;/em&gt;!&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;B&gt;You are &lt;FONT SIZE=6&gt;Superman&lt;/FONT&gt;&lt;/B&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You are mild-mannered, good, &lt;BR&gt;strong and you love to help others.&lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://www.thesuperheroquiz.com/pics/superman.jpg"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Superman 80%&lt;br /&gt;Spider-Man 70%&lt;br /&gt;Green Lantern 70%&lt;br /&gt;Robin 62%&lt;br /&gt;Supergirl 50%&lt;br /&gt;The Flash 50%&lt;br /&gt;Batman 45%&lt;br /&gt;Hulk 40%&lt;br /&gt;Iron Man 35%&lt;br /&gt;Wonder Woman 30%&lt;br /&gt;Catwoman 25%&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;B&gt;You are &lt;FONT SIZE=6&gt;Dr. Doom&lt;/FONT&gt;&lt;/B&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Blessed with smarts and power but burdened by vanity.&lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://www.thesuperheroquiz.com/villain/pics/dr_doom.jpg"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Dr. Doom 61%&lt;br /&gt;Riddler 60%&lt;br /&gt;Juggernaut 53%&lt;br /&gt;Apocalypse 52%&lt;br /&gt;Dark Phoenix 52%&lt;br /&gt;The Joker 47%&lt;br /&gt;Lex Luthor 43%&lt;br /&gt;Magneto 42%&lt;br /&gt;Mystique 37%&lt;br /&gt;Green Goblin 33%&lt;br /&gt;Two-Face 33%&lt;br /&gt;Catwoman 29%&lt;br /&gt;Kingpin 28%&lt;br /&gt;Mr. Freeze 26%&lt;br /&gt;Poison Ivy 23%&lt;br /&gt;Venom 19%&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5983773411980494110?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5983773411980494110/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5983773411980494110' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5983773411980494110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5983773411980494110'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/03/si-fuese-un-supervillano-sera-dr-doom.html' title='Si fuese un superheroe sería Superman (o Spider-Man) y si fuese un supervillano, sería Dr. Doom'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1588691612855201354</id><published>2007-03-13T15:04:00.001-03:00</published><updated>2007-03-13T15:09:21.801-03:00</updated><title type='text'>Ordenando los DVDs</title><content type='html'>&lt;p&gt;Ayer se me dio por ponerme a ordenar los DVDs de casa.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Mala idea.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;No me había dado cuenta que llegué a tener tantos DVDs. Decidí que la mejor forma de organizarlos es poniéndolos en carpetas en vez de cajas. Lo que pasa ahora es que no se que voy a hacer con las cajas (si a alguien le interesa comprar unas 200 – 300 cajas de DVD, avíseme &lt;span style='font-family:Wingdings'&gt;J&lt;/span&gt;).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/82637861@N00/419654503/" title="Photo Sharing"&gt;&lt;img src="http://farm1.static.flickr.com/133/419654503_e27436a31a.jpg" width="500" height="375" alt="Ordenando DVDs" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1588691612855201354?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1588691612855201354/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1588691612855201354' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1588691612855201354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1588691612855201354'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/03/ordenando-los-dvds.html' title='Ordenando los DVDs'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/133/419654503_e27436a31a_t.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2699875022078184593</id><published>2007-03-07T16:50:00.001-03:00</published><updated>2007-08-07T14:53:58.553-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Thinkpad'/><title type='text'>Problema con software de Thinkpad y Internet Explorer</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Gente, si alguien tiene una Thinkpad con todo el soft de Lenovo instalado y está teniendo problemas con el IE7 (los tabs tardan muchísimo en abrirse), pruebe desinstalar el ThinkVantage Client Security Solution for Vista. Eso lo arregla.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2699875022078184593?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2699875022078184593/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2699875022078184593' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2699875022078184593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2699875022078184593'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/03/problema-con-software-de-thinkpad-y.html' title='Problema con software de Thinkpad y Internet Explorer'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8109336859497988364</id><published>2007-03-05T02:32:00.001-03:00</published><updated>2007-08-07T14:54:21.322-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Instalando Ubuntu Linux 6.10 en un disco USB o Pendrive</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;En este post voy a explicar cómo instalar Ubuntu Linux 6.10 (y probablemente cualquier versión posterior) en un disco externo USB o Pendrive (siempre y cuando tenga suficiente capacidad).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Primero que todo, configuramos en el BIOS que el orden de booteo tenga antes que el disco interno, el CD/DVD y el booteo por USB. Arrancamos la máquina con el CD de Ubuntu colocado e iniciamos el LiveCD. Antes de iniciar la instalación, conectamos el Disco o Pendrive a la computadora (nota al margen: en mi caso, tengo un disco de notebook conectado por un cable IDE-To-USB. Para que este funcione tuve que jumpearlo para que sea Master ya que con Cable Select no lo detectaba). Iniciamos la instalación y cuando nos pregunta en que disco instalar, elegimos el disco externo (en mi caso, /dev/sdb2). Cuando pregunta donde instalar GRUB, cambiamos (hd0) por el dispositivo en el que instalamos Ubuntu (en mi caso, sería /dev/sdb, sin los paréntesis y sin ningún número). Cuando termina la instalación, reiniciamos la maquina recordando sacar el CD de instalación antes de que vuelva a bootear.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Al volver a iniciar la computadora, el disco externo ya debe encontrarse conectado y si todo salió como esperábamos aparecerá el menú de GRUB para iniciar el Linux.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;En mi caso, me paso que al seleccionar cualquier opción de Ubuntu en GURB me decía "Error 17". Esto ocurre porque al bootear desde el disco externo, el disco pasa a ser la primera unidad, entonces su denominación cambia por /dev/sdb1. Para solucionar esto presionen "E" sobre la opción que quieren usar y nuevamente E sobre la línea que dice: "root        (hd1,1)" (o similar) y cambien el primer 1 por un 0. Les debería quedar así: "root        (hd0,1)".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Una vez editado, toquen B para arrancar (creo que es B) y... tadaaaa! Ubuntu debería estar arrancando.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para no tener que tocar el menú de arranque cada vez que inicia la máquina, desde su Ubuntu editen en archivo /boot/grub/menu.lst y cambien lo mismo que cambiaron recién en el menú de GRUB, pero en este archivo.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Cualquier duda, comenten acá. No me manden mails así otras personas también se benefician con su pregunta.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Un saludo!!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8109336859497988364?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8109336859497988364/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8109336859497988364' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8109336859497988364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8109336859497988364'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/03/instalando-ubuntu-linux-610-en-un-disco.html' title='Instalando Ubuntu Linux 6.10 en un disco USB o Pendrive'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6442290522428416583</id><published>2007-02-27T01:26:00.001-03:00</published><updated>2007-08-07T14:55:38.591-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thinkpad'/><category scheme='http://www.blogger.com/atom/ns#' term='APS'/><title type='text'>A mover esas Notebooks!</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Desde que Jony me dijo que las ThinkPad nuevas traen un sensor para poder medir la inclinación de la notebook, estoy con ganas de hacer alguna aplicación tonta que lo use.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Resulta que ya hubo gente a la que se le ocurrió, y si buscan en YouTube van a encontrar videos de gente manejando el TuxRace (famoso juego de carrera de pingüino en 3D de Linux) con el movimiento de la ThinkPad.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Habiendo visto esto, me emocioné bastante ya que confirmaba que lo que yo quería se podía hacer perfectamente.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Buscando por internet encontré la pagina de un flaco que hizo un programita de &lt;a href='http://www-03.ibm.com/developerworks/blogs/trackback/johnston/Weblog/python_and_thinkpad'&gt;ejemplo en Python&lt;/a&gt; que usa el driver de este &lt;em&gt;acelerómetro&lt;/em&gt; y obtiene los valores. Buscando un poco mas también pude encontrar casi el mismo ejemplo en &lt;em&gt;C++&lt;/em&gt; y &lt;em&gt;C#&lt;/em&gt; (voy a dejar el ejemplo en C++) &lt;br /&gt;&lt;/p&gt;&lt;p&gt;El único problema, fue que al ejecutar el &lt;em&gt;DeviceIoControl&lt;/em&gt; me tira un error y no puedo leer los valores. Si alguien llega a tener una idea de que puede ser lo que pasa, por favor digame. Igualmente ya le pregunté al flaco que lo hizo en Python, a ver si me puede dar una mano.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;El ejemplo en C++ (compilado en VC++ 2005):&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;#include&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:#a31515'&gt;"stdafx.h"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;#include&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:#a31515'&gt;&amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;using&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;namespace&lt;/span&gt; std;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='color:green; font-family:Lucida Console; font-size:8pt'&gt;//.........jun hirabayashi............................&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:green; font-family:Lucida Console; font-size:8pt'&gt;// this C++ class was ported and modified from C# class&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:green; font-family:Lucida Console; font-size:8pt'&gt;// http://www.ussg.iu.edu/hypermail/linux/kernel/0412.1/0974.html&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;#include&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:#a31515'&gt;"windows.h"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;#include&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:#a31515'&gt;&amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;struct&lt;/span&gt; ShockData&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt; status;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x0;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y0;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x1;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y1;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x2;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y2;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x3;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y3;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x4;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y4;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x5;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y5;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x6;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y6;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x7;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y7;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x8;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y8;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x9;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y9;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x10;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y10;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x11;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y11;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x12;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y12;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  x13;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  y13;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  unknown0;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;short&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  unknown1;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;};&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;class&lt;/span&gt; Accelerometer{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;private&lt;/span&gt;:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        HANDLE hFile;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        ShockData AccelerometerData;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt; OffsetX;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt; OffsetY;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;protected&lt;/span&gt;:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;public&lt;/span&gt;:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        Accelerometer();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        ~Accelerometer();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;bool&lt;/span&gt; GetAccelerometerData(&lt;span style='color:blue'&gt;void&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  Status(&lt;span style='color:blue'&gt;void&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  X;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;int&lt;/span&gt;  Y;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;};&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;Accelerometer::Accelerometer()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    {&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        hFile = CreateFile(L&lt;span style='color:#a31515'&gt;"\\\\.\\ShockMgr"&lt;/span&gt;, GENERIC_READ,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;                            FILE_SHARE_READ | FILE_SHARE_WRITE,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;                            NULL, OPEN_EXISTING, 0, NULL);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;if&lt;/span&gt;(hFile == INVALID_HANDLE_VALUE)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;throw&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:#a31515'&gt;"Failed to open ShockMgr."&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;catch&lt;/span&gt;(...){}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    OffsetX = 0;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    OffsetY = 0;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;if&lt;/span&gt; ( GetAccelerometerData() )&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    {&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        OffsetX = -X;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        OffsetY = -Y;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        GetAccelerometerData();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;Accelerometer::~Accelerometer()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    CloseHandle(hFile);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;bool&lt;/span&gt; Accelerometer::GetAccelerometerData(&lt;span style='color:blue'&gt;void&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;unsigned&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;long&lt;/span&gt; ulRead = 0;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;try&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    {&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;if&lt;/span&gt;( !DeviceIoControl( hFile, 0x733fc, NULL,  0, &lt;span style='color:green'&gt;// via IOCTL(0x733fc)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;                              (&lt;span style='color:blue'&gt;void&lt;/span&gt; *)&amp;amp;AccelerometerData, 0x24, &amp;amp;ulRead, NULL))&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;throw&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:#a31515'&gt;"Failed to DeviceIoControl"&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        X = AccelerometerData.x0 + OffsetX;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;        Y = AccelerometerData.y0 + OffsetY;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;return&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;catch&lt;/span&gt;(...)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    {&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;return&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;return&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;int&lt;/span&gt; Accelerometer::Status(&lt;span style='color:blue'&gt;void&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;return&lt;/span&gt; AccelerometerData.status;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;&lt;span style='color:blue'&gt;int&lt;/span&gt; _tmain(&lt;span style='color:blue'&gt;int&lt;/span&gt; argc, _TCHAR* argv[])&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    Accelerometer *pAccel = &lt;span style='color:blue'&gt;new&lt;/span&gt; Accelerometer();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    pAccel-&amp;gt;GetAccelerometerData();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    cout &amp;lt;&amp;lt; &lt;span style='color:#a31515'&gt;"X: "&lt;/span&gt; &amp;lt;&amp;lt; pAccel-&amp;gt;X &amp;lt;&amp;lt; &lt;span style='color:#a31515'&gt;" Y: "&lt;/span&gt; &amp;lt;&amp;lt; pAccel-&amp;gt;Y &amp;lt;&amp;lt; endl;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;    system(&lt;span style='color:#a31515'&gt;"pause"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Lucida Console; font-size:8pt'&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Si llego a saber cómo solucionarlo, prometo postearlo.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6442290522428416583?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6442290522428416583/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6442290522428416583' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6442290522428416583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6442290522428416583'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/02/mover-esas-notebooks.html' title='A mover esas Notebooks!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-6768009113162605463</id><published>2007-02-26T20:07:00.001-03:00</published><updated>2007-10-08T22:12:40.123-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Firewall'/><title type='text'>El regreso de los muertos vivos (o por que el Firewall de Vista se reactiva solo)</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Pese a los reiterados intentos de desactivar el Firewall que Windows Vista instala de forma predeterminada, el mismo vuelve a activarse de forma sospechosamente aleatoria luego de un tiempo.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Si realmente no quieren usar el Firewall de Windows Vista, primero que todo, desactívenlo de la forma tradicional y luego de hacer esto hagan click derecho sobre &lt;em&gt;Computer&lt;/em&gt; =&gt; &lt;em&gt;Manage&lt;/em&gt;, van a la parte de servicios, doble click en &lt;em&gt;Windows Firewall&lt;/em&gt; y cambien el tipo de inicio a &lt;em&gt;Disabled&lt;/em&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sé que es algo bastante tonto, pero ya vi mucha gente a la que se le reactiva solo el Firewall y ni siquiera se da cuenta.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;¡Hasta la próxima!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Zaiden&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-6768009113162605463?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/6768009113162605463/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=6768009113162605463' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6768009113162605463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/6768009113162605463'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/02/el-regreso-de-los-muertos-vivos-o-por.html' title='El regreso de los muertos vivos (o por que el Firewall de Vista se reactiva solo)'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-572050608216538187</id><published>2007-02-24T22:06:00.001-03:00</published><updated>2007-08-07T14:56:50.904-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='Word 2007'/><title type='text'>Cortito: ¡Pude volver a postear desde Word 2007!</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Desde hacer un tiempo que el posteo desde Word 2007 había dejado de andar para Blogger, pero por suerte ya está operativo nuevamente :D&lt;br /&gt;&lt;/p&gt;&lt;p&gt;No sé si habrá sido una actualización de Office, o de Blogger ¡Pero la cosa es que anda!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-572050608216538187?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/572050608216538187/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=572050608216538187' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/572050608216538187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/572050608216538187'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/02/cortito-pude-volver-postear-desde-word.html' title='Cortito: ¡Pude volver a postear desde Word 2007!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7553871088769800096</id><published>2007-02-24T22:01:00.001-03:00</published><updated>2007-08-07T14:57:16.336-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thinkpad'/><title type='text'>New Toy! Lenovo ThinkPad T60p</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Como sabrán por mi último post, la querida notebook HP COMPAQ V2069 cumplió su ciclo el día que decidió inmolarse cerca de mi persona.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Estuve cerca de un mes sin laptop, lo que me llevó a volver a usar la desktop para algo más que &lt;em&gt;rockola&lt;/em&gt; o &lt;em&gt;MuleComputer&lt;/em&gt;. En esa máquina tengo instalado un Ubuntu Linux 6.10 y aprovechando que tengo instalada una veterana pero todavía potente placa 3D (una ATI Radeon 9600XT) aproveché para ver a la nueva &lt;em&gt;niña bonita&lt;/em&gt; del mundo Linux: &lt;em&gt;Beryl&lt;/em&gt;, &lt;em&gt;XGL &lt;/em&gt;y demás yerbas.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;¡Simplemente agregué los repositorios de Beryl, 2 clicks en el &lt;em&gt;Synaptic&lt;/em&gt; y listo! Me tomé mí tiempo y terminé dejando al Ubuntu como un bello Mac OSX lleno de efectos 3D, jeje :D.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Varias semanas pasaron, hasta que finalmente el &lt;em&gt;chiche&lt;/em&gt; nuevo llego: Una Lenovo ThinkPad T60p con las siguientes &lt;em&gt;specs&lt;/em&gt;:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Procesador Intel Centrino Duo (Core 2 Duo) T7200 (2Ghz).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;1GB RAM DDR2.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ATI FireGL V5250.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;HD 100GB, 7200 RPM.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pantalla wide de 15"4 a una increíble resolución de… ¡1680 x 1050! (¡Se ve bárbaro desde cualquier lado!).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Grabadora de CD/DVD.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Batería extendida de 9 celdas.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Y demás chiches (Lector de huellas digitales, Bluetooth, IR, Red Wireless, etc…).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Apenas llego, hice los DVDs de recovery (por cualquier cosa) y… ¡Zas! Instalé Windows Vista. Debo admitir que fui un poco miedoso y me mantuve en la versión para x86 (32 bits). Sin embargo, &lt;a href='http://weblogs.shockbyte.com.ar/rodolfof'&gt;&lt;em&gt;RodoF&lt;/em&gt;&lt;/a&gt; fue más valiente y se mando directamente a la versión x86-64, ya que este procesador implementa la arquitectura desarrollada originalmente por AMD, pero que Intel llama &lt;em&gt;Intel64&lt;/em&gt; (en contraparte de &lt;em&gt;AMD64&lt;/em&gt;).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Al principio pensé que teniendo 1GB de RAM iba a notar demasiado acceso al disco por swapping, pero para mi sorpresa la máquina anda con mucha soltura, incluso usando muchas aplicaciones a la vez (el único problema que noté hasta ahora es que tarda bastante en prender y en apagar, pero estoy sospechando que el culpable de eso es alguno de los programas de ThinkPad. Tendré que investigar al respecto).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bueno, esto es todo por ahora. Hasta el próximo post!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;&lt;em&gt;PD1: En 2 semanas quemé una notebook, una desktop, un disco e hice que otro tirara errores de S.M.A.R.T. ¡Juro que fue sin querer!&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;PD2: Le voy a decir a Jony que se postee algo, porque hace mucho que no escribe nada.&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Dato Loco: El cerebro no procesa negativos. Ej.: &lt;strong&gt;NO pienses en un elefante rosa…&lt;/strong&gt; ¡Viste!&lt;/em&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7553871088769800096?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7553871088769800096/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7553871088769800096' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7553871088769800096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7553871088769800096'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/02/new-toy-lenovo-thinkpad-t60p.html' title='New Toy! Lenovo ThinkPad T60p'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1003309047052909194</id><published>2007-01-24T09:21:00.000-03:00</published><updated>2007-01-24T09:32:41.415-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Explosion'/><title type='text'>Notebook Explosion!</title><content type='html'>Hola! Vengo hoy a contar la historia de como sobreviví al segundo atentado contra mi vida en menos de un mes (el primero fue la bomba colocada por la ETA en el aeropuerto de Madrid, al cual llegue solo dos horas mas tarde de que ocurriera la explosion)&lt;br /&gt;&lt;br /&gt;Ese lunes parecia ser un lunes como cualquier otro lunes de verano: los pajaros cantaban, la temperatura del asfalto era superior a la del sol y la red de Quantum andaba mas lenta que tortuga liciada.&lt;br /&gt;Dado que estaba laburando por RDP sobre otra máquina (y como ya dije, la red wireless no estaba en sus mejores momentos) decidí probar suerte cambiandome de lugar en la oficina, para ver si lograba tener una mejor recepción.&lt;br /&gt;&lt;br /&gt;Una vez encontrado el nuevo lugar (pero aún manteniendo el mismo enchufe para la notebook, ya que estaba conectada en una zapatilla ubicada entre las dos locaciones) enchufé la computadora portatil.&lt;br /&gt;&lt;br /&gt;Como casi siempre uso una maquina por RDP, suelo conectar un monitor extra a la notebook, asi puedo ver ambas computadoras a la vez. En mi lugar original ya tenia un monitor, pero para el nuevo "spot" iba a tener que trasladarlo, hasta que me di cuenta que al lado mio ya se encontraba un monitor, enchufado y andando, pero que nadie usaba, por lo que procedí a conectarlo.&lt;br /&gt;En el momento que acerqué la ficha del monitor al conector de la notebook, lo primero que vi fue una especie de "relampago localizado", seguido de una bola de fuego (todo esto sobre mi mano).&lt;br /&gt;&lt;br /&gt;La computadora se apagó instantaneamente. Y lo que siguió fue... olor a pistola de cebitas.&lt;br /&gt;&lt;br /&gt;El resultado del nuevo atentado (nuevamente planeado para que "parezca un accidente") fue: La notebook ya no prende. El conector para docking station quemado-derretido y - por suerte - la preservación de los 5 dedos de mi mano izquierda.&lt;br /&gt;&lt;br /&gt;La cosa es que por ahora estoy sin máquina, pero espero que en estos dias se solucione.&lt;br /&gt;&lt;br /&gt;Hasta la próxima!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Zaiden&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1003309047052909194?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1003309047052909194/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1003309047052909194' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1003309047052909194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1003309047052909194'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/01/notebook-explosion.html' title='Notebook Explosion!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-4092822928521304307</id><published>2007-01-19T12:46:00.001-03:00</published><updated>2007-08-07T14:59:43.736-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vacaciones'/><title type='text'>Existe un lugar mejor, y se llama "London"</title><content type='html'>&lt;p&gt;Hace unos días volví de mis vacaciones por europa. Me fui dos semanas para pasear por Inglaterra y Holanda.&lt;/p&gt; &lt;p&gt;Los primeros 10 días (incluido &lt;em&gt;Año Nuevo&lt;/em&gt;) los pasé en Inglaterra. 3 días cerca de Norwich y una semanita en London.&lt;/p&gt; &lt;p&gt;London es, sencillamente, espectacular: la vista, las cosas, los lugares, la gente... todo! El único problema que tenía era la guita. Considerando que el cambio esta 6 a 1 con los Pounds y el Peso argentino, estaba un poco limitado en el factor shopping. El tema es que ahi se encuentran todo tipo de cosas que nunca van a llegar para aca (como ediciones de coleccion de DVD de Star Trek, modelos para armar, y mil cosas mas). Lo que noté es que, pese a lo que yo pensaba, no estamos tan atrasados aca en materia de celulares. Allá la mayoria de la gente usa las mismas porquerías que usamos aca (por ejemplo, mi celular - que tiene mas de 2 años - con Windows Mobile 2003 es muchisimo mejor que el 95 % de los celulares que venden ahi).&lt;/p&gt; &lt;p&gt;Después de London me fui para Amsterdam por 3 días, donde me encontré con mi amigo &lt;em&gt;Chavito&lt;/em&gt;. También... espectacular! Muy muy lindo, aunque el clima nos arruinó un poco la vista los primeros dos dias.&lt;/p&gt; &lt;p&gt;Bueno, eso es todo. Quería escribir algo porque si no, el blog queda medio muerto. Cuando vea algo copado, lo posteo.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-4092822928521304307?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/4092822928521304307/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=4092822928521304307' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4092822928521304307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/4092822928521304307'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2007/01/existe-un-lugar-mejor-y-se-llama.html' title='Existe un lugar mejor, y se llama &amp;quot;London&amp;quot;'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-7060064380749115970</id><published>2006-12-09T13:37:00.001-03:00</published><updated>2006-12-09T13:38:40.892-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Código'/><category scheme='http://www.blogger.com/atom/ns#' term='Hollywood'/><title type='text'>Que NO hace el código en la vida real (y si hace en las películas)</title><content type='html'>&lt;p&gt;Antes que todo, quiero aclarar que este texto no es mio, sino que es una traducción que hice de un excelente artículo que pueden ver aca: &lt;a title="http://www.drivl.com/code.html" href="http://www.drivl.com/code.html"&gt;http://www.drivl.com/code.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. El código no se mueve&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;En las películas y en television el codigo siempre está navegando por la pantalla a increibles velocidades; está presentado como un flujo indecifrable de letras y números que tienen sentido perfectamente para el programador, pero imposible de comprender por cualquier otra persona. Entiendo que para la persona que no comprende, las habilidades de un programador pueden parecer increiblemente complejas, pero... honestamente, piensan que podemos leer mierda que no está quieta? Sería como tratar de leer seis diarios, volando en un tornado. Seguro, puedo ver como compila un kernel, tirar un &lt;em&gt;tail&lt;/em&gt; de un log o, simplemente, ir viendo que tira el output de un programa -&amp;nbsp;pero la mayoría de lo que puedo sacar de eso es cuando la ejecución frena y realmente puedo hacer scroll para arriba y ver que carajo pasó (excepto que el output haya ido suficientemente lento como para poder leerlo mientras salia)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2. El código no es texto verde sobre fondo negra&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Seguro, &lt;em&gt;puede&lt;/em&gt; ser texto verde sobre fondo negro &lt;em&gt;si querés&lt;/em&gt;, pero la mayoría de los programadores usamos &lt;em&gt;syntax highlighting&lt;/em&gt; y los sysadmins configuran su shell para usar colores ANSI&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3. El código tiene estructura&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Según las peliculas, todos los programadores odian las teclas &lt;em&gt;space&lt;/em&gt; y&lt;em&gt;&amp;nbsp;enter&lt;/em&gt;. En el mundo real, el código tiene estructura - tiene saltos de linea, espaciado e indentación. Seguro que todos nosotros hemos escrito nuestra porcion de hacks ilegibles: yo solía escribir un montón y tenia la destreza de escribir horribles &lt;em&gt;regular expressions&lt;/em&gt; que hicieron que varios de mis sucesores haga &lt;em&gt;seppuku&lt;/em&gt;, pero esos días terminaron. Ahora es todo claridad.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;4. El código no es tridimensional&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Se acuerdan en &lt;em&gt;Hackers&lt;/em&gt; cuando la Gibson era representada como una ciudad tridimensional, la cual los hackers tenian que navegar? Mierda! Nosotros usamos un poco de color en nuestro shell para hacer las cosas un poco mas claras, pero la última vez que chequee mi terminal no requería OpenGL. Estoy laburando! - No estoy jugando al Quake...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;5. El código no hace "&lt;em&gt;blip!&lt;/em&gt;" cuando va apareciendo en pantalla&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Esto va para &lt;em&gt;cualquier&lt;/em&gt; texto, no solamente código. Cuando el texto aparece en mi monitor no hace &lt;em&gt;blips&lt;/em&gt; - Esto no es 1902 (o cuando sea que los monitores hacían eso). Esta es una de las mas comunes ofensas en las películas de Hollywood. En casi todas las películas donde hay una escena donde un personaje está escribiendo un E-Mail o navegando por Internet, el texto hace un &lt;em&gt;blip&lt;/em&gt; cuando aparece. Se dan una puta idea de cuan irritante puede llegar a ser eso en la vida real? Este artículo solo serían unos treintamil &lt;em&gt;blip!&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;6. El código no puede ser crackeado por un nene de 8 años en cuestión de segundos.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Lo lamento, pero simplemente &lt;em&gt;no&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;7. No todo el código está hecho para ser crackeado&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Hollywood ama mostrar que la noción de programar, la encripción y la computación compleja en general son todo la misma cosa: una gran cantidad de datos secretos que tienen que ser rotos por un hacker realmente inteligente. Esto de alguna manera se puede llegar a entender ya que el término &lt;em&gt;código&lt;/em&gt; es ambiguo. En el contexto de la computación, &lt;em&gt;código&lt;/em&gt; tiene comunmente dos definiciones:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;La representación simbolica de instrucciones, las cuales pueden ser comprendidas por una computadora - como "Tu &lt;em&gt;código &lt;/em&gt;PHP es una mierda"&lt;/li&gt; &lt;li&gt;La transformación disfrazada de un mensaje - "Los transmisores del &lt;em&gt;código&lt;/em&gt; Navajo en la segunda guerra mundial"&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Hollywood comunmente usa la segunda para toda actividad desarrollada por un programador. No hay arrastre de ventanas, llaves que cierran IFs o escritorio. Todo en la computadora toma la forma de un mensaje encriptado, lo cual debe hacer ver porno un real quilombo.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;8. El código no es simplemente 0100110 010101 10100 011&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Seguro, cuando bajas al nivel binario es todo 1s y 0s, pero quien hace eso? Yo nunca conocí a nadie que codee en binario.&lt;/p&gt; &lt;p&gt;Hey directores de Hollywood: los programadores usan esa cosa bonita llamada &lt;em&gt;Alfabeto&lt;/em&gt;. Tiene letras que podes juntar para formar palabras. Nosotros incluso ponesmos espacios entre esas palabras (ver #3)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Tambien, el chiste de que todo en una computadora son 1s y 0s se volvió dolorosamente no gracioso. Esta a la misma altua del chiste del usuario que usa la bandeja de su CD como posa-vasos. Estoy bastante seguro de que escuché es chiste mil veces por 1997. Solo por el hecho de que toda la&amp;nbsp;data en una computadora es finalmente representada por unos y ceros no quiere decir que la base detras de eso es tan simple como un uno&amp;nbsp;o un cero. Eso sería como decir que que toda la humanidad es un cacho de átomos de carbono (o de lo que sea que estamos hechos), asi que la próxima vez que alguien me robe el auto me puedo reír y decir "Uh! Esos tontos atomos de carbono..."&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;9. La gente que escribe código usa el mouse&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Según Hollywood, la mayoría de los programadores no descubrieron como usar un mouse. Seguro, tipeamos rápido, pero el mouse es una herramienta muy util y no hay motivo para que lo abandonemos. Mientras disipamos estereotipos, también me gustaría decir que no todos los programadores son locos come-virgenes que juegan al World of Warcraft. Algunos de nosotros hacemos ejercicio y tenemos una vida social activa. Incluso, Algunos incluso han tenido sexo! Mierda!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;10. La mayoría del código no es, necesariamente multiplataforma&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Recuerdan en &lt;em&gt;Independence Day&lt;/em&gt;, cuando el flaco matemático con cara de boludo escribe un virus que funciona tanto en su laptop apple como en la nave madre de lo aliens? Mierda que funciona!&lt;/p&gt; &lt;p&gt;Si la vida real fuese asi, yo podría portar wordpress a mi tostadora...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Alguna otra que se les ocurra?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-7060064380749115970?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/7060064380749115970/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=7060064380749115970' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7060064380749115970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/7060064380749115970'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2006/12/que-no-hace-el-cdigo-en-la-vida-real-y.html' title='Que NO hace el código en la vida real (y si hace en las películas)'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-1285385234695652409</id><published>2006-12-08T12:18:00.001-03:00</published><updated>2006-12-08T12:21:28.134-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='TestDrive'/><category scheme='http://www.blogger.com/atom/ns#' term='Office 2007'/><title type='text'>¿Como que "Yo Probé"?</title><content type='html'>&lt;p&gt;A ver... ¿Alguien me puede decir a quien se le ocurrió que la gente iría a usar una remera que dice, bien grande "Yo Probé" en la espalda?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;(perdon por el comentario asi, ahora los pongo en contexto)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Como conté hace unos dias, la gente de MS me trajo una Notebook a casa con Windows Vista y Office 2007 para que la probara durante una semana. La cosa es que cuando la pasaron a buscar, me dejaron una remera negra con el loguito de MSDN adelante y los logos de WinVista y Office2007 atrás. Si la remera terminase ahi, estaría buena... pero no! A algún genio de marketing se le ocurrió ponerle un cartel grande que dice "Yo Probé" arriba, en la espalda.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;No se habrán dado cuenta que, al menos aca en Argentina, la frase "Yo Probé" podía llegar a tener algún doble sentido (y por las dudas, por si alguno no se dio cuenta de que estoy hablando, le recuerdo la frase "Macho es el que prueba y no le gusta..." y todo bien, pero yo no probé ni tengo intenciones de hacerlo :D)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Ahora no tengo mas remedio que apelar a las habilidades adquiridas en &lt;em&gt;Bricolage&lt;/em&gt; de mi hermana para que me ayude a &lt;em&gt;modificar&lt;/em&gt; la remera para que se lea la leyenda "Yo &lt;em&gt;no&lt;/em&gt; probé" y abajo que se lea "Ni quiero" :D&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hasta la próxima!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-1285385234695652409?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/1285385234695652409/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=1285385234695652409' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1285385234695652409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/1285385234695652409'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2006/12/como-que-prob.html' title='¿Como que &amp;quot;Yo Probé&amp;quot;?'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-369967453139925638</id><published>2006-12-01T12:54:00.000-03:00</published><updated>2006-12-01T12:59:16.909-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Pagefile'/><title type='text'>Nooo... PageFile no hay... (con música de Woman No Cry)</title><content type='html'>Desde hace mas de una semana estoy usando Windows Vista sin PageFile y debo decir que los resultados son excelentes.&lt;br /&gt;&lt;br /&gt;Al disponer de 2GB de RAM, me aventuré a configurar Windows para que no usara PageFile. Por ahora nunca tuve problemas del tipo "Out of memory" ni nada similar. El uso normal de la máquina la mantiene con un consumo de, aproximadamente, un 50% de la memoria (1GB) y con una carga importante (compilando varias cosas grandes + Photoshop + Internet Explorer con varias paginas + Word + Excel + Outlook) no llega a superar 1.5GB de memoria utilizada, por lo que parece que no me va a traer problemas.&lt;br /&gt;&lt;br /&gt;Al no estar paginando al disco, la maquina está siempre con una velocidad de respuesta altisima. Por ejemplo, antes si no usaba la pc por un buen rato, maximizar Outlook tomaba unos cuantos&lt;br /&gt;segundos. Ahora la respuesta es instantanea. :D&lt;br /&gt;&lt;br /&gt;Alguien sabe de alguna contraindicación importante (y real, no un caso hipotético) de no usar Pagefile?&lt;br /&gt;&lt;br /&gt;Un saludo!!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-369967453139925638?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/369967453139925638/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=369967453139925638' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/369967453139925638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/369967453139925638'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2006/12/desde-hace-mas-de-una-semana-estoy.html' title='Nooo... PageFile no hay... (con música de Woman No Cry)'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-443125165969344898</id><published>2006-12-01T00:07:00.000-03:00</published><updated>2006-12-01T12:57:00.335-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Live Writer'/><category scheme='http://www.blogger.com/atom/ns#' term='Word 2007'/><title type='text'>Problemas para postear el Blogger desde Word 2007 o Windows Live Writer</title><content type='html'>Desde hace unos dias que tengo problemas para postar aca, en Blogger desde Word 2007 o Windows Live Writer.&lt;br /&gt;&lt;br /&gt;Alguien sabe a que se puede deber esto?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-443125165969344898?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/443125165969344898/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=443125165969344898' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/443125165969344898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/443125165969344898'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2006/12/problemas-para-postear-el-blogger-desde.html' title='Problemas para postear el Blogger desde Word 2007 o Windows Live Writer'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-8781682720087899325</id><published>2006-12-01T00:04:00.000-03:00</published><updated>2006-12-01T12:58:33.153-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Notebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Sql Server 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Office 2007'/><title type='text'>Microsoft me dio una Notebook para probar Vista y Office 2007 por una semana (¿?)</title><content type='html'>Hace más o menos un mes y medio, haciendo tiempo hasta que me entregaran el resultado de un parcial, vi un mail de Microsoft, anunciando que le iban a prestar notebooks con Windows Vista y Office 2007 a algunas de las personas que llenaran correctamente unas preguntas (las cuales no poseían un grado importante de dificultad). Dado que estaba sin mucho que hacer, procedí a llenar las preguntas y aplicar para el concurso. Obviamente, 30 minutos más tarde esto ya había desaparecido por completo de mi memoria.&lt;br /&gt;&lt;br /&gt;En el día de ayer, me sonó el teléfono mientras manejaba hacia la facultad. Atiendo haciendo malabares para no chocar y escucho: “¿El Sr. Pablo Zaidenvoren?”. Y paso a responder: “Eh… si. Mira, discúlpame. Estoy manejando (bocina, bocina, insulto, esquivar transeúnte el cual no domina por completo sus facultades mentales, insulto, bocina)… me llamarías en 20 minutos?” Corto. Ahí pensé: Seguramente es para alguna oferta de trabajo. Si llega a volver a llamar voy a tratar de decirle lo más cordialmente posible que no. Y listo, me olvidé. 30 minutos más tarde (yo ya, sano y salvo, en la facultad :D) vuelve a sonar el teléfono y al atender escucho el mismo: “El Sr. Pablo Zaidenvoren?”.&lt;br /&gt;&lt;br /&gt;A diferencia de lo que yo pensaba, el llamado resultó ser de una señorita de MS, diciéndome que hoy me iban a alcanzar a mi casa, en el cómodo horario de 9.00 a 17.00 ( :( ) una notebook para que use durante una semana Windows Vista y Office 2007 con Visual Studio 2005 y SQL Server 2005. Esta señorita hizo oídos sordos a que le haya dicho que yo ya tenía y estaba usando los últimos productos de MS en mi notebook, por lo que procedió a confirmar el domicilio.&lt;br /&gt;&lt;br /&gt;Lo más extraño es que supuestamente ya me habían confirmado por mail hace unas 3 semanas que yo había salido seleccionado para esto, pero se ve que el mail nunca me llegó.&lt;br /&gt;&lt;br /&gt;Hoy, a eso de las 3 de la tarde, llegó la maquina (junto con un pequeño contrato que tuve que firmar diciendo, entre otras cosas, que si llego a perder/romper la notebook tengo que pagar algo así como… ¡¡¡3000 dólares!!!) y me dispuse a probarla.&lt;br /&gt;&lt;br /&gt;Grande fue mi desilusión cuando me di cuenta que las versiones, tanto de Windows Vista como de Office 2007 instaladas no eran las últimas, sino que el Windows instalado es el Vista RC2 y el Office 2007 es el Beta 2 TR.&lt;br /&gt;&lt;br /&gt;Más allá de esto, la idea está muy piola. Tenés la maquina lista para desarrollar con VS 2005 y al ser una máquina más que decente (CPU Core Duo 2, 1GB de RAM, placa de video que soporta todas las chucherías gráficas de Vista y el pulidísimo estilo de las Sony Vaio) da muchas ganas de probarla. Igualmente, me sigo quedando con el estado actual de mi máquina: 2GB de RAM, pantalla y carcasa mucho mas chica (nota al margen: hace poco probé la notebook de un amigo que es de 12 pulgadas y quedé fascinado. Yo pensaba que eran demasiado chiquitas, pero no! Son increíbles. Mi próxima máquina no supera las 13 pulgadas seguro!). Pese a no poder disfrutar de todas las transparencias y efectos que provee una placa de video con drivers WDDM (Grrr!! Odio a Intel y a esta maldita placa de video!) Sigo teniendo un Plus que tapa al resto de las cosas: Office 2007 RTM y Windows Vista RTM (y como adicional, tengo el OneNote instalado – uno de los mejores programas que vienen en la suite de Office – y el SP1 Beta para Visual Studio 2005, para hacerlo mas compatible con vista J) y eso se nota. Sencillamente, anda mejor. Por lo tanto voy a hacer todas las evaluaciones, comentarios y demás que me pidan los amigos de MS, pero basándome en la experiencia con mi máquina y no con la Vaio.&lt;br /&gt;&lt;br /&gt;El martes próximo van a pasar a buscar la maquina, nuevamente en el mismo cómodo horario&lt;br /&gt;&lt;br /&gt;Bueno, como diría el amigo Marcos Mundstock, finalizando este recital, escucharemos a continuación el veredicto conciso y final de Mr. Zaiden sobre la iniciativa TestDrive de Microsoft: Muy piola para quienes no pueden acceder a una maquina con las prestaciones suficientes como para ejecutar Vista u Office, o no pueden acceder al software, ya sea por la facultad por ej, o por el trabajo. Aunque nuevamente digo que, ya que la versión final ya está disponible para los subscriptores de MSDN, ¿Por qué estas máquinas no los incluían?&lt;br /&gt;&lt;br /&gt;Un saludo, y que la fuerza los acompañe!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;PD: Un saludo para Gaby Sz. con el que finalmente pude juntarme para que me de la tarjeta de su casamiento. Felicidades!&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-8781682720087899325?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/8781682720087899325/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=8781682720087899325' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8781682720087899325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/8781682720087899325'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2006/12/hace-ms-o-menos-un-mes-y-medio-haciendo.html' title='Microsoft me dio una Notebook para probar Vista y Office 2007 por una semana (¿?)'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2085982501047764049</id><published>2006-11-24T12:11:00.000-03:00</published><updated>2006-12-01T12:58:42.635-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SyncToy'/><category scheme='http://www.blogger.com/atom/ns#' term='Sincronizacion'/><title type='text'>SyncToy – La forma mas facil de sincronizar directorios entre PCs</title><content type='html'>Ayer estaba buscando alguna aplicación que cumpliese una simple función: poder sincronizar un directorio entre dos computadoras al conectarlas a la misma red.&lt;br /&gt;&lt;br /&gt;Supuestamente Windows trae desde Win95 el famoso “Briefcase” para hacer esto, pero resulta que para que funcione, tiene que tener todos los datos a sincronizar copiados dentro de una carpeta (¿?) y al querer sincronizar directorios de unos 13GB, esto se puede tornar un poco molesto…&lt;br /&gt;&lt;br /&gt;Dando vueltas por internet también leí que se podía usar el feature de Offline Files para esto, pero resulta que en mi maquina desktop no me dejaba usar mas de 2GB.&lt;br /&gt;&lt;br /&gt;Finalmente encontré una powertoy maravillosa hecha por Microsft: &lt;em&gt;SyncToy&lt;/em&gt;.&lt;br /&gt;Es tan simple como útil: Seleccionar directorio de la izquierda, seleccionar directorio de la derecha y… tadaaaaaa! Listo.&lt;br /&gt;&lt;br /&gt;Después tiene mas opciones, como que es lo que se quiere copiar, modificar o borrar en cada directorio y unas cositas mas, pero lo importante es que con 3 clics pude sincronizar perfectamente todo!&lt;br /&gt;&lt;br /&gt;El &lt;em&gt;SyncToy&lt;/em&gt; se lo pueden bajar desde &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E0FC1154-C975-4814-9649-CCE41AF06EB7&amp;amp;displaylang=en"&gt;acá&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2085982501047764049?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2085982501047764049/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2085982501047764049' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2085982501047764049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2085982501047764049'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2006/11/synctoy-la-forma-mas-facil-de.html' title='SyncToy – La forma mas facil de sincronizar directorios entre PCs'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-2870584974638790906</id><published>2006-11-17T00:11:00.001-03:00</published><updated>2007-08-07T14:59:56.175-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><title type='text'>Windows Vista disponible en MSDN!</title><content type='html'>&lt;p&gt;Desde hace un ratito está disponible para bajar el ISO de Windows Vista por las subscripciones de MSDN!&lt;/p&gt; &lt;p&gt;A bajar se ha dicho!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-2870584974638790906?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/2870584974638790906/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=2870584974638790906' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2870584974638790906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/2870584974638790906'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2006/11/windows-vista-disponible-en-msdn.html' title='Windows Vista disponible en MSDN!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3033548414831637355.post-5349304595653663506</id><published>2006-11-13T10:45:00.001-03:00</published><updated>2007-08-07T15:00:07.685-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office 2007'/><title type='text'>Ya esta Office 2007 Professional (y asociados) para bajar por MSDN Subscriptions!</title><content type='html'>&lt;p&gt;Para quienes tengan suscripciones de MSDN,&amp;nbsp;hoy 13 de noviembre de 2006, ya&amp;nbsp;está disponible para bajar Office 2007 y productos asociados!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Zaiden&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3033548414831637355-5349304595653663506?l=zpodblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zpodblog.blogspot.com/feeds/5349304595653663506/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3033548414831637355&amp;postID=5349304595653663506' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5349304595653663506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3033548414831637355/posts/default/5349304595653663506'/><link rel='alternate' type='text/html' href='http://zpodblog.blogspot.com/2006/11/ya-esta-office-2007-professional-y.html' title='Ya esta Office 2007 Professional (y asociados) para bajar por MSDN Subscriptions!'/><author><name>Zaiden</name><uri>http://www.blogger.com/profile/09059359984662336924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
