tag:blogger.com,1999:blog-104601122008-07-06T14:12:20.344+02:00Dr. Bert FreudenbergCroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comBlogger34125tag:blogger.com,1999:blog-10460112.post-28487202804569035022007-04-20T15:30:00.000+02:002007-05-09T16:36:51.879+02:00OLPC review now online, English tooThe extensive OLPC article by c't magazine is now available online in both original <a href="http://www.heise.de/mobil/artikel/88439">German</a> and an <a href="http://www.heise.de/mobil/artikel/88916">English translation</a>. 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.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.heise.de/mobil/artikel/88916/3"><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" /></a>CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-37008146582613029832007-03-27T16:58:00.000+02:002007-03-27T17:13:41.006+02:00Croquet SDK 1.0 released<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://croquetconsortium.org/"><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" /></a><br />Get it while it's hot from the equally new <a href="http://croquetconsortium.org/">Croquet Consortium</a> web site.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-88786695782347060312007-03-20T11:36:00.000+01:002007-03-20T13:15:32.364+01:00In-depth review of XO in German c't magazine<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gCu9ub99Rz4/Rf--bJVJK5I/AAAAAAAAACE/3PDaDQgmOwA/s1600-h/xo-sophie.jpg"><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" /></a>There's a glowing review of the OLPC project and its XO machine in the current issue 07/2007 of <a href="http://www.heise.de/ct/">c't magazine</a>. The <a href="http://www.heise-medien.de/presseinfo.php/ct,07,03_19_a/41">in-depth article</a> 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:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.heise-medien.de/presseinfo.php/ct,07,03_19_a/41"><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" /></a>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 <a href="http://wiki.laptop.org/go/Sugar_EToys">Etoys</a> projects.<br /><br />The magazine is available now at kiosks until next week, or via <a href="https://www.heise.de/abo/ct/hefte.shtml">mail order</a>. In a few weeks the article should be available online via <a href="http://www.heise.de/kiosk/">click&amp;buy</a>.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-25107839069257271012007-03-14T11:03:00.000+01:002007-03-14T12:06:52.284+01:00Croquet for Business: Qwaq Forums<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://qwaq.com/"><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" /></a>So <a href="http://qwaq.com/">Qwaq</a> came out of "stealth-mode" and reveiled what they have been working on for a while now, <a href="http://qwaq.com/qwaq_forums.html">Qwaq Forums</a>:<br /><blockquote style="font-style: italic;">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.<br /></blockquote>And I'm proud to say I contributed a little, which most probably will find its way into the next <a href="http://opencroquet.org/">Croquet</a> release.<br /><br /><span style="font-weight: bold;">Update: </span>Here's a few nice stories of fellow bloggers who have seen Forums already.<br /><br />From Steve Borsch's <a href="http://www.iconnectdots.com/ctd/2007/03/qwaq_launches_v.html">Connecting The Dots</a>:<br /><span style="font-style: italic;"></span><blockquote><span style="font-style: italic;">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.</span><br /></blockquote><span class="post-author">Glyn Moody</span> writes on <a href="http://opendotdotdot.blogspot.com/2007/03/going-quaqqers-about-quaq.html">Open dot dot dot</a>:<br /><a href="http://www2.blogger.com/post-edit.g?blogID=10460112&postID=2510783906925727101#%20http://www.iconnectdots.com/ctd/2007/03/qwaq_launches_v.html"></a><span style="font-style: italic;"></span><span style="font-style: italic;"></span><blockquote><span style="font-style: italic;">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.</span><br /></blockquote>And in <a href="http://collaborationblog.typepad.com/collaboration/2007/03/qwaq_exits_stea.html">The Culture of Collaboration</a>, Evan Rosen writes:<br /><blockquote style="font-style: italic;">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.</blockquote>CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-50922999941854281972007-03-04T20:14:00.000+01:002007-03-04T21:29:38.704+01:00Interactive OLPC XO Display Simulation<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://squeakland.org/project.jsp?http://freudenbergs.de/bert/etoys/OLPC-XO-Display.pr"><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" /></a><br />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.<br /><br />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.<br /><br />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.<br /><br />For the interactive simulation, download <a href="http://squeakland.org/detect.html">Squeak</a> (this version installs both, a regular application and a browser plugin), then <a href="http://squeakland.org/project.jsp?http://freudenbergs.de/bert/etoys/OLPC-XO-Display.pr">click here</a> to run the simulation in your browser, or download the <a href="http://freudenbergs.de/bert/etoys/OLPC-XO-Display.pr">project file</a>, launch Squeak, and drop the project into it.<br /><span style="font-weight: bold;"><br />Intel-Mac users</span> 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.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-47709899059435159912007-02-16T10:51:00.000+01:002007-02-16T11:35:26.284+01:00OpenGL in a WorkspaceOn 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 <a href="http://impara.de/">impara</a> tracked it down to the "Composite" extension that is enabled by default nowadays. With Composite disabled, it works, enable it, and it does not.<br /><br />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:<br /><blockquote><pre style="font-family: arial;line-height:1.1em">| ogl green |<br />ogl := OpenGL newIn: (0@0 extent: 100@100).<br />green := 1.<br />[[<br /> ogl glClearColor(0, green, 0, 1).<br /> ogl glClear(16r4000).<br /> ogl swapBuffers.<br /> Sensor waitClickButton.<br /> green := 1 - green.<br />] repeat] ensure: [ogl destroy]</pre></blockquote>Beauty, eh? ;-) I guess nobody has done this in a workspace for a long time. Stop it with Alt-.<br /><br />Anyway, NVIDIA could reproduce the problem, and found our bug:<br /><blockquote>[...] 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.</blockquote>Doh! I forgot to specify the <a href="http://www.tronche.com/gui/x/xlib/window/attributes/border.html">border</a>! 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 <a href="http://developer.nvidia.com/">NVIDIA developer support</a>!CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-21401329119737632922007-01-30T23:13:00.000+01:002007-01-31T00:11:09.601+01:00Stripped XOEarly in January, my laptop was the star of a photo shooting for the German issue of MIT's Technology Review<a href="http://www.heise.de/tr/magazin/"></a>. 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.<br /><br />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.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_gCu9ub99Rz4/Rb_Dql8B_oI/AAAAAAAAABg/377aeAeQpRg/s1600-h/xostripped.jpg"><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" /></a><br /><br /><br />Image courtesy of <a href="http://www.heise.de/tr/magazin/">http://www.heise.de/tr/magazin/</a><br /><br /><span style="font-style: italic;" ><span style="color: rgb(102, 102, 102);">The colors are off for some reason after uploading to blogger - they were fine on my disk. Sorry.</span>CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-25133437676000191222007-01-21T23:22:00.000+01:002007-01-22T00:02:11.753+01:00Etoys kid-tested on XO<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_gCu9ub99Rz4/RbPn6l8B_mI/AAAAAAAAABI/Us45v3XKeng/s1600-h/OLPCSophie2.jpg"><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" /></a>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.<br /><br />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.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_gCu9ub99Rz4/RbPn618B_nI/AAAAAAAAABQ/eDfr0-fxWAo/s1600-h/OLPCSophieJakob2.jpg"><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" /></a>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 ...CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-65701867593543132992007-01-12T15:26:00.000+01:002007-01-12T16:14:36.995+01:00OLPC talk at design schoolI gave a talk about the $100-laptop at the Magdeburg school of <a href="http://www.gestaltung.hs-magdeburg.de/">Industrial Design</a>. 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.<br /><br />Carola Zwick, dean of the school, wrote a book <a href="http://www.avabooks.com.sg/avauk/details.php?id=107">Designing for Small Screens</a> that certainly gives valuable insight for OLPC developers, and she provided (though indirectly) some very important infrastructure for the OLPC office: her <a href="http://www.seven5.com/">group</a> designed the <a href="http://www.hermanmiller.com/mirra/">chairs</a> 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.<br /><br />A student took some <a href="http://www.wretch.cc/album/album.php?id=hangxdesign&book=34&amp;page=1">photographs</a> during the talk. Also, from his <a href="http://hangxdesign.blogspot.com/2007/01/the100-dollar-laptop.html">blog post</a> it seems I convinced him of the merits of the OLPC project (it was a lively discussion). Thanks for posting, Cheng!<a href="javascript:void(0)" onclick="return false;" tabindex="7"><span></span></a>CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-20703332749060150102007-01-11T15:22:00.000+01:002007-01-11T17:47:44.238+01:00Sophie, Tweak on the OLPC laptop<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gCu9ub99Rz4/RaZekV8B_kI/AAAAAAAAAAk/6P8mXeoRYL8/s1600-h/SophieOnXO-2.jpg"><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" /></a>I just installed <a href="http://sophieproject.org/">Sophie</a> on my green machine. Sophie is a project of the <a href="http://www.futureofthebook.org/">Institute for the Future of the Book</a>, is implemented in <a href="http://squeak.org/">Squeak</a> (just like my <a href="http://wiki.laptop.org/go/Etoys">Etoys activity</a> on the laptop) using <a href="http://tweak.impara.de/">Tweak</a> as its UI framework (which is the original topic of my blog). Tweak is also the base for the next-gen Etoys.<br /><br />Installation went pretty smooth. I downloaded the cross-platform zip file using the Web activity from Sugar<br />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!<br /><br />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.<br /><br />Michael Rüger of <a href="http://impara.de/">impara</a> (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:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_gCu9ub99Rz4/RaZooV8B_lI/AAAAAAAAAAs/PEvYnG3fCKQ/s1600-h/SophieOnXO-1.jpg"><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" /></a>CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1166543296421807012006-12-19T13:41:00.000+01:002007-01-11T15:04:10.115+01:00OLPC, graphics, and more<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wiki.laptop.org/images/0/0f/CameraInEtoys.jpg"><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" /></a>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 <a href="http://diegogomezdeck.blogspot.com/2006/12/video4squeak-funcionando-en-la-olpc.html">Diego</a>'s code.<br /><br />We also went to visit Keith Packard and Carl Worth of <a href="http://cairographics.org/">Cairo</a> fame in Portland. Had a nice chat about <a href="http://geek.vtnet.ca/doc/ols2005-notes/html/d1-15h00.html">Twin</a> and then hacked away on a <a href="http://piumarta.com/pepsi/">Pepsi</a> 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.<br /><br />And back to OLPC, read this nice essay titled <a href="http://alchemicalmusings.org/2006/12/19/free-laptops/">Free Laptops: Creating, Producing and Sharing a Revolution</a>.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1161534008757669762006-10-22T18:05:00.000+02:002007-01-11T15:03:18.426+01:00OLPC video from NECCJust found a nice <a href="http://www.youtube.com/watch?v=UvpP3Farb2g">video on youtube</a> about the $100 laptop at <a href="http://web.uoregon.edu/ISTE/NECC2006/">NECC 06</a>, including a cameo of our very own Kim Rose (at 3:21) while the speaker is mentioning "creativity" - very apt, I'd say.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1159527471677315102006-09-29T10:49:00.000+02:002007-01-11T15:11:16.949+01:00Performance ProfilingAndreas Raab wrote a <a href="https://lists.wisc.edu/read/messages?id=1411189">nice primer</a> on profiling in Squeak. MessageTally might be the single most undervalued Squeak performance tool - a mandatory read for every serious developer.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1158012617931009872006-09-11T23:44:00.000+02:002007-01-11T15:06:34.296+01:00Squeak for every child<img src="http://photos1.blogger.com/blogger/1210/665/400/olpc-squeak.jpg" alt="" border="0" /><br /><br />Lately I work on Squeak integration in the One Laptop Per Child (<a href="http://laptop.org/">OLPC</a>) 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 <a href="http://piumarta.com/photos/olpc/">pictures</a>, which might very well be the first photos of the actual display in the wild.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1145562110003964492006-04-20T21:37:00.000+02:002007-01-11T15:05:45.664+01:00Croquet SDK 1.0 Beta outGet it at <a href="http://www.opencroquet.org/">opencroquet.org</a>!CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1144442216795273452006-04-07T22:36:00.000+02:002007-01-11T15:06:05.884+01:00Be a magicianA very nice post about the <a href="http://peripateticaxiom.blogspot.com/2006/04/keywords-magic-and-edsls.html">Magic of Smalltalk</a>.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1141558956426791602006-03-05T12:35:00.000+01:002007-01-11T15:06:49.990+01:00Smalltalk Party Brussels 11 March 2006Only six days left to the <a href="http://www.cdegroot.com/blog/2006/02/16/smalltalk-party-brussels-11th-march-2006/">Smalltalk Party in Brussels</a>! I'll be there, and <a href="http://prog.vub.ac.be:8080/SmalltalkParty/">more interesting people</a>, too. You should come, too!CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1141248319388258282006-03-01T20:57:00.000+01:002007-01-11T15:07:26.954+01:00Sophie moviesSteve is posting <a href="http://www.geeksrus.com/sophie/">screen clips</a> 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.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1139703299396382552006-02-12T01:04:00.000+01:002007-01-11T15:07:48.668+01:00Squeak ElectionsThe first-ever <a href="http://people.squeakfoundation.org/article/53.html">elections</a> are held in the Squeak community. Candidates have to be nominated by February 17, same deadline for getting certified at <a href="http://people.squeakfoundation.org/">SqP</a> if you want to vote.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1138189464359290182006-01-25T12:23:00.000+01:002007-01-11T15:08:13.449+01:00Croquet & Tweak at NASATed Shab <a href="http://www.aito.org/pipermail/ecoop-info/2006-January/000208.html">posted</a> a job offer to the ECOOP list. Part of it was this:<br /><blockquote style="font-style: italic;">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 & deep- space probes) and manned (e.g. the new Moon/Mars exploration effort, including the Crew Exploration Vehicle currently being designed).<br /></blockquote>Andreas Raab <a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2006-January/100029.html">commented</a>:<br /><blockquote style="font-style: italic;">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.<br /></blockquote>Sounds cool :)CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1134396908696420292005-12-12T15:05:00.000+01:002007-01-11T15:08:42.378+01:00Simplified TeaTimeThe 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 <a href="http://croquetproject.org/about_croquet/05.10.16HedgehogArchitecture.pdf">OOPSLA presentation</a> (PDF) for an overview.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1129741501451375052005-10-19T19:03:00.000+02:002007-01-11T15:09:22.264+01:00Tweak InterviewAndreas gave an interesting <a href="http://people.squeakfoundation.org/person/gcorriga/diary.html?start=8">interview</a> about Tweak.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1124109102390255712005-08-15T14:21:00.000+02:002007-01-11T15:09:38.847+01:00Easy as PieChildren "discover" Croquet's collaboration model called <a href="http://www.wetmachine.com/itf/item/334">TeaTime</a>.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1115908583865523322005-05-12T15:13:00.000+02:002007-01-11T15:11:02.908+01:00Connecting fields<span style="font-weight:bold;">Quick Recipe</span><br /><br />To connect field <span style="font-family: arial;">a</span> in <span style="font-family: arial;">obj1</span> to field <span style="font-family: arial;">b</span> in <span style="font-family: arial;">obj2</span>, use this:<br /><blockquote style="font-family: arial;">obj2 startScript: #b: when: {obj1. #aChanged}</blockquote>Now for the whole story ...<br /><br /><span style="font-weight:bold;">Problem</span><br /><br />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:<br /><blockquote style="font-family:arial;"><span style="font-weight: bold;">onOptionsChanged</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;on: optionsChanged in: app&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;listWidget items: app options<br /></blockquote>HOWEVER, he wanted to build this programmatically, not using a separate method. So, he easily came up with the following:<br /><blockquote style="font-family: arial;">listWidget startScript : #items: withArguments: {app options} when: {app. #optionsChanged}<br /></blockquote> 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:<br /><blockquote style="font-family: arial;">listWidget startScript: [listWidget items: app options] when: {app. #optionsChanged}<br /></blockquote>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?<br /><br /><span style="font-weight:bold;">Solution</span><br /><br />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:<br /><blockquote style="font-family: arial;">listWidget startScript: #items: when: {app. #optionsChanged}</blockquote>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).<br /><br />Of course, you can use the same technique in a regular method:<br /><blockquote style="font-family:arial;"><span style="font-weight: bold;">onOptionsChanged: newOptions</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;on: optionsChanged in: app&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;listWidget items: newOptions<br /></blockquote> But the earlier version at the top seems a bit more readable to me.CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.comtag:blogger.com,1999:blog-10460112.post-1114040776085394872005-04-21T00:46:00.000+02:002007-01-11T15:10:46.073+01:00Scripts in Croquet<a href="http://crnci.blogspot.com/">Tao</a> asked for a "Tweak & Croquet" tutorial. I don't have time right now to actually write one, but here's some sample code anyway.<br /><br />Using scripts is easy and useful, even without the Tweak GUI. Just use <span style="font-family:arial;">#startScript:</span> 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 <span style="font-family:arial;">TeapotMorph</span>):<br /><pre style="font-family:arial;"><span style="font-weight: bold;">animateColorFor: aFrame</span><br /> [<br /> 0 to: 360 do: [:hue |<br /> aFrame material color: (Color h: hue s: 1.0 v: 1.0).<br /> self wait: 0.01]<br /> ] repeat<br /></pre>This changes the color every 10 ms, and you can start it from the <span style="font-family:arial;">initializeDefaultSpace</span> method:<br /><pre style="font-family:arial;"> self startScript: #animateColorFor: withArguments: {someFrame}.<br /></pre>Here is something that does not loop forever, but finishes after one cycle:<br /><pre style="font-family:arial;"><span style="font-weight: bold;">jump: aFrame</span><br /> | v g |<br /> v := 0@1@0.<br /> g := 0@-0.05@0.<br /> [aFrame translation y >= 0] whileTrue: [<br /> aFrame translation: aFrame translation + v.<br /> v := v + g.<br /> self waitTick.<br /> ].<br /> aFrame translation: 0@0@0<br /></pre>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:<br /><pre style="font-family: arial;"> self startScript: #jump: withArguments: {someFrame} when: {someFrame. #pointerDown}.<br /></pre>Or, if you wish, you could make a Tweak button for it. Here's the whole <span style="font-family:arial;">initializeDefaultSpace</span> method doing it all:<br /><pre style="font-family: arial;"><span style="font-weight: bold;">initializeDefaultSpace</span><br /> | space cube |<br /> space := TSpace new.<br /> space addChild: TLight new.<br /> self makeFloor: space fileName:'floor.BMP'.<br /><br /> cube := TCube new.<br /> cube material: TMaterial new.<br /> space addChild: cube.<br /><br /> self startScript: #animateColorFor: withArguments: {cube}.<br /><br /> self startScript: #jump: withArguments: {cube} when: {cube. #pointerDown}.<br /><br /> self initializeTweakWorld: [<br /> | button |<br /> button := CButton new.<br /> button label: 'Jump'.<br /> button openAt: 100@100.<br /> self startScript: #jump: withArguments: {cube} when: {button. #fire}.<br /> ].<br /><br /> ^space<br /></pre>Hope that helps ...CroqueTweakerhttp://www.blogger.com/profile/05353637548899091553noreply@blogger.com