<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-33066466</atom:id><lastBuildDate>Fri, 19 Mar 2010 19:47:06 +0000</lastBuildDate><title>Blog de Marcos Crispino</title><description /><link>http://blog.marcoscrispino.com/</link><managingEditor>noreply@blogger.com (Marcos Crispino)</managingEditor><generator>Blogger</generator><openSearch:totalResults>188</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mcrispino" /><feedburner:info uri="mcrispino" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>mcrispino</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-4274818123507153728</guid><pubDate>Thu, 18 Mar 2010 22:26:00 +0000</pubDate><atom:updated>2010-03-18T19:47:14.538-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><category domain="http://www.blogger.com/atom/ns#">reflexiones</category><title>Joel on Software</title><description>Hace unos dias &lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; escribía en su blog, Joel on Software, lo siguiente:&lt;br /&gt;
&lt;blockquote&gt;Some of you may have seen &lt;a href="http://www.inc.com/magazine/20100301/lets-take-this-offline.html"&gt;my  final column in Inc.&lt;/a&gt;, in which I announce my retirement from  blogging effective March 18th, the 10-year anniversary of &lt;i&gt;Joel on  Software&lt;/i&gt;.&lt;/blockquote&gt;Hoy (18 de marzo) escribe una nota sobre &lt;a href="http://www.joelonsoftware.com/items/2010/03/17.html"&gt;Distributed version control&lt;/a&gt;, en la que se despide diciendo:&lt;br /&gt;
&lt;blockquote&gt;I seem to have run out the clock on this site. It has been an extreme  honor to have you reading my essays over the last ten years. I couldn’t  ask for a greater group of readers. Whether you’re one of the hundreds  of people who volunteered their time to translate articles into over 40  languages, or the 22,894 people who has taken the time to send me an  email, or the 50,838 people who subscribed to the email newsletter, or  the 2,262,348 people per year who visited the website and read some of  the 1067 articles I’ve written, I sincerely thank you for your  attention.&lt;/blockquote&gt;Una verdadera lástima, ya que era uno de mis blogs de cabecera, con excelentes artículos sobre desarrollo de software.&lt;br /&gt;
&lt;br /&gt;
Para los que no lo hayan leído, dejo uno de los artículos que más me gustaron: &lt;a href="http://www.joelonsoftware.com/items/2006/08/01.html"&gt;Can your programming language do this?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-4274818123507153728?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/Iu_Hw5ZJM1w/joel-on-software.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/03/joel-on-software.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-2260771410175111085</guid><pubDate>Tue, 16 Mar 2010 11:13:00 +0000</pubDate><atom:updated>2010-03-16T08:13:48.890-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">email</category><category domain="http://www.blogger.com/atom/ns#">google</category><title>Seguimiento de mails con GMail, la respuesta (?)</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5ka_YNTwTI/AAAAAAAABKA/_wxrwyMeo4w/s1600/gmail.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5ka_YNTwTI/AAAAAAAABKA/_wxrwyMeo4w/s1600/gmail.png" /&gt;&lt;/a&gt;&lt;/div&gt;Como &lt;a href="http://blog.marcoscrispino.com/2010/03/seguimiento-de-mails-en-gmail.html"&gt;comentaba hace unos días&lt;/a&gt;, estoy buscando una forma más efectiva de administrar los mails por los que estoy esperando una respuesta.&lt;br /&gt;
&lt;br /&gt;
En la nota anterior hubieron varios comentarios sugiriendo poner algo en el texto, y crear un filtro para procesar esos mensajes y marcarlos automáticamente. Si bien es efectivo, no me convence demasiado porque le llega a quien recibe el correo un texto que no tiene por que recibir, ya que es para que yo lo pueda administrar.&lt;br /&gt;
&lt;br /&gt;
Creo que ahora encontré una forma mejor. Por lo menos, una forma que a mi me convence más...&lt;br /&gt;
&lt;br /&gt;
A cualquier dirección de GMail (o de Google Apps dado el caso), se le puede agregar un signo de más (+) seguido de un texto. Google ignora este texto, pero puede servir para procesar los mensajes.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: si mi dirección de correo es usuario@dominio, la dirección usuario+texto@dominio también es válida y GMail la asigna al mismo usuario.&lt;br /&gt;
&lt;br /&gt;
Entonces la metodolgía es la siguiente:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Crear un contacto en la lista de contactos de GMail que sea usuario+esperando_respuesta@dominio. A ese contacto le puse de nombre "tag:seguir", pero cualquier nombre está bien.&lt;/li&gt;
&lt;li&gt;Crear un filtro que le aplique la etiqueta "Esperando respuesta" a cualquier correo dirigido a usuario+esperando_respuesta@dominio.&lt;/li&gt;
&lt;li&gt;Al mandar un correo que quiero seguir, en el campo Bcc le agrego el contacto "tag:seguir".&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;Los pasos 1 y 2 solo se hacen una vez. El paso 3, cada vez que quiero mandar un mail que quede con la etiqueta. &lt;br /&gt;
&lt;br /&gt;
Con este procedimiento me queda con la etiqueta que quiero y quien recibe el mail no recibe un texto críptico al final que no le sirve para nada.&lt;br /&gt;
&lt;br /&gt;
Igual me gustaría poder aplicar una etiqueta antes de mandarlo como se hace con los que están en la bandeja de entrada, pero creo que este procedimiento es bastante práctico.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-2260771410175111085?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/IPyRJHsZJ-k/seguimiento-de-blogs-con-gmail-la.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5ka_YNTwTI/AAAAAAAABKA/_wxrwyMeo4w/s72-c/gmail.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/03/seguimiento-de-blogs-con-gmail-la.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-226938081866944552</guid><pubDate>Fri, 12 Mar 2010 20:14:00 +0000</pubDate><atom:updated>2010-03-13T14:54:52.192-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">blog</category><title>Nuevo diseño para el blog</title><description>Ahora que &lt;a href="http://googleblog.blogspot.com/2010/03/express-yourself-with-blogger-template.html"&gt;Google mejoró notoriamente los temas disponibles para blogger&lt;/a&gt;, decidí aplicar un estilo "oficial".&lt;br /&gt;
&lt;br /&gt;
Creo que quedó bastante bien y casi con cero esfuerzo... se aceptan comentarios y sugerencias.&lt;br /&gt;
&lt;br /&gt;
El &lt;a href="http://blog.marcoscrispino.com/2009/01/cambios-en-el-blog.html"&gt;último cambio de diseño&lt;/a&gt; había sido en enero de 2009...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Actualización, 13/3/2010 14:52 &lt;/b&gt;&lt;br /&gt;
Enrique comenta que los links visitados no se ven bien por el esquema de colores, lo cual pude comprobar... Como lo importante es que se pueda leer más que el diseño en sí, volví a cambiar a un diseño mas "tradicional".&lt;br /&gt;
&lt;br /&gt;
Este era el nuevo diseño originalmente:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gG6tlx1eBKw/S5vChkDElwI/AAAAAAAABKg/WlK68Prs_lM/s1600-h/Nuevo1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="177" src="http://2.bp.blogspot.com/_gG6tlx1eBKw/S5vChkDElwI/AAAAAAAABKg/WlK68Prs_lM/s400/Nuevo1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Parece que tampoco gustó el fondo oscuro, así que este es el nuevo, nuevo diseño... más parecido al original.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gG6tlx1eBKw/S5vCuK6ZXLI/AAAAAAAABKk/8P-W7HZQt8Q/s1600-h/Nuevo2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" src="http://1.bp.blogspot.com/_gG6tlx1eBKw/S5vCuK6ZXLI/AAAAAAAABKk/8P-W7HZQt8Q/s400/Nuevo2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-226938081866944552?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/eg2vKKCysqQ/nuevo-diseno-para-el-blog.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_gG6tlx1eBKw/S5vChkDElwI/AAAAAAAABKg/WlK68Prs_lM/s72-c/Nuevo1.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/03/nuevo-diseno-para-el-blog.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-7415173909335465632</guid><pubDate>Thu, 11 Mar 2010 16:35:00 +0000</pubDate><atom:updated>2010-03-11T14:35:00.907-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">email</category><category domain="http://www.blogger.com/atom/ns#">google</category><title>Seguimiento de mails en GMail</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5ka_YNTwTI/AAAAAAAABKA/_wxrwyMeo4w/s1600-h/gmail.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5ka_YNTwTI/AAAAAAAABKA/_wxrwyMeo4w/s1600/gmail.png" /&gt;&lt;/a&gt;&lt;/div&gt;GMail, como cliente de correo, es muy bueno. Es el que uso tanto para el correo personal como para el del trabajo.&lt;br /&gt;
&lt;br /&gt;
Pero tiene (al menos) un problema... Cuando envío un mail, a veces ese mail es para que alguien más haga algo; y en general quiero asegurarme de que se haga.&lt;br /&gt;
&lt;br /&gt;
El problema con GMail es que no puedo marcar el mail de ninguna forma en el momento que lo estoy escribiendo. Y al no poder marcarlo en el momento, después es altamente probable que se termine perdiendo.&lt;br /&gt;
&lt;br /&gt;
La solución que encontré, que no me convence demasiado, es una vez enviado ir a "Sent items" y marcarlo con una etiqueta "Esperando respuesta". Pero me gustaría poder marcarlo antes de apretar el botón "Send".&lt;br /&gt;
&lt;br /&gt;
¿Alguien tiene el mismo problema? ¿Lo resolvieron de alguna forma? ¿Cómo?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-7415173909335465632?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/lj2jUYxjr5o/seguimiento-de-mails-en-gmail.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5ka_YNTwTI/AAAAAAAABKA/_wxrwyMeo4w/s72-c/gmail.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/03/seguimiento-de-mails-en-gmail.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-8157476588963564009</guid><pubDate>Mon, 08 Mar 2010 22:07:00 +0000</pubDate><atom:updated>2010-03-08T20:07:16.273-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">web 2.0</category><category domain="http://www.blogger.com/atom/ns#">blog</category><category domain="http://www.blogger.com/atom/ns#">útiles</category><title>Versión movil del blog</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.mofuse.com/images/atoms_home.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.mofuse.com/images/atoms_home.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.mofuse.com/a/"&gt;MoFuse&lt;/a&gt; es un sitio que permite crear una versión móvil de cualquier sitio web.&lt;br /&gt;
&lt;br /&gt;
En particular, puede crear una versión móvil de cualquier blog sin ningún esfuerzo, y además lo hace de forma gratuita. Lo único es que agrega publicidad, pero creo que es un precio que vale la pena pagar.&lt;br /&gt;
&lt;br /&gt;
A partir de este momento, este blog puede ser accedido desde cualquier teléfono móvil con acceso a internet desde &lt;a href="http://marcoscrispino.mofuse.mobi/"&gt;http://marcoscrispino.mofuse.mobi&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Si acceden a esa dirección desde una computadora, muestra una página web con un emulador... &lt;br /&gt;
&lt;br /&gt;
Así es como se ve en el iPhone:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5V0kMW65jI/AAAAAAAABJ8/5drpz1IENjU/s1600-h/BlogOnIPhone.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5V0kMW65jI/AAAAAAAABJ8/5drpz1IENjU/s320/BlogOnIPhone.png" width="166" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-8157476588963564009?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/cpfqX2fcWn4/version-movil-del-blog.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gG6tlx1eBKw/S5V0kMW65jI/AAAAAAAABJ8/5drpz1IENjU/s72-c/BlogOnIPhone.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/03/version-movil-del-blog.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-3483927740281426407</guid><pubDate>Sun, 07 Mar 2010 21:20:00 +0000</pubDate><atom:updated>2010-03-07T19:20:00.530-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">astronomía</category><title>Infinidad de galaxias</title><description>Esta imagen es increible, no deja de sorprenderme:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gG6tlx1eBKw/S5F2mMJIjpI/AAAAAAAABJc/Jhykgjs3A98/s1600-h/hudf_wf3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="347" src="http://2.bp.blogspot.com/_gG6tlx1eBKw/S5F2mMJIjpI/AAAAAAAABJc/Jhykgjs3A98/s400/hudf_wf3.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Fue tomada por el &lt;a href="http://hubblesite.org/"&gt;Hubble&lt;/a&gt;, apuntando hacia una zona aparentemente "vacía" del espacio, una región que ocupa aproximadamente el ancho de 1/15 del ancho de la luna llena.&lt;br /&gt;
&lt;br /&gt;
A ver si logro compartir mi asombro... Se necesitan 30 millones de imágenes como esta para cubrir todo el cielo, y esta imagen fue tomada en una zona del espacio que se consideraba prácticamente vacía!&lt;br /&gt;
&lt;br /&gt;
Pero para que lo voy a explicar yo, si &lt;a href="http://blogs.discovermagazine.com/badastronomy/2009/12/08/hubble-digs-deep-to-see-baby-galaxies/"&gt;Phil Plait lo explica mucho mejor&lt;/a&gt;...&lt;br /&gt;
&lt;br /&gt;
También me gustó &lt;a href="http://anotherj.blogspot.com/2010/02/space-and-numbers.html"&gt;este articulo que habla del tema&lt;/a&gt;, sobre todo la referencia de Carl Sagan al final sobre "the Pale Blue dot".&lt;br /&gt;
&lt;br /&gt;
Nota: tener en cuenta que "one billion" es 10&lt;sup&gt;9&lt;/sup&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-3483927740281426407?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/Vdqrqob_4Wc/infinidad-de-galaxias.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_gG6tlx1eBKw/S5F2mMJIjpI/AAAAAAAABJc/Jhykgjs3A98/s72-c/hudf_wf3.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/03/infinidad-de-galaxias.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-1284043771977570803</guid><pubDate>Wed, 03 Mar 2010 17:46:00 +0000</pubDate><atom:updated>2010-03-03T15:46:11.956-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><category domain="http://www.blogger.com/atom/ns#">reflexiones</category><category domain="http://www.blogger.com/atom/ns#">genexus</category><title>En  busca de código repetido</title><description>Uno de los problemas que más me quitan el sueño en los últimos tiempos, es el código repetido.&lt;br /&gt;
&lt;br /&gt;
¿Por qué tener código repetido es un problema? La respuesta creo que es conocida por todos. El problema es que eventualmente las distintas versiones que se tienen se terminan desfazando, y empiezan a aparecer errores por tocar solo una. Además después de un cierto tiempo, es muy difícil saber cual de todas las versiones es la correcta, porque en general los cambios no se hacen en todas parejo.&lt;br /&gt;
&lt;br /&gt;
Entonces, ¿cuanto código repetido es aceptable? Esta pregunta indudablemente es más abierta, y pueden haber diferentes criterios. ¿Una línea de código duplicada está bien?&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si tengo el siguiente código (GeneXus 9.0), ¿está bien?:&lt;br /&gt;
&lt;blockquote&gt;&lt;tt&gt;if DocImpres = 'S'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; call(WGLLogDe,&amp;amp;msg1, &amp;amp;msg2, 'OC', 'CMANUDOCOC', &amp;amp;GlLogRef, '', &amp;amp;confirmo)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if &amp;amp;confirmo = 'N'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call(PGLog, &amp;amp;msg1, &amp;amp;msg2, 'OC', 'CMANUDOCOC', &amp;amp;GlLogRef, '', &amp;amp;PedirDet)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endif&lt;br /&gt;
else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Call(PGLog, &amp;amp;msg1, &amp;amp;msg2, 'OC', 'CMANUDOCOC', &amp;amp;GlLogRef, '', &amp;amp;PedirDet)&lt;br /&gt;
endif&lt;/tt&gt;&lt;/blockquote&gt;Nótese que los dos call al procedure GLog son idénticos... Además, los literales 'OC' y 'CMANUDOCOC' se usan varias veces en el código...&lt;br /&gt;
&lt;br /&gt;
Haciendo algunos cambios al programa para eliminar estas repeticiones, llegamos a algo así:&lt;br /&gt;
&lt;blockquote&gt;&lt;tt&gt;&amp;amp;logGrabado = 'N'&lt;br /&gt;
&amp;amp;GLLogSis = 'OC'&lt;br /&gt;
&amp;amp;TpoModId = 'CMANUDOCOC'&lt;br /&gt;
if DocImpres = 'S'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;logGrabado = udp(WGLLogDe, &amp;amp;msg1, &amp;amp;msg2, &amp;amp;GLLogSis, &amp;amp;TpoModId, &amp;amp;GlLogRef, '')&lt;br /&gt;
endif&lt;br /&gt;
if &amp;amp;logGrabado = 'N'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Call(PGLog, &amp;amp;msg1, &amp;amp;msg2, &amp;amp;GLLogSis, &amp;amp;TpoModId, &amp;amp;GlLogRef, '', '')&lt;br /&gt;
endif&lt;/tt&gt;&lt;/blockquote&gt;¿Es mejor que el código anterior? Yo creo que sí, pero seguramente para un caso tan simple haya discrepancias...&lt;br /&gt;
&lt;br /&gt;
Pienso que cuando se trata de 2 o más líneas de código es más fácil estar de acuerdo que no es bueno tener dicho código repetido.&lt;br /&gt;
&lt;br /&gt;
Ahora, el problema, es como detectar esta situación.&lt;br /&gt;
&lt;br /&gt;
Cuando el código repetido está dentro del mismo objeto, entonces es bastante fácil de detectar. No es trivial cuando se tienen programas grandes (más de 500 líneas por ejemplo), pero es posible.&lt;br /&gt;
&lt;br /&gt;
El mayor problema es cuando el código repetido está en varios objetos. En esos casos no es para nada fácil de detectar.&lt;br /&gt;
&lt;br /&gt;
Pienso que se podría automatizar, aunque no parece ser trivial. Algunas heurísticas que se me ocurre se podrían utilizar:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Analizar las navegaciones de los objetos, para ver si hay navegaciones iguales. Esos objetos son candidatos a analizar. No necesariamente quiere decir que se pueda mejorar el código, pero sí vale la pena revisarlo.&lt;/li&gt;
&lt;li&gt;En general cuando se da que hay código repetido, el mismo está en el entorno de la llamada a un objeto, o en torno al uso de un determinado atributo. Por ejemplo, tengo un procedimiento que me devuelve un valor, y luego hago algo con dicho valor, pero en varios lugares lo que hago es exáctamente lo mismo...&lt;/li&gt;
&lt;/ul&gt;¿Alguien ha tenido la misma inquietud? ¿Existe alguna herramienta que me permita buscar en una KB GeneXus los posibles problemas de código repetido?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-1284043771977570803?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/8cDE3mXFs04/en-busca-de-codigo-repetido.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/03/en-busca-de-codigo-repetido.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-6395815390145614234</guid><pubDate>Wed, 24 Feb 2010 23:34:00 +0000</pubDate><atom:updated>2010-02-24T21:34:23.760-02:00</atom:updated><title>Augmented Reality</title><description>La "realidad aumentada" (&lt;a href="http://en.wikipedia.org/wiki/Augmented_reality"&gt;augmented reality&lt;/a&gt; en inglés) parece ser el tema del momento.&lt;br /&gt;
&lt;br /&gt;
Básicamente, consiste en mostrar información obtenida de Internet sobre objetos reales: un edificio, un libro, etc.&lt;br /&gt;
&lt;br /&gt;
Hoy vi una notica (en algún lado que ahora no me acuerdo) sobre un nuevo producto llamado Recognizr, que permite ver información asociada a una persona mediante una foto tomada con el teléfono móvil.&lt;br /&gt;
&lt;br /&gt;
&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5GqJHaNRlas&amp;hl=es_ES&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/5GqJHaNRlas&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
Otro producto que parece estar muy bueno es &lt;a href="http://www.google.com/mobile/goggles/#landmark"&gt;Google Goggles&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Hhgfz0zPmH4&amp;hl=es_ES&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Hhgfz0zPmH4&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
Creo que nadie puede dudar que en los próximos tiempos vamos a ver mucha innovación en esta área. Lo único que me precupa es que parece que todas las aplicaciones interesantes funcionan en &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-6395815390145614234?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/9ld1zHWOGB8/augmented-reality.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/02/augmented-reality.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-5917546530136218483</guid><pubDate>Tue, 23 Feb 2010 20:01:00 +0000</pubDate><atom:updated>2010-02-23T18:01:47.342-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">curiosidades</category><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><title>Índice de los arrays</title><description>Ayer empecé a leer &lt;a href="http://www.amazon.com/gp/product/1400082471?ie=UTF8&amp;amp;tag=blodemarcri-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1400082471"&gt;Dreaming in Code&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=blodemarcri-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1400082471" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;, que en una parte dice:&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;Maybe you noticed that I've called this Chapter 0. I did not mean to make an eccentric joke but, rather, to tip my hat to one small difference between computer programmers and the rest of us: Programmers count from zero, not from one. [...]&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Why do programers count from zero? Because computers count from zero! And so programmers train themselves to count that way too, [...]&lt;/i&gt;&lt;/blockquote&gt;Si bien no es del todo cierto, yo soy un programador y cuento desde el uno, es verdad que las computadoras cuentan desde el cero...&lt;br /&gt;
&lt;br /&gt;
Cualquiera que haya programado un loop sobre los elementos de un array en C, C++, Java, C#, o cualquier otro lenguaje que tenga sus raíces en C, sabe que los elementos van de 0 a lenght-1. Algo así:&lt;br /&gt;
&lt;blockquote&gt;&lt;tt&gt;for (int i = 0; i &amp;lt; array.length; i++) { ... }&lt;/tt&gt;&lt;/blockquote&gt;Lo que nunca me había cuestionado, es por qué es así... Y después de pensarlo un poquito, la respuesta es bien simple: en C, los arrays son punteros a una dirección de memoria, que contiene el primer elemento. El índice es el desplazamiento con respecto al puntero. Así, para acceder al primer elemento del array, el desplazamiento a usar es cero, y por eso se accede con &lt;tt&gt;a[0]&lt;/tt&gt;. Todos los lenguajes que vinieron atrás de C, aunque no manejen punteros directamente, mantienen la misma convención.&lt;br /&gt;
&lt;br /&gt;
Toda una revelación :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-5917546530136218483?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/FbsUQB7C_ow/indice-de-los-arrays.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/02/indice-de-los-arrays.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-2413243389891206665</guid><pubDate>Wed, 10 Feb 2010 20:45:00 +0000</pubDate><atom:updated>2010-02-10T18:45:59.431-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">reflexiones</category><category domain="http://www.blogger.com/atom/ns#">redes sociales</category><category domain="http://www.blogger.com/atom/ns#">google</category><title>Google Buzz y el futuro de las redes sociales</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.google.com/s2/static/images/1444417344-GoogleBuzzLogo68.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="47" src="http://www.google.com/s2/static/images/1444417344-GoogleBuzzLogo68.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Ayer Google hizo el lanzamiento de su nueva incursión en el mundo de las redes sociales con &lt;a href="http://www.google.com/buzz"&gt;Google Buzz&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Por si alguno estaba distraído, acá es el video de introducción que explica que es y como funciona:&lt;br /&gt;
&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yi50KlsCBio&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/yi50KlsCBio&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
Es una red social, porque puedo compartir mensajes, fotos, videos, etc. desde la aplicación, pero también es un agregdor de contenido. Me hace acordar mucho a &lt;a href="http://friendfeed.com/"&gt;FriendFeed&lt;/a&gt;. Pero en este caso, tiene la ventaja que ya tiene una base de unos 140 millones de usuarios, gracias a que está integrado a GMail.&lt;br /&gt;
&lt;br /&gt;
Google además ya tiene otros productos que se solapan, como ser Orkut, Wave o los elementos compartidos en Reader. Veremos como evoluciona cada uno de estos. &lt;br /&gt;
&lt;br /&gt;
Pero más que hablar de Buzz, me interesa hacer una reflexión sobre las redes sociales en general.&lt;br /&gt;
&lt;br /&gt;
El problema que le veo, es que cada vez hay más contenido y cada vez hay más lugares donde tengo que ir a buscarlo. No solo eso, también hay mucho contenido repetido.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, esta nota, por haberla publicado en el blog, queda automáticamente en el feed RSS del mismo, por lo que todos los que estén suscriptos lo van a ver por ahí. Además, tengo configurado para que se publique automáticamente en Twitter, que a su vez se publica en Facebook, FriendFeed y ahora Google Buzz (por lo menos, eso son los que me acuerdo ahora).&lt;br /&gt;
&lt;br /&gt;
Es verdad que no todo el mundo publica todo cruzado, pero tampoco soy el único. Cualquiera que siga el blog por RSS y además sea mi amigo en Facebook, va a ver la nota dos veces. Si además me sigue en Twitter, 3 veces...&lt;br /&gt;
&lt;br /&gt;
Lo que necesitamos no es una nueva red social. Esa es la estrategia que le sirve a Google para tener un pedacito del "&lt;a href="http://en.wikipedia.org/wiki/Real-time_web"&gt;real-time web&lt;/a&gt;", pero no nos sirve a los usuarios.&lt;br /&gt;
&lt;br /&gt;
Lo que necesitamos es un agregador que permita registrarse a varias redes sociales a la vez, y compartir la información con mis contactos una sola vez, sin importar donde estén.&lt;br /&gt;
&lt;br /&gt;
Estoy pensando en algo como lo que ya existe para la mensajería instantanea (por eso uso &lt;a href="http://www.pidgin.im/"&gt;Pidgin&lt;/a&gt;, pero esa es otra historia), que me conecto a varias redes, tengo todos los contactos juntos, y cuando quiero hablar con uno no me importa en que red está, simplemente le doy doble-click y empiezo a escribir.&lt;br /&gt;
&lt;br /&gt;
Para las redes sociales necesitamos algo similar, que pueda hacer todo desde un solo cliente, y que no me importe en que red está mi amigo, simplemente tiene que funcionar. Si mi amigo publica algo y yo quiero hacer un comentario, poder hacerlo donde sea que se haya publicado, sin siquiera enterarme.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-2413243389891206665?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/tK22_SR5D6A/google-buzz-y-el-futuro-de-las-redes.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/02/google-buzz-y-el-futuro-de-las-redes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-5323824899941986555</guid><pubDate>Thu, 04 Feb 2010 16:55:00 +0000</pubDate><atom:updated>2010-02-04T14:55:28.294-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">sugerencias</category><category domain="http://www.blogger.com/atom/ns#">reflexiones</category><title>Application Stores</title><description>Parece que el tema de las App Stores está de moda...&lt;br /&gt;
&lt;br /&gt;
Ahora parece que &lt;a href="http://gizmodo.com/5461824/here-comes-the-google-apps-store"&gt;Google suma una nueva&lt;/a&gt;, para aplicaciones que se integren a &lt;a href="http://www.google.com/apps/"&gt;Google Apps&lt;/a&gt; (mail, docs, calendario, etc.).&lt;br /&gt;
&lt;br /&gt;
El negocio es siempre el mismo: el dueño de la tienda pone a la venta aplicaciones de terceros, y cuando un usuario compra la aplicación, una parte va para el desarrollador y la otra para la empresa.&lt;br /&gt;
&lt;br /&gt;
La ventaja que tiene, viéndolo desde el punto de vista del desarrollador, es que la aplicación queda a la venta y accesible para cualquier usuario, sin tener que invertir en infraestructura ni preocuparse demasiado por el medio de pago y demás.&lt;br /&gt;
&lt;br /&gt;
Esta posibilidad de acceder a un número importante de usuarios, ha hecho que por ejemplo en la &lt;a href="http://www.apple.com/iphone/apps-for-iphone/"&gt;App Store de Apple&lt;/a&gt;, las aplicaciones valgan (en su mayoría), unos pocos dólares. Esto hace que haya muchos usuarios que las compran...&lt;br /&gt;
&lt;br /&gt;
¿A que voy? Sería muy bueno tener una GeneXus App Store, para user controls, extensions, patterns, etc.&lt;br /&gt;
&lt;br /&gt;
Esta idea en realidad ya se había planteado, &lt;a href="http://ealmeida.blogspot.com/"&gt;Enrique&lt;/a&gt; ya lo ha comentado, y si no recuerdo mal, &lt;a href="http://www.google.com/profiles/jose.lamas.rios"&gt;José Lamas&lt;/a&gt; también comento algo de esto en su charla del Encuentro GeneXus 2008.&lt;br /&gt;
&lt;br /&gt;
En realidad con el tema infraestructura ya están bastante bien, con la &lt;a href="http://gallery.genexus.com/Home.aspx"&gt;GeneXus Gallery&lt;/a&gt;, pero le estaría faltando el tema comercial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-5323824899941986555?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/hbM7SKJXhFU/application-stores.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/02/application-stores.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-375424032582842477</guid><pubDate>Fri, 29 Jan 2010 20:49:00 +0000</pubDate><atom:updated>2010-01-29T18:49:00.044-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tecnología</category><category domain="http://www.blogger.com/atom/ns#">reflexiones</category><category domain="http://www.blogger.com/atom/ns#">iphone</category><title>iPad, iPhone y la próxima revolución tecnológica</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gG6tlx1eBKw/S2K9ctY-BCI/AAAAAAAABG8/xZTE9SsGss4/s1600-h/iPad_iPhone.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_gG6tlx1eBKw/S2K9ctY-BCI/AAAAAAAABG8/xZTE9SsGss4/s1600/iPad_iPhone.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;El miércoles pasado Apple hizo el lanzamiento de su nuevo producto, el &lt;a href="http://www.apple.com/ipad/"&gt;iPad&lt;/a&gt;: un "tablet" de 10 pulgadas que ejecuta el mismo sistema operativo que el iPhone.&lt;br /&gt;
&lt;br /&gt;
Como todo producto nuevo de Apple, a generado todo tipo de reacciones. Están los que ya quieren uno y lo van a encargar tan pronto como se pueda, y están los que no ven demasiado en qué les puede cambiar la vida (entre los que me incluyo).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mis impresiones sobre el iPad&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Mi primerimpresión es que no veo mucho la utilidad de un dispositivo de este tipo. No solo del iPad, me refiero a cualquier "tablet". Es demásido grande para llevarlo en el bolsillo, y creo que es poco práctico de usar, al menos comparado con un netbook.&lt;br /&gt;
&lt;br /&gt;
Tampoco es cuestión de criticar a Apple, que en los últimos productos que ha lanzado al mercado ha tenido mucho éxito. En todo caso, aunque no sea un dispositivo que revolucione el segmento de mercado que ocupa (como lo hicieron el iPod y el iPhone), igual para Apple va a ser un buen negocio.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;iPhone OS 3.2&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
El iPad viene con el mismo sistema operativo que el iPhone, al que se le hicieron algunos cambios para soportar pantallas más grandes.&lt;br /&gt;
&lt;br /&gt;
Todas las aplicaciones que funcionan en el iPhone funcionan también en el iPad, en el tamaño normal o en pantalla completa.&lt;br /&gt;
&lt;br /&gt;
Esta versión del sistema operativo todavía no está disponible para el iPhone, pero supongo que para marzo cuando empiecen a entregar las primeras iPad ya va a estar.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;El próximo producto de Apple: iDock&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Entonces, me animo a hacer una predicción...&lt;br /&gt;
&lt;br /&gt;
¿Que pasa cuando combinamos un dispositivo que funciona muy bien y tiene mucha aceptación, con la posibilidad incorporada al sistema operativo para mostrar las aplicaciones en pantalla más grandes?&lt;br /&gt;
&lt;br /&gt;
Además agreguemos a la ecuación que el hardware es cada vez más chico y más potente.&lt;br /&gt;
&lt;br /&gt;
Apple (o algún otro), va a sacar en algún momento un dock que permita agregarle un teclado, ratón y pantalla (multitouch por supuesto) al iPhone, para poder usarlo como PC de escritorio.&lt;br /&gt;
&lt;br /&gt;
En realidad no se si lo van a hacer, pero estaría bueno :) La posibilidad la tienen... De hecho, para el iPad ya existe:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gG6tlx1eBKw/S2LgxKiFnzI/AAAAAAAABHA/jllEAfQnTi4/s1600-h/iPad_dock.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="301" src="http://2.bp.blogspot.com/_gG6tlx1eBKw/S2LgxKiFnzI/AAAAAAAABHA/jllEAfQnTi4/s320/iPad_dock.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;La competencia&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Obviamente Apple no es el único que puede hacer esto. La principal competencia podría venir de Google con su sistema operativo Android.&lt;br /&gt;
&lt;br /&gt;
Es verdad que Google está trabajando tambien el el Chrome OS, pero esto es algo totalmente distinto. Sería un dispositivo portatil como lo es un teléfono móvil, pero con la posibilidad de colocarlo en un dock para usarlo como PC.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Conclusiones&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tal vez en iPad no vaya a disparar el uso de los "tablets", pero creo que le da a Apple otras posibilidades con respecto a otros productos como son el iPhone y el iPod Touch.&lt;br /&gt;
&lt;br /&gt;
Creo que no va a pasar mucho tiempo hasta que los teléfonos móviles se conviertan en verdaderas computadoras personales. Va a estar bueno verlo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-375424032582842477?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/OX3EBIFb3T0/ipad-iphone-y-la-proxima-revolucion.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_gG6tlx1eBKw/S2K9ctY-BCI/AAAAAAAABG8/xZTE9SsGss4/s72-c/iPad_iPhone.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/01/ipad-iphone-y-la-proxima-revolucion.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-6125082751199908437</guid><pubDate>Wed, 27 Jan 2010 21:21:00 +0000</pubDate><atom:updated>2010-01-27T19:21:46.330-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">web 2.0</category><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><category domain="http://www.blogger.com/atom/ns#">iphone</category><title>Probando iWebKit</title><description>Desde que Fabián me mostró la &lt;a href="http://waldenei.blogspot.com/2009/12/waldepy-en-la-apple-webapp-store.html"&gt;aplicación que había hecho&lt;/a&gt; con &lt;a href="http://www.jqtouch.com/"&gt;jQTouch&lt;/a&gt;, tenía ganas de hacer alguna prueba de desarrollar aplicaciones web para el iPhone.&lt;br /&gt;
&lt;br /&gt;
Estuve viendo un poco, pero como nunca hice nada con &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, me pareció que podía ser más simple probar con &lt;a href="http://iwebkit.net/"&gt;iWebKit&lt;/a&gt;, que se basa en HTML y CSS. Es decir, también usa JavaScript, pero yo no tengo que meterme con el código.&lt;br /&gt;
&lt;br /&gt;
La verdad que me resultó muy sencillo de usar, y con relativamente poco esfuerzo se logra una aplicación que se ve casi como una aplicación nativa en el iPhone. En la prueba que hice, en realidad me faltaron algunos detalles como por ejemplo que no logré que los check box se vean bien, pero para ser una prueba quedó muy bien con muy poco esfuerzo.&lt;br /&gt;
&lt;br /&gt;
Una de las cosas que dice iWebKit que soporta, son aplicaciones en modo full screen. Estas son aplicaciones Web, pero que se instalan como si fueran una aplicación nativa, y si bien corren dentro de Safari, no muestran las barras de navegación.&lt;br /&gt;
&lt;br /&gt;
El problema que tiene iWebKit, es que el modo full screen funciona solamente para sitios de una sola página (no son tan raros... hoy en día con AJAX es bastante común).&lt;br /&gt;
&lt;br /&gt;
Lo que me sorprende es que nadie haya encontrado un work arround a este problema, así que acá va el que encontré yo:&lt;br /&gt;
&lt;br /&gt;
Para tener sitios de múltiples páginas con iWebKit que funcionan en modo full screen, en vez de hacer los links con&lt;br /&gt;
&lt;blockquote&gt;&lt;tt&gt;&amp;lt;a href="miPagina.html"&amp;gt;link&amp;lt;/a&amp;gt;&lt;/tt&gt;&lt;br /&gt;
&lt;/blockquote&gt;se deben hacer con un poco de JavaScript&lt;br /&gt;
&lt;blockquote&gt;&lt;tt&gt;&amp;lt;a href="javascript:location.replace('miPagina.html');"&amp;gt;&lt;/tt&gt;&lt;tt&gt;link&lt;/tt&gt;&lt;tt&gt;&amp;lt;/a&amp;gt;&lt;/tt&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-6125082751199908437?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/jYdKYfDhbuw/probando-iwebkit.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/01/probando-iwebkit.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-1583488327618354950</guid><pubDate>Fri, 22 Jan 2010 20:45:00 +0000</pubDate><atom:updated>2010-01-22T18:45:02.992-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">internet</category><category domain="http://www.blogger.com/atom/ns#">útiles</category><category domain="http://www.blogger.com/atom/ns#">almacenamiento</category><title>Viviendo en la nube</title><description>... que no es lo mismo que viviendo en las nubes, vale la aclaracion.&lt;br /&gt;
&lt;br /&gt;
Creo que no es noticia para nadie, que cada vez es más fácil y más común tener datos en la nube.&lt;br /&gt;
&lt;br /&gt;
Por eso es que Google está trabajando en Chrome OS, que si bien creo que todavía no es el momento, demuestra hacia donde va la industria.&lt;br /&gt;
&lt;br /&gt;
En esta nota quería contar como ha sido mi experiencia y hacer una  reseña de los servicios que uso. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Respaldo de datos&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
El primer uso que le di a la nube fue para respaldar datos. Originalmente respaldaba a CD, pero desde hace unos años respaldo todo a algún servicio en Internet.&lt;br /&gt;
&lt;br /&gt;
El primero que usé fue &lt;a href="http://blog.marcoscrispino.com/search?q=xdrive"&gt;XDrive&lt;/a&gt; que tenía 5GB de espacio, hasta que AOL decidió cancelar el servicio. Uno de los riesgos que tiene...&lt;br /&gt;
&lt;br /&gt;
Actualmente uso &lt;a href="http://skydrive.live.com/"&gt;Windows Live Skydrive&lt;/a&gt; que en este momento tiene 25GB de almacenamiento gratuito. Lo que respaldo ahí son básicamente fotos y videos, aunque también respaldo algún que otro archivo.&lt;br /&gt;
&lt;br /&gt;
No tiene (hasta donde conozco), la posibilidad de sincronizar datos, pero de todas formas a este nivel no me interesa. Los archivos que tengo ahí los voy agregando de forma incremental.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Sincronización de archivos&lt;/b&gt;&lt;br /&gt;
La sincronización de archivos es otro tema, ya que en general las cosas que quiero tener sincronizadas son pocas.&lt;br /&gt;
&lt;br /&gt;
Para esto, uso otro servicio llamado &lt;a href="http://www.dropbox.com/"&gt;Dropbox&lt;/a&gt;, que tiene clientes para todos los sistemas operativos importantes (Windows, Mac, Linux), además de tener un cliente para el iPhone y de poder acceder mediante un navegador a travez de la página web.&lt;br /&gt;
&lt;br /&gt;
Las cosas que tengo sincronizadas son por ejemplo un archivo con datos útiles, la lista de contraseñas (encriptada por supuesto), algunos PDFs para leer en el teléfono, etc.&lt;br /&gt;
&lt;br /&gt;
Dropbox tiene 2GB de espacio en su versión gratuita, lo que es más que suficiente para el uso que le doy.&lt;br /&gt;
&lt;br /&gt;
Además tiene la posibilidad de compartir archivos mediante el uso de una carpeta pública.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Correo electrónico&lt;/b&gt;&lt;br /&gt;
Cuando empecé el artículo, pensaba escribir como respaldo los datos del PC hacia Internet, pero en el caso del correo electrónico es al revés...&lt;br /&gt;
&lt;br /&gt;
Para el correo personal, uso &lt;a href="http://mail.google.com/"&gt;GMail&lt;/a&gt;, que con sus 7.5GB de espacio y aumentando todos los días, es más que suficiente, por lo menos por los próximos años.&lt;br /&gt;
&lt;br /&gt;
Además en el PC tengo un cliente de correo, configurado con POP3 para que baje el mails desde la cuenta de GMail, y ahí me quedo con los correos que me interesa guardar. Si en algún momento desaparece GMail, al menos tengo los correos importantes.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Documentos&lt;/b&gt;&lt;br /&gt;
Con los documentos pasa más o menos lo mismo. Todavía tengo documentos que están locales y respaldo a Skydrive, pero cada vez más estoy empezando a mover las cosas a &lt;a href="http://docs.google.com/"&gt;Google Docs&lt;/a&gt;, para poder accederlas desde cualquier lugar.&lt;br /&gt;
&lt;br /&gt;
Un caso particular de documentos es el curriculum, que en algún momento mantenía actualizado en un .doc, pero actualmente si lo precisara, iría sin duda a buscar el de &lt;a href="http://www.linkedin.com/in/mcrispino"&gt;LinkedIn&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Calendario&lt;/b&gt;&lt;br /&gt;
Como calendario, uso Google Calendar (sí, otro servicio de Google...) que puedo ver en GMail y puedo sincronizar con el iPhone.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Contactos&lt;/b&gt;&lt;br /&gt;
Para respaldar los contactos, uso un sitio llamado &lt;a href="http://www.funambol.com/solutions/portal.php"&gt;myFunambol&lt;/a&gt;. El nombre no dice mucho, pero el servicio está bueno.&lt;br /&gt;
&lt;br /&gt;
Ya lo usaba con el Sony Ericsson, y pasar los contactos al iPhone fue tan fácil como bajar la aplicación y apretar el botón "sincronizar".&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Conclusión&lt;/b&gt;&lt;br /&gt;
Todo parece estar yendo hacia la nube, y creo que por una buena razón: es práctico.&lt;br /&gt;
&lt;br /&gt;
Es práctico poder acceder mis archivos desde cualquier lugar, es práctico poder acceder al correo en cualquier momento, es práctico poder usar el calendario indistintamente en el PC y en el teléfono, es práctico tener los contactos sincronizados.&lt;br /&gt;
&lt;br /&gt;
¿Alguien usa algún servicio adicional? ¿Han tenido la necesidad de usar algún servicio de estos o similar?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-1583488327618354950?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/KYblcFmR720/viviendo-en-la-nube.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2010/01/viviendo-en-la-nube.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-8691580470912158470</guid><pubDate>Tue, 29 Dec 2009 17:27:00 +0000</pubDate><atom:updated>2009-12-29T15:28:48.796-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">sugerencias</category><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><category domain="http://www.blogger.com/atom/ns#">reflexiones</category><category domain="http://www.blogger.com/atom/ns#">genexus</category><title>Buscar un elemento dentro de un SDT en GeneXus</title><description>En GeneXus, no hay una forma de buscar un elemento dentro de una colección (SDT), que no sea recorriendo toda la lista. Hay una función &lt;a href="http://www.gxtechnical.com/gxdlsp/pub/genexus_8.0_help_system/control_properties,_events_and_methods/indexoff_sdt_method.htm"&gt;IndexOf&lt;/a&gt;, pero compara referencias y no el contenido de los elementos. &lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;blockquote&gt;&lt;tt&gt; &amp;amp;esta = Boolean.False&lt;br /&gt;
for &amp;amp;depUbiItem in &amp;amp;depUbis&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if &amp;amp;depUbiItem.DepId = &amp;amp;DepId and &amp;amp;depUbiItem.CicUbiId = &amp;amp;CicUbiId&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;esta = Boolean.True&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; endif&lt;br /&gt;
endfor&lt;/tt&gt;&lt;br /&gt;
&lt;/blockquote&gt;Esto no parece ser lo más elegante... No debería necesitar 7 líneas de código para saber si un elemento está en la colección, lo debería poder hacer en una sola línea.&lt;br /&gt;
&lt;br /&gt;
El problema es que dado un SDT, GeneXus no tiene forma de saber cuales son los elementos que quiero comparar. En el ejemplo, estoy comparando DepId y CicUbiId, pero el SDT tiene varios campos más.&lt;br /&gt;
&lt;br /&gt;
Una posibilidad sería poder definirle comportamiento a los SDTs, de forma de poder decirle cual es la función de comparación que tengo que usar. Esta función de comparación se definiría una vez para el SDT, y siempre que se quiera buscar un elemento se haría usando este comparador.&lt;br /&gt;
&lt;br /&gt;
Otra opción que me gustaría más, es poder definir on-line la función de comparación. En C# por ejemplo, usando &lt;a href="http://msdn.microsoft.com/en-us/library/bb397687.aspx"&gt;lambda expressions&lt;/a&gt;, quedaría algo así:&lt;br /&gt;
&lt;blockquote&gt;&lt;tt&gt;bool esta = depUbis.Exists(d =&amp;gt; ((d.DepId = depId) &amp;amp;&amp;amp; (d.CicUbiId = cicUbiId)));&lt;br /&gt;
&lt;/tt&gt;&lt;br /&gt;
&lt;/blockquote&gt;O escribiendolo como me gustaría verlo en GeneXus:&lt;br /&gt;
&lt;blockquote&gt;&lt;tt&gt;&amp;amp;esta = &amp;amp;depUbis.Exists(d =&amp;gt; d.DepId = &amp;amp;DepId and d.CicUbiId = &amp;amp;CicUbiId)&lt;/tt&gt;&lt;br /&gt;
&lt;/blockquote&gt;&amp;nbsp;Esto se lee "existe un elemento &lt;i&gt;d&lt;/i&gt; en la colección &lt;i&gt;&amp;amp;depUbis&lt;/i&gt; que cumple que &lt;i&gt;d.DepId = &amp;amp;DepId&lt;/i&gt; y &lt;i&gt;d.CicUbiId = &amp;amp;CicUbiId&lt;/i&gt;".&lt;br /&gt;
&lt;br /&gt;
Las colecciones en C# definen otras funciones que también sería intereante tener, como ser:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;First: devuelve el primer elemento que cumple con la condición&lt;/li&gt;
&lt;li&gt;Where: devuelve otra colección con los elementos que cumplen con la condición&lt;/li&gt;
&lt;li&gt;Select: permite hacer una proyección, devuelve otra colección pero de otro tipo&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-8691580470912158470?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/Iipvrkruuf8/buscar-un-elemento-dentro-de-un-sdt-en.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/12/buscar-un-elemento-dentro-de-un-sdt-en.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-5454003036608500061</guid><pubDate>Mon, 28 Dec 2009 17:34:00 +0000</pubDate><atom:updated>2009-12-28T15:34:03.182-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">sugerencias</category><category domain="http://www.blogger.com/atom/ns#">reflexiones</category><category domain="http://www.blogger.com/atom/ns#">genexus</category><title>Atributos y controles como parámetro en GeneXus</title><description>Capaz que el título no dice mucho, es dificil explicar lo que quiero en una línea...&lt;br /&gt;
&lt;br /&gt;
Todos sabemos que es una buena práctica de programación, reutilizar código siempre que sea posible. En GeneXus X con los data selectors se dio un gran paso, pero hay cosas que me siguen faltando.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, tengo el siguiente código que borra los datos de tablas referenciadas, cuando borro una determinada entidad (sí, seguro que es más prolijo hacer un Business Component y borrar con eso, pero no es el punto).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gG6tlx1eBKw/Szjp51m23rI/AAAAAAAABDc/q11nz2TZugs/s1600-h/deleteRef.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_gG6tlx1eBKw/Szjp51m23rI/AAAAAAAABDc/q11nz2TZugs/s1600/deleteRef.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
¿Se ve el patrón de código repetido? El problema es que no tengo forma de unificar el código en un procedimiento o subrutina, de forma de pasarle solamente el atributo que va en el &lt;i&gt;defined by&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Seguramente no es fácil de implementar, pero sería interesante.&lt;br /&gt;
&lt;br /&gt;
Otro caso donde pasa algo similar, es con los controles en pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, recibo unas variables por parámetro, si vienen cargadas las muestro en el form deshabilitadas, y si no las muestro habilitadas.&lt;br /&gt;
&lt;br /&gt;
El código es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gG6tlx1eBKw/Szjq91TixfI/AAAAAAAABDg/bvVUCLZ8V6Q/s1600-h/controles.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_gG6tlx1eBKw/Szjq91TixfI/AAAAAAAABDg/bvVUCLZ8V6Q/s1600/controles.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Otra vez, creo que es fácil ver el patrón en el código, y otra vez no tengo forma de hacer algo genérico, que reciba dos variables (el parámetro y la variable que tengo en el form), y le aplique la lógica...&lt;br /&gt;
&lt;br /&gt;
Capaz que este caso es más sencillo de implementar que el otro, porque no cambia la forma en que navega el programa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-5454003036608500061?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/yrWepfeBCNI/atributos-y-controles-como-parametro-en.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_gG6tlx1eBKw/Szjp51m23rI/AAAAAAAABDc/q11nz2TZugs/s72-c/deleteRef.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/12/atributos-y-controles-como-parametro-en.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-2916793890912330388</guid><pubDate>Thu, 24 Dec 2009 22:08:00 +0000</pubDate><atom:updated>2009-12-24T20:08:34.860-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">reflexiones</category><category domain="http://www.blogger.com/atom/ns#">google</category><title>Lo que le falta al Chrome OS</title><description>Primero que nada, quiero aclarar que no he usado &lt;a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Chrome OS&lt;/a&gt;... lo que sigue es más bien una reflexión.&lt;br /&gt;
&lt;br /&gt;
Y no lo he probado, porque creo que no aporta nada nuevo. Es decir muchas de las cosas que hago con un PC, las podría hacer con aplicaciones Web corriendo en Chrome OS, pero hay una actividad que hoy (creo) no se puede hacer: desarrollar software.&lt;br /&gt;
&lt;br /&gt;
El problema es que mientras que los desarrolladores no se sientan atraidos a la nueva plataforma, no van a surgir desarrollos optimizados para Chromes OS, lo que se transforma en un círculo vicioso porque los usuarios no van a ver el valor de cambiar a un sistema operativo que no les aporta nada nuevo.&lt;br /&gt;
&lt;br /&gt;
Claro que tiene sus ventajas (levanta mucho más rápido que cualquier otro PC, está enfocado a la Web que hoy por hoy es lo que más usan los usuarios, los equipos pueden ser más baratos, etc.), pero todavía está por verse que adopción va a tener.&lt;br /&gt;
&lt;br /&gt;
Creo que en algún momento Google va a tener que liberar un conjunto de herramientas Web para desarrollar software, para que los desarrolladores puedan usar la plataforma a la que estarían apuntando. Tal vez algo como &lt;a href="https://bespin.mozilla.com/"&gt;Bespin&lt;/a&gt; de Mozilla Labs, aunque seguramente debería ser algo un poco más avanzado, no solo un editor de texto.&lt;br /&gt;
&lt;br /&gt;
Va a ser interesante de ver...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-2916793890912330388?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/WTSpkj2EvBI/lo-que-le-falta-al-chrome-os.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/12/lo-que-le-falta-al-chrome-os.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-635458836163081159</guid><pubDate>Thu, 10 Dec 2009 20:37:00 +0000</pubDate><atom:updated>2009-12-10T18:37:00.734-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><title>Great programming quotes</title><description>Leo en el blog de Sebastián Gomez sobre &lt;a href="http://sgomez.blogspot.com/2009/12/great-programming-quotes.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+SebaGomezsWeblog+%28Seba+Gomez%27s+Weblog%29&amp;amp;utm_content=Google+Reader"&gt;great programming quotes&lt;/a&gt;, de una &lt;a href="http://stackoverflow.com/questions/58640/great-programming-quotes"&gt;pregunta en Stack Overflow&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
A mi también me pareció interesante para compartir :), así que acá van algunas de las que me gustaron:&lt;br /&gt;
&lt;blockquote&gt;Hofstadter's Law: It always takes longer than you   expect, even when you take into   account Hofstadter's Law.&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. (Rick Osborne)&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;Some people, when confronted with a problem, think "I know, I’ll use regular expressions." Now they have two problems.&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;In order to understand recursion, one   must first understand recursion (un clásico) &lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;It works on my machine. &lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;If debugging is the process of removing software bugs, then programming must be the process of putting them in. (Edsger Dijkstra, otro clásico...)&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;Perfection is achieved, not when there   is nothing more to add, but when there   is nothing left to take away. (Antoine de Saint Exupéry, no creo que fuera programador, pero igual cuenta...)&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;Debuggers don't remove bugs. They   only show them in slow motion. &lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;Never trust a programmer in a suit.&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;Measuring programming progress by   lines of code is like measuring   aircraft building progress by weight. (Bill Gates)&lt;br /&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-635458836163081159?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/AsBQyPH88EA/great-programming-quotes.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/12/great-programming-quotes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-8912447933965638749</guid><pubDate>Tue, 08 Dec 2009 13:47:00 +0000</pubDate><atom:updated>2009-12-08T11:47:25.623-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><category domain="http://www.blogger.com/atom/ns#">útiles</category><category domain="http://www.blogger.com/atom/ns#">genexus</category><title>Compilación GeneXus 9.0/Java: problemas de performance</title><description>En una KB GeneXus 9.0 grande (en nuestro caso unos 8.100 objetos), ubicada en la red y de uso compartido, la compilación puede tener algunos serios problemas de performance.&lt;br /&gt;
&lt;br /&gt;
Existen dos formas de compilar, y las dos presentan dificultades:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;usando NMake, la compilación es rápida, pero demora mucho cuando tiene que generar algún .mak porque cambió el árbol de llamadas&lt;/li&gt;
&lt;li&gt;usando GXJMake, la generación es rápida, pero la compilación nos demoraba en algunos casos más de 2 minutos.&lt;/li&gt;
&lt;/ul&gt;En particular el GXJMake, tiene un algoritmo que dista mucho de ser óptimo. &lt;a href="http://ealmeida.blogspot.com/"&gt;Enrique&lt;/a&gt; estuvo analizando por que demoraba tanto, y llegó a que lo que hace es recorrer todo el árbol de llamadas (lo lee de los archivos .ari) y por cada objeto, compara la fecha del .java con la del .class. El tema es que lo hace una vez por cada aparición del objeto en el árbol.&lt;br /&gt;
&lt;br /&gt;
En el caso que analizamos, había un objeto que estaba comparando las fechas más de 1.400 veces... ¡Y ni siquiera era el objeto que había modificado!&lt;br /&gt;
&lt;br /&gt;
Una demora de 2 minutos como teníamos, para compilar un solo objeto modificado baja muchísimo la productividad, no solo por la demora en sí de la compilación, sino también porque la persona que tiene que esperar esos dos minutos casi seguro que se distrae y se pone a hacer alguna otra cosa.&lt;br /&gt;
&lt;br /&gt;
Este problema es conocido, y está reportado en al menos dos SACs:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,4,61,O,S,0,,24809;S;0;A;0;5804;GXJMAKE;;;;;;;;;;;;;;;;A;%20%20/%20%20/%20%20;;0;9;;0;;99;;0;1;%200;N;N;S;P"&gt;Tiempos de compilación de fuentes java remotos son inviables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,4,61,O,S,0,,25918;S;0;A;0;5804;GXJMAKE;;;;;;;;;;;;;;;;A;++/++/++;;0;9;;0;;99;;0;1;+0;N;N;S;B;P"&gt;Tiempo de compilación es mayor con GXJMake que con NMAKE&lt;/a&gt; (se precisa estar logueado para verlo)&lt;/li&gt;
&lt;/ul&gt;La solución, fue desarrollar nuestro propio programa de Make: COJMake.&lt;br /&gt;
&lt;br /&gt;
Este programa ejecuta en el servidor donde está ubicada la KB, y queda monitoreando si hay algún .java modificado. Cuando detecta un .java modificado, lo manda a compilar&lt;sup&gt;&lt;a href="http://draft.blogger.com/post-create.g?blogID=33066466#item1"&gt;(1)&lt;/a&gt;&lt;/sup&gt;. El programa graba un log que permite monitorear lo que está haciendo y detectar si se produjo algún error en la compilación.&lt;br /&gt;
&lt;br /&gt;
Con esto, el programa ni siquiera necesita que se termine de generar para poder empezar a compilar. Si se están generando varios objetos, a medida que se va terminando de generar uno ya queda listo para compilar.&lt;br /&gt;
&lt;br /&gt;
El efecto es que ahora la compilación es prácticamente instantanea. En condiciones normales (cuando se manda a generar unos pocos objetos), cuando se termina de generar demora menos de dos segundos en terminar de compilar.&lt;br /&gt;
&lt;br /&gt;
&lt;sup&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=33066466&amp;amp;postID=8912447933965638749" name="item1"&gt;(1)&lt;/a&gt;&lt;/sup&gt; En realidad lo que hace es ir guardando los archivos modificados en una cola, y hay otro hilo que va compilando lo que aparece en la cola. Esto permite limitar el número de procesos que se largan a compilar, sin perder ningún archivo en el medio.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-8912447933965638749?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/15aBoOI925M/compilacion-genexus-90java-problemas-de.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/12/compilacion-genexus-90java-problemas-de.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-112025731555450025</guid><pubDate>Tue, 01 Dec 2009 22:04:00 +0000</pubDate><atom:updated>2009-12-01T20:04:45.943-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">collaborative proyects</category><category domain="http://www.blogger.com/atom/ns#">genexus</category><title>Primer Pattern generado por el Automatic Pattern Generator</title><description>Es un gusto anunciar que el Automatic Pattern Generator ya está generando su primer Pattern.&lt;br /&gt;
&lt;br /&gt;
Claro, por el momento no es demasiado útil, porque genera un solo Pattern, que es fijo, pero al menos nos permite saber que vamos por el buen camino.&lt;br /&gt;
&lt;br /&gt;
Todavía queda mucho por hacer, a quien le interese participar del proyecto, será bienvenido.&lt;br /&gt;
&lt;br /&gt;
El pattern que genera consiste de un solo procedimiento que devuelve el valor de un objeto.&lt;br /&gt;
&lt;br /&gt;
En este momento no estamos liberando binarios, porque no tiene demasiado sentido. Si alguien quiere ver el código del proyecto, o bajarlo, o hacer algún aporte, lo puede hacer en el &lt;a href="https://www.assembla.com/wiki/show/automatic-pattern-generator"&gt;sitio de Assembla&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Dejo algunas fotos de pantalla de la aplicación.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gG6tlx1eBKw/SxWREItU-zI/AAAAAAAABCo/9vPADFBxhXY/s1600/apg_v01_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_gG6tlx1eBKw/SxWREItU-zI/AAAAAAAABCo/9vPADFBxhXY/s400/apg_v01_01.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Figura 1: Acceso a la aplicación&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gG6tlx1eBKw/SxWRX8wnnJI/AAAAAAAABCs/oh58qf0is0k/s1600/apg_v01_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_gG6tlx1eBKw/SxWRX8wnnJI/AAAAAAAABCs/oh58qf0is0k/s400/apg_v01_02.png" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Figura 2: Proyecto Visual Studio Generado&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gG6tlx1eBKw/SxWRn1IkSJI/AAAAAAAABCw/V1YMQL0Zk0c/s1600/apg_v01_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="313" src="http://4.bp.blogspot.com/_gG6tlx1eBKw/SxWRn1IkSJI/AAAAAAAABCw/V1YMQL0Zk0c/s400/apg_v01_03.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Figura 3: Proyecto Visual Studio&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gG6tlx1eBKw/SxWR7m7l8DI/AAAAAAAABC0/932d-PxoNyA/s1600/apg_v01_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="382" src="http://1.bp.blogspot.com/_gG6tlx1eBKw/SxWR7m7l8DI/AAAAAAAABC0/932d-PxoNyA/s400/apg_v01_04.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Figura 4: Aplicando el Pattern a un atributo y las propiedades&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gG6tlx1eBKw/SxWSKLhyoZI/AAAAAAAABC4/ew0I_HCvYWk/s1600/apg_v01_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_gG6tlx1eBKw/SxWSKLhyoZI/AAAAAAAABC4/ew0I_HCvYWk/s400/apg_v01_05.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;Figura 5: Procedure generado&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-112025731555450025?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/V7FHbFNUweE/primer-pattern-generado-por-el.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gG6tlx1eBKw/SxWREItU-zI/AAAAAAAABCo/9vPADFBxhXY/s72-c/apg_v01_01.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/12/primer-pattern-generado-por-el.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-1466457530861516581</guid><pubDate>Mon, 23 Nov 2009 22:12:00 +0000</pubDate><atom:updated>2009-11-23T20:12:10.956-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">desarrollo</category><category domain="http://www.blogger.com/atom/ns#">c#</category><category domain="http://www.blogger.com/atom/ns#">iphone</category><category domain="http://www.blogger.com/atom/ns#">objective-c</category><title>XCode vs. Visual Studio</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gG6tlx1eBKw/SwsIHIG29sI/AAAAAAAABCM/vi0jkmwKDfg/s1600/xcode.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_gG6tlx1eBKw/SwsIHIG29sI/AAAAAAAABCM/vi0jkmwKDfg/s200/xcode.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;Hace unos días empecé mis primeras pruebas para desarrollar aplicaciones para el iPhone, con lo cual tuve que estudiar un poco de Objective-C (el lenguaje de programación) y XCode (el ambiente de desarrollo).&lt;br /&gt;
&lt;br /&gt;
No puedo evitar la comparación con C#/Visual Studio, que es el otro lenguaje de propósito general que manejo... Si bien tal vez la comparación no sea del todo justa, ya que en Visual Studio nunca desarrollé aplicaciones móviles, creo que como ambientes de desarrollo deberían ser bastante comparables.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Intellitips&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Se extrañan... En Visual Studio cuando escribo "variable." muestra una lista de todas las propiedades, métodos y eventos que están disponibles para esa variable. Esto es muy útil cuando uno no se acuerda exáctamente el nombre de una función.&lt;br /&gt;
&lt;br /&gt;
En XCode no encontré que tuviera intellitips, lo más parecido que tiene es una especie de "autocomplete", que muestra el primér método que coincide con lo que voy escribiendo.&lt;br /&gt;
&lt;br /&gt;
Por lo tanto, si quiero buscar un método que no me acuerdo exáctamente del nombre, no tengo más remedio que salir del editor y buscarlo en la API en el navegador. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Propiedades "automáticas"&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
En los dos lenguajes se tienen propiedades automáticas (desde C# 3.0), pero la forma que se definen son distintas.&lt;br /&gt;
&lt;br /&gt;
En C#, es una sola línea de código:&lt;br /&gt;
&lt;blockquote&gt;public int Prop { get; set; }&lt;br /&gt;
&lt;/blockquote&gt;&amp;nbsp;En Objective-C, hay que definirla en tres lugares distintos...&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;en el .h, en la definición de la clase&lt;/li&gt;
&lt;li&gt;en el .h con una directiva @property&lt;/li&gt;
&lt;li&gt;en el .m con una directiva @synthetize&lt;/li&gt;
&lt;/ol&gt;&lt;b&gt;Interfaz de usuario&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
En Visual Studio al agregar un elemento a la interfaz de usuario de la aplicación, el IDE se encarga de generar todo el código necesario para que ese elemento funcione. Después hay que definir el comportamiento, pero por lo menos el elemento está ahí.&lt;br /&gt;
&lt;br /&gt;
En XCode, la definición de la interfaz se hace en otra aplicación, Interface Builder, y para poder utilizar los componentes que se agregaron con drag&amp;amp;drop, hay que definir outlets, delegates y alguna cosa más, que lo hace bastante complicado para novatos.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Conclusión&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;Si bien XCode tiene unas cuantas cosas interesantes, creo que como IDE se queda un poco corto. La productividad, al menos para los que recién estamos empezando, es mucho menor que la que se puede lograr con otras herramientas, como ser Visual Studio.&lt;br /&gt;
&lt;br /&gt;
Habrá que seguir experimentando para agarrarle la mano.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-1466457530861516581?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/eiea1rv_h0A/xcode-vs-visual-studio.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gG6tlx1eBKw/SwsIHIG29sI/AAAAAAAABCM/vi0jkmwKDfg/s72-c/xcode.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/11/xcode-vs-visual-studio.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-3756877159531835693</guid><pubDate>Tue, 17 Nov 2009 12:12:00 +0000</pubDate><atom:updated>2009-11-17T10:14:22.874-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">curiosidades</category><title>Supercomputadoras</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gG6tlx1eBKw/SwKQhbm4AvI/AAAAAAAABCE/kzK8otJDC_I/s1600/top500.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_gG6tlx1eBKw/SwKQhbm4AvI/AAAAAAAABCE/kzK8otJDC_I/s320/top500.gif" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;a href="http://www.top500.org/"&gt;TOP500&lt;/a&gt; es un sitio que se encarga de llevar estadísticas de las 500 supercomputadoras más rápidas que existen. Publican dos listas al año, una junio y otra en noviembre.&lt;br /&gt;
&lt;br /&gt;
En el sitio ya está publicada la &lt;a href="http://www.top500.org/list/2009/11/100"&gt;lista de noviembre de 2009&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
La supercomputadora que está en el puesto número 1, tiene una capacidad de procesamiento de 1.76 tera-flops (= 1.76x10&lt;sup&gt;12&lt;/sup&gt; operaciones de punto flotante por segundo = 1760000000000 operaciones de punto flotante por segundo).&lt;br /&gt;
&lt;br /&gt;
Cuenta con 224.162 CPU cores. Los procesadores que usa son                  AMD x86_64 Opteron Six Core de 2600 MHz.&lt;br /&gt;
&lt;br /&gt;
Pero más allá de cual sea la lista ahora, lo que más me llamó la atención fue la siguiente gráfica, con la proyección para los próximos años.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.top500.org/static/lists/2009/11/perfdevel/Projected_Performance_Development.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://www.top500.org/static/lists/2009/11/perfdevel/Projected_Performance_Development.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Tres cosas que me parece vale la pena destacar:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Es increible como se mantienen en una recta&lt;sup&gt;(1)&lt;/sup&gt; la suma de performance de las 500 de la lista, y también como se mantiene en una recta&lt;sup&gt;(1)&lt;/sup&gt; la performance de la número 500.&lt;/li&gt;
&lt;li&gt;La que hoy es número 500, hubiera sido la número 1 en el 2001, hace 8 años. &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Según la proyección, para junio de 2016 (6 años y medio), la que ahora es número 1 va a estar en el número 500.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;sup&gt;(1)&amp;nbsp; &lt;/sup&gt;Si bien en la gráfica se ve como una recta, tener en cuenta que es una escala logarítmica, por lo que la curva es en realidad exponencial...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-3756877159531835693?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/j8WLHqGLpBA/supercomputadoras.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_gG6tlx1eBKw/SwKQhbm4AvI/AAAAAAAABCE/kzK8otJDC_I/s72-c/top500.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/11/supercomputadoras.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-3874363185342315853</guid><pubDate>Fri, 13 Nov 2009 12:34:00 +0000</pubDate><atom:updated>2009-11-13T10:34:02.434-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">útiles</category><category domain="http://www.blogger.com/atom/ns#">google</category><title>Impresiones sobre Google Wave</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gG6tlx1eBKw/Sv1LiSAg98I/AAAAAAAABBk/fPWQ28j6O_Q/s1600-h/Google-Wave-logo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_gG6tlx1eBKw/Sv1LiSAg98I/AAAAAAAABBk/fPWQ28j6O_Q/s200/Google-Wave-logo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;Desde hace unos días tengo una cuenta en &lt;a href="http://wave.google.com/"&gt;Google Wave&lt;/a&gt;, con lo que pude hacer unas pruebas.&lt;br /&gt;
&lt;br /&gt;
Primero que nada, ¿qué es Wave? Según la &lt;a href="http://es.wikipedia.org/wiki/Google_Wave"&gt;Wikipedia&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;Google Wave es una herramienta en línea que &lt;b&gt;permite a sus usuarios comunicarse y colaborar en tiempo real&lt;/b&gt;. El proyecto fue anunciado por Google en la última conferencia Google I/O, el 28 de mayo de 2009. Es una aplicación web y una plataforma de computación &lt;b&gt;diseñada para unir los servicios de e-mail, mensajería instantánea, wiki, y redes sociales&lt;/b&gt;.&lt;br /&gt;
&lt;/blockquote&gt;Básicamente, es como un mail en el que tengo mensajes (waves), pero sobre los que se puede colaborar en tiempo real, como si fuera un chat, comentando y editando lo que otros escriben.&lt;br /&gt;
&lt;br /&gt;
Está interesante &lt;a href="http://www.enriquedans.com/2009/11/wave-tras-la-prueba-del-uso.html"&gt;el artículo de Enrique Dans&lt;/a&gt; al respecto, con el cual comparto algunas cosas:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;a simple vista, es un lindo chiche para hacre algunas pruebas&lt;/li&gt;
&lt;li&gt;puede ser una herramienta muy potente si realmente se le da el uso apropiado.&lt;/li&gt;
&lt;/ul&gt;Hay que tener en cuenta que la versión actual es un Preview, por lo que tampoco se debería poner nada crítico ahí sin respaldarlo.&lt;br /&gt;
&lt;br /&gt;
En mi caso, quise empezar con la documentación del &lt;a href="http://blog.marcoscrispino.com/2009/10/automatic-pattern-generator-lanzamiento.html"&gt;proyecto colaborativo&lt;/a&gt;, para poder trabajar sobre ella con el resto del equipo, y parece ser bastante útil. Lo dejamos de usar porque dio un problema y estuvimos a punto de perder todo lo que habíamos escrito (pensamos que lo habíamos perdido pero después se pudo recuperar...)&lt;br /&gt;
&lt;br /&gt;
La pricipal contra que le veo, al menos por el momento, es que representa tener otra bandeja de entrada a la cual tengo que ir para ver si hay algo nuevo. Ya son demasiadas: mail personal y de trabajo, Facebook, Twitter, Google Reader, y ahora Wave... En algún momento debería surgir algo que permite tener una sola bandeja de entrada para todas estas cosas (¿&lt;a href="https://mozillalabs.com/raindrop/"&gt;Mozilla Raindrop&lt;/a&gt;?)&lt;br /&gt;
&lt;br /&gt;
Como resumen, podría decir que es una tecnología que hay que tener en el radar. No creo que vaya a reemplazar a todas las demás formas de comunicación, pero van a haber casos en las que resulte la más adecuada.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-3874363185342315853?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/hE7pIsJVedI/impresiones-sobre-google-wave.html</link><author>noreply@blogger.com (Marcos Crispino)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_gG6tlx1eBKw/Sv1LiSAg98I/AAAAAAAABBk/fPWQ28j6O_Q/s72-c/Google-Wave-logo.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/11/impresiones-sobre-google-wave.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-480371801807271681</guid><pubDate>Tue, 27 Oct 2009 12:52:00 +0000</pubDate><atom:updated>2009-10-27T10:52:12.170-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">collaborative proyects</category><category domain="http://www.blogger.com/atom/ns#">genexus</category><title>Automatic Pattern Generator, lanzamiento del proyecto colaborativo</title><description>En una &lt;a href="http://blog.marcoscrispino.com/2009/10/automatic-pattern-generator-idea-para.html"&gt;nota anterior&lt;/a&gt;, comentaba una idea para presentar en los &lt;a href="http://www.gxtechnical.com/cp"&gt;Collaborative Projects 2.0&lt;/a&gt;, de hacer un generador de patterns basado en código que ya existe en una base de conocimiento.&lt;br /&gt;
&lt;br /&gt;
Por suerte en la nota había dicho que no lo iba a hacer... lo que demuestra una vez más que lo único constante es el cambio. Con &lt;a href="http://ealmeida.blogspot.com/"&gt;Enrique&lt;/a&gt; queríamos presentar algo, y decidimos presentar este proyecto.&lt;br /&gt;
&lt;br /&gt;
Desde ya damos la bienvenida a todos los que quieran sumarse al proyecto. Se necesitan desarrolladores, documentadores, testers, beta testers, etc. También se aceptan ideas y sugerencias.&lt;br /&gt;
&lt;br /&gt;
El primer paso ahora va a ser definir el alcance y hacer una primera iteración, con una versión que genere un pattern a partir de una instancia compuesta por un único procedimiento, lo más sencillo posible. Cuando eso esté pronto, vamos a tener más claro el panorama y podremos repartir tareas entre los interesados.&lt;br /&gt;
&lt;br /&gt;
En breve estaremos publicando el proyecto en el Wiki de la comunidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-480371801807271681?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/Szipq49NWSg/automatic-pattern-generator-lanzamiento.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">9</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/10/automatic-pattern-generator-lanzamiento.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-33066466.post-440056060285622914</guid><pubDate>Tue, 20 Oct 2009 12:12:00 +0000</pubDate><atom:updated>2009-10-20T11:35:09.065-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">open source</category><category domain="http://www.blogger.com/atom/ns#">collaborative proyects</category><category domain="http://www.blogger.com/atom/ns#">c#</category><category domain="http://www.blogger.com/atom/ns#">genexus</category><title>Neptuno.net Open Source</title><description>&lt;a href="http://www.concepto.com.uy/"&gt;Concepto&lt;/a&gt; acaba de hacer público el proyecto Neptuno.net, que consiste en una aplicación que permite ver en un árbol de llamadas los objetos que hacen commit, de forma de poder buscar problemas de integridad transaccional.&lt;br /&gt;
&lt;br /&gt;
Hay una descripción un poco más amplia &lt;a href="http://blog.marcoscrispino.com/2009/04/gxpublic-applets.html"&gt;en esta otra nota del blog&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
El proyecto está en Assembla, se puede obtener mediante SVN de &lt;a href="http://code.assembla.com/neptuno_net"&gt;http://code.assembla.com/neptuno_net&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Si alguien lo quiere probar, tiene que bajar el proyecto y hacer un Build. Yo lo tengo funcionando con Visual C# 2008 Express, con el .Net Framework 3.5.&lt;br /&gt;
&lt;br /&gt;
La idea es colaborar con otro proyecto en el marco de los Collaborative Proyects 2.0, planteado por Edgar Jimenez Demestri y titulado "Analizador de UTLs". Espero que Neptuno.net sirva como punto de partida.&lt;br /&gt;
&lt;br /&gt;
Quienes bajen el proyecto, tengan en cuenta que era un desarrollo interno, por lo que no se caracteriza por la prolijidad...&lt;br /&gt;
&lt;br /&gt;
Si alguien le quiere hacer alguna mejora, será bienvenida. Por el momento el único que puede hacer commits en este proyecto soy yo, así que si alguien quiere colaborar me debería mandar el código modificado para que yo lo suba.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Actualización&lt;/b&gt;:&amp;nbsp; Me olvidé de decir que solo funciona con GeneXus9.0...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33066466-440056060285622914?l=blog.marcoscrispino.com' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/mcrispino/~3/CIDZsauAb2E/neptunonet-open-source.html</link><author>noreply@blogger.com (Marcos Crispino)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.marcoscrispino.com/2009/10/neptunonet-open-source.html</feedburner:origLink></item></channel></rss>
