<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11642986</id><updated>2011-12-15T18:24:34.021+01:00</updated><category term='linux'/><category term='squeak'/><category term='olpc'/><category term='linex'/><category term='smalltalk'/><title type='text'>Blog de Diego Gómez Deck</title><subtitle type='html'>Cambalache: Un poco de todo.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>88</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11642986.post-1013651331100407438</id><published>2009-12-02T14:58:00.001+01:00</published><updated>2009-12-02T14:59:51.447+01:00</updated><title type='text'>Manifiesto en defensa de los derechos fundamentales en internet</title><content type='html'>&lt;div class="intro"&gt; Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;           &lt;div class="full"&gt;    1.- &lt;b&gt;Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos&lt;/b&gt;, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión. &lt;p&gt; 2.- &lt;b&gt;La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial&lt;/b&gt;. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web. &lt;/p&gt; &lt;p&gt; 3.- &lt;b&gt;La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español&lt;/b&gt;, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional. &lt;/p&gt; &lt;p&gt; 4.- &lt;b&gt;La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural&lt;/b&gt;. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes. &lt;/p&gt; &lt;p&gt; 5.- &lt;b&gt;Los autores&lt;/b&gt;, como todos los trabajadores, &lt;b&gt;tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades&lt;/b&gt; asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo. &lt;/p&gt; &lt;p&gt; 6.- Consideramos que &lt;b&gt;las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales&lt;/b&gt;, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir. &lt;/p&gt; &lt;p&gt; 7.- &lt;b&gt;Internet debe funcionar de forma libre y sin interferencias políticas&lt;/b&gt; auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre. &lt;/p&gt; &lt;p&gt; 8.- &lt;b&gt;Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España&lt;/b&gt;, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro. &lt;/p&gt; &lt;p&gt; 9.- &lt;b&gt;Proponemos una verdadera reforma del derecho de propiedad intelectual&lt;/b&gt; orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras. &lt;/p&gt; &lt;p&gt; 10.- &lt;b&gt;En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público&lt;/b&gt; y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.&lt;/p&gt;  Este manifiesto es obra de muchas manos, y propiedad de todos. Si te gusta, cópialo, pásalo, publícalo en tu weblog o haz lo que quieras con él.&lt;br /&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/11642986-1013651331100407438?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/1013651331100407438/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=1013651331100407438' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/1013651331100407438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/1013651331100407438'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2009/12/manifiesto-en-defensa-de-los-derechos.html' title='Manifiesto en defensa de los derechos fundamentales en internet'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-8453599843718767735</id><published>2007-04-28T09:54:00.000+02:00</published><updated>2007-04-28T09:58:55.513+02:00</updated><title type='text'>¡Ladran Sancho! Señal que cabalgamos...</title><content type='html'>¡Cómo me gusta que &lt;a href="http://en.wikipedia.org/wiki/Criticism_of_Microsoft"&gt;esta gente&lt;/a&gt; se ponga nerviosa!&lt;br /&gt;&lt;br /&gt;Véanlo ustedes mismos, en barrapunto: &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://barrapunto.com/article.pl?sid=07/04/27/1141253"&gt;Microsoft y Extremadura&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-8453599843718767735?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/8453599843718767735/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=8453599843718767735' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/8453599843718767735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/8453599843718767735'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2007/04/ladran-sancho-seal-que-cabalgamos.html' title='¡Ladran Sancho! Señal que cabalgamos...'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-4406488825434713406</id><published>2007-03-12T09:37:00.000+01:00</published><updated>2007-03-12T09:43:43.056+01:00</updated><title type='text'>Vídeo de la charla “Squeak en la OLPC” - Conferencia Internacional de Software Libre 3.0 (Badajoz, Febrero/2007)</title><content type='html'>Haciendo un &lt;a href="http://www.google.es/search?q=diego+%22gomez+deck%22"&gt;poco de egogoogling&lt;/a&gt; me encontré que, en el sitio &lt;a href="http://www.archive.org/"&gt;www.archive.org&lt;/a&gt;, hay un vídeo con licencia creative commons de mi última presentación, en la conferencia de software libre de Badajoz.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iDMF0x4pln0/RfUSUbmU7sI/AAAAAAAAAGg/vGWa3b0INaU/s1600-h/olpc1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_iDMF0x4pln0/RfUSUbmU7sI/AAAAAAAAAGg/vGWa3b0INaU/s400/olpc1.png" alt="" id="BLOGGER_PHOTO_ID_5040955500126334658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iDMF0x4pln0/RfUSUrmU7tI/AAAAAAAAAGo/k_GwB3WjBGI/s1600-h/olpc2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_iDMF0x4pln0/RfUSUrmU7tI/AAAAAAAAAGo/k_GwB3WjBGI/s400/olpc2.png" alt="" id="BLOGGER_PHOTO_ID_5040955504421301970" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Pueden bajar el vídeo desde esta página:&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://www.archive.org/details/FSWCOLPCSqueak"&gt;http://www.archive.org/details/FSWCOLPCSqueak&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;También podemos encontrar el audio de la &lt;a href="http://www-org.rtve.es/?go=111b735a516af85c54ba5009b84fd04cbd9cd6ea14231d5e5a5cf6c735b165568ae49e60ef3fd4161428f97083f9fa26"&gt;edición especial del programa de radio “Red Babel”&lt;/a&gt;, que se emite los sábados en RNE 3 (Radio Nacional de España 3); sobre Software Libre en general, donde compartí mesa con Richard Stallman, Marcelo Branco, Paco Huertas, etc.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Pueden bajar el audio de las 2 horas de programa desde acá:&lt;/p&gt;    &lt;p style="text-align: center;"&gt;&lt;a href="http://www.rtve.es/rne/r3/audios/prog/redbabel/red_20070210_a.mp3"&gt;http://www.rtve.es/rne/r3/audios/prog/redbabel/red_20070210_a.mp3&lt;/a&gt; &lt;/p&gt;&lt;div style="text-align: center;"&gt; &lt;/div&gt;&lt;p style="text-align: center;"&gt;&lt;a href="http://www.rtve.es/rne/r3/audios/prog/redbabel/red_20070210_b.mp3"&gt;http://www.rtve.es/rne/r3/audios/prog/redbabel/red_20070210_b.mp3&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;¡Qué lo disfruten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-4406488825434713406?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/4406488825434713406/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=4406488825434713406' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/4406488825434713406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/4406488825434713406'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2007/03/vdeo-de-la-charla-squeak-en-la-olpc.html' title='Vídeo de la charla “Squeak en la OLPC” - Conferencia Internacional de Software Libre 3.0 (Badajoz, Febrero/2007)'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_iDMF0x4pln0/RfUSUbmU7sI/AAAAAAAAAGg/vGWa3b0INaU/s72-c/olpc1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-5635708799878076085</id><published>2007-03-08T12:22:00.000+01:00</published><updated>2007-03-08T12:35:08.991+01:00</updated><title type='text'>Webcam, en Squeak, en la OLPC, a 20 cuadros por segundo</title><content type='html'>&lt;p style="margin-bottom: 0cm;" align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iDMF0x4pln0/Re_yyAKnT7I/AAAAAAAAAGQ/zKdXh6pIOd4/s1600-h/world.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_iDMF0x4pln0/Re_yyAKnT7I/AAAAAAAAAGQ/zKdXh6pIOd4/s400/world.png" alt="" id="BLOGGER_PHOTO_ID_5039513448902774706" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;Una cosa es hacer andar código viejo en la OLPC, y otra muy distinta es que ese código funcione de forma aceptable.   En el procesamiento de vídeo es, tal vez, uno de los objetivos más ambiciosos sobre la OLPC.  &lt;p style="margin-bottom: 0cm;"&gt;Imaginemos que tenemos que procesar 20 cuadros por segundo, y que la imagen mide 320x240 píxeles. Cada píxel está compuesto por 3 datos (la parte Roja, la parte Verde, y la parte Azul) que se denominan RGB (Red, Green, Blue).  Si tenemos que procesar cada punto de la imagen, tendremos que procesar 320x240 veces, por cada cuadro, las operaciones para la parte Roja, Verde y Azul.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;Para lograr tener 20 cuadros por segundo, con una imagen de 320x240, tendremos que realizar:&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-style: normal;" align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;320 &lt;/b&gt;&lt;span style=""&gt;&lt;i&gt;(ancho)&lt;/i&gt;&lt;/span&gt;&lt;b&gt; * 240 &lt;/b&gt;&lt;span style=""&gt;&lt;i&gt;(alto)&lt;/i&gt;&lt;/span&gt;&lt;b&gt; * 3 &lt;/b&gt;&lt;span style=""&gt;&lt;i&gt;(RGB)&lt;/i&gt;&lt;/span&gt;&lt;b&gt; * 20 &lt;/b&gt;&lt;span style=""&gt;&lt;i&gt;(cuadros/seg)&lt;/i&gt;&lt;/span&gt;&lt;b&gt; = 4.608.000 &lt;/b&gt;&lt;span style=""&gt;&lt;i&gt;(operaciones/seg)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;En un procesamiento como ese, la poca velocidad de la OLPC se hace notar.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;Bueno, el primer port del código Linux a la OLPC, fue prácticamente sin problemas &lt;span style="font-style: italic;"&gt;PERO&lt;/span&gt; la velocidad de procesamiento obtenida era de lástima.  Sólo procesaba 3 cuadros por segundo.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;Después de algunos cambios en el código (evitar aritmética de coma flotante, loop unrolling, uso de bitmaps de 16 bits en lugar de 32 bits, etc) logramos 20 cuadros por segundo.&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;Una cosa a tener en cuenta es que el modelo y la filosofía de Squeak imponen mayores requerimientos al código.  Dicho de otra forma: Procesar vídeo en Squeak no es SOLO mostrar un vídeo a pantalla completa, lo más rápido posible.  Si sólo hiciésemos eso, podríamos obtener los mismos 30 cuadros x segundo con una imagen de 640x480 pixeles que logran la mayoría de los programas de control de cámaras de vídeo.  Procesar vídeo en Squeak es integrar el vídeo como un  ciudadano de pleno derecho dentro del mundo de objetos 100% manipulables y programables.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;No sirve de nada poder ver vídeo si no podemos hacer nada con el.  En Squeak el vídeo puede ser manipulado como cualquier otro objeto (se puede rotar, mover, cambiar de tamaño, etc).  También puede ser programado desde guiones de eToys.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;Este es el vocabulario del objeto de vídeo:&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;" align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_iDMF0x4pln0/Re_yyAKnT8I/AAAAAAAAAGY/AEoy6iyxXYA/s1600-h/VocabularioVideoEnglish.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_iDMF0x4pln0/Re_yyAKnT8I/AAAAAAAAAGY/AEoy6iyxXYA/s400/VocabularioVideoEnglish.png" alt="" id="BLOGGER_PHOTO_ID_5039513448902774722" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;Con este vocabulario (y el vocabulario de los demás objetos Squeak) se pueden hacer algunos experimentos interesantes.... Por ejemplo:  Si hacemos &lt;a href="http://swiki.agro.uba.ar/small_land/170"&gt;una animación en Squeak, de las clásicas&lt;/a&gt;, pero si en lugar de llenar el Contenedor con dibujos hechos a mano, lo llenamos con 1 cuadro por segundo desde la webcam (usando la propiedad #lastFrame), obtendremos una animación que es un vídeo acelerado (como esos vídeo de crecimiento acelerado de las plantas que ponen en los canales de documentales, o una manzana que se pudre en 20 segundos, etc) de lo que esté capturando la Webcam.&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Lo más interesante de esta opción es que, el vídeo acelerado, es una producción del niño.  No usa la opción “mostrar vídeo acelerado” que hace todo por el, sino que tiene que enfrentarse a resolver el problema, usando conocimiento que ya tiene. Muy en la línea de Squeak.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Para terminar les dejo una pregunta:&lt;br /&gt;&lt;/div&gt;&lt;p style="margin-bottom: 0cm; font-style: italic; font-weight: bold; text-align: center;"&gt;¿Qué otros experimentos se podrán hacer con la Webcam y Squeak?&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-style: italic; font-weight: bold; text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-5635708799878076085?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/5635708799878076085/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=5635708799878076085' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/5635708799878076085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/5635708799878076085'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2007/03/webcam-en-squeak-en-la-olpc-20-cuadros.html' title='Webcam, en Squeak, en la OLPC, a 20 cuadros por segundo'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_iDMF0x4pln0/Re_yyAKnT7I/AAAAAAAAAGQ/zKdXh6pIOd4/s72-c/world.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-1269230623960586396</id><published>2007-01-03T15:39:00.000+01:00</published><updated>2007-01-03T17:12:45.033+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>Mis impresiones sobre la OLPC Prototipo BTest-1</title><content type='html'>De la misma forma en que &lt;a href="http://diegogomezdeck.blogspot.com/2006/11/fotos-de-un-prototipo-de-olpc-la.html"&gt;se adelantó Papá Noel&lt;/a&gt;, los Reyes me trajeron el &lt;a href="http://wiki.laptop.org/go/BTest-1_Release_Notes"&gt;“prototipo B1” de la OLPC&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wiki.laptop.org/images/e/e9/Drawing75c.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://wiki.laptop.org/images/e/e9/Drawing75c.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;   &lt;p style="margin-bottom: 0cm;"&gt;&lt;a href="http://wiki.laptop.org/images/e/e9/Drawing75c.jpg"&gt;&lt;/a&gt;&lt;br /&gt;Debemos recordar que el proyecto OLPC no es un proyecto tecnológico, sino que es un proyecto educativo.  Las diferentes decisiones que se fueron tomando, fueron siempre considerando que el objetivo es hacer una computa barata, portátil, fuerte y eficiente que será usada por chicos, para mejorar su educación, en lugares donde pueda ser difícil conseguir energía para las máquinas.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;Para explicar rápidamente que es una OLPC, podemos decir que es una notebook “pequeña” pero lo suficientemente “potente” para lograr un gran impacto en los procesos educativos.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;b&gt;Pequeña:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Para los pequeños. Es una  computadora pensada para ser usada por chicos.&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;¡Es verde!&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Esquinas redondeadas&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Manija para llevarla&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Tiene un joystick&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;El teclado es de goma, para que   se ensucie menos y soporte algo de agua.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Las antenas, cuando están   plegadas, protegen los conectores.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;No se puede abrir la computadora   sin abrir las antenas. Esto quiere decir que, por diseño del   hardware, todo el mundo siempre tendrá las antenas   levantadas... maximizando la posibilidad de que la red P2P   funcione.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;ul&gt;&lt;li value="1"&gt;&lt;p style="margin-bottom: 0cm;"&gt;Pequeña en Tamaño:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;pesa menos de 1.5Kg&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;el display mide 7.5”&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;las teclas son para el tamaño   de los dedos de los chicos&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;ul&gt;&lt;li value="1"&gt;&lt;p style="margin-bottom: 0cm;"&gt;Poco Consumo:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Uno de los lemas del diseño   es: “Más duración de la batería == Más   Utilidad”.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;El consumo es, a grosso modo,   1/10 del consumo de una notebook “normal”.    &lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;No hay partes móviles.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Display con poca superficie a   iluminar.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Diseño en el hardware que   permite el uso del display y de la placa inalámbrica con el   procesador suspendido.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Barata.&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;El objetivo es que cada unidad se   pueda vender en 100USD.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;El precio conseguido, hasta hoy,   es de 130USD.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;ul&gt;&lt;li value="1"&gt;&lt;p style="margin-bottom: 0cm;"&gt;Pequeña en  Capacidades:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Comparadas con las notebooks   comerciales que se venden hoy en día, son pequeñas en   capacidad. Aunque debemos recordar que el objetivo es que cada   unidad cueste sólo 100USD (un costo bastante menor al de las   notebooks actuales).    &lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;También debemos tener en   cuenta que se maximizó el ahorro de energía, así   que no se consideró poner un mega-cuadruple-super-cpu que   necesite un reactor nuclear para funcionar.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;b&gt;Potente:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Pantalla Dual Color/Blanco y  Negro, con resolución de 1200x900 (200dpi).&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;La pantalla puede ponerse desde   un modo de muy bajo consumo (Blanco y negro, con el backlight   apagado), hasta un modo muy cómodo (Color, con la   iluminación completa).&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;La pantalla puede funcionar con   el procesador suspendido. Permitiendo, mientras el chico está   sólo leyendo, el ahorro de energía.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;El display, en modo blanco y   negro y sin la luz, tiene muy buena visibilidad incluso con la luz   del sol.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Red inalámbrica con  capacidad P2P.&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;La placa inalámbrica puede   rutear paquetes mesh incluso con el procesador suspendido.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Multimedia&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;2 parlantes incluidos.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;1 micrófono&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Webcam&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Todo lo necesario para hacer   video-conferencias.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Extensible&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;3 puertos USB&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;1 lector de tarjetas SD-Card.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;1 conector para auriculares.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;1 conector para micrófono   (que, además, puede usarse como un puerto de conexión   de sensores baratos).&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Modo eBook. Se pliega el display  sobre el teclado.&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Cómodo para usar como   libro.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Cómodo para jugar.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Robusta&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;No tiene partes móviles.    ¡NO HACE RUIDO!&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Los conectores son del tipo más   fuerte posible.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;El teclado es de goma.&lt;/p&gt;   &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Se van a romper 500, de las 800 y   pico unidades B1 que se hicieron, para probarlas.&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:100%;"&gt;Todas las características en: &lt;/span&gt;&lt;a href="http://wiki.laptop.org/go/Hardware_specification"&gt;&lt;span style="font-size:100%;"&gt;http://wiki.laptop.org/go/Hardware_specification&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;   &lt;p style="margin-bottom: 0cm;"&gt;Y algunas fotos:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/completa-abierta.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://smalltalk.consultar.com/olpc/completa-abierta.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/completa-cerrada.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://smalltalk.consultar.com/olpc/completa-cerrada.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/conectores-1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://smalltalk.consultar.com/olpc/conectores-1.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/conectores-2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://smalltalk.consultar.com/olpc/conectores-2.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/metafoto.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://smalltalk.consultar.com/olpc/metafoto.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/completa-cerrada.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/teclado.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://smalltalk.consultar.com/olpc/teclado.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/pantalla-blanco-negro.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://smalltalk.consultar.com/olpc/pantalla-blanco-negro.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/pantalla-color.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://smalltalk.consultar.com/olpc/pantalla-color.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-1269230623960586396?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.laptop.org/go/BTest-1_Release_Notes' title='Mis impresiones sobre la OLPC Prototipo BTest-1'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/1269230623960586396/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=1269230623960586396' title='22 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/1269230623960586396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/1269230623960586396'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2007/01/mis-impresiones-sobre-la-olpc-prototipo.html' title='Mis impresiones sobre la OLPC Prototipo BTest-1'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-5808434752012401976</id><published>2006-12-21T10:54:00.000+01:00</published><updated>2006-12-21T10:56:38.844+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='linex'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Charla de Squeak en GUADEC (22/Mayo/2004) - Almendralejo, España</title><content type='html'>&lt;embed style="width: 400px; height: 326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=4868273594928635340&amp;amp;hl=es" flashvars=""&gt; &lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-5808434752012401976?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://video.google.es/videoplay?docid=4868273594928635340&amp;hl=es' title='Charla de Squeak en GUADEC (22/Mayo/2004) - Almendralejo, España'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/5808434752012401976/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=5808434752012401976' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/5808434752012401976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/5808434752012401976'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/12/charla-de-squeak-en-guadec-22mayo2004.html' title='Charla de Squeak en GUADEC (22/Mayo/2004) - Almendralejo, España'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-6086922878103008511</id><published>2006-12-20T17:35:00.000+01:00</published><updated>2006-12-20T17:44:40.184+01:00</updated><title type='text'>Conferencia Internacional de Software Libre 3.0</title><content type='html'>&lt;span style="font-family:Times New Roman,serif;"&gt;Los días 7, 8 y 9 de febrero de 2007, se celebrará la &lt;a href="http://www.freesoftwareworldconference.com/"&gt;Conferencia Internacional de Software Libre 3.0&lt;/a&gt;, &lt;a href="http://www.freesoftwareworldconference.com/?q=node/14"&gt;organizada en conjunto&lt;/a&gt; por los gobiernos regionales de la &lt;a href="http://www.juntaex.es/"&gt;Junta de Extremadura&lt;/a&gt; y la &lt;a href="http://www.juntadeandalucia.es/"&gt;Junta de Andalucía&lt;/a&gt;.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:Times New Roman,serif;"&gt;Estoy invitado a participar dentro de la &lt;b&gt;Mesa de Creadores de Conocimiento Libre&lt;/b&gt;, el día 7 de febrero, de 18:00 a 19:30Hs; donde mostraré las novedades relacionadas con Squeak ocurridas durante el último año. Seguramente mostraré un Squeak funcionando en un prototipo de la OLPC, así como también los desarrollos relacionados con la Web 2.0, y alguna cosita más...&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:Times New Roman,serif;"&gt;¡Están todos invitados!&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-6086922878103008511?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.freesoftwareworldconference.com/' title='Conferencia Internacional de Software Libre 3.0'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/6086922878103008511/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=6086922878103008511' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/6086922878103008511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/6086922878103008511'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/12/conferencia-internacional-de-software.html' title='Conferencia Internacional de Software Libre 3.0'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-116600868753513345</id><published>2006-12-13T12:10:00.000+01:00</published><updated>2006-12-17T22:47:25.590+01:00</updated><title type='text'>Video4Squeak funcionando en la OLPC</title><content type='html'>&lt;a href="http://diegogomezdeck.blogspot.com/2006/11/fotos-de-un-prototipo-de-olpc-la.html"&gt;Ya había comentado&lt;/a&gt; que estaba trabajando para el &lt;a href="http://wiki.laptop.org/go/Etoys"&gt;Squeak que vendrá instalado en las OLPC&lt;/a&gt; (las míticas notebooks de 100USD.&lt;p style="margin-bottom: 0cm;"&gt;Específicamente mi trabajo es lograr que el &lt;a href="http://minnow.cc.gatech.edu/squeak/3765"&gt;Video4Squeak&lt;/a&gt; (proyecto que yo ya tenía desarrollado para la imagen de Small-Land que usamos en Extremadura) funcione con la configuración de hardware que tienen las OLPC.&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;Sin más preámbulo, les dejo un screenshot del Video4Squeak funcionando en una OLPC (prototipo beta):&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wiki.laptop.org/images/0/0f/CameraInEtoys.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://wiki.laptop.org/images/0/0f/CameraInEtoys.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;  En la foto podemos ver a &lt;a href="http://croquetweak.blogspot.com/"&gt;Bert Freudenberg&lt;/a&gt; y a &lt;a href="http://d.hatena.ne.jp/squeaker/"&gt;Yoshiki Ohshima&lt;/a&gt;, dos de los hackers de &lt;a href="http://www.viewpointsresearch.org/"&gt;VPRI&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-116600868753513345?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.laptop.org/go/Image:CameraInEtoys.jpg' title='Video4Squeak funcionando en la OLPC'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/116600868753513345/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=116600868753513345' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116600868753513345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116600868753513345'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/12/video4squeak-funcionando-en-la-olpc.html' title='Video4Squeak funcionando en la OLPC'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-116427433224140678</id><published>2006-11-23T10:25:00.000+01:00</published><updated>2006-11-30T16:10:37.086+01:00</updated><title type='text'>Squeak, muy pronto, tendrá una licencia MIT</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }   A:link { text-decoration: underline }  --&gt;  &lt;/style&gt;  &lt;p style="margin-bottom: 0cm;"&gt;No son desconocidos los “problemas” de licencia de Squeak. Por otro lado, hace poco hablábamos que &lt;a href="http://diegogomezdeck.blogspot.com/2006/05/nueva-licencia-para-el-squeak-versin.html"&gt;Apple había acordado relicenciar el Squeak (versión 1.1) como APSL2&lt;/a&gt;.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;Poco después, supimos que Apple nuevamente había acordado relicenciar Squeak, y &lt;a href="http://laptop.media.mit.edu/laptopnews.nsf/latest/news"&gt;esta vez lo hizo con una licencia Apache 2&lt;/a&gt;.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;Ahora &lt;a href="http://www.viewpointsresearch.org/"&gt;Viewpoints Research Institute&lt;/a&gt; está encargándose de contactar a todos los autores de código incluido en Squeak después de la versión 1.1 para relicenciar todo el Squeak con una licencia MIT.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;Yo ya envíe, por correo normal y firmado en original, el acuerdo donde acepto relicenciar la parte que me corresponde.&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-116427433224140678?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/116427433224140678/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=116427433224140678' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116427433224140678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116427433224140678'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/11/squeak-muy-pronto-tendr-una-licencia.html' title='Squeak, muy pronto, tendrá una licencia MIT'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-116401843641128336</id><published>2006-11-20T11:20:00.000+01:00</published><updated>2006-11-20T11:31:15.066+01:00</updated><title type='text'>Squeak en Extremadura y la OLPC: Ejemplos contra las patentes de software.</title><content type='html'>&lt;p&gt;Hace algún tiempo que &lt;a href="http://diegogomezdeck.blogspot.com/2005/04/documental-sobre-squeak-en-extremadura.html"&gt;anunciábamos el vídeo&lt;/a&gt; que La Junta de Extremadura había producido sobre el uso de Squeak en la región.&lt;/p&gt;  &lt;p&gt;Este fin de semana &lt;a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-November/111462.html"&gt;me enteré&lt;/a&gt; de &lt;a href="http://www.groklaw.net/article.php?story=20061118091048997"&gt;esta nota&lt;/a&gt;:&lt;/p&gt;  &lt;p style="margin-left: 1.25cm;"&gt;&lt;a href="http://www.groklaw.net/article.php?story=20061118091048997"&gt;http://www.groklaw.net/article.php?story=20061118091048997&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;La nota no tiene desperdicios, pero me quedo con estos fragmentos:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;      &lt;style type="text/css"&gt;    &lt;/style&gt;   &lt;p style="margin-left: 1.25cm;"&gt;“&lt;i&gt;I enjoyed personally from the video the little girl who said Squeak introduced her to computers and she found out she likes them. Is that not what education is supposed to do for children?”&lt;/i&gt;&lt;/p&gt; &lt;p style="margin-left: 1.25cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-left: 1.25cm;"&gt;“&lt;i&gt;... so programmers can work to create masterpieces like Squeak that benefit society. &lt;/i&gt; &lt;/p&gt; &lt;p style="margin-left: 1.25cm;"&gt;&lt;i&gt;What a concept. Benefit society. ”&lt;/i&gt;&lt;/p&gt; &lt;p style="margin-left: 1.25cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-left: 1.25cm; page-break-before: always;"&gt;“&lt;i&gt;Please think it over, everyone, and decide just how much damage you are willing to let software patents do, just to benefit a few companies, who by the way made their billions at a time when there were no software patents to get in *their* way, and at the expense of everyone else on the planet with them. &lt;/i&gt; &lt;/p&gt; &lt;p style="margin-left: 1.25cm;"&gt;&lt;i&gt;And please look at the Squeak video and the children's faces as they talk about Squeak before you decide.”&lt;/i&gt;&lt;/p&gt;&lt;p style="margin-left: 1.25cm;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-116401843641128336?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.groklaw.net/article.php?story=20061118091048997' title='Squeak en Extremadura y la OLPC: Ejemplos contra las patentes de software.'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/116401843641128336/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=116401843641128336' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116401843641128336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116401843641128336'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/11/squeak-en-extremadura-y-la-olpc.html' title='Squeak en Extremadura y la OLPC: Ejemplos contra las patentes de software.'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-116349539238814999</id><published>2006-11-14T09:56:00.000+01:00</published><updated>2006-11-29T19:08:38.030+01:00</updated><title type='text'>Fotos de un prototipo de OLPC (la Laptop de 100 dólares)</title><content type='html'>Debido a que estoy colaborando con la versión &lt;a href="http://wiki.laptop.org/go/Etoys"&gt;Squeak que va a correr en la OLPC&lt;/a&gt; (estoy haciendo que el &lt;a href="http://minnow.cc.gatech.edu/squeak/3765"&gt;Video4Squeak&lt;/a&gt; funcione bien con los limitados recursos de la OLPC), me convertí en uno de los felices poseedores de una placa alpha de la OLPC.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/FSCN0290.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://smalltalk.consultar.com/olpc/FSCN0290.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Por ahora sólo logré levantar un build 91, y dejar funcionando todo (actualicé el &lt;a href="http://wiki.laptop.org/go/LinuxBIOS"&gt;bios&lt;/a&gt;, anda la &lt;a href="http://wiki.laptop.org/go/Wireless"&gt;red wireless&lt;/a&gt;, anda el X, anda el &lt;a href="http://wiki.laptop.org/go/Sugar"&gt;Sugar&lt;/a&gt;, etc).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/FSCN0288.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://smalltalk.consultar.com/olpc/FSCN0288.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/DSCN0296.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://smalltalk.consultar.com/olpc/DSCN0296.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/DSCN0277.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://smalltalk.consultar.com/olpc/DSCN0277.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/DSCN0280.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://smalltalk.consultar.com/olpc/DSCN0280.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/DSCN0297.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://smalltalk.consultar.com/olpc/DSCN0297.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/DSCN0311.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://smalltalk.consultar.com/olpc/DSCN0311.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://smalltalk.consultar.com/olpc/DSCN0312.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://smalltalk.consultar.com/olpc/DSCN0312.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Próximo paso: Instalar Squeak... stay tuned!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt; Ya hay fotos del prototipo "B" en &lt;a href="http://wiki.laptop.org/go/B1_Pictures"&gt;http://wiki.laptop.org/go/B1_Pictures&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wiki.laptop.org/images/e/ee/AP1_12.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://wiki.laptop.org/images/e/ee/AP1_12.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-116349539238814999?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://smalltalk.consultar.com/olpc/' title='Fotos de un prototipo de OLPC (la Laptop de 100 dólares)'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/116349539238814999/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=116349539238814999' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116349539238814999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116349539238814999'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/11/fotos-de-un-prototipo-de-olpc-la.html' title='Fotos de un prototipo de OLPC (la Laptop de 100 dólares)'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-116169329666011217</id><published>2006-10-24T14:31:00.000+02:00</published><updated>2006-10-24T14:35:15.380+02:00</updated><title type='text'>Web 2.0 en Smalltalk - Call for help!</title><content type='html'>&lt;p  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;Hola gente,&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;Hace algunos días les comentaba de los proyectos, relacionados con la web 2.0, que estoy desarrollando con Smalltalk.&lt;br /&gt;&lt;br /&gt;Estoy en un punto donde puedo decir que podemos lograr bastante más de los browsers (de internet), y los ejemplos que fui generando (SocialShopping, Unnamed, LiveWiki, etc) lo prueban.&lt;br /&gt;&lt;br /&gt;Hasta ahora fui desarrollando las herramientas conforme las necesite, así que el framework tiene un poquito de todo. Ese "poquito de todo" prueba que se pueden hacer muchas cosas, pero para que el framework se convierta en una herramienta posible debería hacer más que "un poquito" de todo.&lt;br /&gt;&lt;br /&gt;Para completarlo necesito ayuda.&lt;br /&gt;&lt;br /&gt;Hay bastante trabajo para hacer, desde traducir la documentación que estoy haciendo al Inglés, completar clases de “ayuda” (como Color, Rectangle, etc) y, sobre todo, completar en cantidad y funcionalidad los widgets.&lt;br /&gt;&lt;br /&gt;Para dar el primer empuje, hice algo que no suelo hacer: &lt;b&gt;Documentación&lt;/b&gt; ;-)&lt;/span&gt;&lt;/p&gt;  &lt;p  align="center" style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://smalltalk.consultar.com/wiki/"&gt;http://smalltalk.consultar.com/wiki/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Los proyectos en marcha son:&lt;/span&gt;&lt;/p&gt; &lt;ul  style="font-family:times new roman;"&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Asteroid&lt;/b&gt;:  Comet para Squeak.  Muy simple, no hay mucho más para  hacer acá.&lt;/span&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;ST2JS&lt;/b&gt;:  Traductor de código Smalltalk a Javascript.  En el  traductor en si no hay demasiado más para hacer, pero si hay  bastante en las clases de compatibilidad.&lt;/span&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;SWT&lt;/b&gt;:  Framework para hacer aplicaciones Web 2.0.  Usa los 2 proyectos  anteriores.   Implementa comunicación entre el navegador y el Smalltalk,  etc.&lt;/span&gt;&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;p  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;La documentación no está terminada todavía, pero (creo que) ya se ve bastante de las posibilidades.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;También cree una lista de correo, en google, para coordinar el trabajo y discutir sobre el futuro del proyecto:&lt;/span&gt;&lt;/p&gt;   &lt;p  align="center" style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://groups.google.es/group/web20-smalltalk"&gt;http://groups.google.es/group/web20-smalltalk&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:times new roman;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Espero que les guste y, que muchos, se animen a darme una mano.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-116169329666011217?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/116169329666011217/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=116169329666011217' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116169329666011217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/116169329666011217'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/10/web-20-en-smalltalk-call-for-help.html' title='Web 2.0 en Smalltalk - Call for help!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115943430399688746</id><published>2006-09-28T10:59:00.000+02:00</published><updated>2006-10-12T11:03:28.956+02:00</updated><title type='text'>StrongTalk – ¡Ahora la VM también es open source!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.strongtalk.org/images/logo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.strongtalk.org/images/logo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;Hace ya algunos días que Sun liberó la máquina  virtual de &lt;a href="http://www.strongtalk.org/"&gt;StrongTalk&lt;/a&gt;&lt;a href="http://www.strongtalk.org/"&gt;&lt;/a&gt;.&lt;/dt&gt;&lt;dt&gt; &lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Para los que no sepan que es StrongTalk, le cuento que  StrongTalk es la prueba (en realidad es la segunda prueba, la  primera es la máquina virtual del &lt;a href="http://research.sun.com/self/"&gt;Self&lt;/a&gt;)  de que los lenguajes dinámicos no tienen porque ser lentos.&lt;/dt&gt;&lt;dt&gt; &lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Para los nostálgicos: Pueden leer la accidentada (por  culpa del Java) &lt;a href="http://www.strongtalk.org/history.html"&gt;historia del StrongTalk&lt;/a&gt; &lt;a href="http://www.strongtalk.org/history.html"&gt;&lt;/a&gt;.&lt;/dt&gt;&lt;dt&gt; &lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Ya es hora de que nos dejemos de hablar de si un lenguaje es  rápido o no porque tiene (o no) un compilador a código  máquina o si corre sobre una máquina virtual.  Las  cosas son &lt;i&gt;un poquito&lt;/i&gt; más complicadas y el simple hecho  de tener o no un compilador a código máquina es sólo  una parte de la historia.&lt;/dt&gt;&lt;dt&gt; &lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Si no creen que lo que digo es verdad, tómense un  tiempito para leer los papers que están en::&lt;/dt&gt;&lt;dt&gt; &lt;br /&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;p align="center"&gt;&lt;a href="http://research.sun.com/self/compiler.html"&gt;http://research.sun.com/self/compiler.html&lt;/a&gt;&lt;/p&gt;&lt;p align="center"&gt; &lt;a href="http://www.strongtalk.org/documents.html"&gt;http://www.strongtalk.org/documents.html&lt;/a&gt;  &lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/dt&gt;&lt;dt&gt;&lt;p&gt;Por supuesto que esta noticia no es buena sólo para  los Smalltalkers, sino que las comunidades de Ruby y Python también  puede beneficiarse mucho si implementan, en sus respectivas máquinas  virtuales, las tecnologías que tiene la VM de StrongTalk. Miren las reacciones que produjo, esta noticia, en las comunidades de Ruby y Python:&lt;br /&gt;&lt;/p&gt;&lt;/dt&gt;&lt;dt style="text-align: center;"&gt;&lt;p&gt;&lt;a href="http://www.google.com/search?q=strongtalk+ruby"&gt;http://www.google.com/search?q=strongtalk+ruby&lt;/a&gt;&lt;/p&gt;&lt;/dt&gt;&lt;dt style="text-align: center;"&gt;&lt;p&gt;  &lt;a href="http://www.google.com/search?q=strongtalk+python"&gt;http://www.google.com/search?q=strongtalk+python&lt;/a&gt;&lt;/p&gt;&lt;/dt&gt;&lt;/dl&gt;&lt;br /&gt;UPDATE: &lt;a href="http://barrapunto.com/article.pl?sid=06/10/11/2239248"&gt;Cobertura en Barrapunto&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115943430399688746?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.strongtalk.org/' title='StrongTalk – ¡Ahora la VM también es open source!'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115943430399688746/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115943430399688746' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115943430399688746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115943430399688746'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/09/strongtalk-ahora-la-vm-tambin-es-open.html' title='StrongTalk – ¡Ahora la VM también es open source!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115935064802518069</id><published>2006-09-27T11:46:00.000+02:00</published><updated>2006-10-18T20:08:24.993+02:00</updated><title type='text'>Web 2.0 - Un nuevo medio: LiveWiki (Un mejor Wiki)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/LiveWiki1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/LiveWiki1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;Siguiendo con los ejemplos de &lt;a href="http://diegogomezdeck.blogspot.com/2006/09/web-20-un-nuevo-medio-social-shopping.html"&gt;posibles&lt;/a&gt; &lt;a href="http://diegogomezdeck.blogspot.com/2006/09/web-20-un-nuevo-medio-una-hoja-de.html"&gt;nuevos usos&lt;/a&gt; de la Web  2.0, ahora vamos a tratar de imaginar como se podrían mejorar  los wikis actuales, usando la colaboración que nos permite el  Web 2.0.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Les presento la primera versión de &lt;b&gt;LiveWiki&lt;/b&gt;.   &lt;b&gt;LiveWiki&lt;/b&gt; es un Wiki vivo (de ahí su nombre ;)).  Wiki  en el sentido de ser un sitio modificable por muchas personas (&lt;a href="http://es.wikipedia.org/wiki/Wiki"&gt;http://es.wikipedia.org/wiki/Wiki&lt;/a&gt;), y vivo en el sentido que le venimos dando a la palabra, en las  notas anteriores.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Para decirlo de otra forma: Nos olvidamos de tener que hacer  &lt;span style="font-style: italic;"&gt;“refrescar”&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;“recargar”&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;“reload”&lt;/span&gt; o &lt;span style="font-style: italic;"&gt;“refresh”&lt;/span&gt; de la  página para ver si cambió.  Cuando la página  cambia, todas las personas que estén viendo esa página  verán el cambio en el mismo momento en que ocurre.  De la  misma forma, todos los usuarios conectados pueden modificar el  contenido. Y, como en los ejemplos anteriores, el chat entre  usuarios conectados sirve para coordinar el trabajo.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Esta versión es todavía muy simple... pero ya hace  evidente las mejoras que pueden sufrir los wikis si logramos que estas  tecnologías se masifiquen.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Esta es una lista de cosas que NO hace esta versión de  LiveWiki, pero que pretendo incluirlas en las próximas  versiones:&lt;/dt&gt;&lt;/dl&gt; &lt;ul&gt;&lt;li&gt;Bloqueo pesimista con timeout para la edición.  Para  editar una página (o parte de ella), primero hay que obtener  un bloqueo.  Cuando alguien tiene un bloqueo sobre una parte, nadie  excepto el puede modificarlo, y nadie puede obtener un bloqueo hasta  que el lo suelte.&lt;/li&gt;&lt;li&gt;  Feedback visual del bloqueo: Los usuarios que NO tengan bloqueada la  página (o una parte de ella) verán que alguien lo  tiene bloqueado con un cambio de color de fondo.  Incluso podrían  ver quien lo tiene bloqueado, y molestarlo por el chat para que lo  suelte. ;-)&lt;/li&gt;&lt;li&gt;  Edición visual del contenido.  Esta versión usa una de  las sintaxis de wikis (específicamente usa la sintaxis del  Swiki).  La idea es hacer un editor visual (o adaptar alguno ya  hecho, como el TinyMCE &lt;a href="http://tinymce.moxiecode.com/"&gt;http://tinymce.moxiecode.com/&lt;/a&gt;  ).&lt;/li&gt;&lt;li&gt;  Reordenamiento visual del contenido.  Algo en la forma de  &lt;a href="http://tool-man.org/examples/edit-in-place.html"&gt;http://tool-man.org/examples/edit-in-place.html&lt;/a&gt;.  Hay que terminar de pensar como combinar eso con los bloqueos.&lt;/li&gt;&lt;li&gt;  Edición de parte del contenido. Con la finalidad de reducir  los conflictos de actualización, se podrá modificar  sólo una parte de la página mientras otros usuarios  pueden estar, a la vez, modificando otras partes.&lt;/li&gt;&lt;li&gt;  Etc.&lt;/li&gt;&lt;/ul&gt; &lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Y estás son algunas de las características  que SI están incluidas en esta versión:&lt;/dt&gt;&lt;/dl&gt; &lt;ul&gt;&lt;li&gt;Actualización en vivo de las páginas cuando alguna  página referenciada en un link cambia de nombre.&lt;/li&gt;&lt;li&gt;  Actualización en vivo de las páginas que tiene links a  páginas que todavía no están creadas, en el momento en que son creadas (el link a una pagina  no creada es distinto, visualmente, que un link a una página que  ya existe).&lt;/li&gt;&lt;li&gt;  Links de tipo “Incrustado”. Cuando hacemos un link de esta forma  *[Una Página]*, el contenido de la página de nombre  &lt;b&gt;”Una Página”&lt;/b&gt; será incrustado en la página  contenedora.  Lo mismo para un link del tipo *{Una Página}*,  pero en ese caso se incrusta el título de la página  (en lugar del contenido).&lt;/li&gt;&lt;li&gt;  Hay páginas Modificables y páginas No-Modificables  (como la página Pages, que muestra una lista con todas las  páginas creadas en el wiki).&lt;/li&gt;&lt;/ul&gt; &lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Y, para continuar con la auto-impuesta tradición, les  dejo un screencast que muestra algunas de las características  de LiveWiki.&lt;/dt&gt;&lt;/dl&gt;&lt;br /&gt;&lt;dl&gt;&lt;dt style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://www.consultar.com/trastero/LiveWiki1.htm"&gt;http://www.consultar.com/trastero/LiveWiki1.htm&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;&lt;/dl&gt;&lt;br /&gt;Como siempre, están &lt;a href="http://www.squeaksource.com/LiveWiki.html"&gt;todos los fuentes disponibles en SqueakSource&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115935064802518069?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115935064802518069/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115935064802518069' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115935064802518069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115935064802518069'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/09/web-20-un-nuevo-medio-livewiki-un.html' title='Web 2.0 - Un nuevo medio: LiveWiki (Un mejor Wiki)'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115865474781617267</id><published>2006-09-19T10:29:00.000+02:00</published><updated>2006-09-19T10:32:49.836+02:00</updated><title type='text'>Disponible Squeak eToys para la computadora de 100USD</title><content type='html'>&lt;dl&gt;&lt;dt&gt;Yoshiki &lt;a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-September/108672.html"&gt;anunció en la lista de Squeak&lt;/a&gt; la disponibilidad de la imagen de &lt;a href="http://wiki.laptop.org/go/Etoys"&gt;Squeak que se usará en la  laptops de 100USD&lt;/a&gt;.&lt;/dt&gt;&lt;dt&gt;  &lt;br /&gt; &lt;/dt&gt;&lt;dt&gt;Pide comentarios, sugerencias, reportes de errores, etc.&lt;/dt&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115865474781617267?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tinlizzie.org/olpc/' title='Disponible Squeak eToys para la computadora de 100USD'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115865474781617267/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115865474781617267' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115865474781617267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115865474781617267'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/09/disponible-squeak-etoys-para-la.html' title='Disponible Squeak eToys para la computadora de 100USD'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115805661873495665</id><published>2006-09-12T12:09:00.000+02:00</published><updated>2006-09-15T12:53:29.070+02:00</updated><title type='text'>Web 2.0 - Un nuevo medio: Una hoja de cálculo mejor</title><content type='html'>&lt;i&gt;Para ser franco, hace años que dejé de prestarle  atención a la interminable lista de nombres y acrónimos  fashion que genera nuestra industria.  Sin embargo, con la intención  de que la gente encuentre estas notas en google, hace varios posts  que estoy usando términos “modernos” como Web 2.0, Ajax y  esas cosas.&lt;/i&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Quiero seguir mostrándoles ejemplos de, por supuesto es  mi opinión (y para volcar mi opinión es que me puse un  blog), posibles buenos usos de la interactividad que nos permite el  Comet (oops, otra palabra fashion).&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Este ejemplo, también, pretende mostrar otra cosa: &lt;b&gt;¡Qué  feas y malas son las aplicaciones que estamos acostumbrados (o que  nos obligan) a usar!&lt;/b&gt;&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Hablemos un poco de las &lt;a href="http://es.wikipedia.org/wiki/Hoja_de_c%C3%A1lculo"&gt;hojas  de cálculo&lt;/a&gt;.  Las hojas de cálculo llevan años  sin evolucionar.  No me refiero a pequeños cambios, que los  vendedores hacen, para vendernos la versionActual+1, sino que me  refiero a &lt;b&gt;evolución&lt;/b&gt; (así, con letra grande).&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Hace unos meses me encontré con &lt;a href="http://en.wikipedia.org/wiki/Spreadsheet_2000"&gt;Spreadsheet&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Spreadsheet_2000"&gt;  2000&lt;/a&gt;.  Les aclaro que yo no soy usuario de Apple, y que nunca vi  ese producto andando.  Me enteré de su existencia por un  e-mail en la lista de Squeak.&lt;/dt&gt;&lt;/dl&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/0/0f/SS2000_working_sheet.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://upload.wikimedia.org/wikipedia/en/0/0f/SS2000_working_sheet.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;dl&gt;&lt;dt&gt;&lt;a href="http://www.google.es/search?q=spreadsheet+2000"&gt;Googleando&lt;/a&gt;  me encontré, también, con este página que  cuenta un poco más:&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;p align="center"&gt;&lt;a href="http://www.mactech.com/articles/mactech/Vol.13/13.04/Spreadsheet2000/index.html"&gt;http://www.mactech.com/articles/mactech/Vol.13/13.04/Spreadsheet2000/index.html&lt;/a&gt;&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Cuando me enteré de Spreadsheet 2000, no pude dejar de  sentir esa nostalgia de quien extraña un presente que no fue.   La verdad que usamos MUY, pero MUY mal las computadoras y nosotros  (los programadores) somos bastante responsables de esa situación.   La mayoría de las veces condenamos a los usuarios a  experiencias rígidas y, sobre todo, aburridas.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Como no tengo una Apple, y estaba jugando al Comet y esas cosas,  me decidí a hacer una especie de hoja de cálculo “en  serio” y colaborativa copiando la idea de las cajitas conectadas  y, agregando arriba, la colaboración que permite el Comet.&lt;/dt&gt;&lt;/dl&gt;Esto es lo que logré:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/U1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/U1.png" alt="" border="0" /&gt;&lt;/a&gt; &lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/U2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/U2.png" alt="" border="0" /&gt;&lt;/a&gt; &lt;/dt&gt;&lt;/dl&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/U3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/U3.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Y, también, lo pueden ver en este &lt;span style="font-weight: bold;"&gt;screencast&lt;/span&gt; (otra  palabra moderna más) donde se lo ve funcionando.&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://www.consultar.com/trastero/U1-Reducido.htm"&gt;http://www.consultar.com/trastero/U1-Reducido.htm&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115805661873495665?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115805661873495665/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115805661873495665' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115805661873495665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115805661873495665'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/09/web-20-un-nuevo-medio-una-hoja-de.html' title='Web 2.0 - Un nuevo medio: Una hoja de cálculo mejor'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115804483976489749</id><published>2006-09-12T09:04:00.000+02:00</published><updated>2006-09-12T09:08:50.340+02:00</updated><title type='text'>Fotos de Squeak corriendo en la computadora de 100USD</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://piumarta.com/photos/olpc/HPIM2737l.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://piumarta.com/photos/olpc/HPIM2737l.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Vía: &lt;a href="http://croquetweak.blogspot.com/2006/09/squeak-for-every-child.html"&gt;http://croquetweak.blogspot.com/2006/09/squeak-for-every-child.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Podemos ver unas fotos de Squeak corriendo sobre las &lt;a href="http://laptop.org/"&gt;míticas computadoras de 100USD&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://piumarta.com/photos/olpc/"&gt;http://piumarta.com/photos/olpc/&lt;/a&gt;&lt;/span&gt;&lt;br /&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/11642986-115804483976489749?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115804483976489749/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115804483976489749' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115804483976489749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115804483976489749'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/09/fotos-de-squeak-corriendo-en-la.html' title='Fotos de Squeak corriendo en la computadora de 100USD'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115804064056151006</id><published>2006-09-12T07:48:00.000+02:00</published><updated>2006-09-20T15:27:58.316+02:00</updated><title type='text'>Web 2.0 - Un nuevo medio: Social Shopping</title><content type='html'>"Ahhhhhh" (con la boca abierta que muestra hasta las entrañas),  ¡que sueño!&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Otra noche que Nahuel no me deja dormir.... oops, ¡ahora  se durmió! y yo, que me tomé 2 cafés  super-cargados, no puedo pegar un ojo.  Bueno, voy a escribir algo  en el blog para combatir la oscura soledad de las 5:30AM (y para  tratar de metabolizar el exceso de cafeína en mi cuerpo).&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;No es un secreto que me pasé los últimos tiempos  tratando de buscar los límites que nos imponen los browsers  de Internet actuales.&lt;/dt&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://diegogomezdeck.blogspot.com/2006/05/jugando-con-comet-en-squeak.html"&gt; Jugando con Comet en Squeak&lt;/a&gt;&lt;/li&gt;&lt;li&gt;  &lt;a href="http://diegogomezdeck.blogspot.com/2006/05/comet-y-canvas-morphic-en-el-browser.html"&gt; Comet y Canvas =&gt; Morphic en el browser&lt;/a&gt;&lt;/li&gt;&lt;li&gt;  &lt;a href="http://diegogomezdeck.blogspot.com/2006/07/st2js-traductor-de-smalltalk.html"&gt; ST2JS - Traductor de Smalltalk a JavaScript (Parte I)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;  &lt;a href="http://diegogomezdeck.blogspot.com/2006/07/st2js-traductor-de-smalltalk_28.html"&gt; ST2JS - Traductor de Smalltalk a JavaScript (Parte II)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;  &lt;a href="http://diegogomezdeck.blogspot.com/2006/08/swt-squeak-widgets-toolkit-algo-para.html"&gt; SWT (Squeak Widgets Toolkit) - Algo para mostrar&lt;/a&gt;&lt;/li&gt;&lt;li&gt;  &lt;a href="http://diegogomezdeck.blogspot.com/2006/09/swt-squeak-web-toolkit-algo-ms-para.html"&gt; SWT (Squeak Web Toolkit) - Algo más para mostrar: Ping-Pong &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Puedo resumir lo que aprendí en este tiempo con la  siguiente frase:&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;p align="center"&gt;“&lt;span style="font-size:100%;"&gt;&lt;b&gt;Los navegadores (de Internet) actuales son un asco,&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt; &lt;span style="font-size:100%;"&gt;&lt;b&gt;pero pueden ser usados de mejor forma a la actual”.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Hoy es posible, no sin un esfuerzo considerable, sacar mejor  provecho de los browsers.  El punto de inflexión, creo, es la  “masificación” de la nueva (bueno, de nueva nada)  tecnología Comet (&lt;a href="http://es.wikipedia.org/wiki/Comet"&gt;http://es.wikipedia.org/wiki/Comet&lt;/a&gt;).   Para ser sinceros, “nueva” y “tecnología” son 2  palabras que no hacen justicia... a lo mejor podríamos decir:  “viejo” “hack” y estaríamos más cerca de  describir lo que es Comet.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;De cualquier forma (con hacks y todo) hoy podemos hacer  aplicaciones web donde, por fin, no todo es request/response  (&lt;a href="http://es.wikipedia.org/wiki/Hypertext_Transfer_Protocol"&gt;http://es.wikipedia.org/wiki/Hypertext_Transfer_Protocol&lt;/a&gt;).&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Ahora, usando el hack^H^H^H^H^H^H^Hla tecnología Comet,  podemos crear aplicaciones colaborativas.  Ya es hora (en realidad  ya lleva años siendo hora) que empecemos a buscar las  verdaderas bondades de estar todos en red.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Hoy les quiero mostrar una de las pruebas que estuve haciendo:  &lt;b&gt;Social-Shopping&lt;/b&gt;.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Social-Shopping es uno de los ejemplos incluidos en el SWT.   Básicamente, Social-Shopping, es un &lt;span style="font-style: italic;"&gt;simple&lt;/span&gt; carrito de  compras colaborativo.  Más de 1 persona (puede ser más  de 1 comprador, o compradores y vendedor, o compradores y asesores,  etc) pueden interactuar, a través de Internet, en un único  proceso de compra.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Social-Shopping, por ahora, luce así:&lt;/dt&gt;&lt;dd&gt;&lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/SocialShopping.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/400/SocialShopping.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;p align="center"&gt;&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Sí, ya se... hablo de un “nuevo medio” y pongo un  super-estático PNG.  Mejor, les dejo un screencast donde se  ve mejor la idea:&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;/dl&gt; &lt;p align="center"&gt;&lt;a href="http://www.consultar.com/trastero/SocialShopping1.htm"&gt;&lt;b&gt;&lt;span style="font-size:100%;"&gt;http://www.consultar.com/trastero/SocialShopping1.htm&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Tengo algunos ejemplitos más en el tintero... pero no se  los quiero muestrar todos juntos, para mantener la atención alta. ;-)&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115804064056151006?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115804064056151006/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115804064056151006' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115804064056151006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115804064056151006'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/09/web-20-un-nuevo-medio-social-shopping.html' title='Web 2.0 - Un nuevo medio: Social Shopping'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115799144355269236</id><published>2006-09-11T18:12:00.000+02:00</published><updated>2006-09-11T18:19:10.526+02:00</updated><title type='text'>SWT (Squeak Web Toolkit) - Algo más para mostrar: Ping-Pong</title><content type='html'>&lt;dt&gt;Las cosas van tomando su fomar y ahora el framework (SWT) nos permite hacer algunos ejemplos divertidos. Les voy a mostrar uno de los ejemplos incluidos en SWT: Ping Pong.&lt;/dt&gt; &lt;dt&gt;&lt;br /&gt;&lt;/dt&gt; &lt;dt&gt;El ejemplo Ping-Pong es, según creo, el caso más simple de uso del SWT que, a su vez, muestra las características interesantes del framework.&lt;/dt&gt; &lt;dt&gt;&lt;br /&gt;&lt;/dt&gt; &lt;dt&gt;Uhhh... cuanta introducción... mejor vamos directamente al grano.&lt;/dt&gt; &lt;dt&gt;&lt;br /&gt;&lt;/dt&gt; &lt;dt&gt;Para utilizar el framework empezamos creando 2 clases: &lt;span style="font-weight: bold;"&gt;SWTPingPongClientApplication&lt;/span&gt; y &lt;span style="font-weight: bold;"&gt;SWTPingPongServerApplication&lt;/span&gt;.&lt;/dt&gt; &lt;dt&gt;&lt;br /&gt;&lt;/dt&gt; &lt;dt&gt;La primera (&lt;span style="font-weight: bold;"&gt;SWTPingPongClientApplication&lt;/span&gt;) es subclase de &lt;span style="font-weight: bold;"&gt;SWTClientApplication&lt;/span&gt;. La segunda (&lt;span style="font-weight: bold;"&gt;SWTPingPongServerApplication&lt;/span&gt;) es subclase de &lt;span style="font-weight: bold;"&gt;SWTServerApplication&lt;/span&gt;.&lt;/dt&gt; &lt;dt&gt;&lt;br /&gt;&lt;/dt&gt; &lt;dt&gt;Según el SWT, una "aplicación" está partida entre su parte Client y su parte Server.&lt;/dt&gt; &lt;dt&gt;&lt;/dt&gt; &lt;dt&gt;La parte Client (en nuestro ejemplo: &lt;span style="font-weight: bold;"&gt;SWTPingPongClientApplication&lt;/span&gt;) se traduce a código Javascript (usando el ST2JS) y se ejecuta en el browser de Internet. Por otro lado, la parte Server (&lt;span style="font-weight: bold;"&gt;SWTPingPongServerApplication&lt;/span&gt;) se ejecuta en el Squeak.&lt;/dt&gt; &lt;dt&gt;&lt;br /&gt;&lt;/dt&gt; &lt;dt&gt;Por cada browser (de Internet) conectado, tendremos un par de instancias (la Server y la Client) que se mantienen "unidas" por el framework.&lt;/dt&gt; &lt;dt&gt;&lt;br /&gt;&lt;/dt&gt; &lt;dt&gt;Cuando estamos en el Client, podemos enviar mensajes a la parte Server de la siguiente forma:&lt;/dt&gt;&lt;br /&gt;&lt;table style="background-color: rgb(255, 255, 204); width: 80%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;serverSide&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;foo&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;&lt;br /&gt;De forma análoga, cuando estamos en el Server podemos enviar mensajes a la parte Client de la siguiente forma: &lt;dl&gt;&lt;dt&gt; &lt;/dt&gt;&lt;table style="background-color: rgb(255, 255, 204); width: 80%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;clientSide&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;bar&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;&lt;/dl&gt;&lt;br /&gt;La parte Client, al enviarle el mensaje &lt;span style="font-weight: bold;"&gt;#serverSide&lt;/span&gt;, nos devuelve un Proxy que reenvía los mensajes al Squeak usando JSON-RPC. Por otro lado, la parte Server, cuando le envíamos el mensaje &lt;span style="font-weight: bold;"&gt;#clientSide&lt;/span&gt; nos devuelve un Proxy que reenvía los mensajes recibidos, al Cliente, usando la conexión Comet. &lt;dl&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;Con esto ya sabemos lo suficiente para ver el código del ejemplo Ping-Pong.&lt;/dt&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;dt&gt;La parte Client de nuestro ejemplo (&lt;span style="font-weight: bold;"&gt;SWTPingPongClientApplication&lt;/span&gt;) tiene sólo 2 métodos, veamos el primero:&lt;/dt&gt;&lt;br /&gt;&lt;table style="background-color: rgb(255, 255, 204); width: 90%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;initializeWidgets&lt;/b&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#007f00;"&gt;&lt;b&gt;"Initialize the receiver's widgets"&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;:=&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;rootWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTHeader&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;level:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'Ping Pong'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTButton&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;caption:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'ping server'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onClick:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#007f00;"&gt;[&lt;/span&gt;&lt;span style="color:#000000;"&gt;:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;serverSide&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;ping&lt;/span&gt;&lt;span style="color:#007f00;"&gt;]&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;dt&gt;Allí vemos como se crean 2 widgets: Un Header y un Button. Si, lo sé... no es nada espectacular... pero lo interesante está dentro del evento #onClick del botón:&lt;/dt&gt;&lt;/dl&gt;  &lt;dl&gt;&lt;dt&gt; &lt;table style="background-color: rgb(255, 255, 204); width: 80%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;serverSide&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;ping&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/dt&gt;&lt;dt&gt; &lt;p&gt;Cuando hagamos click sobre el botón, el mensaje &lt;span style="font-weight: bold;"&gt;#ping&lt;/span&gt; se evaluará, ¡pero del lado del servidor!. Veamos entonces la implementación de #ping en el Server (&lt;span style="font-weight: bold;"&gt;SWTPingPongServerApplication&lt;/span&gt;).&lt;/p&gt; &lt;/dt&gt;&lt;dt&gt;&lt;/dt&gt;&lt;dt&gt; &lt;table style="background-color: rgb(255, 255, 204); width: 80%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;ping&lt;/b&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;Transcript&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;show:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'ping!'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;cr&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;clientSide&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;pong&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/dt&gt;&lt;dt&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;/dt&gt;&lt;dt&gt; &lt;p&gt;Este método, además de mostrar algo en el Transcript, devuelve el "favor" a su contraparte Client en la última línea.&lt;/p&gt; &lt;/dt&gt;&lt;dt&gt; &lt;p&gt;Ahora, para terminar, veamos la implementación de #pong en lado Client (&lt;span style="font-weight: bold;"&gt;SWTPingPongClientApplication&lt;/span&gt;).&lt;/p&gt; &lt;/dt&gt;&lt;dt&gt; &lt;table style="background-color: rgb(255, 255, 204); width: 80%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;pong&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;^&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;inform:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'pong!'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/dt&gt;&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;Si les gustó, miren &lt;a href="http://www.consultar.com/trastero/PP1-reducido.htm"&gt;este Screencast&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115799144355269236?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115799144355269236/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115799144355269236' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115799144355269236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115799144355269236'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/09/swt-squeak-web-toolkit-algo-ms-para.html' title='SWT (Squeak Web Toolkit) - Algo más para mostrar: Ping-Pong'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115687869499508790</id><published>2006-08-29T21:07:00.000+02:00</published><updated>2006-08-29T21:11:35.066+02:00</updated><title type='text'>SWT (Squeak Widgets Toolkit) - Algo para mostrar</title><content type='html'>Después de unos (pocos (muy pocos)) días de vacaciones, volví al trabajo con más fuerzas y, para probarlo, les muestro en que estado está el desarrollo del &lt;a href="http://diegogomezdeck.blogspot.com/2006/07/st2js-traductor-de-smalltalk.html"&gt;LiveWiki que prometí hacer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt; Usando el JS2JS, ahora estoy desarrollando un juego de widgets para los navegadores de Internet. Esta primera versión es muy simple, pero ya tiene lo suficiente para ver la idea completa: Se escribe código Smalltalk y se ejecuta en los navegadores de internet (previa conversión ST &gt; JS). Pueden descargar la &lt;a href="http://www.squeaksource.com/SWT.html"&gt;versión actual en SqueakSource&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt; Esto es un método, de la clase SWTExampleApplication, que crea unos simples (y aburridos) textos.&lt;br /&gt;&lt;br /&gt; &lt;table style="background-color: rgb(255, 255, 204); width: 90%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt;    &lt;tbody&gt;      &lt;tr&gt;        &lt;td&gt;&lt;b&gt;SWTExampleApplication&gt;&gt;&lt;/b&gt;&lt;b&gt;creat&lt;/b&gt;&lt;b&gt;eSimpleTexts&lt;/b&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt;       &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;:=&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;rootWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addHorizontalRule&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTHeader&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;level:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'Simple texts'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTText&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'some plain text. bla, bla, bla, bla, bla.'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTText&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'text in red'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;lastWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;color:&lt;/span&gt;&lt;span style="color:#000000;"&gt;       &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;red&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTText&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'text in blue/green'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;lastWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;color:&lt;/span&gt;&lt;span style="color:#000000;"&gt;       &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;blue&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;backgroundColor:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;green&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addBreak&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;/span&gt;&lt;/td&gt;      &lt;/tr&gt;    &lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;&lt;br /&gt; El método que está a continuación muestra como es el manejo de eventos. Se ve claramente el uso de los bloques de Smalltalk (que se mapean a funciones de JS):&lt;br /&gt;&lt;br /&gt; &lt;table style="background-color: rgb(255, 255, 204); width: 90%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt;    &lt;tbody&gt;      &lt;tr&gt;        &lt;td&gt;&lt;b&gt;SWTExampleApplication&gt;&gt;&lt;/b&gt;&lt;b&gt;createButtons&lt;/b&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt;       &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;button&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;:=&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;rootWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addHorizontalRule&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTHeader&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;level:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'Buttons'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTButton&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;caption:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'inspect event'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onClick:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#007f00;"&gt;[&lt;/span&gt;&lt;span style="color:#000000;"&gt;:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;inspect&lt;/span&gt;&lt;span style="color:#007f00;"&gt;]&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTButton&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;caption:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'inspect root panel'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onClick:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#007f00;"&gt;[&lt;/span&gt;&lt;span style="color:#000000;"&gt;:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;inspect&lt;/span&gt;&lt;span style="color:#007f00;"&gt;]&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;button&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;:=&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTButton&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;caption:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'button with several event handlers'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;button&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onClick:&lt;/span&gt;&lt;span style="color:#000000;"&gt; [:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;inspect&lt;/span&gt;&lt;span style="color:#000000;"&gt;].&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;button&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onClick:&lt;/span&gt;&lt;span style="color:#000000;"&gt; [:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;inform:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'2st handler: '&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;asString&lt;/span&gt;&lt;span style="color:#000000;"&gt;].&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;button&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onClick:&lt;/span&gt;&lt;span style="color:#000000;"&gt; [:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;inform:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'3rd handler: '&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;asString&lt;/span&gt;&lt;span style="color:#000000;"&gt;].&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;button&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;color:&lt;/span&gt;&lt;span style="color:#000000;"&gt;       &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;blue&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;backgroundColor:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;blue&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;muchLighter&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;button&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onFocus:&lt;/span&gt;&lt;span style="color:#000000;"&gt; [:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;source&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;color:&lt;/span&gt;&lt;span style="color:#000000;"&gt;       &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;red&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;backgroundColor:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;red&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;muchLighter&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;     ].&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;button&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onBlur:&lt;/span&gt;&lt;span style="color:#000000;"&gt; [:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;source&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;color:&lt;/span&gt;&lt;span style="color:#000000;"&gt;       &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;blue&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;backgroundColor:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;blue&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;muchLighter&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;     ].&lt;br /&gt;      &lt;br /&gt;       &lt;/span&gt;&lt;/td&gt;      &lt;/tr&gt;    &lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si algo tiene de interesante esta primera versión es que ya estoy jugando con los widgets "Edit In Place" (Modificar en el Lugar) que usaré para la modificación en vivo del LiveWiki.  Este es el método que crea algunos textos "EditInPlace" y, también, crea un botón para crear más textos editables.&lt;br /&gt;&lt;br /&gt; &lt;table style="background-color: rgb(255, 255, 204); width: 90%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="10" cellspacing="0"&gt;   &lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;b&gt;SWTExampleApplication&gt;&gt;&lt;/b&gt;&lt;b&gt;createEditableTexts&lt;/b&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;:=&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;rootWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addHorizontalRule&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTHeader&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;level:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'Edit-In-Place texts'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTButton&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;caption:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'add a new edit-in-place text'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;onClick:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#007f00;"&gt;[&lt;/span&gt;&lt;span style="color:#000000;"&gt;:&lt;/span&gt;&lt;span style="color:#007f7f;"&gt;&lt;i&gt;event&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f0000;"&gt;&lt;b&gt;self&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addNewEditInPlaceText&lt;/span&gt;&lt;span style="color:#007f00;"&gt;]&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;lastWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;backgroundColor:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;yellow&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;muchLighter&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addBreak&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTEditInPlaceText&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'One edit-in-place text, click on me to edit'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addBreak&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTEditInPlaceText&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'Another edit-in-place text (with background color), double click on me to edit'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;lastWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;editOnDblClick&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;backgroundColor:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;blue&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;muchLighter&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addBreak&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTEditInPlaceText&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'Just another edit-in-place text (with background color), move mouse over me to edit'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;lastWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;editOnMouseOver&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;backgroundColor:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;red&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;muchLighter&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addBreak&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;      &lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addWidget:&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;SWTEditInPlaceText&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;contents:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;b&gt;&lt;span style="font-size:-1;"&gt;'And just another edit-in-place text (with background color), move mouse over me to edit'&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;lastWidget&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;editOnMouseOver&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;backgroundColor:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#ea00ea;"&gt;&lt;b&gt;S2SColor&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;green&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;muchLighter&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#6b6b6b;"&gt;&lt;i&gt;root&lt;/i&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;addBreak&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;       &lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;&lt;br /&gt; Para los bagos de siempre (que no quieren instalar nada en sus Squeaks) les subí un &lt;a href="http://www.consultar.com/trastero/SWT%20Example%20Application.htm"&gt;HTML 100% autónomo que incluye todo el código Javascript generado desde Smalltalk&lt;/a&gt; (126Kb).&lt;br /&gt;&lt;br /&gt;Los próximos pasos, en el desarrollo, es integrar los widgets con el &lt;a href="http://diegogomezdeck.blogspot.com/2006/05/jugando-con-comet-en-squeak.html"&gt;Asteroid&lt;/a&gt; (Implementación de Comet para Squeak) para poder implementar un &lt;a href="http://en.wikipedia.org/wiki/Observer_pattern"&gt;Observer Pattern&lt;/a&gt; (aka un &lt;a href="http://heim.ifi.uio.no/%7Etrygver/themes/mvc/mvc-index.html"&gt;MVC&lt;/a&gt;) distribuido entre el Squeak y los navegadores de Internet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115687869499508790?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.squeaksource.com/SWT.html' title='SWT (Squeak Widgets Toolkit) - Algo para mostrar'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115687869499508790/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115687869499508790' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115687869499508790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115687869499508790'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/08/swt-squeak-widgets-toolkit-algo-para.html' title='SWT (Squeak Widgets Toolkit) - Algo para mostrar'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115686069176569413</id><published>2006-08-29T16:08:00.000+02:00</published><updated>2006-08-29T16:11:31.776+02:00</updated><title type='text'>Proyecto LinEx presentado ante la ONU</title><content type='html'>Sí, ante la &lt;a href="http://www.un.org/spanish/"&gt;ONU&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ver más información en &lt;a href="http://naumaquia.extreblog.com/200608295754_gnuLinEx-en-Nueva-York-en-la-sede-de-la-ONU.html"&gt;el blog de Jesús Rubio&lt;/a&gt;.&lt;br /&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115686069176569413?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://naumaquia.extreblog.com/200608295754_gnuLinEx-en-Nueva-York-en-la-sede-de-la-ONU.html' title='Proyecto LinEx presentado ante la ONU'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115686069176569413/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115686069176569413' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115686069176569413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115686069176569413'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/08/proyecto-linex-presentado-ante-la-onu.html' title='Proyecto LinEx presentado ante la ONU'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115684332481002787</id><published>2006-08-29T11:13:00.000+02:00</published><updated>2006-08-29T11:22:04.936+02:00</updated><title type='text'>La computadora se usa mal, ¡pero NO sólo en el aula!</title><content type='html'>Tuve la suerte de participar, por segunda vez, en &lt;a href="http://www.unia.es/nuevo_inf_academica/Ver_cursos_unia_detalle.asp?codcurso=18/B_2005"&gt;uno de los cursos de veranos&lt;/a&gt; organizados por la &lt;a href="http://www.unia.es/"&gt;Universidad Internacional de Andalucía&lt;/a&gt;. El curso fue organizado de forma impecable por &lt;a href="http://nti.uji.es/%7Ejordi/"&gt;Jordi Adell&lt;/a&gt;.  Lamenté no poder grabar en video mi intervención, ya que es una de las pocas veces que tengo suficiente tiempo para mostrar la presentación completa.&lt;br /&gt;&lt;br /&gt;No se bien porqué, el evento está muy cubierto por periodistas de diferentes medios (Además del curso de 3 horas, dí 3 reportajes a diferentes medios).  Uno de los medios era &lt;a href="http://www.europapress.es/"&gt;Europa Press&lt;/a&gt;.  La &lt;a href="http://www.europapress.es/europa2003/noticia.aspx?cod=20060825135331&amp;tabID=1&amp;amp;ch=235"&gt;cobertura de Europa Press&lt;/a&gt; fue reproducida por diferentes medios (&lt;a href="http://www.extremaduraaldia.com/tecnologia/el_director_del_proyecto_squeak_dice_que_el_uso_que_se_da_al_ordenador_en_las_aulas_no_es_el_correcto.html"&gt;Extremadura al Día&lt;/a&gt;, &lt;a href="http://www.evidalia.com/diarioweb/noticia3508s3.html"&gt;Evidalia&lt;/a&gt;, &lt;a href="http://www.elperiodicoextremadura.com/noticias/noticia.asp?pkid=256145"&gt;El Periódico de Extremadura&lt;/a&gt;, &lt;a href="http://www.diariogranada.com/noticia.php?id=35538&amp;PHPSESSID=79604973babdf5d0797a5d4655f78a20"&gt;Diario Granada&lt;/a&gt;, etc).&lt;br /&gt;&lt;br /&gt;A modo del juego "Teléfono Descompuesto" (o, en España, "Teléfono Roto"), la transcripción de la entrevista no es exacta al 100%.&lt;br /&gt;&lt;br /&gt;Cuando yo dije que las computadoras no se están utilizando bien, no me refería solamente al uso que se les da en el aula.  Me refería al uso que se les da en general, dentro o fuera del aula. Por supuesto que tampoco dije nada sobre que una región u otra den mejor o peor uso de los ordenadores (tal como &lt;a href="http://www.elperiodicoextremadura.com/noticias/noticia.asp?pkid=256145"&gt;sostiene el Periódico de Extremadura&lt;/a&gt; , o &lt;a href="http://www.redextremadura.com/noticias/noticia.asp?pkid=256145"&gt;La Red de Extremadura&lt;/a&gt; en el titular de la notas).&lt;br /&gt;&lt;br /&gt;Lo que dije es lo que digo siempre en mis charlas: Las computadoras están siendo usadas (mayoritariamente) como si fuese un medio de expresión antiguo. La observación no es exclusiva del uso que se les da, a las computadoras, en el aula ni (todavía mucho menos) sobre el uso que se da por regiones.&lt;br /&gt;&lt;br /&gt;Si les interesa conocer más en detalle mi opinión, puede leer el capítulo de introducción del libro "&lt;a href="http://diegogomezdeck.blogspot.com/2005/08/squeak-un-mundo-para-aprender.html"&gt;Squeak: Un Mundo para Aprender&lt;/a&gt;".  La versión HTML del capítulo está en:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://www.consultar.com/DiegoGomezDeck/papers/Squeak%20-%20Un%20mundo%20para%20aprender/"&gt;http://www.consultar.com/DiegoGomezDeck/papers/Squeak - Un mundo para aprender/&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/11642986-115684332481002787?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.consultar.com/DiegoGomezDeck/papers/Squeak%20-%20Un%20mundo%20para%20aprender/' title='La computadora se usa mal, ¡pero NO sólo en el aula!'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115684332481002787/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115684332481002787' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115684332481002787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115684332481002787'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/08/la-computadora-se-usa-mal-pero-no-slo.html' title='La computadora se usa mal, ¡pero NO sólo en el aula!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115563736101348374</id><published>2006-08-15T12:18:00.000+02:00</published><updated>2006-08-15T12:22:41.026+02:00</updated><title type='text'>¡La lista de correo de Small-Land ha resucitado!</title><content type='html'>¡La &lt;a href="http://groups.yahoo.com/group/small_land/"&gt;lista de correo de Small-Land&lt;/a&gt; ha resucitado!&lt;br /&gt;&lt;br /&gt;No se si es debido al proyecto de la computadora de 100USD, en el cual Argentina es parte.  O si es debido al caluroso verano en Europa.&lt;br /&gt;&lt;br /&gt;La cuestión es que la lista está teniendo más movimiento... pero, sobre todo, lo importante es que ¡ahora son los profesores/maestros los que hablan!&lt;br /&gt;&lt;br /&gt;Les dejo un link a un correo muy interesante publicado hoy:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://groups.yahoo.com/group/small_land/message/1650"&gt;http://groups.yahoo.com/group/small_land/message/1650&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/11642986-115563736101348374?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://groups.yahoo.com/group/small_land/' title='¡La lista de correo de Small-Land ha resucitado!'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115563736101348374/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115563736101348374' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115563736101348374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115563736101348374'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/08/la-lista-de-correo-de-small-land-ha.html' title='¡La lista de correo de Small-Land ha resucitado!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115409423536668397</id><published>2006-07-28T15:31:00.000+02:00</published><updated>2006-08-09T03:38:34.480+02:00</updated><title type='text'>ST2JS - Traductor de Smalltalk a JavaScript (Parte II)</title><content type='html'>¡Se va la segunda!&lt;br /&gt;&lt;br /&gt;Ayer, después de publicar &lt;a href="http://diegogomezdeck.blogspot.com/2006/07/st2js-traductor-de-smalltalk.html"&gt;la primera parte de esta serie&lt;/a&gt;, logré "terminar" (¿se termina alguna ves de desarrollar el software?) una versión del paquete lo suficientemente completa y estable como para ejecutar un Test-Runner en un browser de internet, desde código JavaScript, completamente generado desde clases Smalltalk.&lt;br /&gt;&lt;br /&gt;Para los más valientes publiqué, tanto en &lt;a href="http://map.squeak.org/package/11637941-682d-4ce3-bd4c-ba67afef47b5"&gt;SqueakMap&lt;/a&gt; como en &lt;a href="http://www.squeaksource.com/ST2JS.html"&gt;SqueakSource&lt;/a&gt;, un paquete &lt;a href="http://minnow.cc.gatech.edu/squeak/1287"&gt;Monticello &lt;/a&gt;que funciona tanto en la &lt;a href="http://minnow.cc.gatech.edu/squeak/1287"&gt;versión 3.8&lt;/a&gt; como en la &lt;a href="http://ftp.squeak.org/3.9beta/Squeak3.9b-7046.zip"&gt;3.9beta&lt;/a&gt; de Squeak.  Al instalar el paquete se abrirán 2 Workspaces con algo de información sobre como probar el paquete.&lt;br /&gt;&lt;br /&gt;Quizás lo más interesante de ver sea el &lt;b&gt;St2jS - TestRunner&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/St2jS%20-%20Test%20Runner.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/St2jS%20-%20Test%20Runner.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;El &lt;b&gt;St2jS - TestRunner&lt;/b&gt; es, como su nombre indica, un TestRunner de un framework de &lt;a href="http://es.wikipedia.org/wiki/Prueba_unitaria"&gt;UnitTesting&lt;/a&gt;. Lo particular de este TestRunner es que está completamente escrito en Smallltalk, y funciona completamente del lado del browser de internet.  Además de los tests (que se ven en verde), se incluyen un conjunto de clases con objetos "de base" (Object, Boolean, Point, WriteStream, etc).&lt;br /&gt;&lt;br /&gt;La misma herramienta nos permite ver los segmentos de código generado con las opciones: &lt;tt&gt;&lt;b&gt;browse all&lt;/b&gt;&lt;/tt&gt; (muestra todo el código JS generado, en un sólo archivo), &lt;tt&gt;&lt;b&gt;browse library&lt;/b&gt;&lt;/tt&gt; (muestra el código generado correspondiente a las implementaciones de &lt;tt&gt;#jsLibrarySource&lt;/tt&gt;), &lt;tt&gt;&lt;b&gt;browse class:&lt;/b&gt;&lt;/tt&gt; (muestra el código de una clase completa) y &lt;tt&gt;&lt;b&gt;browse &lt;/b&gt;&lt;/tt&gt;(muestra el fuente del método test correspondiente).&lt;br /&gt;&lt;br /&gt;También podemos re-ejecutar los tests del lado del browser de internet con las opciones &lt;tt&gt;&lt;b&gt;run all&lt;/b&gt;&lt;/tt&gt; (ejecuta todos los tests del lado del browser de internet) y &lt;tt&gt;&lt;b&gt;run&lt;/b&gt;&lt;/tt&gt; (ejecuta el test correspondiente en el browser de internet).&lt;br /&gt;&lt;br /&gt;Y, también, podemos (desde el browser de internet) disparar funcionalidades del lado del Squeak con las opciones &lt;tt&gt;&lt;b&gt;squeak: run &lt;/b&gt;&lt;/tt&gt;(ejecuta el método test en Squeak) y &lt;tt&gt;&lt;b&gt;squeak: browse &lt;/b&gt;&lt;/tt&gt;(abre el browser de clases, en Squeak, apuntando al método test).&lt;br /&gt;&lt;br /&gt;Otra funcionalidad ya implementada, y necesaria para cualquier programador que se digne de ser un Smalltalker, es el &lt;b&gt;Inspector&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/Inspector1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/Inspector1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para obtener un inspector, hay que descomentar la última sentencia del método  &lt;tt&gt;S2SBaseTestCase&gt;&gt;testInspect &lt;/tt&gt;y recargar el browser de internet. El mismo inspector nos permite abrir otros inspectores para las partes del objeto inspeccionado.  En este caso, si presionamos el botón [inspect] que está a la derecha del punto, obtenemos:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/Inspector2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/Inspector2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;¡Continuará!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE: &lt;/span&gt;Para los que no quieran quieran perder tiempo instalando nada, les dejo un HTML, con todo el código JS incluido, que debiera funcionar en cualquier navegador.  Viendo el fuente del documento se puede ver el código generado.&lt;span style="font-weight: bold;"&gt; &lt;a href="http://minnow.cc.gatech.edu/squeak/uploads/5851/St2jS%20-%20Test%20Runner.html"&gt;St2jS - Test Runner.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;UPDATE 2: &lt;/span&gt;Una versión más mueva del HTML independiente: &lt;a href="http://minnow.cc.gatech.edu/squeak/uploads/5860/St2jS%20-%20Test%20Runner.html"&gt;St2jS - Test Runner.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115409423536668397?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.squeaksource.com/ST2JS.html' title='ST2JS - Traductor de Smalltalk a JavaScript (Parte II)'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115409423536668397/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115409423536668397' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115409423536668397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115409423536668397'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/07/st2js-traductor-de-smalltalk_28.html' title='ST2JS - Traductor de Smalltalk a JavaScript (Parte II)'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115398895585783231</id><published>2006-07-27T10:22:00.000+02:00</published><updated>2006-07-27T14:21:48.800+02:00</updated><title type='text'>ST2JS - Traductor de Smalltalk a JavaScript (Parte I)</title><content type='html'>Hace tiempo que no publico nada en el blog, pero eso no fue debido a que estuve de vacaciones.  Lo que ocurre es que sigo muy ocupado investigando sobre las posibilidades que brindan los navegadores de Internet actuales.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt; &lt;b&gt;&lt;i&gt;Live&lt;/i&gt;&lt;/b&gt;&lt;b&gt;-Wiki&lt;/b&gt; &lt;/h4&gt; Para publicar los resultados de la investigación estoy haciendo un &lt;i&gt;Live&lt;/i&gt;-Wiki.  El &lt;i&gt;Live&lt;/i&gt;-Wiki será &lt;a href="http://es.wikipedia.org/wiki/Wiki"&gt;Wiki&lt;/a&gt; sin modo edición, donde se se modificará el documento directamente (ver &lt;a href="http://tool-man.org/examples/edit-in-place.html"&gt;EditInPlace&lt;/a&gt;).  Los cambios hechos en las páginas del wiki, serán enviadas al instante (usando &lt;a href="http://es.wikipedia.org/wiki/Comet"&gt;Comet&lt;/a&gt;) a todos los usuarios conectados al wiki (y viendo esa página).  También habrá un chat para los usuarios conectados a la página.  Iré contando más del &lt;i&gt;Live&lt;/i&gt;-Wiki conforme vaya avanzando en el desarrollo.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt; &lt;b&gt;JavaScript&lt;/b&gt; &lt;/h4&gt; Para sacar beneficio de las prestaciones que ofrecen los navegadores de internet actuales es necesario escribir una buena cantidad de código &lt;a href="http://es.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt;.  El JavaScript es un &lt;a href="http://javascript.crockford.com/javascript.html"&gt;lindo lenguajecito&lt;/a&gt; con algunos conceptos de objetos y funcionales que lenguajes supuestamente serios ni sueñan en tratar de proveer. Por otro lado, es un lenguaje basado en prototipos (no en clases) que permite jugar con &lt;a href="http://mckoss.com/jscript/object.htm"&gt;diferentes&lt;/a&gt; &lt;a href="http://www.crockford.com/javascript/inheritance.html"&gt;políticas&lt;/a&gt; de &lt;a href="http://www.crockford.com/javascript/prototypal.html"&gt;herencia&lt;/a&gt;.  Las funciones son, como corresponde, objetos y esto permite encapsular comportamiento de una forma similar a los bloques de Smalltalk.  Para mejorar el panorama, las funciones en JavaScript son verdaderos &lt;a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29"&gt;block-closures&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;ST2JS - &lt;/i&gt;&lt;/b&gt;&lt;b&gt;Traductor de Smalltalk a JavaScript&lt;/b&gt;&lt;h4&gt; &lt;/h4&gt; Las características de JavaScript mencionadas anteriormente, usadas con picardía, permiten hacer un traductor de Smalltalk a JavaScript que respete toda la semántica del Smalltalk.&lt;br /&gt;&lt;br /&gt;La semántica de las metaclases de Smalltalk podría lograrse utilizando un modelo similar al explicado en el paper "&lt;a href="http://research.sun.com/self/papers/smalltalk.pdf"&gt;self includes: Smalltalk&lt;/a&gt;" (de &lt;a href="http://research.sun.com/people/mario/"&gt;Mario Wolczko&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Los bloques de Smalltalk se traducen más o menos directamente a funciones de JS.  Sólo hay que considerar 2 diferencias: el &lt;b&gt;&lt;tt&gt;this&lt;/tt&gt;&lt;/b&gt;/&lt;b&gt;&lt;tt&gt;self&lt;/tt&gt;&lt;/b&gt; y la diferencia entre el &lt;b&gt;&lt;tt&gt;return&lt;/tt&gt;&lt;/b&gt;/&lt;b&gt;&lt;tt&gt;^&lt;/tt&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;En Smalltalk, la pseudovariable &lt;b&gt;&lt;tt&gt;self&lt;/tt&gt;&lt;/b&gt; apunta al receptor del método donde se evalúa el bloque. En cambio, en JS, la pseudovariable &lt;b&gt;&lt;tt&gt;this&lt;/tt&gt;&lt;/b&gt; apunta al objeto función.  Como las funciones de JS son verdaderos block-closures, este problema se resuelve fácilmente de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ccffcc" border="1" cellpadding="10" cellspacing="0" width="80%"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;h4&gt; &lt;b&gt;En Smalltalk:&lt;/b&gt; &lt;/h4&gt;  &lt;b&gt;SampleClass&gt;&gt;foo&lt;/b&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;self&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;collection&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;do:&lt;/span&gt;&lt;span style="color:#000000;"&gt;[:&lt;/span&gt;&lt;i&gt;&lt;span style="color:#007f7f;"&gt;each&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;span style="color:#007f7f;"&gt;each&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f4c00;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;ifTrue:&lt;/span&gt;&lt;span style="color:#007f00;"&gt;[&lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;self&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;bar:&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;1&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#007f00;"&gt;]&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;].&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ccffcc" border="1" cellpadding="10" cellspacing="0" width="80%"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;h4&gt; &lt;b&gt;En JavaScript:&lt;/b&gt; &lt;/h4&gt;  &lt;span style="font-family: courier new;"&gt;SampleClass.prototype.foo = function() {&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;color:#000000;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;i style="font-family: courier new;"&gt;&lt;span style="color:#339966;"&gt;/* En este punto, this y self son lo mismo: El receptor del mensaje que activó el método */&lt;/span&gt;&lt;/i&gt;&lt;br /&gt; &lt;span style="font-family: courier new;color:#000000;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;var self = this;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;color:#000000;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;self.collection().do_(function(each) {&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;color:#000000;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;if (each = 2) {&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;color:#000000;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;self.bar_(1); &lt;/span&gt;&lt;i style="font-family: courier new;"&gt;&lt;span style="color:#339966;"&gt;/* En este punto, this apunta a la función y no al receptor. Por eso usamos la variable self apoyándonos en los true-block-closures de JS */&lt;/span&gt;&lt;/i&gt;&lt;br /&gt; &lt;span style="font-family: courier new;color:#000000;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;color:#000000;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;});&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;}&lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;La otra diferencia requiere un poco más de "magia" para resolverlo.  El punto es que en Smalltalk, el &lt;b&gt;&lt;tt&gt;^&lt;/tt&gt;&lt;/b&gt; usado dentro de un bloque, hace terminar no sólo la evaluación del bloque, sino también del método donde se activó el bloque.  En cambio, en JS, el &lt;b&gt;&lt;tt&gt;return&lt;/tt&gt;&lt;/b&gt; sólo sale de la función (es decir de 1 sólo nivel).&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ccffcc" border="1" cellpadding="10" cellspacing="0" width="80%"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;h4&gt; &lt;b&gt;En Smalltalk:&lt;/b&gt; &lt;/h4&gt;  &lt;b&gt;SampleClass&gt;&gt;bar&lt;/b&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;self&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;collection&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;do:&lt;/span&gt;&lt;span style="color:#000000;"&gt;[:&lt;/span&gt;&lt;i&gt;&lt;span style="color:#007f7f;"&gt;each&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;|&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;span style="color:#007f7f;"&gt;each&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f4c00;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;2&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;ifTrue:&lt;/span&gt;&lt;span style="color:#007f00;"&gt;[&lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;^&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;self&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#7f4c00;"&gt;bar&lt;/span&gt;&lt;span style="color:#007f00;"&gt;]&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;].&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ccffcc" border="1" cellpadding="10" cellspacing="0" width="80%"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;h4&gt; &lt;b&gt;En JavaScript:&lt;/b&gt; &lt;/h4&gt;  &lt;tt&gt;SampleClass.prototype.bar = function() {&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;var self = this;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;try {&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;self.collection().do_(function(each) {&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;if (each = 2) {&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;throw new ReturnValue(self.bar_()); &lt;/tt&gt;&lt;tt&gt;&lt;i&gt;&lt;span style="color:#339966;"&gt;/* La excepción viajará hasta el catch(), es decir hasta el método */&lt;/span&gt;&lt;/i&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;});&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;catch (err) {&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;if (err.constructor == ReturnValue) {&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;return err.value;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;else {&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;throw err;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;return self;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;}&lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115398895585783231?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.squeaksource.com/ST2JS.html' title='ST2JS - Traductor de Smalltalk a JavaScript (Parte I)'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115398895585783231/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115398895585783231' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115398895585783231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115398895585783231'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/07/st2js-traductor-de-smalltalk.html' title='ST2JS - Traductor de Smalltalk a JavaScript (Parte I)'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-115156428864687843</id><published>2006-06-29T08:58:00.000+02:00</published><updated>2006-06-29T09:01:51.526+02:00</updated><title type='text'>Retorno a Dynabook</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://swiki.agro.uba.ar/small_land/uploads/63/alan_kay180.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://swiki.agro.uba.ar/small_land/uploads/63/alan_kay180.jpg" alt="" border="0" /&gt;&lt;/a&gt;Gracias al trabajo de Máximo Prudencio, hemos incorporado al &lt;a href="http://swiki.agro.uba.ar/small_land/"&gt;Swiki de Small-Land&lt;/a&gt; la traducción al Castellano del artículo "&lt;a href="http://www.squeakland.org/school/HTML/essays/dynabook_revisited.htm"&gt;The Dynabook Revisited&lt;/a&gt;" (originalmente en Inglés).&lt;br /&gt;&lt;br /&gt;Pueden encontrar el artículo traducido en:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;b&gt;&lt;a href="http://swiki.agro.uba.ar/small_land/243"&gt;http://swiki.agro.uba.ar/small_land/243&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;¡Qué lo disfruten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-115156428864687843?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://swiki.agro.uba.ar/small_land/243' title='Retorno a Dynabook'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/115156428864687843/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=115156428864687843' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115156428864687843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/115156428864687843'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/06/retorno-dynabook.html' title='Retorno a Dynabook'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-114849723566375831</id><published>2006-05-24T21:00:00.000+02:00</published><updated>2006-05-26T12:11:49.363+02:00</updated><title type='text'>Nueva licencia para el Squeak (versión 1.1)</title><content type='html'>Ufff, &lt;a href="http://diegogomezdeck.blogspot.com/2006/05/squeaknos-squeak-es-un-sistema.html"&gt;otro&lt;/a&gt; de los sufrimientos que padecemos los que hacemos tareas de difusión sobre Squeak es hablar de la licencia de Squeak... que si es open, que si es Open (con la O mayúscula), que si no es nada...&lt;br /&gt;&lt;br /&gt;Bueno, parece que ese tema está en vías de resolverse.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.viewpointsresearch.org/"&gt;Viewpoints Research Institute&lt;/a&gt;, la organización sin fines de lucro presidida por &lt;a href="http://en.wikipedia.org/wiki/Alan_Kay"&gt;Alan Kay&lt;/a&gt; (¿Todavía hace falta aclarar quien es Alan Kay?), logró - no sin un esfuerzo considerable - que Apple publique la última versión hecha por ellos con la licencia &lt;a href="http://www.opensource.apple.com/apsl/2.0.txt"&gt;APSL2&lt;/a&gt; (Apple Public Source Licence versión 2).  Esta licencia está aceptada tanto por la &lt;a href="http://www.opensource.org/licenses/apsl-2.0.php"&gt;OSI&lt;/a&gt; (Open Source Initiative) como por la &lt;a href="http://www.gnu.org/philosophy/apsl.html"&gt;FSF&lt;/a&gt; (Free Software Foundation).&lt;br /&gt;&lt;br /&gt;Cabe aclarar que la versión liberada es 1.1 (la última desarrollada en Apple antes que el grupo de desarrollo partiera hacía Disney).&lt;br /&gt;&lt;br /&gt;Ahora, en la comunidad de Squeak, tenemos que decidir que se hace con los miles de cambios que ocurrieron desde aquella versión.&lt;br /&gt;&lt;br /&gt;Más allá de las dificultades que podrían venirnos, es la mejor noticia relacionada con la licencia en años.&lt;br /&gt;&lt;br /&gt;¡Si seguimos así ya no voy a tener sufrimientos en las charlas!  ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-114849723566375831?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/114849723566375831/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=114849723566375831' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114849723566375831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114849723566375831'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/05/nueva-licencia-para-el-squeak-versin.html' title='Nueva licencia para el Squeak (versión 1.1)'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-114829193126671871</id><published>2006-05-22T11:58:00.000+02:00</published><updated>2006-05-22T20:59:02.620+02:00</updated><title type='text'>Comet y Canvas =&gt; Morphic en el browser</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/CometCanvas.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/400/CometCanvas.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sigo hackeando con Squeak (&lt;i&gt;¿qué más podría yo hacer? =o)&lt;/i&gt;) investigando hasta donde nos dejan llegar los browsers de Internet actuales.&lt;br /&gt;&lt;br /&gt;Primero lo más fácil de explicar: El &lt;a href="http://minnow.cc.gatech.edu/squeak/uploads/5851/asteroids.htm"&gt;ejemplo anterior (Comet Widgets)&lt;/a&gt; ahora funciona en &lt;a href="http://es.wikipedia.org/wiki/Konqueror"&gt;Konqueror&lt;/a&gt;/&lt;a href="http://es.wikipedia.org/wiki/Safari_%28navegador%29"&gt;Safari&lt;/a&gt; (además de &lt;a href="http://es.wikipedia.org/wiki/Firefox"&gt;Firefox&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Internet_Explorer"&gt;IE&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Segundo: Un mundo Morphic en el navegador.&lt;br /&gt;&lt;br /&gt;Hace un tiempo &lt;a href="http://es.wikipedia.org/wiki/Apple_Computer"&gt;Apple&lt;/a&gt; introdujo en escena un nuevo tag de HTML, el &lt;tt&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29"&gt;CANVAS&lt;/a&gt;&lt;/b&gt;&lt;/tt&gt;.  Este tag crea un área de dibujo accesible desde &lt;a href="http://es.wikipedia.org/wiki/Javascript"&gt;JavaScript&lt;/a&gt;.  Este tag pronto llegó a muchos otros navegadores (claro está que el IE no está entre esos) y hoy funciona en Firefox, Konqueror/Safari y (dicen que) en &lt;a href="http://es.wikipedia.org/wiki/Opera_%28navegador%29"&gt;Opera&lt;/a&gt;.  Para el IE, la gente de google hizo una &lt;a href="http://excanvas.sourceforge.net/"&gt;librería que simula al Canvas&lt;/a&gt; usando no se que extensión propietaria de &lt;a href="http://en.wikipedia.org/wiki/Microsoft"&gt;M$&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;El ejemplo usa un tag Canvas para dibujar, en el navegador, un mundo Morphic.  Funciona bastante rápido ya que sólo se envía el JavaScript de los rectángulos que cambiaron.&lt;br /&gt;&lt;br /&gt;Para descargarlo, busquen la versión 2 del "&lt;a href="http://map.squeak.org/package/b33c680e-5f7e-41e3-98b9-d84324fa2587"&gt;Asteroid (a small Comet)&lt;/a&gt;" en el &lt;a href="http://minnow.cc.gatech.edu/Squeak/2726"&gt;SqueakMap&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Lo próximo será que los eventos del mouse lleguen al servidor Squeak y se inyecten en el mundo morphic.  &lt;b&gt;&lt;i&gt;STAY TUNED!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;UPDATE: &lt;/b&gt;&lt;a href="http://homepage.mac.com/inextenso/asteroid2.mov"&gt;Nuevo screencast&lt;/a&gt;. Vía &lt;a href="http://blogs.inextenso.com/seaside/blog/learning/5c99379e-e9a5-11da-a8c7-000d935fad1c"&gt;Learning Seaside&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-114829193126671871?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/114829193126671871/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=114829193126671871' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114829193126671871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114829193126671871'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/05/comet-y-canvas-morphic-en-el-browser.html' title='Comet y Canvas =&gt; Morphic en el browser'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-114802927009028659</id><published>2006-05-19T11:01:00.000+02:00</published><updated>2006-06-24T04:01:37.630+02:00</updated><title type='text'>SqueakNOS: Squeak ES un Sistema Operativo</title><content type='html'>Uno de los retos que tenemos, los que hacemos alg&amp;#250;n trabajo de difusi&amp;#243;n sobre Squeak/Smalltalk, es convencer a la audiencia que Squeak es, en realidad, una propuesta de como debieran ser los sistemas operativos.&lt;BR&gt; &lt;BR&gt; Rara es la vez que, al decir eso, alguien del p&amp;#250;blico no pregunte si Squeak depende o no de otro sistema operativo. Y al contestar que las versiones actuales si dependen de otro SO, el desconcierto es mayor todav&amp;#237;a.&lt;BR&gt; &lt;BR&gt; Bueno, lo que les voy a mostrar ahora es un proyecto que, con suerte, crear&amp;#225; m&amp;#225;s desconcierto &lt;B&gt;;-)&lt;/B&gt;&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;B&gt;&lt;TT&gt;&lt;FONT SIZE="4"&gt;SqueakNOS = Squeak No Operative System&lt;/FONT&gt;&lt;/TT&gt;&lt;/B&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; &lt;A HREF="http://minnow.cc.gatech.edu/squeak/1762"&gt;SqueakNOS&lt;/A&gt; es un proyecto que llevaba algunos a&amp;#241;os sin actividad, pero &lt;A HREF="http://people.squeakfoundation.org/article/59.html"&gt;de repente apareci&amp;#243; la noticia&lt;/A&gt; que el grupo que lo estaba haciendo se decidi&amp;#243; a seguirlo.... mejor dicho: se decidieron a re-hacerlo desde cero.&lt;BR&gt; &lt;BR&gt; &amp;#191;Qu&amp;#233; es SqueakNOS? Pues es exactamente eso: Un Squeak que NO necesita de otro sistema operativo para correr.&amp;nbsp; SqueakNOS provee, o proveer&amp;#225;, todo lo necesario para el manejo del hardware.&lt;BR&gt; &lt;BR&gt; &amp;#191;No lo creen?, no importa... b&amp;#225;jense la imagen ISO y pru&amp;#233;benlo ustedes mismos:&lt;BR&gt; &lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;A HREF="http://sourceforge.net/projects/squeaknos"&gt;http://sourceforge.net/projects/squeaknos&lt;/A&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;BR&gt; &amp;#161;Y ahora todos a bootear Squeak! &lt;B&gt;=o)&lt;/B&gt;&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; &lt;B&gt;&lt;TT&gt;&amp;lt;reflexi&amp;#243;n barata&amp;gt;&lt;/TT&gt;&lt;/B&gt;&lt;BR&gt; &lt;BLOCKQUOTE&gt;     Me pregunto: &amp;#191;C&amp;#243;mo ser&amp;#225;, por ejemplo, un Stack de TCP hecho con objetos? &amp;#191;Y el stack USB? Si yo fuese (o fuera) profesor de alguna universidad relacionada a la inform&amp;#225;tica ya sabr&amp;#237;a que tipo de ejercicios darles a mis alumnos.&lt;BR&gt; &lt;/BLOCKQUOTE&gt; &lt;TT&gt;&lt;B&gt;&amp;lt;/reflexi&amp;#243;n barata&amp;gt;&lt;/B&gt;&lt;/TT&gt;&lt;BR&gt; &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-114802927009028659?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/114802927009028659/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=114802927009028659' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114802927009028659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114802927009028659'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/05/squeaknos-squeak-es-un-sistema.html' title='SqueakNOS: Squeak ES un Sistema Operativo'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-114719402485747000</id><published>2006-05-09T19:00:00.000+02:00</published><updated>2006-05-10T11:03:55.920+02:00</updated><title type='text'>Jugando con Comet en Squeak</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/comet.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/400/comet.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hace un tiempo &lt;a href="http://barrapunto.com/article.pl?sid=06/03/26/0832249"&gt;me crucé con el &lt;b&gt;Comet&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Comet es una vuelta más de rosca al uso que se les da a los navegadores.  La idea es simple: mantener una conexión abierta para que el server pueda enviar datos al navegador cuando lo necesite. Más información sobre Comet en: &lt;a href="http://es.wikipedia.org/wiki/Comet"&gt;http://es.wikipedia.org/wiki/Comet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bueno, sin más vueltas les presento el resultado de mis juegos con el Comet (obviamente con Squeak) en los últimos días.&lt;br /&gt;&lt;br /&gt;Está disponible en SqueakMap, con el nombre &lt;b&gt;&lt;a href="http://map.squeak.org/package/b33c680e-5f7e-41e3-98b9-d84324fa2587"&gt;Asteroid (a small Comet)&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt; &lt;a href="http://astares.blogspot.com/2006/05/comet-implementation-for-seaside-web.html"&gt;Torsten Bergman&lt;/a&gt; hizo un &lt;a href="http://minnow.cc.gatech.edu/squeak/uploads/5851/asteroids.htm"&gt;screencast mostrando Asteroid con 2 browsers abiertos a la vez&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-114719402485747000?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/114719402485747000/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=114719402485747000' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114719402485747000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114719402485747000'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/05/jugando-con-comet-en-squeak.html' title='Jugando con Comet en Squeak'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-114561991318048091</id><published>2006-04-21T13:38:00.000+02:00</published><updated>2006-04-21T13:45:13.200+02:00</updated><title type='text'>Nueva versión de Open Croquet</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/croquet.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/400/croquet.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ayer se anunció la liberación de una nueva versión de &lt;a href="http://www.opencroquet.org/"&gt;Open Croquet&lt;/a&gt;.  Esta es la versión &lt;b&gt;Croquet SDK 1.0 Beta&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Según los autores, esta versión servirá para que programadores puedan hacer cosas en Croquet ya que las interfaces de los objetos ya están bastante estables.&lt;br /&gt;&lt;br /&gt;Se incluye un manual de programación en PDF de unas 150 páginas.&lt;br /&gt;&lt;br /&gt;Bueno, parece que ya no más hay excusas para meterme de lleno en la programación con Croquet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-114561991318048091?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.opencroquet.org/' title='Nueva versión de Open Croquet'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/114561991318048091/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=114561991318048091' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114561991318048091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114561991318048091'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/04/nueva-versin-de-open-croquet.html' title='Nueva versión de Open Croquet'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-114431553473830301</id><published>2006-04-06T11:25:00.000+02:00</published><updated>2006-04-07T19:50:39.940+02:00</updated><title type='text'>Squeak en Java</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/SqueakInJava2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/400/SqueakInJava2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Daniel_Henry_Holmes_Ingalls%2C_Jr."&gt;Dan Ingalls&lt;/a&gt;, uno de los creadores del &lt;a href="http://en.wikipedia.org/wiki/Smalltalk"&gt;Smalltalk&lt;/a&gt; y del &lt;a href="http://en.wikipedia.org/wiki/Squeak"&gt;Squeak&lt;/a&gt;, &lt;a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-April/102380.html"&gt;anunció&lt;/a&gt; en la &lt;a href="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-dev"&gt;lista de correo de Squeak&lt;/a&gt; una implementación de la máquina virtual de Squeak escrita en Java.&lt;br /&gt;&lt;br /&gt;Esta implementación permite, entre otras cosas, ejecutar un Squeak en un navegador web.&lt;br /&gt;&lt;br /&gt;Para probarla, visiten:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://Weather-Dimensions.com/Dan/ForwardToThePast.jnlp"&gt;http://Weather-Dimensions.com/Dan/ForwardToThePast.jnlp&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/11642986-114431553473830301?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/114431553473830301/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=114431553473830301' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114431553473830301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114431553473830301'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/04/squeak-en-java.html' title='Squeak en Java'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-114241505805459663</id><published>2006-03-15T10:27:00.000+01:00</published><updated>2006-11-22T17:58:37.696+01:00</updated><title type='text'>Alan Kay: ¡Lo más importante de la OOP no son los Objetos!</title><content type='html'>Así como lo oyen. Lo más importante en el paradigma de objetos no son los &lt;span style="font-weight: bold;"&gt;objetos,&lt;/span&gt; ¡lo más importante son los &lt;span style="font-weight: bold;"&gt;mensajes&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;Lo que realmente convierte a un sistema en meta-programable es tener un buen mecanismo de comunicación entre las partes.&lt;br /&gt;&lt;br /&gt;Vean que dijo &lt;a href="http://www.squeakland.org/community/biography/alanbio.html"&gt;Alan Kay&lt;/a&gt;, en un &lt;a href="http://www.iam.unibe.ch/%7Edenker/AlanKayOOP.html"&gt;correo a la lista de Squeak&lt;/a&gt;, en Diciembre del 1998.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.iam.unibe.ch/%7Edenker/AlanKayOOP.html"&gt;http://www.iam.unibe.ch/~denker/AlanKayOOP.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Sin desperdicios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-114241505805459663?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/114241505805459663/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=114241505805459663' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114241505805459663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114241505805459663'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/03/alan-kay-lo-ms-importante-de-la-oop-no.html' title='Alan Kay: ¡Lo más importante de la OOP no son los Objetos!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-114190824077783445</id><published>2006-03-09T13:38:00.000+01:00</published><updated>2006-03-09T13:44:00.800+01:00</updated><title type='text'>Squeakpolis</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://squeak.educarex.es/squeakpolis/uploads/cig1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://squeak.educarex.es/squeakpolis/uploads/cig1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt;&lt;span style="font-family:times new roman;"&gt;Parece que el tema de Squeak se está moviendo un poco por estas tierras. Si no me creen, visiten ustedes mismos el nuevo sitio &lt;a href="http://squeak.educarex.es/Squeakpolis/"&gt;Squeakpolis.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt;Este es el lugar donde la&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt;gente que viene desde los más variopintos sitios&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt; puede encontrar, compartir, intercambiar, divulgar...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt; lo que ya conoció o quiere conocer acerca de &lt;span style="color:orange;"&gt;Squeak&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt;Esta ciudad os hospedará, albergará vuestras dudas&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt; y facilitará el encuentro entre vosotros; todo el&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt; mundo está invitado a construirla, porque &lt;span style="color:green;"&gt;Squeakpolis&lt;/span&gt; -como&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt; suele pasar en las mejores ciudades- está en permanente&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Trebuchet MS;"&gt; evolución. Residente o forastero, estudiante o docente, considérate en tu ciudad.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-114190824077783445?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://squeak.educarex.es/Squeakpolis/' title='Squeakpolis'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/114190824077783445/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=114190824077783445' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114190824077783445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/114190824077783445'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/03/squeakpolis.html' title='Squeakpolis'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113939421507356193</id><published>2006-02-08T11:18:00.000+01:00</published><updated>2006-02-08T11:25:00.266+01:00</updated><title type='text'>Libro "Programando con Smalltalk" terminado</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/tapa1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/tapa1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Aunque todavía me cueste mucho trabajo creerlo, terminé de escribir el libro &lt;b&gt;&lt;a href="http://smalltalk.consultar.com/"&gt;Programando con Smalltalk&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Se puede descargar el último borrador, antes de las correcciones y la maquetación hechas por la editorial, desde:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://wiki.gnulinex.org/LibroProgramacionSmalltalk/10"&gt;http://wiki.gnulinex.org/LibroProgramacionSmalltalk/10&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;También se pueden descargar el diseño de las cubiertas y una de los últimas versiones maquetadas.&lt;br /&gt;&lt;br /&gt;El libro se presentará en la próxima &lt;a href="http://www.opensourceworldconference.com/"&gt;II Conferencia Internacional de Software Libre - Málaga 2006&lt;/a&gt;, el &lt;a href="http://www.opensourceworldconference.com/malaga06/es/modules/wiwimod/index.php?page=Workshop"&gt;día Jueves 16 de Febrero, a las 13:00Hs, en la sala 2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Así lucen algunas de las páginas del libro:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/pag1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/pag1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/pag2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/pag2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/pag3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/pag3.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¡Qué lo disfruten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113939421507356193?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://smalltalk.consultar.com/' title='Libro &quot;Programando con Smalltalk&quot; terminado'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113939421507356193/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113939421507356193' title='10 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113939421507356193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113939421507356193'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/02/libro-programando-con-smalltalk.html' title='Libro &quot;Programando con Smalltalk&quot; terminado'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113775143175080324</id><published>2006-01-20T11:03:00.000+01:00</published><updated>2006-11-22T17:37:39.636+01:00</updated><title type='text'>Un Smalltalk en 1337 bytes</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://netjam.org/spoon/smallest.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://netjam.org/spoon/smallest.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://netjam.org/"&gt;Craig Latta&lt;/a&gt;, el desarrollador del proyecto &lt;a href="http://netjam.org/spoon/"&gt;Spoon&lt;/a&gt;, hizo un GIF que muestra el &lt;a href="http://netjam.org/spoon/smallest.gif"&gt;layout de una imagen de Smalltalk de 1337 bytes&lt;/a&gt;. Sólo tiene 18 objetos y es suficiente para evaluar la mítica expresión:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bg border="1" cellpadding="10" cellspacing="0" style="color:#ffffcc;"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;div align="center"&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;3&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f4c00;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0000;"&gt;4&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#000000;"&gt;.&lt;/span&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Creo recordar (en realidad no estoy seguro) que la máquina virtual de &lt;a href="http://research.sun.com/self/"&gt;Self&lt;/a&gt; contiene 6 objetos. Siempre me fascinó la idea de encontrar un juego de objetos mínimos, pero suficientes, para implementar con ellos un ambiente de objetos como Smalltalk o Self. Tanto la VM de Self, como el Spoon de Craig, están cerca de encontrarlos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113775143175080324?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113775143175080324/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113775143175080324' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113775143175080324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113775143175080324'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/01/un-smalltalk-en-1337-bytes.html' title='Un Smalltalk en 1337 bytes'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113757870823930661</id><published>2006-01-18T11:05:00.000+01:00</published><updated>2006-12-01T19:08:20.766+01:00</updated><title type='text'>SCRATCH: Un nuevo entorno de programación para niños basado en Squeak</title><content type='html'>La escritura del pr&amp;#243;ximo libro sobre &lt;A HREF="http://smalltalk.consultar.com/"&gt;Programaci&amp;#243;n con Smalltalk&lt;/A&gt; me tiene un poco fuera de juego y estoy descuidando, entre otras cosas, el blog.&lt;BR&gt; &lt;BR&gt; Hoy me cruc&amp;#233; con la p&amp;#225;gina del Scratch.&amp;nbsp; Yo tuve la suerte de ver una presentaci&amp;#243;n, de una versi&amp;#243;n muy preliminar, en la &lt;A HREF="http://www.db.soc.i.kyoto-u.ac.jp/c5-06/"&gt;C5 (en Kyoto, Jap&amp;#243;n) del a&amp;#241;o 2004&lt;/A&gt;.&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; Me sorprendi&amp;#243; gratamente ver como ha avanzado.&amp;nbsp; Tal vez sea el momento de comenzar un proyecto de traducci&amp;#243;n del Scratch al Castellano, Gallego, Catal&amp;#225;n, etc.&lt;BR&gt; &lt;BR&gt; Bueno, corto el rollo que tengo que seguir escribiendo, les dejo el link a la p&amp;#225;gina:&lt;BR&gt; &lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;FONT SIZE="4"&gt;&lt;A HREF="http://weblogs.media.mit.edu/llk/scratch/"&gt;http://weblogs.media.mit.edu/llk/scratch/&lt;/A&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;BR&gt; &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113757870823930661?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113757870823930661/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113757870823930661' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113757870823930661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113757870823930661'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2006/01/scratch-un-nuevo-entorno-de.html' title='SCRATCH: Un nuevo entorno de programación para niños basado en Squeak'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113456026379856843</id><published>2005-12-14T12:37:00.000+01:00</published><updated>2005-12-14T12:37:43.840+01:00</updated><title type='text'>Cocinando un libro libre de Smalltalk en Castellano</title><content type='html'>A mediados de febrero se publicar&amp;#225; un nuevo libro de programaci&amp;#243;n en Smalltalk para programadores de otras herramientas.&lt;BR&gt; &lt;BR&gt; El libro lo estoy escribiendo yo, y la editorial que lo publicar&amp;#225; es &lt;A HREF="http://www.librosdelinux.com/"&gt;EditLin&lt;/A&gt;, la misma que public&amp;#243; el libro de Squeak.&lt;BR&gt; &lt;BR&gt; La licencia permitir&amp;#225; la copia, modificaci&amp;#243;n y distribuci&amp;#243;n de forma gratuita y libre siempre y cuando no se haga dinero con esa actividad, la licencia seleccionada es la siguiente:&lt;BR&gt; &lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;A HREF="http://creativecommons.org/licenses/by-nc/2.5/deed.es"&gt;http://creativecommons.org/licenses/by-nc/2.5/deed.es&lt;/A&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;BR&gt; Hemos creado una lista de correo en:&lt;BR&gt; &lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;A HREF="http://es.groups.yahoo.com/group/LibroProgramacionSmalltalk/"&gt;http://es.groups.yahoo.com/group/LibroProgramacionSmalltalk/&lt;/A&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;BR&gt; y un swiki en:&lt;BR&gt; &lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;A HREF="http://wiki.gnulinex.org/LibroProgramacionSmalltalk"&gt;http://wiki.gnulinex.org/LibroProgramacionSmalltalk&lt;/A&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;BR&gt; para ir poniendo las noticias relacionadas con el libro, y para que las personas interesadas en ir viendo el avance puedan seguir de cerca el desarrollo.&lt;BR&gt; &lt;BR&gt; Lo m&amp;#225;s dif&amp;#237;cil de explicar de Smalltalk es como usar el ambiente en beneficio del programador, este libro intentar&amp;#225; mostrar el uso del ambiente desarrollando paso a paso una aplicaci&amp;#243;n no-trivial (un importador de Wikipedia) y mostrando una forma de programaci&amp;#243;n lo m&amp;#225;s incremental posible.&lt;BR&gt; &lt;BR&gt; Quedan todos formalmente (e informalmente) invitados a la lista de correo.&lt;BR&gt; &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113456026379856843?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113456026379856843/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113456026379856843' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113456026379856843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113456026379856843'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/12/cocinando-un-libro-libre-de-smalltalk.html' title='Cocinando un libro libre de Smalltalk en Castellano'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113232376495943764</id><published>2005-11-18T14:04:00.000+01:00</published><updated>2005-11-18T15:22:45.040+01:00</updated><title type='text'>La magia del Smalltalk: Capítulo 13 – Expression Builder (Un ejemplo de #doesNotUnderstand:)</title><content type='html'>Ya hemos hablado, en &lt;a href="http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-1-no.html"&gt;un post anterior&lt;/a&gt;, del mensaje &lt;b&gt;&lt;tt&gt;#doesNotUnderstand:&lt;/tt&gt;&lt;/b&gt;; ese mensaje &lt;i&gt;"especial"&lt;/i&gt;, que envía el Smalltalk automáticamente, al objeto receptor, cuando este no tiene un método para responder al mensaje original.&lt;br /&gt;&lt;br /&gt;En el &lt;a href="http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-1-no.html"&gt;un post anterior&lt;/a&gt; habíamos hablado de como se puede hacer un &lt;a href="http://es.wikipedia.org/wiki/Proxy_%28patr%C3%B3n_de_dise%C3%B1o%29"&gt;Proxy&lt;/a&gt; y otros ejemplos, y ahora veremos un ejemplo un poco más complicado, pero también más interesante.&lt;br /&gt;&lt;br /&gt;El problema a resolver es el siguiente: Necesitamos crear expresiones válidas en algún lenguaje (por ejemplo SQL) desde sentencias escritas en bloques de Smalltalk.&lt;br /&gt;&lt;br /&gt;Supongamos que queremos convertir un bloque tipo:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;font color="#000000"&gt;&lt;b&gt;customers&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;select:&lt;/font&gt;&lt;font color="#000000"&gt; [:&lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#FF0000"&gt;income&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;&lt;b&gt;&amp;gt;&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;0&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;]&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;En una sentencia SQL tipo:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;&lt;tt&gt;SELECT * FROM Customer WHERE (Customer.income &gt; 0)&lt;/tt&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;NOTA:&lt;/b&gt; Vi por primera vez usar este truco en el framework de mapeo relacional-objetos llamado &lt;a href="http://www.glorp.org"&gt;GLORP&lt;/a&gt;, de allí que use un ejemplo donde se genera sentencias SQL.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;El truco es evaluar el bloque en cuestión con un objeto que sólo entienda el mensaje &lt;tt&gt;#doesNotUnderstand:&lt;/tt&gt;. Esa evaluación &lt;i&gt;“capturará"&lt;/i&gt; la información del mensaje y devolverá otro objeto capaz de seguir capturando esa información. El resultado final será una estructura que describa, en un árbol, la secuencia de mensajes (incluyendo receptores y argumentos).&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;BlockContext&gt;&gt;asExpression&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#007F00"&gt;&lt;b&gt;"answer the receiver transformed as an EBExpression"&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;^&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;value:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#EA00EA"&gt;&lt;b&gt;EBArgumentExpression&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;new&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;EBExpression&gt;&gt;doesNotUnderstand:&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#00007F"&gt;&lt;i&gt;aMessage&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#00007F"&gt;&lt;i&gt;aMessage&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;selector&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;&lt;b&gt;==&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#00007F"&gt;&lt;b&gt;&lt;font size="-1"&gt;#doesNotUnderstand:&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F4C00"&gt;ifTrue:&lt;/font&gt;&lt;font color="#000000"&gt; [&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;^&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;basicDoesNotUnderstand:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#00007F"&gt;&lt;i&gt;aMessage&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt;].&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;^&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#EA00EA"&gt;&lt;b&gt;EBMessageExpression&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F4C00"&gt;receiver:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F4C00"&gt;message:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#00007F"&gt;&lt;i&gt;aMessage&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El siguiente test muestra uno de los casos:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;EBTest&gt;&gt;testSimplestUnary&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;expected&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;expected&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;b&gt;:=&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#EA00EA"&gt;&lt;b&gt;EBMessageExpression&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F4C00"&gt;receiver:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#EA00EA"&gt;&lt;b&gt;EBArgumentExpression&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;new&lt;/font&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F4C00"&gt;selector:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#00007F"&gt;&lt;b&gt;&lt;font size="-1"&gt;#isNil&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;b&gt;:=&lt;/b&gt;&lt;font color="#000000"&gt; [:&lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;param&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;param&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;isNil&lt;/font&gt;&lt;font color="#000000"&gt;] &lt;/font&gt;&lt;font color="#7F4C00"&gt;asExpression&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;should:&lt;/font&gt;&lt;font color="#000000"&gt; [&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;equals:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;expected&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt;].&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y, para terminar, vamos a crear un par de métodos llamados &lt;tt&gt;#asLispyString&lt;/tt&gt; en &lt;tt&gt;Object&lt;/tt&gt; (para que todos los objetos puedan convertirse a un string &lt;i&gt;“Lispy"&lt;/i&gt;) y en la jerarquía de &lt;tt&gt;EBExpression&lt;/tt&gt;:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Object&gt;&gt;asLispyString&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;^&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;asString&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;EBArgumentExpression&gt;&gt;asLispyString&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;^&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F007F"&gt;&lt;b&gt;&lt;font size="-1"&gt;'[arg]'&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt; EBMessageExpression&gt;&gt;asLispyString&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;b&gt;:=&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#EA00EA"&gt;&lt;b&gt;String&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;new&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;writeStream&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;nextPutAll:&lt;/font&gt;&lt;font color="#7F007F"&gt;&lt;b&gt;&lt;font size="-1"&gt;'('&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;nextPutAll:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;selector&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;asString&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;space&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;nextPutAll:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;receiver&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;asLispyString&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;arguments&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;do:&lt;/font&gt;&lt;font color="#000000"&gt;[:&lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;space&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;nextPutAll:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;asLispyString&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;].&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;nextPutAll:&lt;/font&gt;&lt;font color="#7F007F"&gt;&lt;b&gt;&lt;font size="-1"&gt;')'&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;^&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;contents&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;De esa manera podemos escribir algunos tests como estos:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;EBTest&gt;&gt;testLispyString1&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;b&gt;:=&lt;/b&gt;&lt;font color="#000000"&gt; [:&lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;param&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;param&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;isNil&lt;/font&gt;&lt;font color="#000000"&gt;] &lt;/font&gt;&lt;font color="#7F4C00"&gt;asExpression&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;should:&lt;/font&gt;&lt;font color="#000000"&gt; [&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;asLispyString&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;&lt;b&gt;=&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F007F"&gt;&lt;b&gt;&lt;font size="-1"&gt;'(isNil [arg])'&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;].&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;EBTest&gt;&gt;testLispyString2&lt;/b&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;block1&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;block2&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;block1&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;b&gt;:=&lt;/b&gt;&lt;font color="#000000"&gt; [:&lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;&lt;b&gt;&amp;gt;&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;1&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;].&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;block2&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;b&gt;:=&lt;/b&gt;&lt;font color="#000000"&gt; [:&lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;&lt;b&gt;&amp;lt;&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;10&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;].&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;b&gt;:=&lt;/b&gt;&lt;font color="#000000"&gt; [:&lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F7F7F"&gt;|&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F00"&gt;(&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;block1&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;value:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#007F00"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;&lt;b&gt;&amp;amp;&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F00"&gt;(&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;block2&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;value:&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#007F7F"&gt;&lt;i&gt;each&lt;/font&gt;&lt;/i&gt;&lt;font color="#007F00"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;] &lt;/font&gt;&lt;font color="#7F4C00"&gt;asExpression&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color="#7F0000"&gt;&lt;b&gt;self&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;should:&lt;/font&gt;&lt;font color="#000000"&gt; [&lt;/font&gt;&lt;font color="#6B6B6B"&gt;&lt;i&gt;result&lt;/font&gt;&lt;/i&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;asLispyString&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#7F4C00"&gt;&lt;b&gt;=&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#7F007F"&gt;&lt;b&gt;&lt;font size="-1"&gt;'(&amp;amp; (&amp;gt; [arg] 1) (&amp;lt; [arg] 10))'&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#000000"&gt;].&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Espero les guste el ejemplo.&lt;br /&gt;&lt;br /&gt;Pueden bajar un changeset con el ejemplo completo: &lt;a href="http://www.consultar.com/trastero/ExpressionBuilder-dgd.4.cs.gz"&gt;ExpressionBuilder-dgd.4.cs.gz&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113232376495943764?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113232376495943764/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113232376495943764' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113232376495943764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113232376495943764'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/11/la-magia-del-smalltalk-captulo-13.html' title='La magia del Smalltalk: Capítulo 13 – Expression Builder (Un ejemplo de #doesNotUnderstand:)'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113214925505446524</id><published>2005-11-16T14:54:00.000+01:00</published><updated>2005-11-16T14:55:36.196+01:00</updated><title type='text'>PDF de la Nota en Mundo Linux de Noviembre</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/MundoLinux.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/400/MundoLinux.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pueden descargar el &lt;a href="http://www.consultar.com/DiegoGomezDeck/papers/Mundo%20Linux%20-%20Noviembre%202005%20.%20Aplicaciones%20Squeak.pdf"&gt;PDF de la nota sobre Squeak&lt;/a&gt; que salió publicada en la revista &lt;a href="http://digital.revistasprofesionales.com:8080/View_Ctrl/ml.jsp"&gt;Mundo Linux de Noviembre&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113214925505446524?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113214925505446524/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113214925505446524' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113214925505446524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113214925505446524'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/11/pdf-de-la-nota-en-mundo-linux-de.html' title='PDF de la Nota en Mundo Linux de Noviembre'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113171006648712396</id><published>2005-11-11T12:54:00.000+01:00</published><updated>2005-11-11T12:55:41.296+01:00</updated><title type='text'>Pequeña aplicación de ejemplo con Squeak y Seaside</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/appointments.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/appointments.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Tuve que hacer, unas semanas atrás, una pequeña aplicación web de ejemplo usando Squeak y &lt;a href="http://www.seaside.st/"&gt;Seaside&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;El Seaside es un framework para hacer aplicaciones web con Squeak basado en continuations. Pueden leer más detalles sobre el framework en &lt;a href="http://www.seaside.st/"&gt;http://www.seaside.st/.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La aplicación que hice es muy simple, pero tiene desarrollado todo el modelo usando &lt;a href="http://www.xprogramming.com/Practices/PracUnitTest.html"&gt;UnitTests&lt;/a&gt; y &lt;a href="http://www.agiledata.org/essays/tdd.html"&gt;TDD&lt;/a&gt; (Test Driven Design).&lt;br /&gt;&lt;br /&gt;Pueden bajar la imagen de Squeak, con el seaside y la aplicación funcionando, desde: &lt;a href="http://www.consultar.com/trastero/appointments.tar.gz"&gt;http://www.consultar.com/trastero/appointments.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez que ejecuten el Squeak con esa imagen, apunten su navegador a la dirección: &lt;a href="http://localhost:9090/seaside/appointments"&gt;http://localhost:9090/seaside/appointments&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Entren con &lt;b&gt;usuario dgd&lt;/b&gt; y &lt;b&gt;contraseña vacía&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Espero les guste.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113171006648712396?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113171006648712396/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113171006648712396' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113171006648712396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113171006648712396'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/11/pequea-aplicacin-de-ejemplo-con-squeak.html' title='Pequeña aplicación de ejemplo con Squeak y Seaside'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113144401348223652</id><published>2005-11-08T11:00:00.000+01:00</published><updated>2005-11-08T11:08:03.096+01:00</updated><title type='text'>Algo de historia de Smalltalk y Squeak</title><content type='html'>El proyecto Smalltalk tuvo un fuerte período de desarrollo durante toda la década de 1970 en los laboratorios PARC de Xerox.&lt;br /&gt;&lt;br /&gt;Se puede leer un poco de la historia de Smalltalk en &lt;a href="http://en.wikipedia.org/wiki/Smalltalk#History%29"&gt;http://en.wikipedia.org/wiki/Smalltalk&lt;/a&gt;, pero la mejor referencia histórica es el paper publicado por Alan Kay, en el año 1993 (antes del proyecto Squeak), llamado &lt;a href="http://gagne.homedns.org/%7Etgagne/contrib/EarlyHistoryST.html"&gt;The Early History of Smalltalk&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Terminando la década, el grupo decide mostrar sus avances al mundo y decide publicar algunos (ya míticos) libros como &lt;b&gt;"Smalltalk-80: Bits of History, Words of Advice"&lt;/b&gt;, &lt;b&gt;"Smalltalk-80: The Interactive Programming Environment"&lt;/b&gt; y &lt;b&gt;"Smalltalk-80: The Language and Its Implementation"&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/BitsOfHistory.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/200/BitsOfHistory.gif" alt="" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/TheInteractiveProgrammingEnv.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/200/TheInteractiveProgrammingEnv.gif" alt="" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/page7.img1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/200/page7.img1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Los 2 primeros (el &lt;i&gt;"green"&lt;/i&gt; y el &lt;i&gt;"orange"&lt;/i&gt;) se pueden descargar desde la página de libros gratuitos de Smalltalk de Stéphane Ducasse. El &lt;i&gt;"blue"&lt;/i&gt; perdió los capítulos sobre la implementación (que de cualquier forma se pueden ver en la web), se transformó en el &lt;i&gt;"purple"&lt;/i&gt; y todavía se puede &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201136880/103-9036778-4012627?v=glance"&gt;comprar en Amazon&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/Smalltalk80Cover.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/200/Smalltalk80Cover.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;También durante ese período se publicó un número de la revista Byte, el de agosto de 1981, completamente dedicado al Smalltalk.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/bytebloon.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/200/bytebloon.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;De esa revista podemos leer, en Internet, &lt;a href="http://users.ipa.net/%7Edwighth/smalltalk/byte_aug81/design_principles_behind_smalltalk.html"&gt;"Design Principles Behind Smalltalk"&lt;/a&gt; de Dan Ingalls (y su &lt;a href="http://www.smalltalking.net/Papers/stDesign/stDesign.htm"&gt;traducción al Castellano&lt;/a&gt;). Esta nota es una verdadera joyita donde, uno de los responsables de Smalltalk, nos cuenta su visión de cómo se deberían usar las computadoras y los porqué.&lt;br /&gt;&lt;br /&gt;Me quedo con sólo una frase del artículo:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;     &lt;b&gt;Operating System:&lt;/b&gt;&lt;i&gt; An operating system is a collection of things that don't fit into a language. There shouldn't be one.&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;     &lt;b&gt;Sistema Operativo:&lt;/b&gt; &lt;i&gt;Un sistema operativo es una colección de cosas que no encajan dentro de un lenguaje. No debería existir.&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Y, para terminar y que les de un poco de envidia, les comento que yo soy un feliz dueño de cada uno de los libros y revista que les comenté en esta nota.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113144401348223652?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113144401348223652/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113144401348223652' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113144401348223652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113144401348223652'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/11/algo-de-historia-de-smalltalk-y-squeak.html' title='Algo de historia de Smalltalk y Squeak'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113136210772429266</id><published>2005-11-07T12:15:00.000+01:00</published><updated>2005-11-07T12:16:11.926+01:00</updated><title type='text'>Otro libro de Squeak</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.iam.unibe.ch/%7Educasse/Web/BotsInc/Cover-Small.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://www.iam.unibe.ch/%7Educasse/Web/BotsInc/Cover-Small.jpg" alt="" border="0" /&gt;&lt;/a&gt;Acabo de recibir una copia del &lt;a href="http://smallwiki.unibe.ch/botsinc/"&gt;nuevo libro de Squeak&lt;/a&gt; escrito por mi amigo &lt;a href="http://www.iam.unibe.ch/%7Educasse/"&gt;Stéphane Ducasse&lt;/a&gt;. Recibí una copia de regalo porque fui uno de los revisores del libro.&lt;br /&gt;&lt;br /&gt;El libro pretende ser un curso de programación que utiliza un entorno similar al Logo dentro de Squeak.&lt;br /&gt;&lt;br /&gt;El prólogo está escrito por &lt;a href="http://en.wikipedia.org/wiki/Alan_Kay"&gt;Alan Kay&lt;/a&gt; y, como siempre, nos incita a utilizar Smalltalk como una herramienta para convertir al mismo Smalltalk en algo obsoleto. Nos recuerda que Smalltalk debe ser un medio y no un fin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113136210772429266?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113136210772429266/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113136210772429266' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113136210772429266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113136210772429266'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/11/otro-libro-de-squeak.html' title='Otro libro de Squeak'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-113075342811040976</id><published>2005-10-31T11:10:00.000+01:00</published><updated>2005-10-31T11:13:38.190+01:00</updated><title type='text'>Squeak en Mundo Linux de Noviembre</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://digital.revistasprofesionales.com:8080/View_Ctrl/ml/archivo/84/portada.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://digital.revistasprofesionales.com:8080/View_Ctrl/ml/archivo/84/portada.jpg" alt="" border="0" /&gt;&lt;/a&gt;En el &lt;a href="http://digital.revistasprofesionales.com:8080/View_Ctrl/ml.jsp"&gt;número 84 (Noviembre) de la revista Mundo Linux&lt;/a&gt;, viene una nota de Squeak además de un CD-ROM con Squeak.&lt;br /&gt;&lt;br /&gt;Es una adaptación del capítulo 1 del libro &lt;a href="http://diegogomezdeck.blogspot.com/2005/08/squeak-un-mundo-para-aprender.html"&gt;Squeak - Un Mundo para Aprender&lt;/a&gt; publicado recientemente.&lt;br /&gt;&lt;br /&gt;Pondré el PDF para bajar en cuanto tenga el permiso para hacerlo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-113075342811040976?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/113075342811040976/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=113075342811040976' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113075342811040976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/113075342811040976'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/10/squeak-en-mundo-linux-de-noviembre.html' title='Squeak en Mundo Linux de Noviembre'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112971934145723172</id><published>2005-10-19T12:55:00.000+02:00</published><updated>2005-11-11T12:58:55.373+01:00</updated><title type='text'>Un nuevo Squeaker</title><content type='html'>&lt;b&gt;¡La familia se agranda!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;No es fácil conseguir gente para el proyecto Squeak, así que opté por agrandar la familia para que alguien más pueda ayudarme.&lt;br /&gt;&lt;br /&gt;El 6 de Octubre, a las 20:30, nació Nahuel Gómez Deck Martínez. Nació un mes antes de lo previsto y con poco peso (1500gr). Se va a pasare una temporadita en la incubadora hasta que suba de peso, por lo demás es un chico sano y fuerte.&lt;br /&gt;&lt;br /&gt;A ver si otros programadores Smalltalk/Squeak se animan y agrandamos un poco la comunidad.&lt;br /&gt;&lt;br /&gt;Les dejo una foto del día 9/Octubre.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/nahuel.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/400/nahuel.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ACTUALIZACIÓN 11/Noviembre/2005: Más fotos en &lt;a href="http://www.consultar.com/NahuelGomezDeck/"&gt;http://www.consultar.com/NahuelGomezDeck/&lt;/a&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112971934145723172?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112971934145723172/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112971934145723172' title='10 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112971934145723172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112971934145723172'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/10/un-nuevo-squeaker.html' title='Un nuevo Squeaker'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112807608745908638</id><published>2005-09-30T12:28:00.000+02:00</published><updated>2005-09-30T12:28:07.503+02:00</updated><title type='text'>Post para aumentar eltráfico</title><content type='html'>Es incre&amp;#237;ble analizar los &amp;quot;referals&amp;quot; de este blog. Hay gente, aunque cueste creerlo, que llega a mi blog despu&amp;#233;s de haber buscado en &lt;A HREF="http://www.google.com.pe/search?hl=es&amp;q=concepto%20de%20arroz%20con%20leche&amp;meta="&gt;google &amp;quot;concepto de arroz con leche&amp;quot;&lt;/A&gt;. &lt;BR&gt; &lt;BR&gt; Para ver si puedo aumentar el tr&amp;#225;fico, voy a meter en este post algunas palabras que, creo, interesar&amp;#225;n a la gente:&lt;BR&gt; &lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;FONT SIZE="4"&gt;&lt;B&gt;SEXO&lt;/B&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;FONT SIZE="4"&gt;&lt;B&gt;GRATIS&lt;/B&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;FONT SIZE="4"&gt;&lt;B&gt;CHICHAS&lt;/B&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;FONT SIZE="4"&gt;&lt;B&gt;PROMISCUIDAD&lt;/B&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;FONT SIZE="4"&gt;&lt;B&gt;LUJURIA&lt;/B&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;FONT SIZE="4"&gt;&lt;B&gt;GULA&lt;/B&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;FONT SIZE="4"&gt;&lt;B&gt;PEREZA&lt;/B&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;BR&gt; Aunque no lo crean, esto es una especie de estudio sociol&amp;#243;gico.&lt;BR&gt; &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112807608745908638?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112807608745908638/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112807608745908638' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112807608745908638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112807608745908638'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/09/post-para-aumentar-eltrfico.html' title='Post para aumentar eltráfico'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112670037892606034</id><published>2005-09-14T13:02:00.000+02:00</published><updated>2005-09-14T14:20:11.923+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 12 - ¡Basta ya de las bases de datos relacionales!</title><content type='html'>Hace tiempo que no discuto con mi esposa, así que ando con un poco de ganas de pelear y voy a sacar de la galera uno de los tópicos más controversiales en lo que respecta al desarrollo de software: &lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;b&gt;El (ab)uso de las bases de datos relacionales.&lt;/b&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;No quiero entrar en una de esas discusiones estériles que tanto nos gustan a los programadores. Ya gasté muchísimo tiempo en discusiones tipo: &lt;a href="http://es.wikipedia.org/wiki/Vi"&gt;Vi&lt;/a&gt; -&amp;gt; &lt;a href="http://es.wikipedia.org/wiki/Emacs"&gt;Emacs&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; -&amp;gt; &lt;a href="http://es.wikipedia.org/wiki/FreeBSD"&gt;FreeBSD&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/GNU_GPL"&gt;GPL&lt;/a&gt; -&amp;gt; &lt;a href="http://es.wikipedia.org/wiki/Licencia_MIT"&gt;Licencia MIT&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Gnome"&gt;GNOME&lt;/a&gt; -&amp;gt; &lt;a href="http://es.wikipedia.org/wiki/KDE"&gt;KDE&lt;/a&gt; y, sobre todo, en elRestoDelMundo/&lt;a href="http://es.wikipedia.org/wiki/Smalltalk"&gt;Smalltalk&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;De la misma forma en que nadie puede decir que un &lt;a href="http://es.wikipedia.org/wiki/Paradigma_de_programaci%C3%B3n"&gt;paradigma de programación&lt;/a&gt; sea mejor que el otro, no podemos decir que el &lt;a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos"&gt;paradigma de objetos&lt;/a&gt; sea mejor o peor que el &lt;a href="http://es.wikipedia.org/wiki/Modelo_relacional"&gt;paradigma relacional&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;No dudo que las bases de datos relacionales sean útiles, pero de lo que estoy seguro es que la mayoría de los usos que se les da a las bases de datos relacionales son incorrectos, incómodos e ineficientes.&lt;br /&gt;&lt;br /&gt;Excepto por &lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming#Criticism"&gt;algún loco que condene el paradigma de objetos&lt;/a&gt;, hay un consenso bastante amplio en considerar que el modelado con objetos mejora en el desarrollo de software. Alcanza con ver como los lenguajes de moda se van pareciendo, cada vez más, a Smalltalk. Si no lo creen, analicen la linea sucesoria: &lt;a href="http://es.wikipedia.org/wiki/C_M%C3%A1s_M%C3%A1s"&gt;C++&lt;/a&gt; -&amp;gt; &lt;a href="http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Java"&gt;Java&lt;/a&gt; -&amp;gt; &lt;a href="http://es.wikipedia.org/wiki/C_Sharp"&gt;C#&lt;/a&gt; -&amp;gt; &lt;a href="http://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt; -&amp;gt; &lt;a href="http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Ruby"&gt;Ruby&lt;/a&gt; o piensen en los cambios que sufrieron el &lt;a href="http://es.wikipedia.org/wiki/Basic"&gt;Basic&lt;/a&gt; (en su paso a &lt;a href="http://es.wikipedia.org/wiki/Visual_Basic"&gt;Visual Basic&lt;/a&gt; o &lt;a href="http://gambas.gnulinex.org/"&gt;Gambas&lt;/a&gt;) o el &lt;a href="http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Pascal"&gt;Pascal&lt;/a&gt; (en su paso a &lt;a href="http://es.wikipedia.org/wiki/Delphi"&gt;Delphi&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Oberon"&gt;Oberon&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;El problema se nos presenta porque la mayoría de los proyectos de desarrollo de software, que usan alguna forma del paradigma de objetos, usan una base de datos relacional como mecanismo de persistencia de los datos.&lt;br /&gt;&lt;br /&gt;Ese mundo híbrido en el que nos toca (sobre)vivir tiene muchos inconvenientes. Hablemos de algunos:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Costos de capacitación:&lt;/b&gt; Todas las personas involucradas en el desarrollo tiene que poder expresarse fluidamente en dos paradigmas diferentes y cambiar, en la forma de pensar, entre el álgebra relacional y los objetos durante el proceso de desarrollo.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Costos de desarrollo:&lt;/b&gt; No es raro encontrar que el costo de desarrollo del mapeo objeto/relacional llegue a ser un porcentaje importante del desarrollo. No es raro encontrarse con sistemas que sólo piden datos a los usuarios para meterlos en tablas.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Rigidez en los diseños:&lt;/b&gt; Los cambios en el diseño del sistema son más caros ya que hay que hacer los cambios en 2 modelos diferentes, y en el mapeo entre los modelos.  No es raro encontrarse con jerarquías de clases terriblemente planas con tal de evitar problemas en el mapeo.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Problemas de performance:&lt;/b&gt; Las técnicas para mejorar los tiempos de procesamiento y respuesta son diferentes entre el modelo relacional y el modelo de objetos y, para peor, muchos de las técnicas que mejoran la performance en un modelo, producen el efecto contrario en el otro. Eso sin hablar del tiempo (de ejecución) que implica hacer el mapeo objetos/relacional todo el tiempo. Ciclos del tipo: &lt;tt&gt;Leer datos de la DB -&amp;gt; instanciar objetos con esos datos -&amp;gt; mostrar los objetos para su modificación -&amp;gt; pasar los datos de los objetos a la DB&lt;/tt&gt; no son excepciones.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Estas son algunas cosas que, creo, deberíamos preguntarnos los programadores:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;¿Cuantas tablas, en las bases de datos relacionales, no tienen más que unos pocos cientos de registros?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;¿Y cuanta duplicación genera el modelo relacional? o más concretamente: ¿Cuanto ocupan, en las bases de datos relacionales, 1000 clientes que se llamen todos “Juan Pérez”?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;¿Cuantos objetos entran en los 512Mb de RAM que tiene mi notebook?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Entonces, ¿Cuál es la alternativa?&lt;br /&gt;&lt;br /&gt;Por supuesto que no hay sólo una alternativa, pero me gustaría detenerme sobre una de ellas. La que más me gusta, la más simple, la más barata y que puede usarse en un porcentaje muy alto de proyectos:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;b&gt;Use the RAM memory, Luke!&lt;/b&gt;&lt;br /&gt;&lt;i&gt;(¡Usá la memoría RAM, Luke!)&lt;/i&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;La solución es muy simple: Guardar todos los objetos en la imagen de Smalltalk o, si no usan Smalltalk, la solución sería tener todo en memoria y deserializar/serializar al arrancar/detener el sistema.&lt;br /&gt;&lt;br /&gt;Si, ya se que parece una solución naive y que me estoy olvidando de cosas muy &lt;i&gt;serias&lt;/i&gt; como acceso concurrente, seguridad, políticas de lockeo, etc. En realidad no me estoy olvidando de esos temas, sólo les digo que con el tiempo de desarrollo que se van a ahorrar si no usan bases de datos relacionales les va a sobrar para atender a todos esos puntos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112670037892606034?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112670037892606034/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112670037892606034' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112670037892606034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112670037892606034'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/09/la-magia-del-smalltalk-captulo-12.html' title='La magia del Smalltalk: Capítulo 12 - ¡Basta ya de las bases de datos relacionales!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112625727906085446</id><published>2005-09-09T11:14:00.000+02:00</published><updated>2005-09-09T11:21:14.643+02:00</updated><title type='text'>Plataforma de Educación para Indígenas utilizando Squeak</title><content type='html'>Wuilmer Olaya Bardales, desde Lima - Perú, &lt;a href="http://groups.yahoo.com/group/small_land/message/1497"&gt;anunció&lt;/a&gt; en la &lt;a href="http://groups.yahoo.com/group/small_land/"&gt;lista de correo de Small-Land&lt;/a&gt; la puesta en marcha de una plataforma de e-learning que utiliza Squeak.&lt;br /&gt;&lt;br /&gt;El &lt;a href="http://groups.yahoo.com/group/small_land/message/1497"&gt;email original&lt;/a&gt; dice:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;     &lt;tt&gt;Hola amigos, les envio el link de la plataforma e-learning para la &lt;/tt&gt;&lt;br /&gt;   &lt;tt&gt;comunidad ashaninka de Perú, donde estamos utilizando Squeak para &lt;/tt&gt;&lt;br /&gt;   &lt;tt&gt;elaborar contenidos ( &lt;a href="http://www.fopecal.org/peruindigena/ashaninka/"&gt;http://www.fopecal.org/peruindigena/ashaninka/&lt;/a&gt; )&lt;/tt&gt;&lt;br /&gt; &lt;br /&gt;   &lt;tt&gt;Les agradecería que la visiten y me hagan llegar sus observaciones tanto &lt;/tt&gt;&lt;br /&gt;   &lt;tt&gt;de la Plataforma como del contenido en Squeak.&lt;/tt&gt;&lt;br /&gt; &lt;br /&gt;   &lt;tt&gt;Si me pudieran dar referencias de otras plataformas que utilicen Squeak &lt;/tt&gt;&lt;br /&gt;   &lt;tt&gt;para elaborar contenidos se lo agradecería.&lt;/tt&gt;&lt;br /&gt; &lt;br /&gt;   &lt;tt&gt;Wuilmer Olaya Bardales&lt;/tt&gt;&lt;br /&gt;   &lt;tt&gt;Lima - Perú&lt;/tt&gt;&lt;br /&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/11642986-112625727906085446?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112625727906085446/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112625727906085446' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112625727906085446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112625727906085446'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/09/plataforma-de-educacin-para-indgenas.html' title='Plataforma de Educación para Indígenas utilizando Squeak'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112625701630459276</id><published>2005-09-09T11:10:00.000+02:00</published><updated>2005-09-09T11:10:16.323+02:00</updated><title type='text'>Para siempre es mucho tiempo</title><content type='html'>Una (otra&amp;#191;?) nota que versa sobre la ya famosa licencia de Squeak.&lt;BR&gt; &lt;BR&gt; &lt;DIV ALIGN=center&gt;&lt;A HREF="http://www.eschoolnews.com/eti/2005/09/001173.php"&gt;Apple and the Squeak License&lt;/A&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112625701630459276?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112625701630459276/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112625701630459276' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112625701630459276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112625701630459276'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/09/para-siempre-es-mucho-tiempo.html' title='Para siempre es mucho tiempo'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112566171140619629</id><published>2005-09-02T13:47:00.000+02:00</published><updated>2005-09-02T13:51:15.890+02:00</updated><title type='text'>El wiki de Nicolás Gómez Deck</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/Alan-Nico-Diego.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/400/Alan-Nico-Diego.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Mi hijo, de 8 años, Nicolás &lt;a href="http://www.consultar.com/wiki/index.php/NicolasGomezDeck/HomePage"&gt; tiene su propio wiki&lt;/a&gt; donde nos cuenta las cosas que le vienen en ganas.&lt;br /&gt;&lt;br /&gt;En la foto estamos, de izquierda a derecha, Alan Kay, Nico y yo.&lt;br /&gt;&lt;br /&gt;Perdonen la frivolidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112566171140619629?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112566171140619629/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112566171140619629' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112566171140619629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112566171140619629'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/09/el-wiki-de-nicols-gmez-deck.html' title='El wiki de Nicolás Gómez Deck'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112566105747908910</id><published>2005-09-02T12:55:00.000+02:00</published><updated>2005-09-02T13:37:50.363+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 11 - Manteniendo la identidad</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/Fingerprint.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/200/Fingerprint.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ya hemos hablado, en &lt;a href="http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-2-ide.html"&gt;posts&lt;/a&gt; &lt;a href="http://diegogomezdeck.blogspot.com/2005/08/la-magia-del-smalltalk-captulo-7-quin.html"&gt;anteriores&lt;/a&gt;, de la identidad de los objetos en Smalltalk y como eso impacta en la forma de trabajo.&lt;br /&gt;&lt;br /&gt;En los lenguajes de programación &lt;i&gt;"tradicionales"&lt;/i&gt; los objetos no pueden sobrevivir a una ejecución del programa. Por eso se usan técnicas donde se reemplaza la identidad con IDs, claves únicas, etc.&lt;br /&gt;&lt;br /&gt;También es muy frecuente encontrar programas donde más de una instancia en el modelo por cada objeto real con los consiguientes típicos problemas de duplicación. Ni hablar de los casos típicos de tener objetos que no pueden sobrevivir una conexión/sesión/etc. He visto muchos sistemas donde lo único importante, para el funcionamiento interno, es el ID de los objetos.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;A grandes problemas, soluciones simples: Cuando modelamos la realidad (es decir, cuando estamos programando) conviene vincular el ciclo de vida de nuestros objetos al ciclo de vida de los objetos de la vida real.&lt;br /&gt;&lt;br /&gt;Por ejemplo: Si estamos modelando uno de esos clásicos sistemas de facturación, conviene que los objetos ArticuloDeVenta de nuestro modelo vivan tanto como viven los Artículos de Venta reales.  Si tenemos un artículo para la venta disponible por 10 años, conviene que la instancia que representa a dicho artículo viva los mismos 10 años. Si tenemos sólo 1 artículo real para la venta, no instanciamos más 1 instancia en nuestro modelo.&lt;br /&gt;&lt;br /&gt;En un mundo ideal, instanciamos en nuestro ambiente el artículo en cuanto la empresa decide venderlo y este objeto desaparecerá cuando nadie lo use ni lo recuerde.&lt;br /&gt;&lt;br /&gt;Lamentablemente el mundo dista bastante de ser ideal y muchas veces tenemos que convivir con feas bases de datos relacionales, archivos de texto y demás cosas que no nos permiten utilizar la identidad de Smalltalk ya que los objetos &lt;i&gt;"viven"&lt;/i&gt; fuera.&lt;br /&gt;&lt;br /&gt;Supongamos que tenemos que hacer un lindo sistemita en Smalltalk que tenga que ir a buscar los datos a una fea base de datos relacional.  Esa base de datos se actualiza desde fuera de nuestro programa, así que tenemos que descartar la alternativa de importar todos los datos a nuestra imagen.&lt;br /&gt;&lt;br /&gt;Una solución muy elegante es mantener la identidad dentro de nuestro ambiente siempre que sea necesario.  Para eso tendremos en nuestro (casi seguro &lt;a href="http://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o_Singleton"&gt;Singleton&lt;/a&gt;) objeto Sistema (el sistema es un objeto, ¿no?) un método del tipo &lt;tt&gt;#findXXXByID:&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Veamos un poco de código usando la recién estrenada opción “copiar como html" que acabo de subir al &lt;a href="http://swiki.agro.uba.ar/small_land/234"&gt;update-stream&lt;/a&gt; del &lt;a href="http://swiki.agro.uba.ar/small_land/241"&gt;Squeak de Small-Land versión 3.8&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;b&gt;SampleSystem&gt;&gt;initialize&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#993300"&gt;"initialize the receiver"&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#FF00FF"&gt;customers&lt;/font&gt; := &lt;font color="#FF00FF"&gt;WeakValueDictionary&lt;/font&gt; new&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;b&gt;SampleSystem&gt;&gt;&lt;b&gt;findCustomerByID: &lt;/b&gt;&lt;font color="#0000FF"&gt;&lt;b&gt;aString&lt;/font&gt;&lt;/b&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#993300"&gt;"Answer the customer represented by the given ID"&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;font color="#0000FF"&gt;&lt;i&gt; customer&lt;/font&gt;&lt;/i&gt; |&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000FF"&gt;&lt;i&gt;customer&lt;/font&gt;&lt;/i&gt; := &lt;font color="#FF00FF"&gt;customers&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at: &lt;font color="#0000FF"&gt;&lt;i&gt;aString&lt;/font&gt;&lt;/i&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ifAbsent: [&lt;font color="#FF00FF"&gt;nil&lt;/font&gt;].&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;^ &lt;font color="#0000FF"&gt;&lt;i&gt;customer&lt;/font&gt;&lt;/i&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ifNil: [&lt;font color="#FF00FF"&gt;self&lt;/font&gt; loadCustomerID: &lt;font color="#0000FF"&gt;&lt;i&gt;aString&lt;/font&gt;&lt;/i&gt;].&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;b&gt;SampleSystem&gt;&gt;loadCustomerID: &lt;/b&gt;&lt;font color="#0000FF"&gt;&lt;b&gt;aString&lt;/font&gt;&lt;/b&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#993300"&gt;"PRIVATE - load the data from the outer space"&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#FF0000"&gt;&lt;b&gt;&amp;lt;&amp;lt; CARGAR LOS DATOS DE LA BASE DE DATOS Y CREAR UNA INSTANCIA &amp;gt;&amp;gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Gran parte del truco de este idiom/patrón/nombreQueLesGuste reside en usar el diccionario  WeakValueDictionary. Ese diccionario mantiene una referencia débil (Weak), una referencia débil es una forma de referenciar a un objeto que NO evita que el &lt;a href="http://es.wikipedia.org/wiki/Recolecci%C3%B3n_de_basura"&gt;garbage collector&lt;/a&gt; lo elimine.&lt;br /&gt;&lt;br /&gt;La forma de utilizar referencias débiles es muy sencilla, se guardan los objetos en este tipo de colecciones (WeakValueDictionary, WeakKeyDictionary, WeakSet, WeakArray, etc.) y estos vivirán mientras alguien mantenga una referencia fuerte (una referencia normalita, las de toda la vida).  Si el objeto está sólo referenciado en forma débil, en algún momento el garbage collector se lo llevará y nos dejará un &lt;tt&gt;nil&lt;/tt&gt; en su lugar. Así que la única precaución que debemos tomar es considerar que la colección nos devuelva un &lt;tt&gt;nil&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Veamos el código de arriba... mientras alguien mantenga una referencia fuerte (las normales, las de toda la vida) el WeakValueDictionary va a mantener una referencia débil y nuestro método &lt;tt&gt;#findCustomerByID:&lt;/tt&gt; devolverá siempre esa misma instancia manteniendo la identidad. Para el mismo ID siempre devolvemos la misma instancia. En cuanto todos se olviden del objeto en cuestión, y el garbage collector decida llevarse la instancia, nuestra colección olvidará al customer en cuestión.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112566105747908910?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112566105747908910/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112566105747908910' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112566105747908910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112566105747908910'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/09/la-magia-del-smalltalk-captulo-11.html' title='La magia del Smalltalk: Capítulo 11 - Manteniendo la identidad'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112488140998029834</id><published>2005-08-24T11:07:00.000+02:00</published><updated>2005-08-29T12:15:49.276+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 10 - ¡No me encuentro!</title><content type='html'>Los programadores de Smalltalk solemos decir que el ambiente (de Smalltalk) está &lt;i&gt;«vivo»&lt;/i&gt; (&lt;a href="http://rapisardi.org/nw.php?title=espanto_ortografico_las_lcomillas_espano"&gt;gracias Dario&lt;/a&gt;). La tarea de desarrollo en un ambiente de Smalltalk es muy diferente a la programación en un IDE tradicional o en el vi/emacs.&lt;br /&gt;&lt;br /&gt;Es muy, pero muy, raro encontrar &lt;i&gt;«documentación»&lt;/i&gt; fuera del ambiente y la documentación que está dentro del ambiente no está en formato de archivos de ayuda, ni html, ni siquiera en texto.&lt;br /&gt;&lt;br /&gt;La mejor documentación de un ambiente Smalltalk es el mismo ambiente funcionando.&lt;br /&gt;&lt;br /&gt;El ambiente es el mejor ejemplo posible de uso de las clases y de los objetos ya que los casos de uso de los objetos son casos reales que están funcionando delante de nuestros ojos. La documentación en html, pdfs, archivos hlp, etc es demasiado estática y nadie nos garantiza que el ejemplo de uso de tal o cual función o clase sea correcto.&lt;br /&gt;&lt;br /&gt;Quizás lo más importante para comenzar a programar en Smalltalk es aprender a usar el ambiente para buscar información.&lt;br /&gt;&lt;br /&gt;Lo primero que tenemos que saber es que, en cualquier lugar donde veamos texto, podemos evaluar allí mismo código Smalltalk y acceder a las herramientas.&lt;br /&gt;&lt;br /&gt;Una forma de explorar el ambiente es utilizando las herramientas de &lt;tt&gt;&lt;b&gt;senders&lt;/b&gt;&lt;/tt&gt; (&lt;i&gt;«remitente»&lt;/i&gt; o &lt;i&gt;«quien envía el mensaje»&lt;/i&gt;) e &lt;tt&gt;&lt;b&gt;implementors&lt;/b&gt;&lt;/tt&gt; (&lt;i&gt;«implementador»&lt;/i&gt; o &lt;i&gt;«quien sabe responder al mensaje»&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;Seleccionando un fragmento de texto que tenga el envío de un mensaje, podemos pedirle (vía el menú contextual) a nuestro Smalltalk que nos muestro métodos donde el mensaje en cuestión es enviado (&lt;i&gt;«senders»&lt;/i&gt;) o implementaciones del mensaje (&lt;i&gt;«implementors»&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;Supongamos que necesitamos saber como se usa el mensaje &lt;tt&gt;#findTokens:&lt;/tt&gt;. Para eso escribimos el nombre del mensaje en cualquier panel de texto (por ejemplo en un Workspace) y pedimos la opción &lt;i&gt;«senders»&lt;/i&gt; desde el menú contextual o presionando &lt;tt&gt;ALT-n&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/SendersOfFindTokens.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/SendersOfFindTokens.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Seguimos un procedimiento similar para ver las implementaciones del mensaje (&lt;i&gt;«implementors»&lt;/i&gt;), en este caso presionamos &lt;tt&gt;ALT-m&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/ImplementorsOfSelect.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/ImplementorsOfSelect.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Y para terminar, una joyita: El &lt;tt&gt;&lt;b&gt;MethodFinder&lt;/b&gt;&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Esta herramienta puede responder preguntas del tipo: ¿Qué mensajes le puedo enviar a un objeto dado, con unos parámetros dados, para que la respuesta sea la dada?. ¡Qué complicado que quedó escrito!, mejor veamos un ejemplo. Escribimos en el panel de arriba a la izquierda lo siguiente: &lt;tt&gt;'Smalltalk'. $S&lt;/tt&gt; y aceptamos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/MethodFinder-Sample.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/MethodFinder-Sample.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Escribiendo &lt;tt&gt;'Smalltalk'. $S&lt;/tt&gt; le estamos preguntando al &lt;tt&gt;&lt;b&gt;MethodFinder&lt;/b&gt;&lt;/tt&gt; que mensajes le podemos enviar al objeto &lt;tt&gt;'Smalltalk'&lt;/tt&gt; para que la respuesta sea el objeto &lt;tt&gt;$S&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Otro ejemplo sería escribir &lt;tt&gt;'Smalltalk'. 1. $S&lt;/tt&gt;, en este caso le estamos preguntando que mensaje le podemos enviar al objeto &lt;tt&gt;'Smalltalk'&lt;/tt&gt;, con el parámetro 1, para que la respuesta sea el objeto &lt;tt&gt;$S&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/MethodFinder-Sample3.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/MethodFinder-Sample3.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero que con esto estén un poco menos perdidos.&lt;br /&gt;&lt;br /&gt;¡Hasta la próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112488140998029834?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112488140998029834/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112488140998029834' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112488140998029834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112488140998029834'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/la-magia-del-smalltalk-captulo-10-no.html' title='La magia del Smalltalk: Capítulo 10 - ¡No me encuentro!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112418625824329890</id><published>2005-08-16T11:23:00.000+02:00</published><updated>2005-08-16T11:58:16.946+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 9 - Colecciones</title><content type='html'>Pocas cosas tienen un impacto tan grande en la productividad en el desarrollo de software como el manejo de colecciones.  Cualquier lenguaje/ambiente de programación que se precie de serio incluye algún &lt;a href="http://es.wikipedia.org/wiki/Framework"a&gt;framework&lt;/a&gt; para el manejo de colecciones.&lt;br /&gt;&lt;br /&gt;La combinación de los &lt;a href="http://en.wikipedia.org/wiki/Statement_block"&gt;bloques como objeto de pleno derecho&lt;/a&gt; por un lado, el &lt;a href="http://en.wikipedia.org/wiki/Datatype#Static_and_dynamic_typing"&gt;late binding&lt;/a&gt; extremo que predica el Smalltalk y el hecho de tener &lt;a href="http://www.smalltalk.org/smalltalk/TheEarlyHistoryOfSmalltalk_Abstract.html"&gt;más de 30 años de maduración&lt;/a&gt; hacen de las colecciones de Smalltalk uno de los frameworks más poderosos en esta área.&lt;br /&gt;&lt;br /&gt;Para empezar veamos el mensaje básico para las colecciones: &lt;tt&gt;do:&lt;/tt&gt;.  El mensaje &lt;tt&gt;do:&lt;/tt&gt; le pide a una determinada colección que evalúe un bloque dado por cada elemento que contiene.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;'Un string es, obviamente, una colección'&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do: [:each | Transcript show: each; cr]&lt;/tt&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;#(1 2 3 4 5 6 7 8 9 10)&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do: [:each | Transcript show: each; cr]&lt;/tt&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Veamos algunos mensajes más:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;font size="+1"&gt;#do:separatedBy:&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;Evalúa un bloque dado por cada elemento, y evalúa el otro bloque dado entre elementos.&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;#(1 2 3 4 5 6 7 8 9 10)&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do: [:each | Transcript show: each]&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;separatedBy: [Transcript show: ',']&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;font size="+1"&gt;#select:&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;Devuelve una colección, del mismo tipo que la colección receptora del mensaje, con los elementos para los que el bloque dado devuelve &lt;tt&gt;true&lt;/tt&gt;.&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;#(1 2 3 4 5 6 7 8 9 10) select: [:each | each odd]&lt;/tt&gt;&lt;br /&gt;&lt;i&gt;respuesta: #(1 3 5 7 9)&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;font size="+1"&gt;#reject:&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;Similar a &lt;tt&gt;#select:&lt;/tt&gt;, pero devuelve una colección con los elementos donde el bloque devuelve false.&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;#(1 2 3 4 5 6 7 8 9 10) reject: [:each | each odd]&lt;/tt&gt;&lt;br /&gt;&lt;i&gt;respuesta:  #(2 4 6 8 10)&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;font size="+1"&gt;#collect:&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;Devuelve una colección, del mismo tipo que la colección receptora del mensaje, con elementos que son el resultado de la evaluación del bloque por cada elemento del receptor.&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;#(1 2 3 4 5 6 7 8 9 10) collect: [:each | each * 2]&lt;/tt&gt;&lt;br /&gt;&lt;i&gt;respuesta: #(2 4 6 8 10 12 14 16 18 20)&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;¡A coleccionar!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112418625824329890?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112418625824329890/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112418625824329890' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112418625824329890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112418625824329890'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/la-magia-del-smalltalk-captulo-9.html' title='La magia del Smalltalk: Capítulo 9 - Colecciones'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112361481551175133</id><published>2005-08-09T21:12:00.000+02:00</published><updated>2005-08-09T21:17:34.576+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 8 - Algo útil con el #become:</title><content type='html'>Ya es hora de desvelar algo del misterio que existe detrás del &lt;tt&gt;#become:&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Para comenzar, veamos que pasó con el "ejemplo" anterior:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;| s1 s2 |&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;s1 := 'Un String'.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;s2 := 'Un String'.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;s1 become: 'Otro String'.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s1; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s2; cr.&lt;/tt&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Lo que ocurre es muy simple: El compilador crea, en la tabla de símbolos del método, un sólo objeto &lt;tt&gt;'Un String'&lt;/tt&gt;. Ambas variables (&lt;tt&gt;s1&lt;/tt&gt; y &lt;tt&gt;s2&lt;/tt&gt;) apuntan al mismo objeto, para probar lo que digo evalúen:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;| s1 s2 |&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;s1 := 'Un String'.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;s2 := 'Un String'.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: (s1 == s2); cr.&lt;/tt&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Al hacer &lt;tt&gt;#become:&lt;/tt&gt; entre el objeto &lt;tt&gt;'Un String'&lt;/tt&gt; y el objeto &lt;tt&gt;'Otro String'&lt;/tt&gt; &lt;b&gt;todas&lt;/b&gt; las referencias al objeto &lt;tt&gt;'Un String'&lt;/tt&gt; (en este caso las variables &lt;tt&gt;s1&lt;/tt&gt; y &lt;tt&gt;s2&lt;/tt&gt;) se actualizan.&lt;br /&gt;&lt;br /&gt;Este ejemplo (creo que) muestra todo lo relativo al become:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;| s1 s2 s3 |&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;s1 := Date today.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;s2 := s1.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;s3 := 'Un String'.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: '----- pre-become: -----'; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s1; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s2; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s3; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s1 == s2; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s1 == s3; cr.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;s1 become: s3.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: '----- post-become: -----'; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s1; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s2; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s3; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s1 == s2; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s1 == s3; cr.&lt;/tt&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Ahora veamos algunos buenos ejemplos de uso del &lt;tt&gt;#become:&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;¿Recuerdan el &lt;a href="http://es.wikipedia.org/wiki/Proxy_%28patr%C3%B3n_de_dise%C3%B1o%29"&gt;proxy&lt;/a&gt; que hicimos en el &lt;a href="http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-1-no.html"&gt;Capítulo 1&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Los proxies, ya sea que se hagan con &lt;tt&gt;#doesNotUnderstand:&lt;/tt&gt; o de la forma tradicional, son un recurso muy útil pero tienen algunas contras. Una de ellas es la penalidad en performance que implica que cada envío de mensaje pasa a través del proxy generando, al menos, un envío de mensaje más.&lt;br /&gt;&lt;br /&gt;Una solución, muy al estilo de Smalltalk, es hacer un proxy que capture los mensajes con un &lt;tt&gt;#doesNotUnderstand:&lt;/tt&gt; tal cual lo vimos en el &lt;a href="http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-1-no.html"&gt;Capítulo 1&lt;/a&gt;.  Con esa implementación hacemos un &lt;tt&gt;#become:&lt;/tt&gt; que reemplace el proxy con el receptor en cuanto podamos. Eso sería algo así:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;Proxy&gt;&gt;doesNotUnderstand: aMessage&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;"load the proxied object, switch the receiver with it and routes the incoming message"&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;| proxyThenProxied proxiedThenProxy |&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxyThenProxied := self.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;"Lazy load of proxied object"&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxiedThenProxy := self loadProxied.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxyThenProxied become: proxiedThenProxy.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;^ proxyThenProxied&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;perform: aMessage selector&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;withArguments: aMessage arguments&lt;/tt&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Un proxy como este paga el costo de hacer un &lt;tt&gt;#become:&lt;/tt&gt; con el primer mensaje, después se quita del medio removiendo todo impacto en la performance.&lt;br /&gt;&lt;br /&gt;Otra versión muy interesante es hacer que el proxy cargue el objeto decorado en un thread y que haga el &lt;tt&gt;#become:&lt;/tt&gt; cuando termine el proceso de carga.&lt;br /&gt;&lt;br /&gt;Como verán, ¡horas de sana diversión en familia!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112361481551175133?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112361481551175133/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112361481551175133' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112361481551175133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112361481551175133'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/la-magia-del-smalltalk-captulo-8-algo.html' title='La magia del Smalltalk: Capítulo 8 - Algo útil con el #become:'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112361392411219785</id><published>2005-08-09T20:47:00.000+02:00</published><updated>2005-08-09T20:58:44.120+02:00</updated><title type='text'>Varios (¿muchos?) libros gratuitos sobre Smalltalk</title><content type='html'>&lt;a href="http://www.iam.unibe.ch/~ducasse/"&gt;Stéphane Ducasse&lt;/a&gt; se ha tomado el (mucho) tiempo para pedir a la editoriales y a los autores de libros de Smalltalk que ya no se impriman que permitan la publicación on-line.&lt;br /&gt;&lt;br /&gt;Ya consiguió los permisos para publicar nada menos que 19 libros.&lt;br /&gt;&lt;br /&gt;Pueden bajarlos desde: &lt;a href="http://www.iam.unibe.ch/~ducasse/FreeBooks.html"&gt;http://www.iam.unibe.ch/~ducasse/FreeBooks.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A lo mejor a alguien se le ocurre la excelente idea de traducir alguno al Castellano. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112361392411219785?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112361392411219785/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112361392411219785' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112361392411219785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112361392411219785'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/varios-muchos-libros-gratuitos-sobre.html' title='Varios (¿muchos?) libros gratuitos sobre Smalltalk'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112359006961310172</id><published>2005-08-09T14:06:00.000+02:00</published><updated>2005-08-09T14:34:01.646+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 7 - ¿Quién soy?</title><content type='html'>Un objeto es idéntico sólo a si mismo.&lt;br /&gt;&lt;br /&gt;Todos los entornos/lenguajes de OOP nos permiten diferenciar si un par de variables/referencias apuntan al mismo objeto.&lt;br /&gt;&lt;br /&gt;Cualquier persona que programe en algún lenguaje de OOP experimentó con este concepto, sin embargo hay 2 cosas interesantes en cuanto a la identidad en Smalltalk.&lt;br /&gt;&lt;br /&gt;La primera es que la identidad, en Smalltalk, es más "perdurable". Los objetos NO mueren entre sesiones asÌ que la identidad se mantiene mientras los objetos vivan, y eso es mucho más tiempo que lo que viven los objetos en lenguajes como C++/Java/etc (ver &lt;a href="http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-2-ide.html"&gt;Capítulo 2&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;La otra es que Smalltalk permite violar (con perdón de la palabra) la identidad con el mensaje &lt;tt&gt;#become:&lt;/tt&gt;, veamos lo que dice el comentario del método:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(51, 204, 0); font-style: italic;"&gt;"Swap the object pointers of the receiver and the argument. All variables in the entire system that used to point to the receiver now point to the argument, and vice-versa. &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Pues si, lo que leen: La operación &lt;tt&gt;#become:&lt;/tt&gt; intercambia todas las referencias a un objeto por referencias a otro objeto, y viceversa.&lt;br /&gt;&lt;br /&gt;Es una operación muy poderosa, y a la vez peligrosa. Si quieren hacer trizas a su Smalltalk prueben algunas de las siguientes sentencias y traten de averiguar que fue lo que pasó:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;nil become: 'Un string'.&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;Object become: String.&lt;/tt&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;o mi favorita:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;tt&gt;| s1 s2 |&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;s1 := 'Un String'.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;s2 := 'Un String'.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;s1 become: 'Otro String'.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s1; cr.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Transcript show: s2; cr.&lt;/tt&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;¿Qué raro, no? Bueno, no es tan raro... pero tendrán que esperar hasta otro post para saber porque actúa así.&lt;br /&gt;&lt;br /&gt;También tendrán que esperar a otro post para ver ejemplos útiles del uso de &lt;tt&gt;#become:&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;¡Cuantos misterios! &lt;span style="font-weight: bold;"&gt;=o)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112359006961310172?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112359006961310172/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112359006961310172' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112359006961310172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112359006961310172'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/la-magia-del-smalltalk-captulo-7-quin.html' title='La magia del Smalltalk: Capítulo 7 - ¿Quién soy?'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112358702449586402</id><published>2005-08-09T13:27:00.000+02:00</published><updated>2005-08-09T13:40:38.940+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 6 - Polimorfismo</title><content type='html'>La dificultad para definir que son los objetos está dada, justamente, porque no tenemos un concepto más abstracto que el de "Objeto" para refinar. Los objetos son el concepto más abstracto posible.&lt;br /&gt;&lt;br /&gt;Como decía en la &lt;a href="http://diegogomezdeck.blogspot.com/2005/08/la-magia-del-smalltalk-captulo-5-qu.html"&gt;nota anterior&lt;/a&gt;, es imposible definir objeto sin sujeto ni observado sin observador. Eso nos lleva al siguiente concepto de la &lt;a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos"&gt;OOP&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Polimorfismo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se dice que un objeto es polimórfico con otro cuando un determinado observador no puede distinguirlos entre si. Como en Smalltalk no se puede observar un objeto más que enviándole mensajes, un objeto es polimórfico con otro cuando un determinado observador les envía un conjunto de mensajes y ambos responden de manera indistinguible.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;tt&gt;[TAMBIÉN &lt;/tt&gt;&lt;/b&gt;&lt;b&gt;&lt;tt&gt;CONTINUARÁ...&lt;/tt&gt;&lt;/b&gt;&lt;b&gt;&lt;tt&gt;]&lt;/tt&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112358702449586402?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112358702449586402/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112358702449586402' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112358702449586402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112358702449586402'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/la-magia-del-smalltalk-captulo-6.html' title='La magia del Smalltalk: Capítulo 6 - Polimorfismo'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112298751561312427</id><published>2005-08-02T14:58:00.000+02:00</published><updated>2005-08-02T15:01:56.250+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 5 - ¿Qué son los Objetos?</title><content type='html'>Es imposible, siendo argentino como soy, no caer en algún momento en la filosofía barata o en el psicoanálisis. A propósito, ¿Alguien save porqué hay tantos dentistas argentinos en España?.&lt;br /&gt;&lt;br /&gt;Dicho lo dicho voy a intentar definir un poco los conceptos fundamentales de la &lt;a href="http://es.wikipedia.org/wiki/Objetos_%28programaci%C3%B3n_orientada_a_objetos%29"&gt;OOP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hasta ahora me venía desentendiendo de casi cualquier situación comprometida contestando a cualquier pregunta del tipo:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;i&gt;&lt;b&gt;¿Qué es xxx?&lt;/b&gt;&lt;/i&gt;&lt;/div&gt; &lt;div align="center"&gt;&lt;span style="font-size:78%;"&gt;(Reemplace xxx por lo que quiera saber)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Con la clásica respuesta OOP:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;i&gt;&lt;b&gt;xxx es un objeto.&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;El problema comienza en cuanto el interlocutor se cansa y nos pregunta:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;i&gt;&lt;b&gt;¿Qué son los objetos?&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;Aclaremos que no valen las clásicas respuestas informáticas que dicen todas más o menos así:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;i&gt;"Un Objeto es una estructura de datos más los procedimientos para impactar sobre esos datos"&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;Esas respuestas nos dicen como se implementa, en una computadora, la idea de un objeto pero no nos dicen que son realmente los objetos. Se confunde, en esas definiciones, la idea con la implementación de las mismas.&lt;br /&gt;&lt;br /&gt;Primero reflexionemos sobre como contestamos a preguntas del tipo:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;i&gt;&lt;b&gt;¿Qué es un perro?  ¿Qué es el amor?  ¿Qué es el arroz?&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;/div&gt; Para contestar a esas preguntas, nos valemos de un concepto más abstracto y lo especializamos (lo refinamos) de alguna forma:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Un perro &lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;es un animal&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; que ladra y puede morderte.&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;El amor &lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;es un sentimiento&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; que no puede conocerse hasta que se siente.&lt;br /&gt;El arroz &lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;es un cereal&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; con el cual, mi mamá, hace un arroz con leche increíble.&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Veamos las definiciones en la &lt;a href="http://es.wikipedia.org/"&gt;Wikipedia:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr style="font-size: 78%;" noshade="noshade"&gt; &lt;b&gt;&lt;a href="http://es.wikipedia.org/wiki/Perro"&gt;Perro&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;El &lt;b&gt;perro&lt;/b&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;es un mamífero&lt;/span&gt; que pertenece a la familia &lt;i&gt;&lt;a href="http://es.wikipedia.org/wiki/Canidae"&gt;Canidae&lt;/a&gt;&lt;/i&gt;, al igual que los &lt;a href="http://es.wikipedia.org/wiki/Lobo"&gt;lobos&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Zorro"&gt;zorros&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Coyote"&gt;coyotes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Generalmente, el término 'perros' es utilizado para referirse a la raza doméstica (&lt;i&gt;Canis familiaris&lt;/i&gt;), la cual se cree que desciende de un ancestro similar al lobo. Algunos científicos sostienen, sin embargo, que el perro es una subespecie de lobo, &lt;i&gt;Canis lupus familiaris&lt;/i&gt;.&lt;br /&gt;&lt;hr noshade="noshade"  style="font-size:78%;"&gt; &lt;b&gt;&lt;a href="http://es.wikipedia.org/wiki/Arroz"&gt;Arroz&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;El &lt;b&gt;arroz&lt;/b&gt; (&lt;i&gt;Oryza sativa&lt;/i&gt;) &lt;span style="color: rgb(255, 102, 0);"&gt;es una planta de la familia &lt;a href="http://es.wikipedia.org/wiki/Poaceae"&gt;Poaceae&lt;/a&gt;&lt;/span&gt;, comestible que constituye la base de la dieta en &lt;a href="http://es.wikipedia.org/wiki/Asia"&gt;Asia&lt;/a&gt;.&lt;br /&gt;Su nutriente principal son los &lt;a href="http://es.wikipedia.org/wiki/Hidratos_de_carbono"&gt;hidratos de carbono&lt;/a&gt;, algo de proteínas (7%) y en estado natural bastantes &lt;a href="http://es.wikipedia.org/wiki/Vitamina"&gt;vitaminas&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Elemento_qu%C3%ADmico_esencial"&gt;minerales&lt;/a&gt; que se suelen perder en gran proporción (hasta un -85% de vitaminas) con los procesos de refinado y pulido.&lt;br /&gt;&lt;hr noshade="noshade" size="1"&gt; &lt;b&gt;&lt;a href="http://es.wikipedia.org/wiki/Amor"&gt;Amor&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;El &lt;b&gt;amor&lt;/b&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;es un &lt;a href="http://es.wikipedia.org/w/index.php?title=Afecto&amp;action=edit"&gt;afecto&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Sentimiento"&gt;sentimiento&lt;/a&gt; o &lt;a href="http://es.wikipedia.org/wiki/Emoci%C3%B3n"&gt;emoción&lt;/a&gt;&lt;/span&gt; que hace desear el bien y la compañía de otro.&lt;br /&gt;&lt;hr noshade="noshade" size="1"&gt;&lt;br /&gt;&lt;br /&gt;Siempre que definimos algo nos basamos en un concepto más abstracto y lo refinamos.&lt;br /&gt;&lt;br /&gt;Ahora supongamos que tenemos que definir ese "algo", eso que tienen en común los perros, el arroz y el amor.&lt;br /&gt;&lt;br /&gt;La verdad es que no tienen muchas cosas en común los perros, el arroz o el amor (o, al menos yo, no las veo) excepto que sabemos distinguirlos entre si.&lt;br /&gt;&lt;br /&gt;No podemos definir Objeto si no hablamos de un Sujeto. No podemos hablar de un Observado si no hay un Observador. No se puede definir un termino sin el otro.&lt;br /&gt;&lt;br /&gt;Entonces, siempre que hablamos de un Objeto estamos diciendo también que ese objeto existe porque hay alguien que lo observa, alguien que reflexiona sobre su existencia.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Al reconocer un objeto automáticamente estamos dibujando un límite&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 0);"&gt;u&lt;/span&gt;na &lt;span style="color: rgb(0, 0, 0);"&gt;f&lt;/span&gt;rontera,&lt;span style="color: rgb(0, 0, 0);"&gt; entre ese objeto y el resto del universo.&lt;/span&gt; La tarea de encontrar objetos no es más que la de dibujar fronteras que den un poco de orden al todo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;tt&gt;[&lt;/tt&gt;&lt;/b&gt;&lt;b&gt;&lt;tt&gt;CONTINUARÁ...&lt;/tt&gt;&lt;/b&gt;&lt;b&gt;&lt;tt&gt;]&lt;/tt&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112298751561312427?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112298751561312427/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112298751561312427' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112298751561312427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112298751561312427'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/la-magia-del-smalltalk-captulo-5-qu.html' title='La magia del Smalltalk: Capítulo 5 - ¿Qué son los Objetos?'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112297748252823260</id><published>2005-08-02T12:06:00.000+02:00</published><updated>2005-08-02T12:13:01.376+02:00</updated><title type='text'>Squeak - Un Mundo para Aprender</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/portadasmall.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/portadasmall.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ya salió a la calle el nuevo libro de Squeak hecho por un grupo de profesores extremeños y yo (&lt;a href="http://diegogomezdeck.blogspot.com/2005/05/squeak-un-mundo-para-aprender.html"&gt;yo sólo escribí el capítulo 1&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pueden comprar el libro en:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://www.hispalinux.net/tienda/editlin_prods.html"&gt;http://www.hispalinux.net/tienda/editlin_prods.html&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;También pueden bajar PDFs con los borradores de los capítulos desde:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://www.small-land.org/SqueakUnMundoParaAprender/"&gt;http://www.small-land.org/SqueakUnMundoParaAprender/&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;¡Qué lo disfruten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112297748252823260?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112297748252823260/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112297748252823260' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112297748252823260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112297748252823260'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/squeak-un-mundo-para-aprender.html' title='Squeak - Un Mundo para Aprender'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112288711187881252</id><published>2005-08-01T11:05:00.000+02:00</published><updated>2005-08-01T11:08:37.103+02:00</updated><title type='text'>Reinventando la rueda</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.folklore.org/projects/Macintosh/images/parc.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.folklore.org/projects/Macintosh/images/parc.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En en sitio &lt;a href="http://www.folklore.org/"&gt;http://www.folklore.org/&lt;/a&gt;, hay una nota interesante (en inglés) sobre los aportes que Smalltalk le hizo a la Apple Lisa primero, y a la Apple Macintosh después.&lt;br /&gt;&lt;br /&gt;La pueden leer en: &lt;a href="http://www.folklore.org/StoryView.py?project=Macintosh&amp;story=On_Xerox,_Apple_and_Progress.txt&amp;amp;topic=Origins&amp;sortOrder=Sort%20by%20Date&amp;amp;detail=medium"&gt;On Xerox, Apple and Progress&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112288711187881252?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112288711187881252/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112288711187881252' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112288711187881252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112288711187881252'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/08/reinventando-la-rueda.html' title='Reinventando la rueda'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112264061434034490</id><published>2005-07-29T14:36:00.000+02:00</published><updated>2005-07-29T14:39:54.670+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 4 - ¿Qué es el compilador? ¡Un objeto!</title><content type='html'>¿Recuerdan que dijimos, al menos unas 278 veces, que en Smalltalk todo es un objeto?&lt;br /&gt;&lt;br /&gt;Eso nos vale para contestar a casi cualquier pregunta: ¿Qué es la paz? ¿Qué es el amor? ¿Qué es Dios? ¿Qué es la nada? ¡Todos son objetos! :-)&lt;br /&gt;&lt;br /&gt;No puedo decir nada sobre la paz, el amor, Dios o la nada así que mejor hablo de un tipo de objeto que conozco un poco mejor: &lt;tt&gt;Compiler&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;El compilador de Smalltalk está escrito en Smalltalk. Además de los clásicos problemas de bootstrapping de los lenguajes escritos en si mismo, esto permite un gran poder dentro del ambiente.&lt;br /&gt;&lt;br /&gt;Se pueden hacer desde cosas muy simples como evaluar código Smalltalk y procesar el resultado:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bg cellpadding="10" cellspacing="0" style="color:#ffff99;"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;tt style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;Compiler&lt;/span&gt;&lt;/tt&gt;&lt;tt style="color: rgb(0, 0, 0);"&gt; evaluate: &lt;/tt&gt;&lt;tt style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(128, 128, 0);"&gt;'5 factorial'&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;&lt;/span&gt;&lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;A cosas un poco más bonitas como especializar el compilador para determinadas clases del ambiente. Veamos un ejemplo: Supongamos que queremos hacer un Prolog dentro de nuestro Smalltalk. Podríamos escribir un compilador específico para la sintaxis de Prolog y decirle al Smalltalk que determinadas clases (las herencias de una clase en particular) usen otro compilador y no el default.&lt;br /&gt;&lt;br /&gt;Para eso simplemente (¿?) tenemos que escribir el compilador de Prolog, y en la clase que servirá de superclase para las cosas en Prolog, especificamos nuestro compilador:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;b&gt;&lt;tt&gt;Prolog&gt;&gt;compilerClass&lt;/tt&gt;&lt;/b&gt;&lt;br /&gt;    &lt;tt&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;"Answer a compiler class appropriate for source methods of &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;this class."&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;    &lt;tt&gt;^ &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;PrologCompiler&lt;/span&gt;&lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Les dejo un paper muy bueno que habla del compilador de Smalltalk (en Squeak y VisualWorks): &lt;a href="http://www.smalltalkchronicles.net/edition2-1/st_compiler.htm"&gt;The Hitch Hiker's Guide to the Smalltalk Compiler&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;¡A jugar con el compilador!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112264061434034490?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112264061434034490/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112264061434034490' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112264061434034490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112264061434034490'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-4-qu-es.html' title='La magia del Smalltalk: Capítulo 4 - ¿Qué es el compilador? ¡Un objeto!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112263781322646469</id><published>2005-07-29T13:50:00.000+02:00</published><updated>2005-07-29T13:57:43.276+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 3 - ¿Cuanto? ¿Facto qué?</title><content type='html'>¿Tienen una idea del pedazo de número que es el factorial de 1000?&lt;br /&gt;&lt;br /&gt;Uhhh, perdón... Primero lo primero: ¿Tienen una idea &lt;a href="http://es.wikipedia.org/wiki/Factorial"&gt;que es el factorial&lt;/a&gt;? :-)&lt;br /&gt;&lt;br /&gt;Rápidamente les recuerdo que el factorial de un número N&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;i&gt;&lt;tt&gt;&lt;b&gt;n&lt;/b&gt;&lt;/tt&gt;&lt;/i&gt;&lt;tt&gt;&lt;b&gt;! = 1 × 2 × 3 × ... × (&lt;/b&gt;&lt;/tt&gt;&lt;tt&gt;&lt;b&gt;&lt;i&gt;n&lt;/i&gt;&lt;/b&gt;&lt;/tt&gt;&lt;tt&gt;&lt;b&gt;-1) × &lt;/b&gt;&lt;/tt&gt;&lt;tt&gt;&lt;b&gt;&lt;i&gt;n&lt;/i&gt;&lt;/b&gt;&lt;/tt&gt;&lt;/div&gt;&lt;br /&gt;El factorial de 0, por convención, es 1. El factorial de 1 es 1, el factorial de 2 es 1x2, el factorial de 3 es 1x2x3, el factorial de 4 es 1x2x3x4, etc.&lt;br /&gt;&lt;br /&gt;Ahora pensemos un segundo: ¿Cuanto será el factorial de 1000? Es un número monstruoso de grande. Usemos nuestro Smalltalk para experimentar un poco.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;tt&gt;1000 factorial.&lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;El factorial de 1000 es, según mi squeak:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#cc99ff" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; 402387260077093773543702433923003985719374864210714632543799910429938&lt;br /&gt;512398629020592044208486969404800479988610197196058631666872994808558&lt;br /&gt;901323829669944590997424504087073759918823627727188732519779505950995&lt;br /&gt;276120874975462497043601418278094646496291056393887437886487337119181&lt;br /&gt;045825783647849977012476632889835955735432513185323958463075557409114&lt;br /&gt;262417474349347553428646576611667797396668820291207379143853719588249&lt;br /&gt;808126867838374559731746136085379534524221586593201928090878297308431&lt;br /&gt;392844403281231558611036976801357304216168747609675871348312025478589&lt;br /&gt;320767169132448426236131412508780208000261683151027341827977704784635&lt;br /&gt;868170164365024153691398281264810213092761244896359928705114964975419&lt;br /&gt;909342221566832572080821333186116811553615836546984046708975602900950&lt;br /&gt;537616475847728421889679646244945160765353408198901385442487984959953&lt;br /&gt;319101723355556602139450399736280750137837615307127761926849034352625&lt;br /&gt;200015888535147331611702103968175921510907788019393178114194545257223&lt;br /&gt;865541461062892187960223838971476088506276862967146674697562911234082&lt;br /&gt;439208160153780889893964518263243671616762179168909779911903754031274&lt;br /&gt;622289988005195444414282012187361745992642956581746628302955570299024&lt;br /&gt;324153181617210465832036786906117260158783520751516284225540265170483&lt;br /&gt;304226143974286933061690897968482590125458327168226458066526769958652&lt;br /&gt;682272807075781391858178889652208164348344825993266043367660176999612&lt;br /&gt;831860788386150279465955131156552036093988180612138558600301435694527&lt;br /&gt;224206344631797460594682573103790084024432438465657245014402821885252&lt;br /&gt;470935190620929023136493273497565513958720559654228749774011413346962&lt;br /&gt;715422845862377387538230483865688976461927383814900140767310446640259&lt;br /&gt;899490222221765904339901886018566526485061799702356193897017860040811&lt;br /&gt;889729918311021171229845901641921068884387121855646124960798722908519&lt;br /&gt;296819372388642614839657382291123125024186649353143970137428531926649&lt;br /&gt;875337218940694281434118520158014123344828015051399694290153483077644&lt;br /&gt;569099073152433278288269864602789864321139083506217095002597389863554&lt;br /&gt;277196742822248757586765752344220207573630569498825087968928162753848&lt;br /&gt;863396909959826280956121450994871701244516461260379029309120889086942&lt;br /&gt;028510640182154399457156805941872748998094254742173582401063677404595&lt;br /&gt;741785160829230135358081840096996372524230560855903700624271243416909&lt;br /&gt;004153690105933983835777939410970027753472000000000000000000000000000&lt;br /&gt;000000000000000000000000000000000000000000000000000000000000000000000&lt;br /&gt;000000000000000000000000000000000000000000000000000000000000000000000&lt;br /&gt;000000000000000000000000000000000000000000000000000000000000000000000&lt;br /&gt;000000000000000 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Ufff... voy a tener que confiar en Squeak y creerle que ese número es el resultado. Para validar un poco la respuesta, voy a usar algo del poco conocimiento que me dio la escuela secundaria, y voy a usar la propiedad de los factoriales que dice que:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;tt&gt;&lt;b&gt;N! / (N-1)! = N&lt;/b&gt;&lt;/tt&gt;&lt;/div&gt;&lt;br /&gt;Entonces evaluamos en Smalltalk:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;tt&gt;1000 factorial / 999 factorial.&lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Y con un poquito de suerte nos debería contestar 1000.&lt;br /&gt;&lt;br /&gt;Volviendo al número monstruoso anterior: creo que no hace falta aclarar que ese número no cabe en un entero ni de 16, ni de 32, ni de 64 bits. Para el manejo de enteros tenemos 3 clases:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;SmallInteger&lt;/tt&gt;: para enteros que entren en 31 bits.&lt;br /&gt;&lt;tt&gt;LargePositiveInteger&lt;/tt&gt;: para enteros positivos que no entren en 30 bits.&lt;br /&gt;&lt;tt&gt;LargeNegativeInteger&lt;/tt&gt;: como la anterior, pero para negativos.&lt;br /&gt;&lt;br /&gt;Todas tienen como superclase a &lt;tt&gt;Integer&lt;/tt&gt;, que es la clase abstracta para todas las implementaciones de enteros.  Justamente en &lt;tt&gt;Integer&lt;/tt&gt; es donde encontramos la implementación de &lt;tt&gt;#factorial&lt;/tt&gt;. Es decir: el algoritmo para calcular factoriales de número chicos, o de número grandes, es el mismo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Algunos ejercicios más con factoriales:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;¿Cuántos dígitos tiene el factorial de 1000?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;tt&gt;1000 factorial asString size&lt;/tt&gt;  &lt;b&gt;&lt;span style="color: rgb(153, 51, 102);"&gt;-&amp;gt;  2568&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;¿Cuánto tiempo tarda mi Squeak en calcular el factorial de 1000?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;tt&gt;Time millisecondsToRun: [1000 factorial]&lt;/tt&gt;  &lt;b&gt;&lt;span style="color: rgb(153, 51, 102);"&gt;-&amp;gt;  12&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Sí, es verdad, el factorial de 1000 tarda en calcular 12 milisegundos en mi máquina... Si no lo creen, prueben ustedes mismos.&lt;br /&gt;&lt;br /&gt;¿Cuánto tiempo tarda en calcular el factorial de 1000 el lenguaje de programación que están usando?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112263781322646469?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112263781322646469/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112263781322646469' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112263781322646469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112263781322646469'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-3.html' title='La magia del Smalltalk: Capítulo 3 - ¿Cuanto? ¿Facto qué?'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112263385908121642</id><published>2005-07-29T12:44:00.000+02:00</published><updated>2005-07-29T12:45:31.460+02:00</updated><title type='text'>Squeak de Small-Land versión 3.8 - Instalador para Windows</title><content type='html'>&lt;a href="http://germanarduino.blogspot.com/"&gt;Germán Arduino&lt;/a&gt; acaba de &lt;a href="http://groups.yahoo.com/group/small_land/message/1473"&gt;anunciar&lt;/a&gt;, en la &lt;a href="http://groups.yahoo.com/group/small_land/"&gt;lista de correo de Small-Land&lt;/a&gt;, la liberación del instalador para el sistema operativo del lado oscuro (es decir, Windows).&lt;br /&gt;&lt;br /&gt;Pide ayuda para hacer pruebas de instalación en diferentes entornos.&lt;br /&gt;&lt;br /&gt;Pueden ver un screenshot del instalador y bajarlo desde: &lt;a href="http://swiki.agro.uba.ar/small_land/7."&gt;http://swiki.agro.uba.ar/small_land/7&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112263385908121642?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112263385908121642/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112263385908121642' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112263385908121642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112263385908121642'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/squeak-de-small-land-versin-38.html' title='Squeak de Small-Land versión 3.8 - Instalador para Windows'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112246889505339715</id><published>2005-07-27T14:54:00.000+02:00</published><updated>2006-08-30T18:05:25.693+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 2 - ¿IDE? no gracias</title><content type='html'>Es muy difícil mostrar las diferencias que tiene Smalltalk con los lenguajes de programación “tradicionales”.&lt;br /&gt;&lt;br /&gt;Una de las cosas que cuesta trabajo ver es la diferencia que implica el hecho que Smalltalk sea un ambiente. Un ambiente de Smalltalk &lt;b&gt;no es&lt;/b&gt; un nuevo tipo de &lt;a href="http://es.wikipedia.org/wiki/Entorno_integrado_de_desarrollo"&gt;IDE&lt;/a&gt; (Integrated Development Environment). En Smalltalk los objetos sobreviven al hecho de salir del Smalltalk. Todos los objetos que tengamos instanciados son grabados, en el estado exacto que están, al disco rígido en el momento de grabar la imagen (se llama imagen porque queda en el disco una imagen de la memoria de la máquina).&lt;br /&gt;&lt;br /&gt;Este hecho nos expone a ciertas características que ni soñamos cuando usamos lenguajes con el clásico ciclo de desarrollo: &lt;a href="http://es.wikipedia.org/wiki/Vi"&gt;vi&lt;/a&gt;/&lt;a href="http://es.wikipedia.org/wiki/Emacs"&gt;emacs&lt;/a&gt; &amp;gt; &lt;a href="http://es.wikipedia.org/wiki/Compilador"&gt;compilar&lt;/a&gt; &amp;gt; ejecutar el código &amp;gt; &lt;a href="http://es.wikipedia.org/wiki/Depurador"&gt;depurar&lt;/a&gt; &amp;gt; vi/emacs. Los nuevos IDEs (como el &lt;a href="http://es.wikipedia.org/wiki/Eclipse_%28computaci%C3%B3n%29"&gt;Eclipse&lt;/a&gt;) disimulan ese ciclo, pero no lo mejoran.&lt;br /&gt;&lt;br /&gt;La diferencia fundamental es que, en Smalltalk, los objetos están siempre &lt;i&gt;“vivos”,&lt;/i&gt; y no mueren cuando uno tiene que escribir código. Este implica, entre otras cosas, que los objetos sobreviven a los cambios en las clases.&lt;br /&gt;&lt;br /&gt;Una de las primeras cosas que suelo mostrar cuando explico Smalltalk es lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;     &lt;li&gt;Creo una clase vacía, sin nada. &lt;/li&gt;&lt;/ul&gt; &lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/clasevacia.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/clasevacia.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;ul&gt;     &lt;li&gt;Instancio un objeto de esa clase y lo inspecciono. &lt;/li&gt;&lt;/ul&gt; &lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/inspector1.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/inspector1.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;ul&gt;     &lt;li&gt;Con el inspector a la vista, sin cerrarlo, modifico la estructura de la clase (por ejemplo agregando una variable de instancia). &lt;/li&gt;&lt;/ul&gt; &lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/clasemodificada2.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/clasemodificada2.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;ul&gt;     &lt;li&gt;Ahora el inspector muestra la instancia actualizada a la nueva forma de la clase. &lt;/li&gt;&lt;/ul&gt; &lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/inspectoractualizado2.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/inspectoractualizado2.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Este simple ejercicio muestra una característica fundamental de la programación con Smalltalk. Ahora imaginemos que salimos (grabando) del Squeak después del segundo paso, que nos vamos de vacaciones por 15 días, y que abrimos el Squeak y hacemos los otros 2 pasos.... ¿Qué es lo que ocurre? Nada. Sólo ocurrió que nuestro objeto (la única instancia de Customer) se "durmió" una siesta de 15 días esperando hasta que lo despertemos (¡Al mejor &lt;a href="http://www.grimsociety.com/mausoleum/wdisney.html"&gt;estilo de Walt Disney&lt;/a&gt;!).&lt;br /&gt;&lt;br /&gt;De hecho, en cualquier Squeak actual, hay objetos que llevan casi 30 años instanciados (desde el &lt;a href="http://users.ipa.net/%7Edwighth/smalltalk/St76/Smalltalk76ProgrammingSystem.html"&gt;Smalltalk/76&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112246889505339715?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112246889505339715/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112246889505339715' title='9 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112246889505339715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112246889505339715'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-2-ide.html' title='La magia del Smalltalk: Capítulo 2 - ¿IDE? no gracias'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112246023731067048</id><published>2005-07-27T12:30:00.000+02:00</published><updated>2005-07-27T12:30:37.326+02:00</updated><title type='text'>PDFs sobre Squeak en Castellano</title><content type='html'>Con esta &lt;A HREF="http://www.google.es/search?as_q=squeak&amp;num=10&amp;hl=es&amp;btnG=B%C3%BAsqueda+en+Google&amp;as_epq=&amp;as_oq=&amp;as_eq=&amp;lr=lang_es&amp;as_ft=i&amp;as_filetype=pdf&amp;as_qdr=all&amp;as_occt=any&amp;as_dt=i&amp;as_sitesearch="&gt;complicada b&amp;#250;squeda en google&lt;/A&gt; podemos ver todos los PDFs, en Castellano que hablen de Squeak.&lt;BR&gt; &lt;BR&gt; Especialmente les recomiendo: &lt;A HREF="http://dewey.uab.es/pmarques/pdigital/simo/adriana.pdf"&gt;http://dewey.uab.es/pmarques/pdigital/simo/adriana.pdf&lt;/A&gt;&lt;BR&gt; &lt;BR&gt; &amp;#191;Qui&amp;#233;n dijo que no hay material sobre Squeak?&lt;BR&gt; &lt;BR&gt; &amp;#161;A leer!&lt;BR&gt; &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112246023731067048?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112246023731067048/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112246023731067048' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112246023731067048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112246023731067048'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/pdfs-sobre-squeak-en-castellano.html' title='PDFs sobre Squeak en Castellano'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112202291940036086</id><published>2005-07-22T11:01:00.000+02:00</published><updated>2005-07-22T11:35:50.746+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 1 - ¡No entiendo nada!</title><content type='html'>Creo que ya habrá quedado claro (del &lt;a href="http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-0.html"&gt;Capítulo 0&lt;/a&gt;) que en Smalltalk todo es un &lt;b&gt;objeto&lt;/b&gt;, y que toda la computación se realiza enviando &lt;b&gt;mensajes&lt;/b&gt; a los objetos.&lt;br /&gt;&lt;br /&gt;Pero, ¿qué sucede cuando le enviamos un mensaje a un objeto?.&lt;br /&gt;&lt;br /&gt;Lo que ocurre es que la máquina virtual busca algún método que pueda activar para resolver el mensaje. La búsqueda empieza por la clase del objeto receptor (o la instancia misma, dependiendo del sabor de Smalltalk) y, de no encontrar un método, continua buscando hasta la clase &lt;i&gt;"root"&lt;/i&gt; que suele ser &lt;tt&gt;Object&lt;/tt&gt; (o &lt;tt&gt;ProtoObject&lt;/tt&gt; en Smalltalk más modernos).&lt;br /&gt;&lt;br /&gt;Hasta ahora no es muy diferente a lo que ocurre en los lenguajes &lt;i&gt;"tradicionales"&lt;/i&gt; orientados a objetos (como Java, C++, C#, etc).&lt;br /&gt;&lt;br /&gt;¿Qué ocurre cuando no hay un método que sirva para resolver el envío del mensaje? Ocurre que la máquina virtual activa el método &lt;tt&gt;#doesNotUnderstand:&lt;/tt&gt; que, al estar implementado en &lt;tt&gt;Object&lt;/tt&gt; (o en &lt;tt&gt;ProtoObject&lt;/tt&gt;), está siempre disponible para ser evaluado con un objeto de clase &lt;tt&gt;Message&lt;/tt&gt; como parámetro.&lt;br /&gt;&lt;br /&gt;En el objeto de clase &lt;tt&gt;Message&lt;/tt&gt; podemos saber el nombre y los parámetros del mensaje original.&lt;br /&gt;&lt;br /&gt;El comentario en &lt;tt&gt;Object&amp;gt;&amp;gt;doesNotUnderstand:&lt;/tt&gt; dice:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;"Handle the fact that there was an attempt to send the given message to the receiver but the receiver does not understand this message (typically sent from the machine when a message is sent to the receiver and no method is defined for that selector)"&lt;/span&gt;&lt;/tt&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Veamos un ejemplo. Imaginemos un objeto de clase &lt;tt&gt;ClaseMágica&lt;/tt&gt; que tiene implementado el método &lt;tt&gt;#doesNotUnderstand:&lt;/tt&gt; de la siguiente forma:  &lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;b&gt;&lt;tt&gt;ClaseMágica&gt;&gt;doesNotUnderstand: &lt;/tt&gt;&lt;/b&gt;&lt;b&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;aMessage&lt;/span&gt;&lt;/tt&gt;&lt;/b&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="font-style: italic;"&gt;   &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;i&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;"The answer is 42"&lt;/span&gt;&lt;/i&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;   ^ &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;42&lt;/span&gt;&lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Eso hará que cualquier mensaje enviado a las instancias de &lt;tt&gt;ClaseMágica&lt;/tt&gt; (y subclases) respondan siempre 42 como resultado.&lt;br /&gt;&lt;br /&gt;El ejemplo anterior es muy simple y no es demasiado útil (al menos que creamos que la respuesta para todo es 42), pero miremos un ejemplo un poquito más útil: &lt;ul&gt;     &lt;li&gt;Creamos una clase de nombre &lt;tt&gt;Proxy&lt;/tt&gt; que tenga una variable de instancia llamada &lt;tt&gt;target&lt;/tt&gt;.      &lt;/li&gt;&lt;li&gt;Creamos un constructor y un método de inicialización para definir cual es el target de nuestro &lt;tt&gt;Proxy&lt;/tt&gt;.      &lt;/li&gt;&lt;li&gt;Ahora implementamos &lt;tt&gt;#doesNotUnderstand:&lt;/tt&gt; de esta forma: &lt;/li&gt;&lt;/ul&gt; &lt;div align="center"&gt;&lt;table bgcolor="#ffff99" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;pre&gt; &lt;b&gt;&lt;tt&gt;Proxy&gt;&gt;doesNotUnderstand: &lt;/tt&gt;&lt;/b&gt;&lt;b&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;aMessage&lt;/span&gt;&lt;/tt&gt;&lt;/b&gt; &lt;/pre&gt;&lt;span style="font-family:monospace;"&gt;&lt;span style="font-style: italic;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;tt&gt;&lt;i&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;"delegate the message to the receiver's target"&lt;/span&gt;&lt;/i&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;      &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Transcript&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt; show: &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;target&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt; asString , &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;' is going to receive the message '&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt; , &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;aMessage&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt; asString; cr.&lt;/tt&gt;  &lt;pre&gt; &lt;tt&gt;   ^ &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;target&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;         perform: &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;aMessage&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt; selector&lt;br /&gt;         &lt;/tt&gt;&lt;tt&gt;withArguments: &lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;aMessage&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt; argument&lt;/tt&gt;s &lt;/pre&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;pre&gt;  &lt;/pre&gt; Lo interesante de este ejemplo es que instancias de clase &lt;tt&gt;Proxy&lt;/tt&gt; pueden hacer de proxy (valga la redundancia) a objetos de cualquier clase. En lenguajes de &lt;i&gt;"early binding"&lt;/i&gt; (como el Java, C++, C#, etc) habría que crear una clase de Proxy para cada clase de objeto que queramos envolver y mantenerlas sincronizadas.&lt;br /&gt;&lt;br /&gt;Otro ejemplo de uso de DNU (#doesNotUndestand:) lo pueden encontrar en mi paquete de &lt;a href="http://minnow.cc.gatech.edu/squeak/2480"&gt;ODBC para Squeak&lt;/a&gt;, específicamente en la clase &lt;tt&gt;ODBCRow&lt;/tt&gt;. Este truco permite que las filas de una consulta SQL respondan a mensajes con el nombre de las columnas que genera la consulta, es decir: Si se ejecuta una consulta SQL tipo &lt;i&gt;&lt;tt&gt;SELECT firstName, lastName FROM Customer&lt;/tt&gt;&lt;/i&gt;, las filas sabrán responder a los mensajes &lt;tt&gt;#firstName&lt;/tt&gt; y &lt;tt&gt;#lastName&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;También usé este truco en el paquete &lt;a href="http://minnow.cc.gatech.edu/squeak/2288"&gt;rST (Remote Smalltalk)&lt;/a&gt; para los proxies que delegan los mensajes desde un Smalltalk a otro.&lt;br /&gt;&lt;br /&gt;Si se quedaron con ganas de ver más, miren las clases &lt;tt&gt;ObjectTracer&lt;/tt&gt; y &lt;tt&gt;ObjectViewer&lt;/tt&gt; en sus respectivos Squeak.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112202291940036086?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112202291940036086/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112202291940036086' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112202291940036086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112202291940036086'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-1-no.html' title='La magia del Smalltalk: Capítulo 1 - ¡No entiendo nada!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112184858856749678</id><published>2005-07-20T10:36:00.000+02:00</published><updated>2005-07-20T10:38:01.250+02:00</updated><title type='text'>La magia del Smalltalk: Capítulo 0</title><content type='html'>Voy a probar suerte con una serie de artículo que cuenten las cosas que me sorprendieron de Smalltalk cuando empecé a aprenderlo.  Esto NO pretende ser un curso de Smalltalk ni mucho menos, sólo pretendo divertirme un poco mostrando las cosas "raras", "locas" o "esotéricas" del Smalltalk.&lt;br /&gt;&lt;br /&gt;Esta serie de artículos podría bien llamarse: &lt;b&gt;&lt;i&gt;"Pruebe esto en su lenguaje de preferencia"&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Como este es el capítulo 0, no esperen gran cosa... es sólo el "concept" ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Al ruedo:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Objeto/Mensaje:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Lo primero, y más importante, es que en Smalltalk &lt;b&gt;todo es un objeto&lt;/b&gt; y toda la computación se hace enviando &lt;b&gt;mensajes a los objetos&lt;/b&gt;.  Cuando digo &lt;i&gt;"todo"&lt;/i&gt; no me refiero a ese &lt;i&gt;"todo, pero..."&lt;/i&gt; al que estamos acostumbrados los programadores.&lt;br /&gt;&lt;br /&gt;Para dejarme de tanto rollo, voy a dar ejemplos concretos de cosas que son Objeto/Mensaje en Smalltalk y que no suelen serlo en los lenguajes llamados "Orientados a Objetos". Las clases, el true, el false, el nil, el compilador, los métodos, el debuger, los contextos de activación de los métodos, los números, los arrays, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;El comportamiento (aka el "código") es un Objeto.&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Como decía antes, todo es un objeto. Por ejemplo: el comportamiento (mal llamado "código") también es un objeto.  Tenemos 2 tipos de comportamiento: Los métodos y los bloques.  Los métodos son objetos que la clases tienen (claro, también las clases son objetos). Los bloques son comportamiento creados con un literal que el compilador conoce: los corchetes.  Sentencias Smalltalk encerradas entre corchetes se convierten en un objeto de clase &lt;tt&gt;BlockContext&lt;/tt&gt;.  ¿Para que sirve eso?, sirve para lo que sirven todos los objetos: para enviarles mensajes.  A los objetos Bloque se les puede enviar el mensaje &lt;tt&gt;#value&lt;/tt&gt; que lo activará ejecutando el comportamiento que contenga.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;¿Estructuras de control? - No, gracias.&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" border="1" cellpadding="5" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;tt&gt;1 &amp;gt; 3 ifTrue: [ Transcript show: 'Verdadero, che!!!!' ] &lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Pues sí, adivinaste... las llamadas &lt;i&gt;"estructuras de control"&lt;/i&gt; de los lenguajes tradicionales, que suelen ocupar apartados especiales en los libros, no son más que mensajes en Smalltalk.  Se puede aprender mucho viendo la implementación en las clases &lt;tt&gt;Boolean,&lt;/tt&gt; &lt;tt&gt;True&lt;/tt&gt; y &lt;tt&gt;False&lt;/tt&gt; de los métodos &lt;tt&gt;#ifTrue:&lt;/tt&gt;, &lt;tt&gt;#ifFalse:&lt;/tt&gt;, &lt;tt&gt;#ifTrue:ifFalse:&lt;/tt&gt;, &lt;tt&gt;#ifFalse:ifTrue:&lt;/tt&gt;, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" border="1" cellpadding="5" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;tt&gt;[ unStream atEnd ] whileFalse: [ Transcript show: unStream next asString; cr ] &lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Para ver un poco estos mensajes, ver la implementación de &lt;tt&gt;#whileTrue&lt;/tt&gt;, &lt;tt&gt;#whileFalse&lt;/tt&gt;, &lt;tt&gt;#whileTrue:&lt;/tt&gt;, &lt;tt&gt;#whileFalse:&lt;/tt&gt;, etc en la clase &lt;tt&gt;BlockContext&lt;/tt&gt; (la clase de los bloques de código).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;¿Bucles? - No, gracias.&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Una de las razones principales para usar bucles en los lenguajes tradicionales es para procesar colecciones. Distintos lenguajes usan diferentes &lt;i&gt;idioms&lt;/i&gt; para iterar colecciones... tenemos desde cosas muy básicas como un FOR desde 1 al tamaño del Array hasta cosas un poco menos primitivas como los Iteradores de Java o de la STL de C++.&lt;br /&gt;&lt;br /&gt;¿Cómo se procesa una colección en Smalltalk? Pues sí, adivinaste de nuevo... con un mensaje. En este caso el mensaje es &lt;tt&gt;#do:&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" border="1" cellpadding="5" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;tt&gt;unaColeccion do: [:each | Transcript show: each asString; cr ] &lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;La colección recibe el mensaje &lt;tt&gt;#do:&lt;/tt&gt; con un bloque como parámetro y es responsable de evaluar dicho bloque por cada elemento que contenga.  Lo más importante en este ejemplo es que nosotros no tenemos ni la más mínima idea de que tipo de colección es &lt;tt&gt;unaColeccion&lt;/tt&gt;, pero no lo necesitamos saber ya que ella sabrá cual es la mejor forma de iterarse a si misma.&lt;br /&gt;&lt;br /&gt;El idiom de &lt;tt&gt;#do:&lt;/tt&gt; no termina con las colecciones, sino que cualquier cosa que se pueda recorrer lo podremos hacer con &lt;tt&gt;#do:&lt;/tt&gt;. Por ejemplo: Los Streams, de esa forma reescribimos el ejemplo anterior de unStream:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" border="1" cellpadding="5" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;tt&gt;unStream do: [:each | Transcript show: each asString; cr ] &lt;/tt&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Como verán, para iterar una colección o un stream usamos el mismo mensaje... es decir que podemos intercambiar, en cualquier momento, una colección por un stream... o una colección por otro tipo de colección... o una colección por cualquier objeto que sepa responder a &lt;tt&gt;#do:&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;FINAL DEL CAPÍTULO 0.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Les prometo que los próximos artículos serán más entretenidos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112184858856749678?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112184858856749678/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112184858856749678' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112184858856749678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112184858856749678'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/la-magia-del-smalltalk-captulo-0.html' title='La magia del Smalltalk: Capítulo 0'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112134402093163478</id><published>2005-07-14T14:27:00.000+02:00</published><updated>2005-07-15T14:47:53.316+02:00</updated><title type='text'>GPS en Squeak</title><content type='html'>En los últimos días estuve trabajando en un proyecto de los que más me gusta hacer: Conectar dispositivos a Squeak. Tengo a medio hacer el manejo y programación de robots &lt;a href="http://www.google.com/search?q=lego+mindstorms"&gt;Lego Mindstorms&lt;/a&gt;, y terminé hace un tiempo el soporte para &lt;a href="http://minnow.cc.gatech.edu/squeak/3765"&gt;dispositivos de vídeo desde Squeak&lt;/a&gt; (como el fabuloso &lt;a href="http://www.google.com/search?q=intel+play+microscope"&gt;microscopio de Intel&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Pueden ver algo de información, como así también bajarse una versión preliminar, desde el &lt;a href="http://minnow.cc.gatech.edu/squeak/5721"&gt;Swiki de Squeak&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Así se ve el &lt;b&gt;GPS morf&lt;/b&gt; cuando está conectado:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/gps-conectado.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/gps-conectado.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Y así cuando está desconectado:&lt;br /&gt;&lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/gps-desconectado.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/gps-desconectado.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Y este es el vocabulario para hacer guiones de eToys usando la información que nos brinda el GPS:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8166/525/1600/vocabulario-gps.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/8166/525/320/vocabulario-gps.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ahora ya tienen la excusa que necesitaban para comprarse un GPS.&lt;br /&gt;&lt;br /&gt;¡Qué lo disfruten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112134402093163478?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112134402093163478/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112134402093163478' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112134402093163478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112134402093163478'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/gps-en-squeak.html' title='GPS en Squeak'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112072529711541348</id><published>2005-07-07T10:34:00.000+02:00</published><updated>2006-11-14T02:58:29.016+01:00</updated><title type='text'>¡Basta ya de reggaeton!</title><content type='html'>¿Existe música más fea que el reggaeton?&lt;br /&gt;&lt;br /&gt;Espero que esta moda se pase pronto, y que la próxima moda no sea peor que esta. Por lo pronto, no me siento tan solo... miren &lt;a href="http://www.google.es/search?q=odio+reggaeton"&gt;cuantas personas en google opinan lo mismo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112072529711541348?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112072529711541348/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112072529711541348' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112072529711541348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112072529711541348'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/basta-ya-de-reggaeton.html' title='¡Basta ya de reggaeton!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112047361651361829</id><published>2005-07-04T12:40:00.000+02:00</published><updated>2005-07-04T12:45:55.383+02:00</updated><title type='text'>Documental sobre Squeak en Extremadura en Inglés</title><content type='html'>Mientras subimos la imagen ISO del documental en Español e Inglés, también con subtítulos en Español e Inglés, pueden ir descargando versiones de menor calidad (y menor tamaño).&lt;br /&gt;&lt;br /&gt;Los archivos torrent están en: &lt;ul&gt;     &lt;li&gt;&lt;a href="http://apt.linex.org/squeak/Squeak%20in%20Extremadura%20%28audio-english%20subtitles-english%29%20352x288.mpg.torrent"&gt;Squeak in Extremadura (audio-english subtitles-english) 352x288.mpg.torrent&lt;/a&gt;     &lt;/li&gt;&lt;li&gt;&lt;a href="http://apt.linex.org/squeak/Squeak%20in%20Extremadura%20%28audio-english%20subtitles-english%29%20704x576.mpg.torrent"&gt;Squeak in Extremadura (audio-english subtitles-english) 704x576.mpg.torrent&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;y los archivos, para descargas directas (¡OJO CON EL TAMAÑO!), en: &lt;ul&gt;     &lt;li&gt;&lt;a href="http://apt.linex.org/squeak/Squeak%20in%20Extremadura%20%28audio-english%20subtitles-english%29%20352x288.mpg"&gt;Squeak in Extremadura (audio-english subtitles-english) 352x288.mpg&lt;/a&gt; (187Mb)     &lt;/li&gt;&lt;li&gt;&lt;a href="http://apt.linex.org/squeak/Squeak%20in%20Extremadura%20%28audio-english%20subtitles-english%29%20704x576.mpg"&gt;Squeak in Extremadura (audio-english subtitles-english) 704x576.mpg&lt;/a&gt; (372Mb) &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/11642986-112047361651361829?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112047361651361829/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112047361651361829' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112047361651361829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112047361651361829'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/documental-sobre-squeak-en-extremadura.html' title='Documental sobre Squeak en Extremadura en Inglés'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112046692994323015</id><published>2005-07-04T10:48:00.000+02:00</published><updated>2005-07-04T11:10:43.326+02:00</updated><title type='text'>Más tutoriales de Squeak</title><content type='html'>En la &lt;a href="http://cprmerida.juntaextremadura.net/squeak/squeak.htm"&gt;página de Squeak&lt;/a&gt; del &lt;a href="http://cprmerida.juntaextremadura.net/"&gt;CPR de Mérida&lt;/a&gt;, me encontré con unas traducciones hechas por Máximo Prudencio de unos tutoriales de Squeak.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;     &lt;li&gt;&lt;a href="http://cprmerida.juntaextremadura.net/squeak/grapher.pdf"&gt;Representación gráfica de movimientos&lt;/a&gt;     &lt;/li&gt;&lt;li&gt;&lt;a href="http://cprmerida.juntaextremadura.net/squeak/ilusionoptica.pdf"&gt;Ilusión Óptica&lt;/a&gt;     &lt;/li&gt;&lt;li&gt;&lt;a href="http://cprmerida.juntaextremadura.net/squeak/alunizaje.pdf"&gt;Alunizaje&lt;/a&gt;     &lt;/li&gt;&lt;li&gt;&lt;a href="http://cprmerida.juntaextremadura.net/squeak/salmon.pdf"&gt;La migración del salmón&lt;/a&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/11642986-112046692994323015?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112046692994323015/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112046692994323015' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112046692994323015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112046692994323015'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/ms-tutoriales-de-squeak.html' title='Más tutoriales de Squeak'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112046561538320243</id><published>2005-07-04T10:26:00.000+02:00</published><updated>2005-07-04T10:28:22.786+02:00</updated><title type='text'>La enseñanza en el siglo XXI</title><content type='html'>&lt;a href="http://www.google.es/search?q=squeak+3.8+small-land"&gt;Googleando&lt;/a&gt; me encontré con otro blog sobre Squeak en Castellano.&lt;br /&gt;&lt;br /&gt;En el post de inauguración, los autores nos dicen:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;     &lt;tt&gt;Este blog será testigo del trabajo de investigación y práctica que hacemos en la enseñanza apuntando a una propuesta coherente con la sociedad contemporánea que vivimos.&lt;/tt&gt;&lt;br /&gt; &lt;br /&gt;&lt;/blockquote&gt; No duden en visitarlo en:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://squeak.blog.com/"&gt;http://squeak.blog.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112046561538320243?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112046561538320243/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112046561538320243' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112046561538320243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112046561538320243'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/la-enseanza-en-el-siglo-xxi.html' title='La enseñanza en el siglo XXI'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112022079640968663</id><published>2005-07-01T14:26:00.000+02:00</published><updated>2005-07-01T14:27:20.230+02:00</updated><title type='text'>Squeak, también, en Francés</title><content type='html'>También hemos incluido la traducción al Francés.&lt;br /&gt;&lt;br /&gt;Con esta incorporación el Squeak de Small-Land está disponible en 6 idiomas: Catalán, Alemán, Inglés, Español, Francés y Gallego.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112022079640968663?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112022079640968663/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112022079640968663' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112022079640968663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112022079640968663'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/squeak-tambin-en-francs.html' title='Squeak, también, en Francés'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112021785864847183</id><published>2005-07-01T13:37:00.000+02:00</published><updated>2005-07-01T13:40:16.380+02:00</updated><title type='text'>Squeak en Catalán y Gallego</title><content type='html'>Hemos subido las traducciones incompletas[*] al Catalán y al Gallego del Squeak versión 3.8.&lt;br /&gt;&lt;br /&gt;[*] Son las traducciones de la versión anterior convertidas a la versión nueva y no incluyen las traducciones de las frases nuevas.&lt;br /&gt;&lt;br /&gt;Para actualizar el Squeak hay que seleccionar la opción &lt;tt&gt;&lt;b&gt;actualizar desde un servidor&lt;/b&gt;&lt;/tt&gt; desde el menú &lt;b&gt;&lt;tt&gt;Configuración&lt;/tt&gt;&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112021785864847183?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112021785864847183/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112021785864847183' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112021785864847183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112021785864847183'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/squeak-en-cataln-y-gallego.html' title='Squeak en Catalán y Gallego'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-112020767615307111</id><published>2005-07-01T10:47:00.000+02:00</published><updated>2005-07-01T14:38:25.590+02:00</updated><title type='text'>Herramientas para el siglo XXI</title><content type='html'>Hemos llegado al siglo XXI.&lt;br /&gt;&lt;br /&gt;El tan esperado nuevo milenio esta entre nosotros y algunas de nuestras fantasías y sueños con respecto al cambio de milenio han sido satisfechas. Pero otros tantos sueños quedaron solo en el imaginario colectivo o como parte de alguna novela de ciencia ficción. Sin temor a equivocarme me atrevo a decir que las computadoras representaron como ninguna otra cosa las ideas de un mundo nuevo y distinto.&lt;br /&gt;&lt;br /&gt;Lo cierto es que hoy tenemos un gran poder de computo en nuestros escritorios (¡e incluso en nuestros bolsillos!) pero, lamentablemente, ese poder no esta aprovechado tan bien como se podría y como hemos soñado por años.&lt;br /&gt;&lt;br /&gt;Durante mucho tiempo estos sueños se veían desvanecidos cuando se intentaban materializar con el equipo con que contábamos. Sin embargo, en los últimos años, la ecuación cambió dramáticamente y el poder del hardware de hoy posibilita nuevas características que el software del siglo XXI (con excepción de los juegos) no sabe/puede aprovechar.&lt;br /&gt;&lt;br /&gt;Seguimos utilizando software que fue pensado en épocas donde el hardware tenía una potencia hoy superada por cualquier dispositivo electrónico.&lt;br /&gt;&lt;br /&gt;Paradójicamente el hardware de hoy solo se usa pasa correr malas implementaciones de buenas viejas ideas. Los interfases gráficas de usuario son, quizás, el mejor ejemplo. Estas fueron inventadas en los años 70s, cuando el hardware que existía no era capas de ser soporte de esas ideas. Ahora, más de 30 años después, nos encontramos que el hardware podría soportar ideas mucho más revolucionarias que podrían hacer que millones de personas puedan participar de la revolución de la información.&lt;br /&gt;&lt;br /&gt;La mayoría de los recursos informáticos con los que contamos hoy en día no son capaces de expandir la capacidad creativa en cada uno de nosotros. Y ya no es culpa del hardware. Hoy el hardware está a la altura de las necesidades, lo que necesitamos es mejor software, que este esté disponible para cualquiera y que pueda ser usado por cualquiera.&lt;br /&gt;&lt;br /&gt;El movimiento open-source está resolviendo parte del problema, está haciendo que todos tengan acceso a programas que antes eran simplemente prohibitivos por el precio. Sin embargo hay una parte que no se pudo resolver todavía: Hacer que estas piezas de software sean verdaderas herramientas amplificadoras de la capacidad creativa de cada uno de nosotros para que seamos constructores de nuestro propio conocimiento.&lt;br /&gt;&lt;br /&gt;El reto esta vigente y el camino no esta libre de obstáculos. El mercado de la computación ha crecido mucho en los últimos años y no lo ha hecho de una forma en que los beneficios puedan ser accedidos por todos. Este desarrollo ha producido algunos problemas.&lt;br /&gt;&lt;br /&gt;Uno de estos problemas es el respeto en exceso (que algunas veces se manifiesta como miedo) que las computadoras generan en la gente. Pareciera que tenemos que estar nosotros al servicio de los caprichos de las máquinas, adaptarnos a sus maneras, esperar por sus tiempos y, sobre todo, reducir nuestras expectativas de lo que puede hacerse con ellas. Las computadoras fueron siempre potestad de gente muy "inteligente" que podía entenderlas y se destinaron habitaciones especiales para alojarlas donde no podía entrar cualquiera.&lt;br /&gt;&lt;br /&gt;Esa barrera sigue presente hoy en día pero de una forma mucho menos evidente pero igual o peor de dañina, las computadoras son complejas de usar y se culpa a los usuarios por no entenderlas. Si no entendemos como usar una computadora, nos quieren hacer creer, es porque no somos lo suficientemente inteligente para eso.&lt;br /&gt;&lt;ul&gt;     &lt;li&gt;¿No será que la gente tan "inteligente" como para usar las computadoras no lo son tanto y que no supieron hacer de estas algo al alcance de todos? &lt;/li&gt;&lt;li&gt;¿No será que alguien gana dinero prometiendo soluciones a los problemas que las computadoras generan hoy en día?      &lt;/li&gt;&lt;li&gt;¿No nos venden cada versión nueva del producto diciendo que ahora, por fin, será fácil de usar? &lt;/li&gt;&lt;/ul&gt;  Otro de los problemas con que nos enfrentamos es como el uso comercial de las computadoras ha dominado prácticamente su desarrollo en los últimos años y eso produjo una falsa linea divisoria muy marcada entre diversión y cosas llamadas serias.&lt;br /&gt;&lt;br /&gt;Por un lado tenemos la industria de los juegos que producen verdaderos ejemplos de innovación y donde siempre se está en el límite de lo que el hardware puede dar. Por el otro tenemos las aplicaciones "serias que se usan para trabajar.&lt;br /&gt;&lt;br /&gt;Ese concepto, lamentablemente muy arraigado, de que el trabajo va por un lado y la diversión por otro nos inundó de grises interfases de usuario y grillas de datos inertes y nos priva de la libertad de ser creativos. Se nos dice que todo es fácil de hacer si usamos alguna herramienta que nos guia paso a paso y se penaliza el querer ser distinto y original.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" border="1" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;div align="center"&gt;&lt;i&gt;Usted puede tener el auto en cualquier color siempre que este sea negro -- (Henry Ford)&lt;/i&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Por suerte hay gente que si cree que las computadoras deberían estar al servicio del espíritu creativo de cada uno de nosotros y trabaja muy fuerte para conseguirlo. No hay mejor exponente de esta clase de personas que el propio Alan Kay &lt;div align="center"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table bgcolor="#ffff99" border="1" cellpadding="10" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt; &lt;div align="center"&gt;&lt;i&gt;Alan Kay es el inventor de la mayoría de las cosas útiles relacionadas con la computadora personal, incluyendo su nombre -- (Papert)&lt;/i&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;br /&gt;Sus ideas y su trabajo sobre ellas tuvieron un gran impacto sobre la forma en que nos relacionamos con la tecnología. Solo como un ejemplo del resultado de su trabajo podemos citar a las interfases gráficas de usuario, el uso del ratón, las ventanas, etc que fue invención suya allá por los años 70s.&lt;br /&gt;&lt;br /&gt;Su visión de la Dynabook sigue actual y viva en Squeak.&lt;br /&gt;&lt;br /&gt;El Squeak es un entorno/lenguaje/herramienta/ambiente donde conviven todos los medios de expresión conocidos y sirve de soporte para la investigación sobre los nuevos medios. Sus capacidades multimediales y su capacidad de simulación lo convierten en la mejor aproximación a la visión original de la Dynabook.&lt;br /&gt;&lt;br /&gt;El Squeak no es para nada algo terminado (¿muerto?) sino que es un lugar donde nuestras ideas se plasman. Como parte de nuestro proceso sin fin de construcción de conocimiento el mismo Squeak va creciendo y cambiando. Gracias a Internet es posible que esas mejoras que producimos en nuestro Squeak sean compartidas para que otras personas con los mismos intereses se beneficien de ellas y, fundamentalmente, aprendan y se diviertan mientras lo hacen.&lt;br /&gt;&lt;br /&gt;Tenemos la responsabilidad de trabajar para que la tecnología no siga siendo potestad de unos pocos elegidos sino que sea el motor de la verdadera revolución de la información: Lograr que todas las personas puedan ser actores activos de su propio desarrollo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-112020767615307111?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/112020767615307111/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=112020767615307111' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112020767615307111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/112020767615307111'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/07/herramientas-para-el-siglo-xxi.html' title='Herramientas para el siglo XXI'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111728028911908051</id><published>2005-05-28T13:38:00.000+02:00</published><updated>2005-05-28T13:39:15.746+02:00</updated><title type='text'>Squeak: Un mundo para Aprender</title><content type='html'>&lt;div style="text-align: left;"&gt;Hace unos pocos días terminé, no sin un retraso importante, de escribir el capítulo con el que voy a participar del próximo libro de Squeak hecho en España.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;El libro lo editará &lt;a href="http://www.librosdelinux.com/"&gt;Edit Lin Editorial SL&lt;/a&gt;. Los autores son un grupo de profesores de Badajoz y yo.&lt;br /&gt;&lt;br /&gt;Pueden leer el borrador del capítulo que me tocó escribir en &lt;a href="http://www.consultar.com/DiegoGomezDeck/papers/Squeak%20-%20Un%20mundo%20para%20aprender/"&gt;versión html&lt;/a&gt; o bajar la &lt;a href="http://www.consultar.com/DiegoGomezDeck/papers/Squeak%20-%20Un%20mundo%20para%20aprender%20-%20Capitulo%201.sxw"&gt;versión en OpenOffice&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111728028911908051?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111728028911908051/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111728028911908051' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111728028911908051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111728028911908051'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/05/squeak-un-mundo-para-aprender.html' title='Squeak: Un mundo para Aprender'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111662192444801188</id><published>2005-05-20T22:45:00.000+02:00</published><updated>2005-05-20T22:49:29.460+02:00</updated><title type='text'>Más allá de la revolución informática - Peter Drucker</title><content type='html'>Buscando información para el capítulo de libro de Squeak que estoy escribiendo, me encontré con este interesante artículo de &lt;a href="http://www.peter-drucker.com/"&gt;Peter F. Drucker&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;        &lt;a href="http://www.elmalpensante.com/19_drucker.asp"&gt;http://www.elmalpensante.com/19_drucker.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Un poco capitalismo-céntrico, pero no más de lo esperable de Drucker (&lt;i&gt;léase Dr&lt;/i&gt;&lt;i&gt;&lt;b&gt;A&lt;/b&gt;&lt;/i&gt;&lt;i&gt;cker, haciendo hincapié en la &lt;/i&gt;&lt;i&gt;&lt;b&gt;A&lt;/b&gt;&lt;/i&gt;&lt;i&gt; para que se note que sabemos pronunciar Inglés&lt;/i&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111662192444801188?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111662192444801188/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111662192444801188' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111662192444801188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111662192444801188'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/05/ms-all-de-la-revolucin-informtica.html' title='Más allá de la revolución informática - Peter Drucker'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111658056718902895</id><published>2005-05-20T11:16:00.000+02:00</published><updated>2005-05-20T11:16:07.200+02:00</updated><title type='text'>Entrevista para Todo Linux de Marzo</title><content type='html'>Hurgando mis documentos me encontr&amp;#233; con el PDF de una entrevista que me hicieron para le edici&amp;#243;n de Marzo de la &lt;A HREF="http://www.iberprensa.com/productos/revistas/todolinux/todolinux.htm"&gt;revista Todo Linux&lt;/A&gt;.&lt;BR&gt; &lt;BR&gt; Pueden verlo en:&lt;BR&gt; &lt;BR&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A HREF="http://www.consultar.com/DiegoGomezDeck/papers/Entrevista%20Todo%20Linux%20-%20Squeak.pdf"&gt;http://www.consultar.com/DiegoGomezDeck/papers/Entrevista%20Todo%20Linux%20-%20Squeak.pdf&lt;/A&gt;&lt;BR&gt; &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111658056718902895?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111658056718902895/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111658056718902895' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111658056718902895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111658056718902895'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/05/entrevista-para-todo-linux-de-marzo.html' title='Entrevista para Todo Linux de Marzo'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111624192259463223</id><published>2005-05-16T13:12:00.000+02:00</published><updated>2005-05-16T13:12:02.596+02:00</updated><title type='text'>Imagen de 3.8 para Windows, Apple, etc.</title><content type='html'>Est&amp;#225; disponible para bajar la Imagen de &lt;A HREF="http://swiki.agro.uba.ar/small_land/241"&gt;Squeak de Small-Land versi&amp;#243;n 3.8&lt;/A&gt; para las plataformas donde, a&amp;#250;n, no tenemos instaladores.&lt;BR&gt; &lt;BR&gt; Se puede descargar desde: &lt;A HREF="http://squeak.linex.org/W32/Squeak38-SmallLand-Imagen-1226.zip"&gt;http://squeak.linex.org/W32/Squeak38-SmallLand-Imagen-1226.zip&lt;/A&gt;&lt;BR&gt; &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111624192259463223?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111624192259463223/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111624192259463223' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111624192259463223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111624192259463223'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/05/imagen-de-38-para-windows-apple-etc.html' title='Imagen de 3.8 para Windows, Apple, etc.'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111528747771286543</id><published>2005-05-05T12:04:00.000+02:00</published><updated>2005-05-05T12:05:50.490+02:00</updated><title type='text'>¿Qué hacer con dinero?</title><content type='html'>&lt;div align="center"&gt; &lt;p class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/conmark-777713.png" width="320" /&gt;&lt;/p&gt; &lt;/div&gt; &lt;div align="center"&gt;&lt;span style="font-size:85%;"&gt;&lt;i&gt;(&lt;a href="http://naumaquia.extreblog.com/"&gt;Jesús Rubio&lt;/a&gt;, yo&lt;/i&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size:85%;"&gt; mismo&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size:85%;"&gt;, &lt;a href="http://villarino.unex.es/blog/"&gt;Antonio Ullá&lt;/a&gt;&lt;/span&gt;&lt;a href="http://villarino.unex.es/blog/"&gt;&lt;/a&gt;&lt;/i&gt;&lt;a href="http://villarino.unex.es/blog/"&gt;&lt;i&gt;&lt;span style="font-size:85%;"&gt;n&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span style="font-size:85%;"&gt;, &lt;a href="http://en.wikipedia.org/wiki/Mark_Shuttleworth"&gt;Mark Shuttleworth&lt;/a&gt;, ?&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size:85%;"&gt;?&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size:85%;"&gt;)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ayer participé en una reunión del equipo de desarrollo de LinEx con &lt;a href="http://en.wikipedia.org/wiki/Mark_Shuttleworth"&gt;Mark Shuttleworth&lt;/a&gt; (el millonario sudafricano, turista espacial, mentor de &lt;a href="http://www.ubuntulinux.org/"&gt;Ubuntu&lt;/a&gt;, etc).&lt;br /&gt;&lt;br /&gt;Mi rol en la reunión fue el de siempre: mostrar Squeak y hablar de su filosofía y, como siempre también, no pude dejar de sentir un poco de nostalgia sobre lo que pudo ser del proyecto Smalltalk si Apple primero, luego Microsoft y un poco más tarde GNOME y KDE hubiesen entendido realmente el verdadero porque de las interfaces gráficas y no hubiesen copiado sólo la piel.&lt;br /&gt;&lt;br /&gt;Estuve casi toda la tarde preguntándome (¿soñando?) que haría yo si tuviese dinero disponible para ser de mentor de algún proyecto y concluí con seguridad (con esa seguridad que me da el hecho de NO tener el dinero) que no lo invertiría en un proyecto como Ubuntu. ¿Porqué? Por que, me parece, necesitamos más innovación y no más implementaciones de ideas de los 60s o en el mejor de los casos de los 70s.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111528747771286543?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111528747771286543/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111528747771286543' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111528747771286543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111528747771286543'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/05/qu-hacer-con-dinero.html' title='¿Qué hacer con dinero?'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111528518004734033</id><published>2005-05-05T11:26:00.000+02:00</published><updated>2005-05-05T11:27:30.923+02:00</updated><title type='text'>A falta de pan...</title><content type='html'>&lt;div style="text-align: left;"&gt;El día 28 de Abril tuve que dar una charla en el &lt;a href="http://cum.unex.es/principal.asp"&gt;Centro Universitario de Mérida&lt;/a&gt; como parte de su "&lt;a href="http://cum.unex.es/Cum/actos/semana_cum05/semana_cum.htm"&gt;Semana del Centro 2005&lt;/a&gt;".  Estaba previsto que esa charla la de Alan Kay, pero tuvo que cancelar su viaje a Extremadura por problemas de salud.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Pueden ver &lt;a href="http://cum.unex.es/Cum/actos/semana_cum05/fotos/semana_cum/subalbum_14.html"&gt;algunas fotitos de la charla&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111528518004734033?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111528518004734033/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111528518004734033' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111528518004734033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111528518004734033'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/05/falta-de-pan.html' title='A falta de pan...'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111511731470084890</id><published>2005-05-03T12:48:00.000+02:00</published><updated>2005-05-11T20:01:35.076+02:00</updated><title type='text'>Squeak de Small-Land versión 3.8</title><content type='html'>&lt;p class="mobile-photo"&gt;Finalmente, tras un intenso período de beta, hemos liberado la &lt;a href="http://swiki.agro.uba.ar/small_land/241"&gt;versión 3.8 del Squeak de Small-Land&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Esta versión incluye una muy larga lista de mejoras, entre ellas, las más destacables son:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Una nueva estética más refinada que la anterior &lt;/li&gt;&lt;/ul&gt;&lt;div align="center"&gt;&lt;p class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/Squeak38341x256-716111.png" width="320" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nuevo logo de Small-Land y nuevo Ratonete. &lt;/li&gt;&lt;/ul&gt;&lt;div align="center"&gt;&lt;p class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/Ratonete-715768.png" width="181" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Un nueva barra de menú e iconos &lt;/li&gt;&lt;/ul&gt;&lt;div align="center"&gt;&lt;p class="mobile-photo"&gt;&lt;img style="WIDTH: 562px; HEIGHT: 26px" src="http://photos1.blogger.com/blogger/8166/525/0/BarraDeMenu-715427.png" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Los famosos "Conectores" de Ned Konz &lt;/li&gt;&lt;/ul&gt;&lt;div align="center"&gt;&lt;p class="mobile-photo"&gt;&lt;img style="WIDTH: 364px; HEIGHT: 270px" src="http://photos1.blogger.com/blogger/8166/525/0/Conectores-714700.png" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;/div&gt;Y un largo etcétera que es mejor descubrir por uno mismo.&lt;br /&gt;&lt;br /&gt;Para instalar el Squeak en Linux ver &lt;a href="http://swiki.agro.uba.ar/small_land/24"&gt;esta página con las instrucciones&lt;/a&gt;. Para reportar errores utilizar el sitio &lt;a href="http://cvs.linex.org/"&gt;http://cvs.linex.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¡Qué lo disfruten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111511731470084890?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111511731470084890/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111511731470084890' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111511731470084890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111511731470084890'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/05/squeak-de-small-land-versin-38.html' title='Squeak de Small-Land versión 3.8'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111459502412039926</id><published>2005-04-27T11:43:00.000+02:00</published><updated>2006-12-01T14:24:43.293+01:00</updated><title type='text'>Documental sobre Squeak en Extremadura</title><content type='html'>&lt;p class="mobile-post"&gt;La &lt;a href="http://www.juntaex.es/consejerias/idt/home.html"&gt;Consejería de Infraestructuras y Desarrollo Tecnológico&lt;/a&gt; de la &lt;a href="http://www.juntaex.es/"&gt;Junta de Extremadura&lt;/a&gt; ha producido un documental sobre el proyecto &lt;a href="http://squeak.linex.org/"&gt;Squeak de la región&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div align="center"&gt; &lt;p class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/dvd4-724120.png" width="320" /&gt;&lt;/p&gt; &lt;p class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/dvd3-724703.png" width="320" /&gt;&lt;/p&gt;   &lt;p class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/dvd2-725205.png" width="320" /&gt;&lt;/p&gt; &lt;p class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/dvd1-725672.png" width="320" /&gt;&lt;/p&gt;  &lt;/div&gt;&lt;br /&gt;La versión en Castellano se puede descargar, usando &lt;a href="http://www.ayudabittorrent.com/"&gt;bittorrent&lt;/a&gt;, desde:&lt;br /&gt;&lt;div align="center"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;tt&gt;&lt;a href="http://apt.linex.org/squeakersextremenios.iso.torrent"&gt;http://apt.linex.org/squeakersextremenios.iso.torrent&lt;/a&gt;&lt;/tt&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111459502412039926?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111459502412039926/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111459502412039926' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111459502412039926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111459502412039926'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/04/documental-sobre-squeak-en-extremadura.html' title='Documental sobre Squeak en Extremadura'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111443385952969012</id><published>2005-04-25T14:57:00.000+02:00</published><updated>2005-04-25T14:57:39.530+02:00</updated><title type='text'>Alumnos de colegios japoneses participan en actividades de
	software libre y squeak promovidas por la Junta de Extremadura</title><content type='html'>&lt;p class="mobile-post"&gt;Ver la noticia completa en &lt;A HREF="http://www.regiondigital.com/periodico/noticias/mostrar_noticia.php?id=20592"&gt;Regi&amp;#243;n Digital&lt;/A&gt;.&lt;BR&gt; &lt;BR&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111443385952969012?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111443385952969012/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111443385952969012' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111443385952969012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111443385952969012'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/04/alumnos-de-colegios-japoneses.html' title='Alumnos de colegios japoneses participan en actividades de&#xA;&#x9;software libre y squeak promovidas por la Junta de Extremadura'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111415513075325008</id><published>2005-04-22T09:32:00.000+02:00</published><updated>2005-04-22T09:33:55.220+02:00</updated><title type='text'>Squeak 3.8 LIVE</title><content type='html'>&lt;p style="text-align: center;" class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/live38-mini-730753.jpeg" width="320" /&gt;&lt;/p&gt;&lt;p class="mobile-post"&gt;&lt;/p&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Ya está disponible para bajar la versión LIVE del Squeak versión 3.8.  El CD contiene, además del Squeak, documentación y algunos ejemplos de uso.&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;En la página &lt;a href="http://swiki.agro.uba.ar/small_land/11"&gt;http://swiki.agro.uba.ar/small_land/11&lt;/a&gt; del swiki de small-land encontrarán la información necesaria para usarlo.&lt;br /&gt;&lt;br /&gt;Los impacientes pueden hacer click directamente acá: &lt;a href="http://cvs.linex.org/linex2004/Squeak-3.8-LIVE.iso"&gt;http://cvs.linex.org/linex2004/Squeak-3.8-LIVE.iso&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¡Qué lo disfruten!&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111415513075325008?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://swiki.agro.uba.ar/small_land/11' title='Squeak 3.8 LIVE'/><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111415513075325008/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111415513075325008' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111415513075325008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111415513075325008'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/04/squeak-38-live.html' title='Squeak 3.8 LIVE'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111410143300443480</id><published>2005-04-21T18:37:00.000+02:00</published><updated>2006-10-20T05:14:31.843+02:00</updated><title type='text'>Matar al anónimo (o La historia del Ligre)</title><content type='html'>&lt;p style="text-align: center;" class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/Liger-733004.jpg" width="320" /&gt;&lt;/p&gt;&lt;p class="mobile-post"&gt;&lt;/p&gt; &lt;div align="center"&gt;&lt;/div&gt; Hace poco tiempo atrás le enseñe a mi hijo, &lt;a href="http://www.consultar.com/wiki/index.php/NicolasGomezDeck/"&gt;Nicolás&lt;/a&gt;, la &lt;a href="http://es.wikipedia.org/"&gt;Wikipedia&lt;/a&gt; para que pueda encontrar algo de la información que siempre anda buscando. Pasó unos cuantos días muy entretenido leyendo desde artículos que describen los personajes de &lt;a href="http://es.wikipedia.org/wiki/Star_Wars"&gt;Star Wars&lt;/a&gt; hasta artículos que hablan de &lt;a href="http://es.wikipedia.org/wiki/Argentina"&gt;Argentina&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Al cabo de 1 semana de que le mostré la Wikipedia, en la cena, Nicolás me dice que existe un animal que se llama Ligre y que es mitad león y mitad tigre... Mi reacción fue de alegría al pensar que sigue manteniendo intacta su capacidad de imaginación y su creatividad (aún después de llevar unos años en la escuela). Al preguntarle cómo se le había ocurrido tan linda idea me contestó: &lt;i&gt;"No, no es una idea mía... lo leí en la Wikipedia"&lt;/i&gt; (ver &lt;a href="http://es.wikipedia.org/wiki/Ligre"&gt;Artículo sobre el Ligre en Wikipedia&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Vale aclarar que yo no tenía idea de la existencia de ese animal (y hoy sigo teniendo dudas sobre si existe o no) y me adelanté a explicarle a Nico que la Wikipedia es un lugar donde muchas personas meten mano, y que podría haber gente que quiera jugarle &lt;i&gt;"bromas"&lt;/i&gt; a los lectores.&lt;br /&gt;&lt;br /&gt;Inmediatamente me puse en campaña para averiguar si el Ligre existe o no, y en este caso (créanlo o no) &lt;a href="http://www.google.es/search?hl=es&amp;amp;q=ligre"&gt;google&lt;/a&gt; no sirvió para determinar la existencia o no de, esta altura, tan famoso animal.&lt;br /&gt;&lt;br /&gt;Lo que descubrí con esta historia es algo más importante que la existencia de un animal o no. Es algo sobre la credibilidad de un repositorio de información anónimo donde no sabemos quienes son los autores de los artículos.&lt;br /&gt;&lt;br /&gt;¿Cómo es posible determinar la veracidad o la importancia de una nota si quien la escribe no tiene nada que perder?&lt;br /&gt;&lt;br /&gt;En toda publicación el autor debe poner juicio de los lectores su reputación y un anónimo no tiene una reputación que poner a prueba. Basta con leer un poco los comentarios anónimos en sitios como &lt;a href="http://www.slashdot.org/"&gt;slashdot&lt;/a&gt; o &lt;a href="http://www.barrapunto.com/"&gt;barrapunto&lt;/a&gt; para hacerse una idea de la calidad de los comentarios anónimos y el contraste con la calidad de los comentarios firmados.&lt;br /&gt;&lt;br /&gt;Una plataforma que pretenda ser soporte de información no puede tolerar (y mucho menos fomentar) la publicación anónima.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111410143300443480?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111410143300443480/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111410143300443480' title='8 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111410143300443480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111410143300443480'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/04/matar-al-annimo-o-la-historia-del.html' title='Matar al anónimo (o La historia del Ligre)'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111408162910918994</id><published>2005-04-21T13:07:00.000+02:00</published><updated>2005-04-21T13:07:09.110+02:00</updated><title type='text'>Indulgencias para todos</title><content type='html'>&lt;p class="mobile-post"&gt;El sistema de libre mercado tiene soluciones para todos los problemas. La mano invisible, descubierta por &lt;A HREF="http://es.wikipedia.org/wiki/Adam_Smith"&gt;Adam Smith&lt;/A&gt;, que maneja el mercado se dio cuenta que era necesario democratizar (abaratando los costos) el acceso a las indulgencias divinas. &lt;BR&gt; &lt;BR&gt; Nuestras modernas sociedades occidentales pro-mercado han logrado abaratar el costo de acceso a las indulgencias y hoy, pr&amp;#225;cticamente cualquier persona, puede acceder a un perd&amp;#243;n por un buen precio:  &lt;UL&gt;     &lt;LI&gt;&amp;#191;Genera usted mucha basura?      &lt;UL&gt;         &lt;LI&gt;&lt;I&gt;Puede aportar dinero a alguna organizaci&amp;#243;n ecologista.&lt;/I&gt;     &lt;/UL&gt;     &lt;LI&gt;&amp;#191;Trabaja usted para una multinacional?      &lt;UL&gt;         &lt;LI&gt;&lt;I&gt;Pague la cuota de alguna ONG de comercio justo.&lt;/I&gt;     &lt;/UL&gt;     &lt;LI&gt;&amp;#191;Siente que puede hacer algo por alguien pero no lo hace?      &lt;UL&gt;         &lt;LI&gt;&lt;I&gt;Apadrine un ni&amp;#241;o del 3er mundo.&lt;/I&gt;     &lt;/UL&gt; &lt;/UL&gt; &lt;BR&gt; No es dif&amp;#237;cil de imaginarse que pronto aparecer&amp;#225;n en el mercado las &lt;B&gt;META-&lt;A HREF="http://es.wikipedia.org/wiki/Ong"&gt;ONG&lt;/A&gt;&lt;/B&gt;. Es decir, organizaciones cuya funci&amp;#243;n sea ayudar a otras organizaciones a hacer el bien. Est&amp;#225;s van a vender combos de indulgencias a un precio todav&amp;#237;a m&amp;#225;s accesible. De esa forma podr&amp;#237;amos comprar juegos de indulgencias tipo &amp;quot;derecho a contaminar y a trabajar en una multinacional&amp;quot; que ser&amp;#225;n muy solicitadas para las personas que, al trabajar muchas horas en la multinacional, no puedan reciclar la basura que producen. &lt;BR&gt; &lt;BR&gt; No puedo dejar de imaginarme &amp;#191;Qu&amp;#233; hubiese pasado si &lt;A HREF="http://es.wikipedia.org/wiki/Lutero"&gt;Mart&amp;#237;n Lutero&lt;/A&gt; se hubiese dado cuenta de este negocio?. Si en lugar de condenar las indulgencias y comenzar todo un per&amp;#237;odo de reformas, podr&amp;#237;a haber creado una cadena de venta de indulgencias a precios democr&amp;#225;ticos y los alemanes hubiesen podido dominar al mundo desde el siglo XVI. Bueno, por algo los alemanes perdieron las 2 guerras mundiales. &lt;BR&gt; &lt;BR&gt; &lt;B&gt;&amp;#161;Y todav&amp;#237;a algunos se quejan del sistema de libre mercado!&lt;/B&gt; A ver que alguien me cuente si el comunismo u otro sistema pol&amp;#237;tico fue capaz de abaratar tanto el precio para acceder al Para&amp;#237;so. La verdad es que nos quejamos de llenos. &lt;BR&gt; &lt;BR&gt; Los dejo que est&amp;#225; por empezar una gala ben&amp;#233;fica en la TV y no me la puedo perder ya que esta semana tuve que tirar 2 pilas a la basura.&lt;BR&gt; &lt;BR&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111408162910918994?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111408162910918994/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111408162910918994' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111408162910918994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111408162910918994'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/04/indulgencias-para-todos_21.html' title='Indulgencias para todos'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11642986.post-111408118723253909</id><published>2005-04-21T12:59:00.000+02:00</published><updated>2005-04-21T13:02:04.663+02:00</updated><title type='text'>¡Basta de grises!</title><content type='html'>&lt;p class="mobile-post"&gt;Creo no exagerar si digo que estamos inmersos en una gran crisis en lo que respecta al desarrollo de software. Existe una demando muy grande de software - ¡tenemos software hasta en el sistema de frenos de los autos! ¡qué miedo! - y no existe una cantidad suficiente de programadores competentes. Esto produce que millones de programadores se dediquen a producir solamente utilizando la criterio (o la falta de el): &lt;i&gt;"Si todos lo hacen debe estar bien, entonces yo también lo hago"&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Los resultados están a la vista en la baja calidad que en general tiene todo el software que utilizamos, sin embargo ahora prefiero reflexionar sólo sobre uno de los aspectos de ese magro resultado: &lt;b&gt;Las interfaces de usuario&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;El diseño de interfases de usuarios es una disciplina sumamente compleja que involucra aspectos de diferentes sectores del conocimiento como la psicología, la ergonometría, la sociología, y un muy largo etcétera. Como el diseño de interfaces de usuario es uno de los aspectos más complicados del desarrollo de software, es donde se hace más apreciable el problema.&lt;br /&gt;&lt;br /&gt;Exceptuamos los juegos, la gran mayoría de las aplicaciones que utilizamos hoy en día son una combinación de uno o varios árboles, una o varias grillas, y todo pintado con una &lt;i&gt;gran variedad&lt;/i&gt; de grises.&lt;/p&gt; &lt;p style="text-align: center;" class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/grises1-mini-787586.png" width="248" /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="mobile-photo"&gt;En mi (todavía corta) experiencia mostrando y enseñando Squeak me encontré varias veces con comentarios despectivos acerca de la apariencia de Squeak, frases como &lt;i&gt;"tiene colores de niños"&lt;/i&gt;, &lt;i&gt;"porque no usa una interfase como (m$|open)Office"&lt;/i&gt;, etc. Parecen existir algunos preconceptos(?) muy arraigados del tipo: &lt;i&gt;"Las cosas grises son serias, los colores son para los niños"&lt;/i&gt;.&lt;br /&gt;&lt;/p&gt; &lt;br /&gt;¿Se podrán hacer cosas &lt;i&gt;"serias"&lt;/i&gt; o &lt;i&gt;"profesionales"&lt;/i&gt; (si es que eso quiere decir algo) con un buen uso del color? Creo que, al menos, vale la pena el intento:&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: center;" class="mobile-photo"&gt;&lt;img src="http://photos1.blogger.com/blogger/8166/525/0/colores1-mini-787232.png" width="320" /&gt;&lt;/p&gt;  &lt;div align="center"&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11642986-111408118723253909?l=diegogomezdeck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://diegogomezdeck.blogspot.com/feeds/111408118723253909/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11642986&amp;postID=111408118723253909' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111408118723253909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11642986/posts/default/111408118723253909'/><link rel='alternate' type='text/html' href='http://diegogomezdeck.blogspot.com/2005/04/basta-de-grises.html' title='¡Basta de grises!'/><author><name>Diego Gomez Deck</name><uri>http://www.blogger.com/profile/11016380965975303930</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.consultar.com/DiegoGomezDeck/foto2.png'/></author><thr:total>0</thr:total></entry></feed>
