<?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-10460112</id><updated>2011-11-02T10:55:32.823+01:00</updated><category term='squeak'/><category term='olpc'/><category term='opengl'/><category term='smalltalk'/><category term='mac'/><category term='coding'/><category term='sophie'/><category term='sugar'/><category term='performance'/><category term='croquet'/><category term='tweak'/><category term='cairo'/><category term='etoys'/><title type='text'>Dr. Bert Freudenberg</title><subtitle type='html'>Croquet, Tweak, Squeak, Etoys, OLPC, and more</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10460112.post-4881626797946944165</id><published>2011-08-29T17:25:00.004+02:00</published><updated>2011-11-01T14:31:38.501+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>Squeak Etoys on ARM-based OLPC XO-1.75</title><content type='html'>First post this year, yikes! The last one was about ESUG 2010 in Barcelona, now I just returned from ESUG 2011 in Edinburgh. While I was there, a package with the shiny new XO-1.75 prototype arrived.&lt;br /&gt;&lt;br /&gt;Incredibly, the pre-installed Etoys simply worked! Never mind the change in processor architecture, the Fedora folks have done a great job compiling the Squeak VM for ARM and so Etoys just works. Of course that's just as it should be, but it's still awesome. And e.g. Squeakland's own Etoys-To-Go would not have worked, as it only includes binaries for Intel-compatible processors.&lt;br /&gt;&lt;br /&gt;Another great addition is a 3-axis accelerometer. The Linux kernel's driver exposes it as a file at &lt;tt&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre-wrap;"&gt;/sys/devices/platform/lis3lv02d/position&lt;/span&gt;&lt;/tt&gt;. Gotta love the unix design of exposing devices as files. All it took to make this usable from an Etoys project was just an object with ax, ay, and az variables that get set with one simple textual script:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-9S_lzrQbJT0/Tlur4Foy3XI/AAAAAAAAAJc/ESO8t9CZikM/s1600/Screen+shot+2011-08-29+at+17.09.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="117" src="http://2.bp.blogspot.com/-9S_lzrQbJT0/Tlur4Foy3XI/AAAAAAAAAJc/ESO8t9CZikM/s320/Screen+shot+2011-08-29+at+17.09.53.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Another simple script can use this to control a ball (the "rebound" script just keeps it on-screen):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-6IgZvIYobFI/TlutjsGsyGI/AAAAAAAAAJg/zFKM9qNVcqk/s1600/Screen+shot+2011-08-29+at+17.17.02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://2.bp.blogspot.com/-6IgZvIYobFI/TlutjsGsyGI/AAAAAAAAAJg/zFKM9qNVcqk/s320/Screen+shot+2011-08-29+at+17.17.02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Fun all around—it's a bit a hard to see the yellow ball in the Video, but Jakob enjoys it anyway:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/ahkOIlLL--4/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ahkOIlLL--4?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="480" height="270"  src="http://www.youtube.com/v/ahkOIlLL--4?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;Also, uploading from Etoys directly to &lt;a href="http://squeakland.org/showcase/project.jsp?id=11173"&gt;Squeakland&lt;/a&gt; using Wifi just worked. Yay!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; If you want to try my uploaded project on your XO-1.75, you need to save it once from Etoys, quit Etoys, and run it again. Otherwise it won't work - it was signed by &lt;i&gt;my&lt;/i&gt; key so the Etoys security sandbox prevents it from opening the accelerometer device. The saved copy will be signed using &lt;i&gt;your&lt;/i&gt; key so no sandboxing happens.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-4881626797946944165?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/4881626797946944165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=4881626797946944165' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/4881626797946944165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/4881626797946944165'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2011/08/squeak-etoys-on-arm-based-xo-175.html' title='Squeak Etoys on ARM-based OLPC XO-1.75'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-9S_lzrQbJT0/Tlur4Foy3XI/AAAAAAAAAJc/ESO8t9CZikM/s72-c/Screen+shot+2011-08-29+at+17.09.53.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-1447374903605167621</id><published>2010-09-20T19:21:00.002+02:00</published><updated>2010-09-24T15:47:10.270+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>ESUG 2010 in Barcelona</title><content type='html'>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJyqiYnEsfI/AAAAAAAAAHw/lEGoh5HgnJo/s1600/esug2010_logo50.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJyqiYnEsfI/AAAAAAAAAHw/lEGoh5HgnJo/s1600/esug2010_logo50.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;This year's conference logo was designed by my good friend &lt;a href="http://www.gaguls.de/patty/"&gt;Patty Gadegast&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I just returned from the &lt;a href="http://www.esug.org/"&gt;European Smalltalk User Group&lt;/a&gt; conference in Barcelona, Spain. It was a really nice experience. There was too much going on to report everything here, so I will just pick some favorites.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gCu9ub99Rz4/TJeViICnheI/AAAAAAAAAF4/LKjDape4TeE/s1600/ESUG2010-CitiLab.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/_gCu9ub99Rz4/TJeViICnheI/AAAAAAAAAF4/LKjDape4TeE/s640/ESUG2010-CitiLab.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by Bert Freudenberg&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The event was hosted by &lt;a href="http://citilab.eu/"&gt;citilab&lt;/a&gt;&amp;nbsp;Cornellà.&amp;nbsp;It started off with a Camp Smalltalk over the weekend. I already met quite a few people there. I couldn't mingle as much as I hoped to because I had to get the first &lt;a href="http://squeakland.org/download/"&gt;Etoys 4.1&lt;/a&gt; release candidate out of the door:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJemrhzy8aI/AAAAAAAAAGI/FhAvBrhNgTU/s1600/ESUG2010CampSmalltalk.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="425" src="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJemrhzy8aI/AAAAAAAAAGI/FhAvBrhNgTU/s640/ESUG2010CampSmalltalk.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Close by was "Yokohama Wok", a Japanese/Spanish restaurant with the best all-you-can-eat buffet imaginable. You could have everything from freshly cut ham to sushi, grilled&amp;nbsp;steak or seafood,&amp;nbsp;bread, pasta, rice, fruits, cake, desserts.&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJeWajpqRxI/AAAAAAAAAGA/tFO22MPwnv8/s1600/ESUG2010-Wok.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJeWajpqRxI/AAAAAAAAAGA/tFO22MPwnv8/s400/ESUG2010-Wok.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by Bert Freudenberg&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I talked to Stef (president of ESUG) and gave him a &lt;a href="http://squeakland.spreadshirt.de/"&gt;Squeak Etoys button&lt;/a&gt;, which he ended up wearing the whole week:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gCu9ub99Rz4/TJdzyO-7GDI/AAAAAAAAAFw/kIT65PbepaA/s1600/ESUG2010-Stef.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_gCu9ub99Rz4/TJdzyO-7GDI/AAAAAAAAAFw/kIT65PbepaA/s400/ESUG2010-Stef.jpg" width="300" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by Bert Freudenberg&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;We also played together in a 2-on-2 Magic game (which we promptly lost ...):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJdwNN65KxI/AAAAAAAAAFo/L_2llNmVH3c/s1600/ESUG2010-Magic.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJdwNN65KxI/AAAAAAAAAFo/L_2llNmVH3c/s400/ESUG2010-Magic.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by Bert Freudenberg&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;On Monday I gave my &lt;a href="http://www.esug.org/wiki/pier/Conferences/2010/Talks/Squeak"&gt;Squeak Community Update&lt;/a&gt; talk, outlining what has happened in the Squeak and Etoys communities lately. Got some nice comments afterwards, including the request to give an &amp;nbsp;Etoys demo the next time. I of course used Etoys to give the presentation, but did not really include an Etoys introduction for people who had not seen it before. But I got a slot in the "show us your projects" session on Tuesday where I made up for that with a 10 minute demo.&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gCu9ub99Rz4/TJem-O8OXcI/AAAAAAAAAGQ/M1fljIeXhuw/s1600/ESUG2010Bert.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_gCu9ub99Rz4/TJem-O8OXcI/AAAAAAAAAGQ/M1fljIeXhuw/s400/ESUG2010Bert.jpg" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Gonzalo Zabala and his students from Argentina presented &lt;a href="http://www.esug.org/wiki/pier/Conferences/2010/Talks/Physical-Etoy"&gt;Physical Etoys&lt;/a&gt;:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJenVcsQDEI/AAAAAAAAAGY/XZ5UKqI4LJg/s1600/ESUG2010PhysicalEtoys.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJenVcsQDEI/AAAAAAAAAGY/XZ5UKqI4LJg/s400/ESUG2010PhysicalEtoys.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;a href="http://www.a3aan.st/esug2010/index.php/view/25/03+Conference/01+Monday/IMG_1903.JPG"&gt;       &lt;/a&gt;&lt;br /&gt;I also liked the &lt;a href="http://www.esug.org/wiki/pier/Conferences/2010/Talks/Xtreams"&gt;Xtreams&lt;/a&gt; presentation by Martin Kobetic:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJencDx1AZI/AAAAAAAAAGg/JJeApq4QKfU/s1600/ESUG2010Martin.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJencDx1AZI/AAAAAAAAAGg/JJeApq4QKfU/s400/ESUG2010Martin.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;I was session chair on Wednesday morning, so I could see &lt;a href="http://www.esug.org/wiki/pier/Conferences/2010/Talks/Cairo"&gt;Travis&lt;/a&gt;' update on Pango text rendering from the first row. Would love to have that in Squeak, but it only builds easily on Linux:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gCu9ub99Rz4/TJensABbgTI/AAAAAAAAAGw/5WUVruavMh8/s1600/ESUG2010Travis.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="http://1.bp.blogspot.com/_gCu9ub99Rz4/TJensABbgTI/AAAAAAAAAGw/5WUVruavMh8/s400/ESUG2010Travis.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;But the most exciting thing on Wednesday was of course that &lt;a href="http://tecnodacta.com.ar/gira/projects/physical-etoys/"&gt;Physical Etoys&lt;/a&gt; won the ESUG Innovation Technology Award:&lt;br /&gt;&lt;div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gCu9ub99Rz4/TJenioDoL7I/AAAAAAAAAGo/R5Q4EtiEOWQ/s1600/ESUG2010Award.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="426" src="http://4.bp.blogspot.com/_gCu9ub99Rz4/TJenioDoL7I/AAAAAAAAAGo/R5Q4EtiEOWQ/s640/ESUG2010Award.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;On Thursday, I participated in a panel discussion about open-source licenses, organized by Julian Fitzell and Jason Ayers of Cincom.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gCu9ub99Rz4/TJen0qpAexI/AAAAAAAAAG4/aKe4J-v7kPA/s1600/ESUG2010Licenses.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/_gCu9ub99Rz4/TJen0qpAexI/AAAAAAAAAG4/aKe4J-v7kPA/s400/ESUG2010Licenses.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the projects session, Ricardo demoed some of his &lt;a href="http://www.pcs.cnu.edu/~rcaton/ESUG/ESUG.html"&gt;Etoys work&lt;/a&gt; done during Google Summer of Code:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJen7055Q6I/AAAAAAAAAHA/_2a9Yr0EhQY/s1600/ESUG2010Ricardo.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJen7055Q6I/AAAAAAAAAHA/_2a9Yr0EhQY/s400/ESUG2010Ricardo.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Besides showing his graphing tools, the comic-like bubbles were a favorite with the audience:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJeoChkXMjI/AAAAAAAAAHI/COeFqoRFtwU/s1600/ESUG2010Caterpillar.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="425" src="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJeoChkXMjI/AAAAAAAAAHI/COeFqoRFtwU/s640/ESUG2010Caterpillar.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;/div&gt;Dale showed the beginnings of&amp;nbsp;&lt;a href="http://groups.google.com/group/bibliocello"&gt;Bibliocello&lt;/a&gt;, a repository for Monticello packages that can actually analyze them. You get to search implementors and senders across all packages, take statistics etc.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJeoKasskYI/AAAAAAAAAHQ/c1jPaVujKas/s1600/ESUG2010Dale.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJeoKasskYI/AAAAAAAAAHQ/c1jPaVujKas/s400/ESUG2010Dale.jpg" width="266" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;And at the end of the day, an exciting demo was given by HwaJong Oh, a Smalltalker and iPhone developer from Korea. He demonstrated&amp;nbsp;&lt;a href="http://www.squeaksource.com/ToolDad.html"&gt;Drag-and-Drop for Squeak Tools&lt;/a&gt;, e.g.&amp;nbsp;dragging the object held in an instance variable directly to another inspector.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJeoYrwuY5I/AAAAAAAAAHY/3E-yZ99Q1Zs/s1600/ESUG2010HwaJongOh.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="212" src="http://2.bp.blogspot.com/_gCu9ub99Rz4/TJeoYrwuY5I/AAAAAAAAAHY/3E-yZ99Q1Zs/s320/ESUG2010HwaJongOh.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;He also used cool animated mind-maps for his introduction:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJeohnRPYgI/AAAAAAAAAHg/jQqMJvMIp-s/s1600/ESUG2010MindMap.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJeohnRPYgI/AAAAAAAAAHg/jQqMJvMIp-s/s400/ESUG2010MindMap.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;The highlight on Friday was Lukas' &lt;a href="http://www.esug.org/wiki/pier/Conferences/2010/Talks/Helvetia"&gt;Helvetia&lt;/a&gt; presentation. I particularly liked the integration of PetitParser with the Smalltalk tools.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJeovNVhRmI/AAAAAAAAAHo/U2-tBtEyWJo/s1600/ESUG2010Lukas.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_gCu9ub99Rz4/TJeovNVhRmI/AAAAAAAAAHo/U2-tBtEyWJo/s320/ESUG2010Lukas.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Photo by &lt;a href="http://a3aan.st/esug2010/index.php/list/"&gt;Adriaan van Os&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;All in all it was a rather refreshing conference at a great location with interesting people. Looking forward to next year's ESUG :)&lt;/div&gt;&lt;/div&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/10460112-1447374903605167621?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/1447374903605167621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=1447374903605167621' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/1447374903605167621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/1447374903605167621'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2010/09/esug-2010-in-barcelona.html' title='ESUG 2010 in Barcelona'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gCu9ub99Rz4/TJyqiYnEsfI/AAAAAAAAAHw/lEGoh5HgnJo/s72-c/esug2010_logo50.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-8337025394486678890</id><published>2010-06-15T17:12:00.011+02:00</published><updated>2010-06-21T23:16:52.691+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>Squeak Etoys on iPad</title><content type='html'>In preparation of making &lt;a href="http://squeakland.org/"&gt;Etoys&lt;/a&gt; work on the recently announced &lt;a href="http://blog.laptop.org/2010/05/27/xo3-marvell-and-olpc/"&gt;OLPC tablet&lt;/a&gt;, I ported it to the iPad. Here is a &lt;a href="http://www.youtube.com/watch?v=gYrp31fH-Jk"&gt;video&lt;/a&gt;—read on below for some details:&lt;br /&gt;&lt;br /&gt;&lt;object height="360" width="580"&gt;&lt;param name="movie" value="http://www.youtube.com/v/gYrp31fH-Jk&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/gYrp31fH-Jk&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="580" height="360"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;This might look exciting, and it certainly is, but it feels actually a lot more clunky than it looks. You may have noticed the little target circles I added whenever a finger touches the screen. That's to know where exactly the finger hit. It's really hard to hit anything, took me a while of training to hit the colorful halo handle buttons on first try. We really need to redesign the user interface before giving this into the hands of kids ...&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;But for now, some technical details:&amp;nbsp;&lt;a href="http://smalltalkconsulting.com/"&gt;John McIntosh&lt;/a&gt;&amp;nbsp;ported the Squeak Virtual Machine to Apple's touch-based OS last year (source available at&amp;nbsp;&lt;a href="http://isqueak.org/"&gt;isqueak.org&lt;/a&gt;). I modified it slightly to enable multi-touch and keyboard input. Also, I rewrote his code to deal with touch events in Squeak, and added multi-touch handling to Morphic. Fortunately, &lt;a href="http://wiki.squeak.org/squeak/30"&gt;Morphic&lt;/a&gt; was designed to handle multiple "hands" (pointing devices) from the beginning, so adding this was much easier than in a system that assumes there is only one mouse. That's why moving multiple objects at the same time, and painting with more than one finger, just works once the events are in the system.&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;So far this is just an early test. We should work on improving the Etoys touch UI in next year's release. The Sugar menu bar works fine, but everything else is way too small. At least we have the luxury of being able to test Etoys already—getting the rest of Sugar running on a touch device might take a while. Hopefully OLPC will have developer machines soonish. If this test has shown one thing, then that there is lots of work to do (and it may even be necessary to start over).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-8337025394486678890?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/8337025394486678890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=8337025394486678890' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/8337025394486678890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/8337025394486678890'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2010/06/squeak-etoys-on-ipad.html' title='Squeak Etoys on iPad'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-4946033051576430153</id><published>2010-01-04T13:27:00.002+01:00</published><updated>2010-01-04T13:36:24.937+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>How to write a Sugar activity in Squeak/Etoys</title><content type='html'>&lt;div&gt;Milan just started a blog describing how to write activities in Squeak, see his &lt;a href="http://etoys-squeak-and-sugar.blogspot.com/2009/12/use-etoys-to-develop-xo-sugar-activity.html"&gt;first post&lt;/a&gt;. There are already a few of these, most notably the &lt;a href="http://hpi.uni-potsdam.de/hirschfeld/projects/olpc/"&gt;games&lt;/a&gt; by Robert Hirschfeld's students at the University of Potsdam, Germany. But so far the process is only documented in mailing list posts. Way to go, Milan!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-4946033051576430153?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/4946033051576430153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=4946033051576430153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/4946033051576430153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/4946033051576430153'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2010/01/how-to-write-sugar-activity-in.html' title='How to write a Sugar activity in Squeak/Etoys'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-2752971592019279550</id><published>2008-12-22T15:43:00.012+01:00</published><updated>2008-12-31T19:52:59.586+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>Peaceful Holidays ...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gCu9ub99Rz4/SU-n5JYaFiI/AAAAAAAAAEg/IJKvGNdfm10/s1600-h/xo-hugger.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://4.bp.blogspot.com/_gCu9ub99Rz4/SU-n5JYaFiI/AAAAAAAAAEg/IJKvGNdfm10/s320/xo-hugger.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5282625488141555234" /&gt;&lt;/a&gt;&lt;div&gt;... and a Happy 2009 to everyone from me and my family.&lt;/div&gt;&lt;div&gt;Presented by my XO-hugging &lt;a href="http://shop.ebay.de/?_nkw=usb+%28marsfigur%2Cgummimensch%29"&gt;USB men&lt;/a&gt; (who seem to have more memory capacity than me at times).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Featuring a seriously tree-infested Etoys project, with snow (for those living south who cannot enjoy the white fluff this time of the year).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And see you at &lt;a href="http://events.ccc.de/congress/2008/wiki/OLPC"&gt;25C3&lt;/a&gt; I hope!&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/10460112-2752971592019279550?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/2752971592019279550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=2752971592019279550' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2752971592019279550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2752971592019279550'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2008/12/peaceful-holidays.html' title='Peaceful Holidays ...'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gCu9ub99Rz4/SU-n5JYaFiI/AAAAAAAAAEg/IJKvGNdfm10/s72-c/xo-hugger.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-1100506158715727729</id><published>2008-12-11T00:04:00.014+01:00</published><updated>2010-01-27T16:37:58.705+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Emulating the latest stable OLPC XO software</title><content type='html'>Even with XO laptops &lt;a href="http://laptop.org/global"&gt;readily available now&lt;/a&gt; there are quite a lot of reasons why one would want to emulate it on another machine. One being to hook up a projector. Unfortunately there are quite a number of hoops (*) one has to jump through to make it work.&lt;br /&gt;&lt;br /&gt;Anyway, I made a virtual machine that allows me to emulate the XO in VMWare on my Mac, running Sugar in the XO's native 1200x900 resolution, scaled down to a nice physical size in a window on my regular screen (fullscreen works, too). Sound works (even Tam Tam), Browse works (so networking is good), and after setting a working Jabber server I do see other XOs in the neighborhood view (Chat worked fine).  Camera and mic are half working (Measure crashes, Record shows blank picture, but &lt;a href="http://lists.laptop.org/pipermail/devel/2008-December/021591.html"&gt;reportedly&lt;/a&gt; does record video), and a "Sugar restart" does not actually restart Sugar, but apart from that it seems fully functional, and much nicer than the emulations I had used to date.&lt;br /&gt;&lt;br /&gt;Click to see actual screenshots (calibrated to match the XO's physical extent using the Ruler activity on my MBP's &lt;a href="http://members.ping.de/%7Esven/dpi.html"&gt;110 ppi&lt;/a&gt; screen):&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://dev.laptop.org/%7Ebert/Ruler-emulated.png"&gt;&lt;img style="cursor: pointer; width: 120px; height: 105px;" src="http://dev.laptop.org/%7Ebert/Ruler-emulated.png" alt="" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://dev.laptop.org/%7Ebert/Home-emulated.png"&gt;&lt;img style="cursor: pointer; width: 120px; height: 105px;" src="http://dev.laptop.org/%7Ebert/Home-emulated.png" alt="" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://dev.laptop.org/%7Ebert/Journal-emulated.png"&gt;&lt;img style="cursor: pointer; width: 120px; height: 105px;" src="http://dev.laptop.org/%7Ebert/Journal-emulated.png" alt="" border="0" /&gt; &lt;/a&gt;&lt;img style="cursor: pointer; width: 120px; height: 105px;" src="http://dev.laptop.org/%7Ebert/TamTamMini-emulated.png" alt="" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;And here you can get that virtual machine (665 MB, 2 GB unzipped): &lt;a href="http://dev.laptop.org/%7Ebert/VMWare-8.2-767-bf.zip"&gt;VMWare-8.2-767-bf.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I made this using &lt;a href="http://www.vmware.com/products/fusion/"&gt;VMWare Fusion&lt;/a&gt;, which I found to be much better at running Linux clients than Parallels Desktop (I had been using that for 2 years). Give it a try, it's free as in beer for 30 days. No, I don't get paid if you buy it.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Update:&lt;/span&gt; Reportedly it does work in &lt;a href="http://www.vmware.com/products/player/"&gt;VMWare Player&lt;/a&gt; on Windows and Linux, too (see comments). And maybe someone can make an appliance for even easier use?&lt;br /&gt;&lt;br /&gt;(*) Now to the hoops:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I started with the 767/ext3 image from &lt;a href="http://download.laptop.org/xo-1/os/official/"&gt;http://download.laptop.org/xo-1/os/official/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;extended to 2 GB by appending /dev/zero&lt;br /&gt;(jffs2 compression gives roughly 2 GB too)&lt;/li&gt;&lt;li&gt;enlarged the partition to full 2 GB&lt;br /&gt;(using fdisk and ext2resize)&lt;/li&gt;&lt;li&gt;mounted that in a Fedora 10 virtual machine&lt;br /&gt;&lt;/li&gt;&lt;li&gt;copied over the F10 kernel, initrd, and modules&lt;br /&gt;(olpc kernel wanted AMD instructions)&lt;/li&gt;&lt;li&gt;edited grub.conf to use that kernel&lt;br /&gt;&lt;/li&gt;&lt;li&gt;and appended a root=/dev/sda1 kernel arg&lt;br /&gt;(the fedora kernel wants to use LVM otherwise)&lt;/li&gt;&lt;li&gt;unmounted&lt;br /&gt;&lt;/li&gt;&lt;li&gt;created new virtual machine&lt;br /&gt;(that disk, 1 CPU, 256 MB RAM, NAT networking)&lt;/li&gt;&lt;li&gt;booted into that new system&lt;br /&gt;&lt;/li&gt;&lt;li&gt;installed Perl&lt;br /&gt;(for vmware tools installer)&lt;/li&gt;&lt;li&gt;installed vmware tools&lt;br /&gt;(to get the X driver)&lt;br /&gt;(but none of the kernel modules, would need make/gcc/etc.)&lt;/li&gt;&lt;li&gt;deleted Perl&lt;br /&gt;(to restore the default sw environment)&lt;/li&gt;&lt;li&gt;copied the existing xorg-vmware.conf to xorg.conf&lt;br /&gt;(to get 1200x900 resolution w/ 200 dpi)&lt;/li&gt;&lt;li&gt;booted into Sugar&lt;br /&gt;(looks really nice so scaled down)&lt;/li&gt;&lt;li&gt;installed activities&lt;br /&gt;(took a long time, maybe it's my DSL)&lt;/li&gt;&lt;li&gt;tested a bit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;rm -r ~olpc/.sugar&lt;br /&gt;(to remove my personal data)&lt;/li&gt;&lt;li&gt;should have deleted sshd host keys, too, but didn't&lt;br /&gt;&lt;/li&gt;&lt;li&gt;shut down&lt;br /&gt;&lt;/li&gt;&lt;li&gt;zip&lt;br /&gt;&lt;/li&gt;&lt;li&gt;upload&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;still no profit? ;)&lt;/li&gt;&lt;/ul&gt;Enjoy.&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/10460112-1100506158715727729?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/1100506158715727729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=1100506158715727729' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/1100506158715727729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/1100506158715727729'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2008/12/emulating-latest-stable-olpc-xo.html' title='Emulating the latest stable OLPC XO software'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-364282043877713009</id><published>2008-12-05T22:42:00.005+01:00</published><updated>2008-12-05T23:13:38.912+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>European grassroots meeting</title><content type='html'>&lt;div&gt;I went to Brussels last weekend, meeting with folks from OLPC Europe, OLPC Boston, and some other European grassroots (me representing &lt;a href="http://olpc-deutschland.de/"&gt;OLPC Germany e.V.&lt;/a&gt;). We mostly discussed how to implement the new &lt;a href="http://laptop.org/global"&gt;Give-1-Get-1&lt;/a&gt; program as well as &lt;a href="http://laptop.org/en/participate/give-many.shtml"&gt;Give-many&lt;/a&gt; here in Europe. Some &lt;a href="http://wiki.laptop.org/go/Grassroots_meetings/November_29%2C_2008"&gt;notes&lt;/a&gt; are available.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://squeakland.org/launcher/?http://freudenbergs.de/bert/etoys/OLPC-Europe.pr"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 137px;" src="http://4.bp.blogspot.com/_gCu9ub99Rz4/STmmDZO3mvI/AAAAAAAAAEY/OtX8h4w0mN0/s200/OLPC-Europe.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5276431015684315890" /&gt;&lt;/a&gt;And, while sitting together at a nice Cafe on Sunday I made this little Etoys project to celebrate OLPC Europe. Just click &lt;a href="http://squeakland.org/launcher/?http://freudenbergs.de/bert/etoys/OLPC-Europe.pr"&gt;here&lt;/a&gt; if you are on an &lt;a href="http://laptop.org/"&gt;XO&lt;/a&gt; or have the &lt;a href="http://squeakland.org/"&gt;Squeakland&lt;/a&gt; plugin installed (as everyone should of course). For those who were there and took the huge file home on their USB drives - this is a fixed version that does not keep growing indefinitely while animating.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For the Etoyers out there - if you put a copy of a player in one of its own variables repeatedly, this creates an evergrowing "linked list" of player copies. Bad idea. Reset the variable first (by assigning dot for example) then do the copy: see my example.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-364282043877713009?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/364282043877713009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=364282043877713009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/364282043877713009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/364282043877713009'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2008/12/european-grassroots-meeting.html' title='European grassroots meeting'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gCu9ub99Rz4/STmmDZO3mvI/AAAAAAAAAEY/OtX8h4w0mN0/s72-c/OLPC-Europe.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-2848720280456903502</id><published>2007-04-20T15:30:00.000+02:00</published><updated>2007-05-09T16:36:51.879+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>OLPC review now online, English too</title><content type='html'>The extensive OLPC article by c't magazine is now available online in both original &lt;a href="http://www.heise.de/mobil/artikel/88439"&gt;German&lt;/a&gt; and an &lt;a href="http://www.heise.de/mobil/artikel/88916"&gt;English translation&lt;/a&gt;. It's a thorough review (they had a B1 machine) with some interesting photographs in it, like the Squeak Etoys screen  in reflective and backlight modes with microscopic images revealing the working  of the XO's incredible LCD.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.heise.de/mobil/artikel/88916/3"&gt;&lt;img style="margin: 10px; float: left;" src="http://bp3.blogger.com/_gCu9ub99Rz4/RijDniTPsPI/AAAAAAAAACo/Y3U24qclhCM/s320/1.jpeg" alt="" id="BLOGGER_PHOTO_ID_5055505665713221874" 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/10460112-2848720280456903502?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/2848720280456903502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=2848720280456903502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2848720280456903502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2848720280456903502'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/04/olpc-review-now-online-english-too.html' title='OLPC review now online, English too'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_gCu9ub99Rz4/RijDniTPsPI/AAAAAAAAACo/Y3U24qclhCM/s72-c/1.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-3700814658261302983</id><published>2007-03-27T16:58:00.000+02:00</published><updated>2007-03-27T17:13:41.006+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Croquet SDK 1.0 released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://croquetconsortium.org/"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_gCu9ub99Rz4/Rgk0fJVJK7I/AAAAAAAAACU/_YzlsRyHg6E/s200/Croquet-Logo-small.jpg" alt="" id="BLOGGER_PHOTO_ID_5046622567130540978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Get it while it's hot from the equally new &lt;a href="http://croquetconsortium.org/"&gt;Croquet Consortium&lt;/a&gt; web site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-3700814658261302983?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/3700814658261302983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=3700814658261302983' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/3700814658261302983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/3700814658261302983'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/03/croquet-sdk-10-released.html' title='Croquet SDK 1.0 released'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_gCu9ub99Rz4/Rgk0fJVJK7I/AAAAAAAAACU/_YzlsRyHg6E/s72-c/Croquet-Logo-small.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-8878669578234706031</id><published>2007-03-20T11:36:00.000+01:00</published><updated>2007-03-20T13:15:32.364+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>In-depth review of XO in German c't magazine</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gCu9ub99Rz4/Rf--bJVJK5I/AAAAAAAAACE/3PDaDQgmOwA/s1600-h/xo-sophie.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_gCu9ub99Rz4/Rf--bJVJK5I/AAAAAAAAACE/3PDaDQgmOwA/s200/xo-sophie.jpg" alt="" id="BLOGGER_PHOTO_ID_5043959481248590738" border="0" /&gt;&lt;/a&gt;There's a glowing review of the OLPC project and its XO machine in the current issue 07/2007 of &lt;a href="http://www.heise.de/ct/"&gt;c't magazine&lt;/a&gt;. The &lt;a href="http://www.heise-medien.de/presseinfo.php/ct,07,03_19_a/41"&gt;in-depth article&lt;/a&gt; by Dr. Jürgen Rink describes the project's history and educational ambitions as well as its current prototype hardware and software. One very interesting detail is a comparison of the XO's novel dual-mode display in  low light and bright sun light, at normal size and magnified:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.heise-medien.de/presseinfo.php/ct,07,03_19_a/41"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_gCu9ub99Rz4/Rf-74pVJK4I/AAAAAAAAAB8/O35rnaEV4So/s400/xo-microscope.png" alt="" id="BLOGGER_PHOTO_ID_5043956689519848322" border="0" /&gt;&lt;/a&gt;On the left, under indoor lighting, the colored backlight shines through holes in the reflective layer. On the right, when brightly lit outdoors, the reflection is so strong that the backlight is not even visible anymore, thus creating a gray-scale image. The photographs show one of the example &lt;a href="http://wiki.laptop.org/go/Sugar_EToys"&gt;Etoys&lt;/a&gt; projects.&lt;br /&gt;&lt;br /&gt;The magazine is available now at kiosks until next week, or via &lt;a href="https://www.heise.de/abo/ct/hefte.shtml"&gt;mail order&lt;/a&gt;. In a few weeks the article should be available online via &lt;a href="http://www.heise.de/kiosk/"&gt;click&amp;amp;buy&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-8878669578234706031?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/8878669578234706031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=8878669578234706031' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/8878669578234706031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/8878669578234706031'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/03/in-depth-review-of-xo-in-german-ct.html' title='In-depth review of XO in German c&apos;t magazine'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_gCu9ub99Rz4/Rf--bJVJK5I/AAAAAAAAACE/3PDaDQgmOwA/s72-c/xo-sophie.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-2510783906925727101</id><published>2007-03-14T11:03:00.000+01:00</published><updated>2007-03-14T12:06:52.284+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Croquet for Business: Qwaq Forums</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://qwaq.com/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_gCu9ub99Rz4/RffMO0XO9MI/AAAAAAAAAB0/sSw1Tpzf7nQ/s400/Slide1_34pct.jpg" alt="" id="BLOGGER_PHOTO_ID_5041722862810887362" border="0" /&gt;&lt;/a&gt;So &lt;a href="http://qwaq.com/"&gt;Qwaq&lt;/a&gt; came out of "stealth-mode" and reveiled what they have been working on  for a while now, &lt;a href="http://qwaq.com/qwaq_forums.html"&gt;Qwaq Forums&lt;/a&gt;:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;Qwaq Forums, the company's first product, is a secure virtual workspace application that significantly increases the productivity of distributed teams by bringing critical resources together in virtual places, as if they were in an actual physical location. A highly interactive and persistent environment, Qwaq Forums enables users to work, collaborate with others, and identify and solve problems.&lt;br /&gt;&lt;/blockquote&gt;And I'm proud to say I contributed a little, which most probably will find its way into the next &lt;a href="http://opencroquet.org/"&gt;Croquet&lt;/a&gt; release.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update: &lt;/span&gt;Here's a few nice stories of fellow bloggers who have seen Forums already.&lt;br /&gt;&lt;br /&gt;From Steve Borsch's &lt;a href="http://www.iconnectdots.com/ctd/2007/03/qwaq_launches_v.html"&gt;Connecting The Dots&lt;/a&gt;:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Qwaq will get traction only because they completely understand that giving someone a semi-trailer truck (i.e., an engine like There or Second Life) doesn't do much good if the person has a small garage and needs a vehicle to go get groceries and tool around  (90% of collaborators). Qwaq Forums is a powerful, easy to use and navigate, co-creation space that the rest of us can use.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span class="post-author"&gt;Glyn Moody&lt;/span&gt; writes on &lt;a href="http://opendotdotdot.blogspot.com/2007/03/going-quaqqers-about-quaq.html"&gt;Open dot dot dot&lt;/a&gt;:&lt;br /&gt;&lt;a href="http://www2.blogger.com/post-edit.g?blogID=10460112&amp;postID=2510783906925727101#%20http://www.iconnectdots.com/ctd/2007/03/qwaq_launches_v.html"&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;One of the benefits of using Croquet as the basis of its products is that the protocols are open, and this allows Croquet-compatible products to interoperate with Qwaq's. This means that the dynamics of the Croquet ecosystem are similar to that of the Web, which is never a bad thing.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;And in &lt;a href="http://collaborationblog.typepad.com/collaboration/2007/03/qwaq_exits_stea.html"&gt;The Culture of Collaboration&lt;/a&gt;, Evan Rosen writes:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;Unlike most traditional web conferencing which works only while a session is underway, Qwaq Forums is persistent. This means authorized users can access the virtual space any time. Team members in another time zone may wake up to find the results of real-time collaboration that occurred while they were sleeping.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-2510783906925727101?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/2510783906925727101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=2510783906925727101' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2510783906925727101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2510783906925727101'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/03/croquet-for-business-qwaq-forums.html' title='Croquet for Business: Qwaq Forums'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_gCu9ub99Rz4/RffMO0XO9MI/AAAAAAAAAB0/sSw1Tpzf7nQ/s72-c/Slide1_34pct.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-5092299994185428197</id><published>2007-03-04T20:14:00.001+01:00</published><updated>2010-01-27T16:37:49.806+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>Interactive OLPC XO Display Simulation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://squeakland.org/project.jsp?http://freudenbergs.de/bert/etoys/OLPC-XO-Display.pr"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_gCu9ub99Rz4/Resga6xtdFI/AAAAAAAAABs/6CGTXxZzVgM/s400/OLPC-XO-Display.png" alt="" id="BLOGGER_PHOTO_ID_5038156254970475602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Many people still have not seen the innovative display of the OLPC project's "XO" laptop. It has twice the resolution of a regular LCD (200 dpi), and works in bright daylight in gray-scale reflective mode. It's impossible for me to increase your screen's resolution by software, and I cannot make your display reflective, but here is an interactive simulation of the backlight mode with its interesting color pattern. This pattern is the source of a lot of confusion about the "color resolution" of the display. The LCD has 1200x900 square pixels, but the backlight puts a full color through each pixel. It is not made of red, green, and blue sub-pixels like a regular LCD, but the first pixel is full red, the second green, the third blue, and so on. The DCON chip (Display CONtroller) selects the color components from the full-color frame buffer.&lt;br /&gt;&lt;br /&gt;My simulation of the DCON achieves the same effect by selecting either the red, green, or blue color component in each pixel. Just move the mouse pointer around to see how different colors are reproduced.  You'll notice strong diagonal patterns, but remember, on the actual display the pixels are only half as large. Note that the actual DCON optionally applies a bit of anti-aliasing in hardware which is not simulated here. It helps reproducing fine structures and depicts colors more accurately. Additionally, the simulation shows a magnified image to better illustrate the principle, but it is not accurate because the reflective area of each pixel is not depicted. Maybe I can add this in a later version.&lt;br /&gt;&lt;br /&gt;I made the simulation using Squeak / Etoys, which is one of the programming environments on the OLPC machine, but also works on Windows, Mac OS X, Linux, and many  more systems. If you run the simulation on the actual laptop (download the project, place it in /home/olpc/.sugar/default/etoys/MyEtoys, run Etoys, choose Load Project), then you should close the small simulated screen and just leave the magnified view open.&lt;br /&gt;&lt;br /&gt;For the interactive simulation, download &lt;a href="http://squeakland.org/detect.html"&gt;Squeak&lt;/a&gt; (this version installs both, a regular application and a browser plugin), then &lt;a href="http://squeakland.org/project.jsp?http://freudenbergs.de/bert/etoys/OLPC-XO-Display.pr"&gt;click here&lt;/a&gt; to run the simulation in your browser, or download the &lt;a href="http://freudenbergs.de/bert/etoys/OLPC-XO-Display.pr"&gt;project file&lt;/a&gt;, launch Squeak, and drop the project into it.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Intel-Mac users&lt;/span&gt; beware, the plugin is not supported directly yet. To see the project in  Safari, you have to quit Safari, set it to open in Rosetta (select Safari in the finder, press Cmd-i), and reopen. Or, use the download method, Squeak itself is running fine on Intel Mac, it's just the browser plugin that's making problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-5092299994185428197?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/5092299994185428197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=5092299994185428197' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/5092299994185428197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/5092299994185428197'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/03/interactive-olpc-xo-display-simulation.html' title='Interactive OLPC XO Display Simulation'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_gCu9ub99Rz4/Resga6xtdFI/AAAAAAAAABs/6CGTXxZzVgM/s72-c/OLPC-XO-Display.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-4770989905943515991</id><published>2007-02-16T10:51:00.000+01:00</published><updated>2007-02-16T11:35:26.284+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>OpenGL in a Workspace</title><content type='html'>On some modern Linux systems, Croquet does not work anymore because OpenGL failes to initialize. Now, I originally wrote that code, and it worked fine for years. So it can't possibly be buggy, right? Jens Lincke of &lt;a href="http://impara.de/"&gt;impara&lt;/a&gt; tracked it down to the "Composite" extension that is enabled by default nowadays. With Composite disabled, it works, enable it, and it does not.&lt;br /&gt;&lt;br /&gt;So I turned to NVIDIA for help, thinking their driver might be buggy. Had to give them an easy way to reproduce the problem, this is the snippet I came up with:&lt;br /&gt;&lt;blockquote&gt;&lt;pre style="font-family: arial;line-height:1.1em"&gt;| ogl green |&lt;br /&gt;ogl := OpenGL newIn: (0@0 extent: 100@100).&lt;br /&gt;green := 1.&lt;br /&gt;[[&lt;br /&gt;        ogl glClearColor(0, green, 0, 1).&lt;br /&gt;        ogl glClear(16r4000).&lt;br /&gt;        ogl swapBuffers.&lt;br /&gt;        Sensor waitClickButton.&lt;br /&gt;        green := 1 - green.&lt;br /&gt;] repeat] ensure: [ogl destroy]&lt;/pre&gt;&lt;/blockquote&gt;Beauty, eh? ;-) I guess nobody has done this in a workspace for a long time. Stop it with Alt-.&lt;br /&gt;&lt;br /&gt;Anyway, NVIDIA could reproduce the problem, and found our bug:&lt;br /&gt;&lt;blockquote&gt;[...] the app is trying to create a depth 24 child window of a depth 32 parent and the app specifies neither a border pixel nor a border pixmap.&lt;/blockquote&gt;Doh! I forgot to specify the &lt;a href="http://www.tronche.com/gui/x/xlib/window/attributes/border.html"&gt;border&lt;/a&gt;! We were just lucky that this did not happen before. Jens and y.t. made a patch, should be in the next VM. And big thanks to &lt;a href="http://developer.nvidia.com/"&gt;NVIDIA developer support&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-4770989905943515991?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/4770989905943515991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=4770989905943515991' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/4770989905943515991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/4770989905943515991'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/02/opengl-in-workspace.html' title='OpenGL in a Workspace'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-2140132911973763292</id><published>2007-01-30T23:13:00.000+01:00</published><updated>2007-01-31T00:11:09.601+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>Stripped XO</title><content type='html'>Early in January, my laptop was the star of a photo shooting for the German issue of MIT's Technology Review&lt;a href="http://www.heise.de/tr/magazin/"&gt;&lt;/a&gt;. We took off the plastic enclosure of the "brick", it was pretty interesting, for example to see how the whole display in its metallic housing is carefully held by rubber mounts.&lt;br /&gt;&lt;br /&gt;This photograph was published in the magazin's current issue (02/07), along with a shot of the main board (which sits behind the display). The accompanying text not only provided a description of the parts, but also highlighted some design decisions that makes it unique hardware-wise. OLPC's educational goals were already reported on in the previous issue.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_gCu9ub99Rz4/Rb_Dql8B_oI/AAAAAAAAABg/377aeAeQpRg/s1600-h/xostripped.jpg"&gt;&lt;img style="margin: 0pt 0pt 0px 0px; float: center; cursor: pointer;" src="http://bp0.blogger.com/_gCu9ub99Rz4/Rb_Dql8B_oI/AAAAAAAAABg/377aeAeQpRg/s320/xostripped.jpg" alt="" id="BLOGGER_PHOTO_ID_5025950845674585730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Image courtesy of &lt;a href="http://www.heise.de/tr/magazin/"&gt;http://www.heise.de/tr/magazin/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" &gt;&lt;span style="color: rgb(102, 102, 102);"&gt;The colors are off for some reason after uploading to blogger - they were fine on my disk. Sorry.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-2140132911973763292?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/2140132911973763292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=2140132911973763292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2140132911973763292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2140132911973763292'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/01/stripped-xo.html' title='Stripped XO'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_gCu9ub99Rz4/Rb_Dql8B_oI/AAAAAAAAABg/377aeAeQpRg/s72-c/xostripped.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-2513343767600019122</id><published>2007-01-21T23:22:00.001+01:00</published><updated>2010-01-27T16:37:42.812+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>Etoys kid-tested on XO</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_gCu9ub99Rz4/RbPn6l8B_mI/AAAAAAAAABI/Us45v3XKeng/s1600-h/OLPCSophie2.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_gCu9ub99Rz4/RbPn6l8B_mI/AAAAAAAAABI/Us45v3XKeng/s200/OLPCSophie2.jpg" alt="" id="BLOGGER_PHOTO_ID_5022613003250564706" border="0" /&gt;&lt;/a&gt;I brought my green machine home this weekend, and my twins had fun with it. Enormous fun in fact for the two 7-year olds, pounding on TamTam furiously. I couldn't bear it anymore after half an hour or so.&lt;br /&gt;&lt;br /&gt;Instead, I showed Jakob how to make a little figure bounce around on the screen in Etoys, while his sister went to practice her cello. He painted a simple head, and then we used the "forward by" and "bounce" tiles in a tiny two-line script making it move around. I made the mistake of pointing out that the "bounce" tile can produce some noise when bouncing. Endless fun trying the different noises ensued. Oh well.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_gCu9ub99Rz4/RbPn618B_nI/AAAAAAAAABQ/eDfr0-fxWAo/s1600-h/OLPCSophieJakob2.jpg"&gt;&lt;img style="margin: 0pt 10pt 10px 0px; float: left; cursor: pointer;" src="http://bp1.blogger.com/_gCu9ub99Rz4/RbPn618B_nI/AAAAAAAAABQ/eDfr0-fxWAo/s200/OLPCSophieJakob2.jpg" alt="" id="BLOGGER_PHOTO_ID_5022613007545532018" border="0" /&gt;&lt;/a&gt;Disturbed in her practice by these noises, Sophie came over and wanted to paint, too. So we saved Jakob's project and started a new one for her. I sat back to work on my email and let her brother teach. She spend like half an hour just painting the figure. The paint tool showed that it is not tuned to the XO's display resolution yet, it's far too small. But not giving up that easily, Sophie was erasing and repainting it over and over until she was satisfied with her "cow girl".  Then Jakob proudly told her how to let it move and bounce, he had rembered almost everything needed. Together they  quickly made it work, and just started exploring the noise-making possibilities again when we were saved by the call to dinner ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-2513343767600019122?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/2513343767600019122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=2513343767600019122' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2513343767600019122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2513343767600019122'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/01/etoys-kid-tested-on-xo.html' title='Etoys kid-tested on XO'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_gCu9ub99Rz4/RbPn6l8B_mI/AAAAAAAAABI/Us45v3XKeng/s72-c/OLPCSophie2.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-6570186759354313299</id><published>2007-01-12T15:26:00.001+01:00</published><updated>2010-01-27T16:37:34.981+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>OLPC talk at design school</title><content type='html'>I gave a talk about the $100-laptop at the Magdeburg school of &lt;a href="http://www.gestaltung.hs-magdeburg.de/"&gt;Industrial Design&lt;/a&gt;. We did some very inspiring projects using Squeak, Etoys, and Croquet together before. The designers always come up with interesting ideas, even though not everything is directly implementable by us developers.&lt;br /&gt;&lt;br /&gt;Carola Zwick, dean of the school, wrote a book &lt;a href="http://www.avabooks.com.sg/avauk/details.php?id=107"&gt;Designing for Small Screens&lt;/a&gt; that certainly gives valuable insight for OLPC developers, and she provided (though indirectly) some very important infrastructure for the OLPC office: her &lt;a href="http://www.seven5.com/"&gt;group&lt;/a&gt; designed the &lt;a href="http://www.hermanmiller.com/mirra/"&gt;chairs&lt;/a&gt; they are sitting on. I got the actual invitation by Christine Strothotte, who got her PhD doing computer graphics in Smalltalk just a few years before I got mine from the same school. She's teaching interaction design nowadays. I'm looking forward to doing an OLPC-related project with these great folks.&lt;br /&gt;&lt;br /&gt;A student took some &lt;a href="http://www.wretch.cc/album/album.php?id=hangxdesign&amp;book=34&amp;amp;page=1"&gt;photographs&lt;/a&gt; during the talk. Also, from his &lt;a href="http://hangxdesign.blogspot.com/2007/01/the100-dollar-laptop.html"&gt;blog post&lt;/a&gt; it seems I convinced him of the merits of the OLPC project (it was a lively discussion). Thanks for posting, Cheng!&lt;a href="javascript:void(0)" onclick="return false;" tabindex="7"&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-6570186759354313299?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/6570186759354313299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=6570186759354313299' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/6570186759354313299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/6570186759354313299'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/01/olpc-talk-at-design-school.html' title='OLPC talk at design school'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-2070333274906015010</id><published>2007-01-11T15:22:00.001+01:00</published><updated>2010-01-27T16:37:26.789+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='sophie'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Sophie, Tweak on the OLPC laptop</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gCu9ub99Rz4/RaZekV8B_kI/AAAAAAAAAAk/6P8mXeoRYL8/s1600-h/SophieOnXO-2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://bp2.blogger.com/_gCu9ub99Rz4/RaZekV8B_kI/AAAAAAAAAAk/6P8mXeoRYL8/s320/SophieOnXO-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5018802813208231490" border="0" /&gt;&lt;/a&gt;I just installed &lt;a href="http://sophieproject.org/"&gt;Sophie&lt;/a&gt; on my green machine. Sophie is a project of the &lt;a href="http://www.futureofthebook.org/"&gt;Institute for the Future of the Book&lt;/a&gt;, is implemented in &lt;a href="http://squeak.org/"&gt;Squeak&lt;/a&gt; (just like my &lt;a href="http://wiki.laptop.org/go/Etoys"&gt;Etoys activity&lt;/a&gt; on the laptop) using &lt;a href="http://tweak.impara.de/"&gt;Tweak&lt;/a&gt; as its UI framework (which is the original topic of my blog). Tweak is also the base for the next-gen Etoys.&lt;br /&gt;&lt;br /&gt;Installation went pretty smooth. I downloaded the cross-platform zip file using the  Web activity from Sugar&lt;br /&gt;and unpacked it using the command line. The first start of Sophie failed, but after replacing the failing plugin with one from the pre-installed Squeak it started and worked. Yay!&lt;br /&gt;&lt;br /&gt;This is an excellent example why it's a good idea to have a regular X11 installation on the kid's laptop: a lot of software will just work, even if it is not correctly integrated into the Sugar UI.&lt;br /&gt;&lt;br /&gt;Michael Rüger of &lt;a href="http://impara.de/"&gt;impara&lt;/a&gt; (a Squeak shop leading Sophie development here in Magdeburg, Germany) came over and made a little book, downloading two logos directly from the web (Sophie can do that!), adding a bit of text and color ... Tweak performance is not exactly blazing on the XO machine, I think we made the right decision to not use the Tweak-based Etoys but stick to the proven Morphic-based one. Of course one could optimize it a lot, but who has time for that? Anyway, it was useable - click the image to get a larger view:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gCu9ub99Rz4/RaZooV8B_lI/AAAAAAAAAAs/PEvYnG3fCKQ/s1600-h/SophieOnXO-1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_gCu9ub99Rz4/RaZooV8B_lI/AAAAAAAAAAs/PEvYnG3fCKQ/s320/SophieOnXO-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5018813877043986002" 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/10460112-2070333274906015010?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/2070333274906015010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=2070333274906015010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2070333274906015010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/2070333274906015010'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2007/01/sophie-tweak-on-olpc-laptop.html' title='Sophie, Tweak on the OLPC laptop'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_gCu9ub99Rz4/RaZekV8B_kI/AAAAAAAAAAk/6P8mXeoRYL8/s72-c/SophieOnXO-2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-116654329642180701</id><published>2006-12-19T13:41:00.000+01:00</published><updated>2007-01-11T15:04:10.115+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>OLPC, graphics, and more</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wiki.laptop.org/images/0/0f/CameraInEtoys.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://wiki.laptop.org/images/0/0f/CameraInEtoys.jpg" alt="" border="0" /&gt;&lt;/a&gt;I just returned from a nice productive visit to California, where I brought back my very own $100-laptop. Got the camera working in Etoys (see picture on the right, showing Yoshiki and me) with just a few patches  to &lt;a href="http://diegogomezdeck.blogspot.com/2006/12/video4squeak-funcionando-en-la-olpc.html"&gt;Diego&lt;/a&gt;'s code.&lt;br /&gt;&lt;br /&gt;We also went to visit Keith Packard and Carl Worth of &lt;a href="http://cairographics.org/"&gt;Cairo&lt;/a&gt; fame in Portland. Had a nice chat about &lt;a href="http://geek.vtnet.ca/doc/ols2005-notes/html/d1-15h00.html"&gt;Twin&lt;/a&gt; and then hacked away on a &lt;a href="http://piumarta.com/pepsi/"&gt;Pepsi&lt;/a&gt; version of image compositing operators. A very interesting meeting it was, with the old folks (Alan Kay, Jim Gettys) and the younger ones all sharing their thoughts.&lt;br /&gt;&lt;br /&gt;And back to OLPC, read this nice essay titled &lt;a href="http://alchemicalmusings.org/2006/12/19/free-laptops/"&gt;Free Laptops: Creating, Producing and Sharing a Revolution&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-116654329642180701?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/116654329642180701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=116654329642180701' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/116654329642180701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/116654329642180701'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/12/olpc-graphics-and-more.html' title='OLPC, graphics, and more'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-116153400875766976</id><published>2006-10-22T18:05:00.000+02:00</published><updated>2007-01-11T15:03:18.426+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>OLPC video from NECC</title><content type='html'>Just found a nice &lt;a href="http://www.youtube.com/watch?v=UvpP3Farb2g"&gt;video on youtube&lt;/a&gt; about the $100 laptop at &lt;a href="http://web.uoregon.edu/ISTE/NECC2006/"&gt;NECC 06&lt;/a&gt;, including a cameo of our very own Kim Rose (at 3:21) while the speaker is mentioning "creativity" - very apt, I'd say.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-116153400875766976?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/116153400875766976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=116153400875766976' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/116153400875766976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/116153400875766976'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/10/olpc-video-from-necc.html' title='OLPC video from NECC'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-115952747167731510</id><published>2006-09-29T10:49:00.000+02:00</published><updated>2007-01-11T15:11:16.949+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Performance Profiling</title><content type='html'>Andreas Raab wrote a &lt;a href="https://lists.wisc.edu/read/messages?id=1411189"&gt;nice primer&lt;/a&gt; on profiling in Squeak. MessageTally might be the single most undervalued Squeak performance tool - a mandatory read for every serious developer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-115952747167731510?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/115952747167731510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=115952747167731510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/115952747167731510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/115952747167731510'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/09/performance-profiling.html' title='Performance Profiling'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-115801261793100987</id><published>2006-09-11T23:44:00.001+02:00</published><updated>2010-01-27T16:37:18.495+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='sugar'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='etoys'/><title type='text'>Squeak for every child</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/1210/665/400/olpc-squeak.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Lately I work on Squeak integration in the One Laptop Per Child (&lt;a href="http://laptop.org/"&gt;OLPC&lt;/a&gt;) project, perhaps better known as the "$100 laptop". The whole etoys group came over to OLPC's office in Cambridge. Squeak looks surprisingly well on the display prototype, and also etoys are reasonably fast. Ian Piumarta took some nice &lt;a href="http://piumarta.com/photos/olpc/"&gt;pictures&lt;/a&gt;, which might very well be the first photos of the actual display in the wild.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-115801261793100987?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/115801261793100987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=115801261793100987' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/115801261793100987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/115801261793100987'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/09/squeak-for-every-child.html' title='Squeak for every child'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-114556211000396449</id><published>2006-04-20T21:37:00.000+02:00</published><updated>2007-01-11T15:05:45.664+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><title type='text'>Croquet SDK 1.0 Beta out</title><content type='html'>Get it at &lt;a href="http://www.opencroquet.org/"&gt;opencroquet.org&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-114556211000396449?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/114556211000396449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=114556211000396449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/114556211000396449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/114556211000396449'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/04/croquet-sdk-10-beta-out.html' title='Croquet SDK 1.0 Beta out'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-114444221679527345</id><published>2006-04-07T22:36:00.000+02:00</published><updated>2007-01-11T15:06:05.884+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><title type='text'>Be a magician</title><content type='html'>A very nice post about the &lt;a href="http://peripateticaxiom.blogspot.com/2006/04/keywords-magic-and-edsls.html"&gt;Magic of Smalltalk&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-114444221679527345?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/114444221679527345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=114444221679527345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/114444221679527345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/114444221679527345'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/04/be-magician.html' title='Be a magician'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-114155895642679160</id><published>2006-03-05T12:35:00.000+01:00</published><updated>2007-01-11T15:06:49.990+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><title type='text'>Smalltalk Party Brussels 11 March 2006</title><content type='html'>Only six days left to the &lt;a href="http://www.cdegroot.com/blog/2006/02/16/smalltalk-party-brussels-11th-march-2006/"&gt;Smalltalk Party in Brussels&lt;/a&gt;! I'll be there, and &lt;a href="http://prog.vub.ac.be:8080/SmalltalkParty/"&gt;more interesting people&lt;/a&gt;, too. You should come, too!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-114155895642679160?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/114155895642679160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=114155895642679160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/114155895642679160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/114155895642679160'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/03/smalltalk-party-brussels-11-march-2006.html' title='Smalltalk Party Brussels 11 March 2006'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-114124831938825828</id><published>2006-03-01T20:57:00.000+01:00</published><updated>2007-01-11T15:07:26.954+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='sophie'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Sophie movies</title><content type='html'>Steve is posting &lt;a href="http://www.geeksrus.com/sophie/"&gt;screen clips&lt;/a&gt; of progress in Sophie (a.k.a. the Future of the Book), which is  developed in Squeak with a Tweak UI. It's looking nicer and nicer every week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-114124831938825828?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/114124831938825828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=114124831938825828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/114124831938825828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/114124831938825828'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/03/sophie-movies.html' title='Sophie movies'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-113970329939638255</id><published>2006-02-12T01:04:00.000+01:00</published><updated>2007-01-11T15:07:48.668+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Squeak Elections</title><content type='html'>The first-ever &lt;a href="http://people.squeakfoundation.org/article/53.html"&gt;elections&lt;/a&gt; are held in the Squeak community. Candidates have to be nominated by February 17, same deadline for getting certified at &lt;a href="http://people.squeakfoundation.org/"&gt;SqP&lt;/a&gt; if you want to vote.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-113970329939638255?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/113970329939638255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=113970329939638255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/113970329939638255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/113970329939638255'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/02/squeak-elections.html' title='Squeak Elections'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-113818946435929018</id><published>2006-01-25T12:23:00.000+01:00</published><updated>2007-01-11T15:08:13.449+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Croquet &amp; Tweak at NASA</title><content type='html'>Ted Shab &lt;a href="http://www.aito.org/pipermail/ecoop-info/2006-January/000208.html"&gt;posted&lt;/a&gt; a job offer to the ECOOP list. Part of it was this:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;We are currently building a [...] testbed for user-experience exploration in Squeak (Smalltalk) (really). The resulting framework will be used by the various NASA centers [...] to build distributed, multi-mission systems for planning and executing a variety of NASA missions, including robotic (e.g. Mars rovers &amp; deep- space probes) and manned (e.g. the new Moon/Mars exploration effort, including the Crew Exploration Vehicle currently being designed).&lt;br /&gt;&lt;/blockquote&gt;Andreas Raab &lt;a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-January/100029.html"&gt;commented&lt;/a&gt;:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;FWIW, this project uses Croquet and Tweak. If you ever wanted to work with a bunch of really sharp guys this is definitely a place to consider.&lt;br /&gt;&lt;/blockquote&gt;Sounds cool :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-113818946435929018?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/113818946435929018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=113818946435929018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/113818946435929018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/113818946435929018'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2006/01/croquet-tweak-at-nasa.html' title='Croquet &amp; Tweak at NASA'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-113439690869642029</id><published>2005-12-12T15:05:00.000+01:00</published><updated>2007-01-11T15:08:42.378+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Simplified TeaTime</title><content type='html'>The next Croquet release, code-named "Hedgehog", will be centered around a real replicated object model, rather than the ad-hoc meta sends in Jasmine. See Andreas' and David's &lt;a href="http://croquetproject.org/about_croquet/05.10.16HedgehogArchitecture.pdf"&gt;OOPSLA presentation&lt;/a&gt; (PDF) for an overview.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-113439690869642029?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/113439690869642029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=113439690869642029' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/113439690869642029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/113439690869642029'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/12/simplified-teatime.html' title='Simplified TeaTime'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-112974150145137505</id><published>2005-10-19T19:03:00.000+02:00</published><updated>2007-01-11T15:09:22.264+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Tweak Interview</title><content type='html'>Andreas gave an interesting &lt;a href="http://people.squeakfoundation.org/person/gcorriga/diary.html?start=8"&gt;interview&lt;/a&gt; about Tweak.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-112974150145137505?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/112974150145137505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=112974150145137505' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/112974150145137505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/112974150145137505'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/10/tweak-interview.html' title='Tweak Interview'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-112410910239025571</id><published>2005-08-15T14:21:00.000+02:00</published><updated>2007-01-11T15:09:38.847+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Easy as Pie</title><content type='html'>Children "discover" Croquet's collaboration model called &lt;a href="http://www.wetmachine.com/itf/item/334"&gt;TeaTime&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-112410910239025571?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/112410910239025571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=112410910239025571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/112410910239025571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/112410910239025571'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/08/easy-as-pie.html' title='Easy as Pie'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-111590858386552332</id><published>2005-05-12T15:13:00.000+02:00</published><updated>2007-01-11T15:11:02.908+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Connecting fields</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Quick Recipe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To connect field &lt;span style="font-family: arial;"&gt;a&lt;/span&gt; in &lt;span style="font-family: arial;"&gt;obj1&lt;/span&gt; to field &lt;span style="font-family: arial;"&gt;b&lt;/span&gt; in &lt;span style="font-family: arial;"&gt;obj2&lt;/span&gt;, use this:&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;obj2 startScript: #b: when: {obj1. #aChanged}&lt;/blockquote&gt;Now for the whole story ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A colleague of mine wanted to make a drop-down list, where the options are not just set once, but provided and updated by the application. So, of course, when the options in the application changes, the items of the list widget have to be set to this new value. Nothing easier than that, just write a handler:&lt;br /&gt;&lt;blockquote  style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;onOptionsChanged&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;on: optionsChanged in: app&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listWidget items: app options&lt;br /&gt;&lt;/blockquote&gt;HOWEVER, he wanted to build this programmatically, not using a separate method. So, he easily came up with the following:&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;listWidget startScript : #items: withArguments: {app options} when: {app. #optionsChanged}&lt;br /&gt;&lt;/blockquote&gt; HOWEVER, this does not work as intended because the arguments to the script are evaluated only once, rather than every time the script is triggered. Well, this is what blocks are for, right? So this indeed works as intended:&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;listWidget startScript: [listWidget items: app options] when: {app. #optionsChanged}&lt;br /&gt;&lt;/blockquote&gt;HOWEVER, using blocks as long-lived scripts is discouraged. They're hard to identify in inspectors, hard to debug, etc. Alas, there seems to be no easy way around them. Or is there?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've seen this problem a few times now, and the solution is so simple that I keep forgetting about it (which is why I spell it out here). This is how to wire the two fields:&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;listWidget startScript: #items: when: {app. #optionsChanged}&lt;/blockquote&gt;Doh! Where are the arguments? Well, the current value of a field is actually a parameter of the field change event (the previous value is the second one). Most of the time we just ignore it, since it's easy to get at the current value, but nevertheless, it's there. So, when #items: is triggered by the change event, its argument is the current value of the changed field, options. (This, btw, is a difference between #startScript: and #perform:, script arguments are optional, whereas method arguments are mandatory).&lt;br /&gt;&lt;br /&gt;Of course, you can use the same technique in a regular method:&lt;br /&gt;&lt;blockquote  style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;onOptionsChanged: newOptions&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;on: optionsChanged in: app&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listWidget items: newOptions&lt;br /&gt;&lt;/blockquote&gt; But the earlier version at the top seems a bit more readable to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-111590858386552332?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/111590858386552332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=111590858386552332' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/111590858386552332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/111590858386552332'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/05/connecting-fields.html' title='Connecting fields'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-111404077608539487</id><published>2005-04-21T00:46:00.000+02:00</published><updated>2007-01-11T15:10:46.073+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Scripts in Croquet</title><content type='html'>&lt;a href="http://crnci.blogspot.com/"&gt;Tao&lt;/a&gt; asked for a "Tweak &amp; Croquet" tutorial. I don't have time right now to actually write one, but here's some sample code anyway.&lt;br /&gt;&lt;br /&gt;Using scripts is easy and useful, even without the Tweak GUI. Just use &lt;span style="font-family:arial;"&gt;#startScript:&lt;/span&gt; to run some method as a script. Inside a script, you can use loops and anything you like, just throw in a wait to account for time. Like, to animate the color of a frame, you could use this method (just add it to your &lt;span style="font-family:arial;"&gt;TeapotMorph&lt;/span&gt;):&lt;br /&gt;&lt;pre  style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;animateColorFor: aFrame&lt;/span&gt;&lt;br /&gt;    [&lt;br /&gt;        0 to: 360 do: [:hue |&lt;br /&gt;            aFrame material color: (Color h: hue s: 1.0 v: 1.0).&lt;br /&gt;            self wait: 0.01]&lt;br /&gt;    ] repeat&lt;br /&gt;&lt;/pre&gt;This changes the color every 10 ms, and you can start it from the &lt;span style="font-family:arial;"&gt;initializeDefaultSpace&lt;/span&gt; method:&lt;br /&gt;&lt;pre  style="font-family:arial;"&gt;    self startScript: #animateColorFor: withArguments: {someFrame}.&lt;br /&gt;&lt;/pre&gt;Here is something that does not loop forever, but finishes after one cycle:&lt;br /&gt;&lt;pre style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;jump: aFrame&lt;/span&gt;&lt;br /&gt;    | v g |&lt;br /&gt;    v := 0@1@0.&lt;br /&gt;    g := 0@-0.05@0.&lt;br /&gt;    [aFrame translation y &gt;= 0] whileTrue: [&lt;br /&gt;        aFrame translation: aFrame translation + v.&lt;br /&gt;        v := v + g.&lt;br /&gt;        self waitTick.&lt;br /&gt;    ].&lt;br /&gt;    aFrame translation: 0@0@0&lt;br /&gt;&lt;/pre&gt;Here we wait for the end of the frame - waiting is essential, because we do want to change the position only once in a frame. This can be run in response to a pointer click like this:&lt;br /&gt;&lt;pre style="font-family: arial;"&gt;    self startScript: #jump: withArguments: {someFrame} when: {someFrame. #pointerDown}.&lt;br /&gt;&lt;/pre&gt;Or, if you wish, you could make a Tweak button for it. Here's the whole &lt;span style="font-family:arial;"&gt;initializeDefaultSpace&lt;/span&gt; method doing it all:&lt;br /&gt;&lt;pre style="font-family: arial;"&gt;&lt;span style="font-weight: bold;"&gt;initializeDefaultSpace&lt;/span&gt;&lt;br /&gt;    | space cube |&lt;br /&gt;    space := TSpace new.&lt;br /&gt;    space addChild:  TLight new.&lt;br /&gt;    self makeFloor: space fileName:'floor.BMP'.&lt;br /&gt;&lt;br /&gt;    cube := TCube new.&lt;br /&gt;    cube material: TMaterial new.&lt;br /&gt;    space addChild: cube.&lt;br /&gt;&lt;br /&gt;    self startScript: #animateColorFor: withArguments: {cube}.&lt;br /&gt;&lt;br /&gt;    self startScript: #jump: withArguments: {cube} when: {cube. #pointerDown}.&lt;br /&gt;&lt;br /&gt;    self initializeTweakWorld: [&lt;br /&gt;        | button |&lt;br /&gt;        button := CButton new.&lt;br /&gt;        button label: 'Jump'.&lt;br /&gt;        button openAt: 100@100.&lt;br /&gt;        self startScript: #jump: withArguments: {cube} when: {button. #fire}.&lt;br /&gt;    ].&lt;br /&gt;&lt;br /&gt;    ^space&lt;br /&gt;&lt;/pre&gt;Hope that helps ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-111404077608539487?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/111404077608539487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=111404077608539487' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/111404077608539487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/111404077608539487'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/04/scripts-in-croquet.html' title='Scripts in Croquet'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-111073969823410127</id><published>2005-03-13T19:06:00.000+01:00</published><updated>2007-01-11T15:11:41.876+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Tweak Tutorial</title><content type='html'>Andreas posted a &lt;a href="http://tweak.impara.de/TECHNOLOGY/Tutorials/BankAccountTutorial/"&gt;BankAccount and ATM&lt;/a&gt; tutorial. This nicely demonstrates some of the basic Tweak concepts such as fields, events, triggers, and handlers, as well as introducing UI aspects like players, costumes, updating etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-111073969823410127?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/111073969823410127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=111073969823410127' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/111073969823410127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/111073969823410127'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/03/tweak-tutorial.html' title='Tweak Tutorial'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-111023639178784309</id><published>2005-03-07T23:19:00.001+01:00</published><updated>2010-01-04T22:11:48.233+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Print-Quality Screenshots</title><content type='html'>For high-quality prints you need high-quality screenshots. This means very high resolution, and nice anti-aliasing. Just grabbing the screen produces rather unpleasant results (&lt;a href="http://www.freudenbergs.de/bert/pic/croquet-bf.jpg"&gt;screenshot&lt;/a&gt;, 80 KB, 800x600 pixels). With normal OpenGL rendering you get rarely more than screen resolution, and anti-aliasing quality very much depends on your graphics board. So what to do?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Tiled Rendering&lt;/span&gt; comes to the rescue. Instead of rendering the whole image at once, we render smaller portions of the scene, and then arrange the tiles into a large picture. However, just pointing the camera at each tile will not work as intended, the perspective would change from tile to tile. What is needed instead is to construct partial viewing frustums that together exactly recreate the whole frustum. This sounds like a lot of math, but actually it is quite simple:&lt;blockquote  style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;gluPerspective: fov aspect: aspect zNear: near zFar: far tile: rect&lt;/span&gt;&lt;br /&gt;| cotangent radians  w h |&lt;br /&gt;radians := (fov/2.0) degreesToRadians.&lt;br /&gt;cotangent := radians cos / radians sin.&lt;br /&gt;h := near / cotangent.&lt;br /&gt;w := h * aspect.&lt;br /&gt;self glFrustum(rect left*w, rect right*w, rect bottom*h, rect top*h, near, far).&lt;br /&gt;&lt;/blockquote&gt;So I just extended the existing &lt;span style="font-weight: bold;font-family:arial;"&gt;gluPerspective:aspect:zNear:zFar:&lt;/span&gt; method with a &lt;span style="font-family:arial;"&gt;tile&lt;/span&gt; argument that gives the sub-rectangle in the viewing plane, where the whole picture ranges from -1 to 1. The only problem is to hand down that extra argument into the method. I ended up copying all the methods in the call chain, adding a &lt;span style="font-family:arial;"&gt;tile:&lt;/span&gt; parameter. With the methods in place and a utility method to construct the right sub-rectangles, I could render the image from the first screenshot again:&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;| m c f |&lt;br /&gt;m := CroquetGlobals theTeapotMorph.&lt;br /&gt;c := m activeCamera.&lt;br /&gt;f := c root snapShot: m ogl camera: c tiled: 12.&lt;br /&gt;f := f magnify: f boundingBox by: 0.5 smoothing: 4.&lt;br /&gt;JPEGReadWriter2 putForm: f quality: 90 progressiveJPEG: false onFileNamed: 'croquet-bf-4800.jpg'.&lt;br /&gt;&lt;/blockquote&gt;Instead of 800x600, this renders 12x12 tiles, creating a 9600x7200 pixels image. The result is scaled down with smoothing to yield an anti-aliased 4800x3600 image, finally compressing as JPEG gives a 1.5 MB &lt;a href="http://www.freudenbergs.de/bert/pic/croquet-bf-4800.jpg"&gt;hires screenshot&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Beauty, eh? Never noticed that guy on the bridge before ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-111023639178784309?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/111023639178784309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=111023639178784309' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/111023639178784309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/111023639178784309'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/03/print-quality-screenshots.html' title='Print-Quality Screenshots'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-110865822379686429</id><published>2005-02-17T16:15:00.000+01:00</published><updated>2007-01-11T15:12:14.117+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Change events are special</title><content type='html'>I just spent a few hours chasing a very mysterious bug, where an event handler was properly called the first time, but never again. This was a rather unspecial &lt;span style="font-family:arial;"&gt;on:in:&lt;/span&gt; handler: &lt;blockquote style="font-family: arial;"&gt;onFooInBar&lt;br /&gt;&amp;lt;on: foo in: bar&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;&lt;/blockquote&gt; After initialization it was properly registered in the event map, but at some point the event map entry just vanished.&lt;br /&gt;&lt;br /&gt;There also was another &lt;span style="font-family:arial;"&gt;on:&lt;/span&gt; handler which did some stuff whenever &lt;span style="font-family: arial;"&gt;bar&lt;/span&gt; changed.  To "call" that stuff, we just signaled a &lt;span style="font-family:arial;"&gt;barChanged&lt;/span&gt; event somewhere else:&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;self signal: #barChanged.&lt;/blockquote&gt;It turned out this innocuously looking line was responsible for the trashed &lt;span style="font-family:arial;"&gt;on:in:&lt;/span&gt; handler! What happened?&lt;br /&gt;&lt;br /&gt;Well, an &lt;span style="font-family:arial;"&gt;on:in:&lt;/span&gt; handler must always be registered to the object that currently is occupying the &lt;span style="font-family:arial;"&gt;bar&lt;/span&gt; field. But what if &lt;span style="font-family: arial;"&gt;bar&lt;/span&gt; changes? Then we must unregister the &lt;span style="font-family: arial;"&gt;foo&lt;/span&gt; handler in the old &lt;span style="font-family: arial;"&gt;bar&lt;/span&gt;, and re-register it with the new &lt;span style="font-family: arial;"&gt;bar&lt;/span&gt;. That's why the &lt;span style="font-style: italic;"&gt;system&lt;/span&gt; installs a &lt;span style="font-family: arial;"&gt;barChanged&lt;/span&gt; handler behind the scenes, which normally receives the new and old values of &lt;span style="font-family: arial;"&gt;bar&lt;/span&gt; as arguments.&lt;br /&gt;&lt;br /&gt;Now, can you see what happened? If we just signal &lt;span style="font-family: arial;"&gt;#barChanged&lt;/span&gt;, then the arguments are &lt;span style="font-family: arial;"&gt;nil&lt;/span&gt;! The current handler will be unregistered, but no new handler gets registered instead!&lt;br /&gt;&lt;br /&gt;Lesson learned: &lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;Do not signal a change event by hand!&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt; Of course, we could have constructed a proper change signal like this: &lt;blockquote style="font-family: arial;"&gt;self signalChanged: #barChanged from: bar to: bar&lt;/blockquote&gt; but why bother? It's much cleaner to not misuse the system-defined change event. I ended up defining another event,  &lt;span style="font-family: arial;"&gt;#barModified&lt;/span&gt; with a proper handler, which is signaled from both the &lt;span style="font-family: arial;"&gt;#barChanged&lt;/span&gt; handler and other places.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-110865822379686429?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/110865822379686429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=110865822379686429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110865822379686429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110865822379686429'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/02/change-events-are-special.html' title='Change events are special'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-110693084394853648</id><published>2005-02-09T15:26:00.000+01:00</published><updated>2007-01-11T15:12:37.636+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>About Scripts</title><content type='html'>We were looking into another Croquet performance problem the other day so we fired up a message tally (world menu - debug - start MessageTally). Curiously enough, 70 percent was taken by &lt;span style="font-family:arial;"&gt;ScriptScheduler&gt;&gt;runActiveScripts&lt;/span&gt;! Unfortunately, the tally did not further differentiate this item.&lt;br /&gt;&lt;br /&gt;But what are scripts, anyway? Everyone knows that Smalltalk is all about objects and messages, so what the heck are scripts?&lt;br /&gt;&lt;br /&gt;Well, Croquet and Tweak are not just using Smalltalk as you know it (and the underlying Squeak still is pretty much vanilla Smalltalk-80), but instead improve on it by implementing a new enriched object system. There still are objects (the entities of the system) and messages (their means of communication). But where in Smalltalk methods are invoked synchronously by a message send, we now have asynchronous method invocations as well, which are called "scripts".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Synchronous&lt;/span&gt; in this context means that the sender sends a message, which invokes a method in the receiver that is immediately processed. Only after finishing the method the control returns to the sender. In contrast, an &lt;span style="font-style: italic;"&gt;asynchronous&lt;/span&gt; send only schedules a method invocation for later processing, control is immediately returned to the sender. Here is an example (&lt;span style="font-family:arial;"&gt;#perform:&lt;/span&gt; is synchronous, &lt;span style="font-family:arial;"&gt;#startScript:&lt;/span&gt; asynchronous):&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;Transcript perform: #show: withArguments: #('1').&lt;br /&gt;Transcript startScript: #show: withArguments: #('2').&lt;br /&gt;Transcript perform: #show: withArguments: #('3').&lt;/blockquote&gt;If you execute this snippet from inside Tweak, it prints "&lt;span style="font-family:arial;"&gt;132&lt;/span&gt;". Outside of it just "&lt;span style="font-family:arial;"&gt;13&lt;/span&gt;" is printed because the second invocation is only started but never executed. There is no &lt;span style="font-family:arial;"&gt;ScriptScheduler&lt;/span&gt; running to manage the execution of scripts. Inside Tweak there is one, and Croquet does it in a similar fashion.&lt;br /&gt;&lt;br /&gt;Historically the term script in Squeak comes from the &lt;a href="http://squeakland.org/author/etoys.html"&gt;Etoys&lt;/a&gt; environment, where kids make objects and specify their behavior using scripts. One can have multiple objects and multiple scripts for each. All these scripts are running in parallel, at least from the user's point of view. Surprisingly enough kids don't have any problem with that, whereas concurrency normally is a hard problem even for seasoned programmers.&lt;br /&gt;&lt;br /&gt;One reason why the parallel execution of interacting scripts is no problem in practice is the underlying scheduling policy: Scripts are &lt;span style="font-style: italic;"&gt;never&lt;/span&gt; interrupted by other scripts. Other scripts are &lt;span style="font-style: italic;"&gt;only&lt;/span&gt; executed when your script finished, or when it gives up control explicitly by waiting for an event. You can write your script almost as if it was the only process on the machine. Here's an example script:&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;| p |&lt;br /&gt;p := CRectanglePlayer open.&lt;br /&gt;1 to: 500 do: [:i |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p x: i.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self waitTick]. &lt;/blockquote&gt;Looks just like how we did animations back when, right? Move a bit, wait for vsync, repeat. But the best part is this: While the loop is executing, you can perfectly well use anything else in the world! It's running "in parallel" to everything else on screen.&lt;br /&gt;&lt;br /&gt;Another advantage is that you can easily have thread-local storage that way. Say, on mouse click you want to change an object's color to red, and on mouse up set it back to what the color was before. In most GUI frameworks you would have to implement both a mouse down and mouse up handler, and use an instance variable to store the previous color on mouse down. Not so in Tweak. The mouse down handler would look like this:&lt;br /&gt;&lt;blockquote style="font-family:arial;"&gt;| oldColor |&lt;br /&gt;oldColor := self color.&lt;br /&gt;self color: Color red.&lt;br /&gt;self waitUntil: #mouseUp.&lt;br /&gt;self color: oldColor.&lt;br /&gt;&lt;/blockquote&gt;Much cleaner, in my book. Anyway, to get back to the original problem: So scripts are run as separate processes, but &lt;span style="font-family:arial;"&gt;MessageTally's spyOn:&lt;/span&gt; method normally only takes samples in the process it was run in, which is the main UI process. Fortunately, there is a new method&lt;span style="font-family:arial;"&gt; spyOnScript:&lt;/span&gt; which does the Right Thing. When starting the message tally from the Tweak project builder's debug menu, this new method is used, and indeed, we got a much more meaningful tally, and could spot the performance hog immediately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-110693084394853648?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/110693084394853648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=110693084394853648' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110693084394853648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110693084394853648'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/02/about-scripts.html' title='About Scripts'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-110787490563200429</id><published>2005-02-08T11:35:00.001+01:00</published><updated>2007-01-11T15:12:55.007+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Lend me a Hand</title><content type='html'>The last Tweak updates broke our Tweak-based Croquet application, objects did not respond to clicks anymore. I first suspected changes in Croquet, but the latest updates there didn't look suspicious. But neither did the last couple of Tweak updates. Investigating further and sprinkling debug output here and there I discovered that pointer events were offset. Moving the Croquet window to the upper left corner confirmed this, all of a sudden everything worked normally. What was happening?&lt;br /&gt;&lt;br /&gt;Well, living in a shared world isn't easy. Morphic, Croquet, and Tweak interact very closely in the &lt;span style="font-family:arial;"&gt;TeapotMorph&lt;/span&gt;, which bridges between those three worlds. Without Tweak (that is, without calling &lt;span style="font-family:arial;"&gt;initializeTweakWorld&lt;/span&gt; in your &lt;span style="font-family:arial;"&gt;initializeDefaultSpace&lt;/span&gt; method), the &lt;span style="font-family:arial;"&gt;TeapotMorph&lt;/span&gt; uses the regular Morphic event dispatching mechanism which leads to calling the event handling methods &lt;span style="font-family:arial;"&gt;keyDown:&lt;/span&gt;, &lt;span style="font-family:arial;"&gt;mouseDown:&lt;/span&gt; etc. which in turn dispatch the events to the &lt;span style="font-family:arial;"&gt;activeCamera&lt;/span&gt;, that is, into the Croquet world.&lt;br /&gt;&lt;br /&gt;When using the Tweak overlay, this does not happen, but all events are translated into Tweak events and dispatched into the Tweak world. The &lt;span style="font-family:arial;"&gt;initializeTweakWorld&lt;/span&gt; method not only sets up the Tweak world, but also registers event handlers (&lt;span style="font-family:arial;"&gt;onKeyDown&lt;/span&gt;, &lt;span style="font-family:arial;"&gt;onMouseDown&lt;/span&gt; etc.) that are called when no Tweak object handles the event itself, like when clicking outside a Tweak window. These event handlers translate the Tweak events back into a Morphic event and call the regular non-Tweak &lt;span style="font-family:arial;"&gt;TeapotMorph&lt;/span&gt; event handling methods, from where processing continues as before.&lt;br /&gt;&lt;br /&gt;Now translating the events back and forth also involves offseting them, because Tweak uses relative coordinates (every Tweak object defines its own coordinate system) whereas Morphs use global coordinates. Translating into Tweak was still working fine, the Tweak objects were acting just as expected. However, the back translation was wrong. In fact, the event we got back already &lt;span style="font-style: italic;"&gt;was&lt;/span&gt; in Morphic coordinates, so when we applied the offset again it was way off. The problem is that events were not explicitely passed around, but rather we used the &lt;span style="font-style: italic;"&gt;active hand&lt;/span&gt;'s last event.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;Hand&lt;/span&gt; in Squeak is the object that injects user interface events into the world. Its visual representation is the mouse pointer, but keyboard events come from the hand, too. Because there can be multiple hands in a world, there's a global variable &lt;span style="font-family:arial;"&gt;ActiveHand&lt;/span&gt; which is set to each hand while processing events initiated by that hand. Multiple hands, you ask? Yes, there was collaboration even before Croquet in Squeak (so each user in a shared Morphic world had a separate hand), and also multiple mice can be used independently, if that is supported by the VM (I once wrote a plugin for that using the XInput extension under Linux).&lt;br /&gt;&lt;br /&gt;Now until last week, Tweak also did set &lt;span style="font-family:arial;"&gt;ActiveHand&lt;/span&gt; to its current hand while processing an event. This had some odd side effects, for example, when some code expected &lt;span style="font-family:arial;"&gt;ActiveHand&lt;/span&gt; to be a &lt;span style="font-family:arial;"&gt;HandMorph&lt;/span&gt; (as is the case in Morphic) or a &lt;span style="font-family:arial;"&gt;CHandPlayer&lt;/span&gt; (as in Tweak). In particular, when running a Tweak overlay in Croquet, which still largely assumes a Morphic environment, this led to confusion. But we pretty much ironed out all these wrinkles.&lt;br /&gt;&lt;br /&gt;Except for the back-translation of events coming from the Tweak world, which happens in a Tweak process, so we fully expected the active hand to be a Tweak hand in this handler. But Andreas removed all references to &lt;span style="font-family: arial;"&gt;ActiveHand&lt;/span&gt; from Tweak in an otherwise innocuously looking update (comment: "Various preps for upgrading to 3.8") so we did, in fact, by referencing &lt;span style="font-family: arial;"&gt;ActiveHand &lt;/span&gt;get the original Morphic event instead of the expected Tweak event.&lt;br /&gt;&lt;br /&gt;Just removing the offset would not work because you might have or might have not loaded that update. So we need to access the active Tweak hand, but without accessing the &lt;span style="font-family: arial;"&gt;ActiveHand&lt;/span&gt; global. This is easiest if you are programming in Tweak, because every &lt;span style="font-family: arial;"&gt;CPlayer&lt;/span&gt; has a field aptly named &lt;span style="font-family: arial;"&gt;hand&lt;/span&gt; that refers to the active hand. Outside of Tweak you must do it the hard way, which is getting the hand from the active process. I'll talk about Tweak processes in another post, this one is already getting too long.&lt;br /&gt;&lt;br /&gt;So, to make a long story short, if you fetch Croquet updates now, everything should be working fine again. There are two new methods in &lt;span style="font-family: arial;"&gt;TeapotMorph&lt;/span&gt;, &lt;span style="font-family: arial;"&gt;morphicHand&lt;/span&gt; and &lt;span style="font-family: arial;"&gt;tweakHand&lt;/span&gt;, that return the right sort of hand (of course, the latter returns &lt;span style="font-family: arial;"&gt;nil&lt;/span&gt; if Tweak is not running). They are used in the two methods I found where it actually matters, namely bringing up the halo which needs a morphic-hand, and back-translating events, which uses the tweak-hand.&lt;br /&gt;&lt;br /&gt;That's all for today. Happy Tweakin'!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-110787490563200429?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/110787490563200429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=110787490563200429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110787490563200429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110787490563200429'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/02/lend-me-hand.html' title='Lend me a Hand'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-110752992773983385</id><published>2005-02-04T16:08:00.000+01:00</published><updated>2007-01-11T15:13:18.737+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Tweak Roadmap</title><content type='html'>Andreas talks about the &lt;a href="http://impara.de/pipermail/tweak/2005-February/000431.html"&gt;next steps in Tweak&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-110752992773983385?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/110752992773983385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=110752992773983385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110752992773983385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110752992773983385'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/02/tweak-roadmap.html' title='Tweak Roadmap'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-110748045201521524</id><published>2005-02-04T02:19:00.000+01:00</published><updated>2007-01-11T15:13:38.693+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Why Smalltalk?</title><content type='html'>Because it's &lt;a href="http://www.darrenhobbs.com/archives/000620.html"&gt;powerful&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-110748045201521524?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/110748045201521524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=110748045201521524' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110748045201521524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110748045201521524'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/02/why-smalltalk.html' title='Why Smalltalk?'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-110735244606764681</id><published>2005-02-02T14:51:00.000+01:00</published><updated>2007-01-11T15:14:19.611+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='tweak'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Dynamic Textures</title><content type='html'>We've been wondering for a while, why screen updates are more expensive than expected in the Tweak overlay. Now I debugged into this and it turns out we're uploading the &lt;span style="font-style: italic;"&gt;whole&lt;/span&gt; texture even if only a small part was changed. The relevant code is in &lt;span style="font-family: arial;"&gt;OGLTextureManager&gt;&gt;uploadTexture:dirtyRect:&lt;/span&gt;. A partial upload using &lt;span style="font-family: arial;"&gt;glTexSubImage2D()&lt;/span&gt; is only performed if the texture in use is &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; static.&lt;br /&gt;&lt;br /&gt;Having found out what's going on it's easy to fix, a one-line change in &lt;span style="font-family: arial;"&gt;TeapotMorph&gt;&gt;glRenderTweakCostume:on:&lt;/span&gt; does the trick:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote style="font-family: arial;"&gt;texCache isStatic: false.&lt;/blockquote&gt;As simple as that - I just posted the update.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-110735244606764681?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/110735244606764681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=110735244606764681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110735244606764681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110735244606764681'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/02/dynamic-textures.html' title='Dynamic Textures'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10460112.post-110693774026357900</id><published>2005-01-28T19:00:00.000+01:00</published><updated>2007-01-11T15:14:43.310+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='croquet'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Profiling + Vector Math = Performance</title><content type='html'>So there was a student who implemented a flocking simulation for a virtual fishtank using Croquet. Worked fine with 20 fishes. With 50 fishes it became rather sluggish. Putting in more than 100 fishes the framerate could be measured in seconds per frame. So the rendering in Croquet is too slow, right?&lt;br /&gt;&lt;br /&gt;Not quite. There are two things you have to keep in mind when it comes to performance:&lt;br /&gt;&lt;ol&gt; &lt;li&gt;When in doubt, measure.&lt;/li&gt;&lt;li&gt;You are in doubt.&lt;/li&gt; &lt;/ol&gt; So we fired up a message tally (world menu - debug - start MessageTally). Turns out only 12 percent of the time were spent in rendering. So it's not the rendering at all. A whopping 80 percent was taken by the flock's step methods. The leaves of the message tally showed that 15 percent of the time went into &lt;span style="font-style: italic;"&gt;each&lt;/span&gt; of the methods &lt;span style="font-family:arial;"&gt;#x&lt;/span&gt;, &lt;span style="font-family:arial;"&gt;#y&lt;/span&gt;, and &lt;span style="font-family:arial;"&gt;#z&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;So we looked at the code. Every fish was told to swim in the main direction of its neighbors, that is the fishes within a certain radius. Processing continued only for those fishes in range.&lt;br /&gt;&lt;br /&gt;Sounds quite reasonable, doesn't it? The only problem was that to find the neighbors for a fish, the distance to each other fish was compared to the radius. Not only does this result in a quadratic complexity (every fish was tested against every other) but the distance check was this:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:arial;"&gt;(((thisFish position x - otherFish position x) *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;(thisFish position x - otherFish position x))+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;((thisFish position y - otherFish position y) *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;(thisFish position y - otherFish position y))+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;((thisFish position z - otherFish position z) * &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;(thisFish position z - otherFish position z))) sqrt&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;This guy knows how to take the distance of two points in 3D, and he knows that the square is the product of a number with itself. Very well, but very slow, too.&lt;br /&gt;&lt;br /&gt;Vectors in Croquet are represented as &lt;span style="font-family:arial;"&gt;FloatArray&lt;/span&gt;s, and for a good reason. The reason is that you can compute sums, products, etc. of a zillion numbers very rapidly, just by invoking a single method. This is way faster than doing a component-wise computation on your own. There's a drawback too, which is that because the internal representation of a float in a &lt;span style="font-family:arial;"&gt;FloatArray&lt;/span&gt; and the one in a normal &lt;span style="font-family:arial;"&gt;Float&lt;/span&gt; object differs, it is rather expensive to read or write individual elements from such an array.&lt;br /&gt;&lt;br /&gt;So to make your math go fast, use vectors instead of home-brew arithmetic. The whole mess above can be replaced by this:&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;(thisFish position - otherFish position) length&lt;/blockquote&gt;which is way faster.&lt;br /&gt;&lt;br /&gt;Of course, one can further improve this by omitting the square root inside &lt;span style="font-family:arial;"&gt;#length&lt;/span&gt;, by using &lt;span style="font-family:arial;"&gt;#squaredLength&lt;/span&gt; and comparing to the squared radius, but that would be nit-picking. And of course one should reduce the overall algorithmic complexity from O(n²) to O(n log n), but that's just common sense.&lt;br /&gt;&lt;br /&gt;The point I want to drive home is this: Use the class library wisely. If something is too slow, chances are you're doing it the wrong way. Look for examples in the image, there almost always is one. For a nice example of vector math look at the particle system (&lt;span style="font-family:arial;"&gt;TParticle&lt;/span&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10460112-110693774026357900?l=croquetweak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://croquetweak.blogspot.com/feeds/110693774026357900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10460112&amp;postID=110693774026357900' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110693774026357900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10460112/posts/default/110693774026357900'/><link rel='alternate' type='text/html' href='http://croquetweak.blogspot.com/2005/01/profiling-vector-math-performance.html' title='Profiling + Vector Math = Performance'/><author><name>Bert</name><uri>http://www.blogger.com/profile/05353637548899091553</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_gCu9ub99Rz4/SYmkbSrv0sI/AAAAAAAAAE0/MBcB3J44Xyg/S220/MangaBertTransp.png'/></author><thr:total>2</thr:total></entry></feed>
