<?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-2748388581844984599</id><updated>2011-10-11T13:58:49.313-07:00</updated><category term='concurrent'/><category term='linux'/><category term='distributed'/><category term='squeak'/><category term='slitaz'/><category term='programming'/><category term='smalltalk'/><category term='BitBlt'/><category term='vm'/><category term='secure'/><category term='Subcanvas'/><category term='parallel'/><category term='gcc'/><category term='Events'/><category term='Form'/><title type='text'>SecureSqueak</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-1129094205748712748</id><published>2011-10-11T13:24:00.000-07:00</published><updated>2011-10-11T13:58:49.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gcc'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='slitaz'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Slitaz Linux</title><content type='html'>Lately I've been looking for a distribution of Linux for the sole purpose of running &lt;a href="http://www.squeak.org/"&gt;Squeak&lt;/a&gt; / &lt;a href="http://www.pharo-project.org/"&gt;Pharo&lt;/a&gt;. Essentially it would be a single-application installation of Linux; only the Squeak VM would be running and nothing else is really needed.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.slitaz.org/"&gt;Slitaz Linux&lt;/a&gt; is a Linux distro which is in total 30MB, which includes the &lt;a href="http://www.lxde.org/"&gt;LXDE&lt;/a&gt; desktop environment (my favourite) and a credible number of applications. I find that downright impressive. It runs entirely in RAM meaning that it is *very* responsive.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My Laptop is a Dell C640 from the 18th century; I replaced the hard disk with a CompactFlash card and installed Slitaz on it. I customized Slitaz by removing applications I wouldn't use, added Xorg for my hardware and generated a 20MB image. I also installed a "big" version of Slitaz as well which mounts the CF card for the root filesystem so I can run gcc etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I have a Squeak development machine with a 30 second boot time and insane reactivity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There were issues. I needed to rebuild the &lt;a href="http://www.squeakvm.org/unix/"&gt;Squeak VM&lt;/a&gt; without OpenGL support (because Slitaz doesn't include those libraries, and Squeak won't start without them). For future reference, I needed to install (from memory) gcc, binutils, linux-headers, cmake and xorg-dev. I also needed to modify the VM source to properly include dirent.h somewhere.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-1129094205748712748?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/1129094205748712748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=1129094205748712748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/1129094205748712748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/1129094205748712748'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2011/10/slitaz-linux.html' title='Slitaz Linux'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-8098110752654587856</id><published>2011-08-28T14:38:00.000-07:00</published><updated>2011-08-28T20:16:25.288-07:00</updated><title type='text'>Class format</title><content type='html'>&lt;div&gt;I want to add more instance variables to Class. How difficult is this? Pretty. I suspect that for vanilla Squeak or Pharo, you'd need to carefully remake every single Metaclass instance and Class instance. For me, my Packages architecture means I only need to recompile my own private Metaclasses and all its instances which can be done safely.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before I started though, I wanted to see what happened if I did something wrong: what happens if I add the extra variables to Class, but instances and subclasses of Class (i.e. every single class and class class) were not updated?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Classes in the Squeak VM have three variables very important variables which are referenced directly by the VM: superclass, format and methodDictionary. The format describes the nature of instances: are they normal/variable/words/bytes/weak, and how many instance variables does each instance have. "format" is a bit-field, so you need to wrangle bits to modify it.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I'm going to test is what the VM does if I'm not careful and forget to update an instance of Class somewhere to be big enough to store my extra instance variables:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Make a class, e.g. "TestVMCrash", with three instance variables, and a method, e.g. &amp;gt;&amp;gt;third, which sets the third instance variable.&lt;/li&gt;&lt;li&gt;Get the format of that class: "TestVMCrash format", which returns 136 for me (which means "normal class, 3 instvars").&lt;/li&gt;&lt;li&gt;Reduce the number of instance variables in TestVMCrash to 2.&lt;/li&gt;&lt;li&gt;Make an instance and try to set the third, now non-existent, instance variable.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;So after making the class, I reduce the number of instance variables:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;ClassBuilder new computeFormat: #normal instSize: 2 forSuper: Object ccIndex: 0&lt;/div&gt;&lt;div&gt;" returns 134 "&lt;/div&gt;&lt;div&gt;TestVMCrash setFormat: 134. "The class now has only two instvars"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;o := TestVMCrash new.&lt;/div&gt;&lt;div&gt;" o will have 2 instance varables, but here we try to set an non-existant third: "&lt;/div&gt;&lt;div&gt;o third.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This causes the VM to behave badly. The first time I tried, it crashed with a SEGFAULT. The second time, it froze. The VM barged ahead and corrupted the image, so there are no checks on invalid instance variable accesses.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In conclusion, I need to be very careful when adding instance variables to Class, and back up my image often.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-8098110752654587856?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/8098110752654587856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=8098110752654587856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8098110752654587856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8098110752654587856'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2011/08/class-format.html' title='Class format'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-6526102331354479369</id><published>2011-05-15T02:08:00.000-07:00</published><updated>2011-05-15T02:33:06.155-07:00</updated><title type='text'>Now, where was I?</title><content type='html'>A year has passed since I last worked on SecureSqueak. Babies do that to you. So now, I ask myself: what was I doing!?&lt;br /&gt;&lt;br /&gt;It appears I was trying to set up a completely independent class hierarchy / object graph with no dependencies on Squeak's classes. In other words, my own Class, Metaclass, Object and so forth, all in a Namespaced environment rather than in the SystemDictionary (known colloquially as the "Smalltalk" global object).&lt;br /&gt;&lt;br /&gt;This is trickier than it seems. All of the above need to live "in" a Package object. As an object, it is therefore an instance of the Package class, which has Class, Object and so forth as superclasses. So these (Class, Object, etc) all need to be made first... but then these classes in turn need to be in a Package (called "Kernel"). Thus, we have a chicken-and-egg problem. We need an instance of Package, which is an instance of a class inside itself (and further, compiled by a compiler which is in another instance of Package).&lt;br /&gt;&lt;br /&gt;My solution is to file out the core packages using my current tools: Kernel, SourceCode, Compiler, Namespaces, NamespaceTools, etc. Then I do this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;File in (but do not compile) the Kernel package, using the existing compiler and a custom filing code.&lt;/li&gt;&lt;li&gt;Make the new Metaclass singularity by hand.&lt;/li&gt;&lt;li&gt;Compile the Kernel package using whatever compiler is available, using the new Metaclasses.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;File in and compile all other dependencies using the resulting Kernel. These will all be discarded once the second kernel is built.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;File in the Kernel source code again into a separate PackageSource, this time using the new Kernel (above) for the Object, Class etc classes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now, do a whole lot of "special case" handling on the new second Kernel, using and sacrificing bits from the first, to make the new Kernel completely self-contained. This is quite a complex step so I'll spare the details.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Thus is born a set of objects with no links whatsoever to any Class in the SystemDictionary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-6526102331354479369?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/6526102331354479369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=6526102331354479369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/6526102331354479369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/6526102331354479369'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2011/05/now-where-was-i.html' title='Now, where was I?'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-2673730596342304174</id><published>2010-07-06T16:14:00.000-07:00</published><updated>2010-07-06T16:32:30.940-07:00</updated><title type='text'>SqueakOS the cheaters way</title><content type='html'>Cold boot to Squeak under 6 seconds? Possible. I haven't actually automated it yet, but it is possible as described below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tinycorelinux.com/"&gt;Tiny Core Linux&lt;/a&gt; is a mini Linux distribution that is, before boot, only two files. One is the Linux kernel. The other is the entire filesystem which is loaded into RAM. These two files are packaged up into a bootable .iso image for burning to a CD, although you can put them on any bootable medium and boot them using grub. You can put these files on an existing Linux partition on your hard disk, for example. The "tiny" version is 10MB and has a graphical interface and package manager! The "micro" version is 6MB and is only a command line. They boot &lt;span style="font-style: italic;"&gt;really &lt;/span&gt;fast.&lt;br /&gt;&lt;br /&gt;Now, the micro version can be used to run Squeak:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Boot it up using one of the "vga=" command line parameters to get a working framebuffer. You could use grub to persist this setting.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Get Squeak into the filesystem somehow. I used wget to fetch an image and the Linux VM from &lt;a href="ftp://ftp.squeak.org/"&gt;ftp://ftp.squeak.org/&lt;/a&gt;. A more permanent option would be mounting an existing filesystem.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Become root (sudo su) to run Squeak, or fix the permissions on /dev/input/mice. &lt;/li&gt;&lt;li&gt;Run squeak: "bin/squeak -vm-display-fbdev".&lt;/li&gt;&lt;/ol&gt;This is not quite as cool as &lt;a href="http://wiki.squeak.org/squeak/1762"&gt;SqueakNOS&lt;/a&gt;, but it is a practical, easy and stable way of running Squeak &lt;span style="font-style: italic;"&gt;as if&lt;/span&gt; it were the OS with good hardware support and a filesystem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-2673730596342304174?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/2673730596342304174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=2673730596342304174' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/2673730596342304174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/2673730596342304174'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2010/07/squeakos-cheaters-way.html' title='SqueakOS the cheaters way'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-1997104357091069701</id><published>2010-03-19T14:43:00.001-07:00</published><updated>2010-03-19T14:55:01.560-07:00</updated><title type='text'>Squeak vs Pharo</title><content type='html'>How does Squeak compare to Pharo?&lt;br /&gt;&lt;br /&gt;Well, people will have different experiences. Some will find the features of Pharo appealing. Pharo comes with a huge range of developer tools: syntax highlighting, autocompletion, code refactoring tools and a whole lot of smaller enhancements that people might like.&lt;br /&gt;&lt;br /&gt;Pharo looks nicer than Squeak. They've dared to change the menus around, in my opinion, for the better. They've taken a lot of inspiration ("blatently copied") from the Macintosh UI. They've also changed much of the interaction with the user, although the whole UI still freezes up whenever the image is doing something (please, learn to use multi-threading! It isn't hard!).&lt;br /&gt;&lt;br /&gt;I've been living on Pharo for the last 6 months because I wanted to use and modify the NewCompiler. I've gone back to Squeak. Why? Pharo is too slow. I have a Celeron clocked at 1.7GHz. Pharo's debugger takes forever to appear when something goes wrong. The browser is very laggy to type into. The UI in general looks like a Porshe, but certainly doesn't perform like one.&lt;br /&gt;&lt;br /&gt;The deal-breaker for me was that Pharo couldn't load a Monticello package I wrote. Pharo would freeze up, and alt-. would not recover it. Apparently this has been fixed in the later releases.&lt;br /&gt;&lt;br /&gt;So I'm back in Squeak. It's still slow like Squeak is, but at least the debugger comes up in a reasonable amount of time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-1997104357091069701?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/1997104357091069701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=1997104357091069701' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/1997104357091069701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/1997104357091069701'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2010/03/squeak-vs-pharo.html' title='Squeak vs Pharo'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-8712870061101764185</id><published>2010-02-21T14:14:00.000-08:00</published><updated>2010-02-21T14:17:19.344-08:00</updated><title type='text'>Dammit, Nethack!</title><content type='html'>I have been a bit... &lt;a href="http://www.nethack.org/"&gt;distracted&lt;/a&gt; lately by a certain chaotic elven wizard with a penchant for Yendorian amulets. I'll be back into SecureSqueak shortly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-8712870061101764185?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/8712870061101764185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=8712870061101764185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8712870061101764185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8712870061101764185'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2010/02/dammit-nethack.html' title='Dammit, Nethack!'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-8263424960973556256</id><published>2009-11-17T16:11:00.000-08:00</published><updated>2009-11-17T16:22:51.335-08:00</updated><title type='text'>NewCompiler</title><content type='html'>I want to use the &lt;a href="http://scg.unibe.ch/research/newcompiler/"&gt;NewCompiler&lt;/a&gt; in SecureSqueak.&lt;br /&gt;&lt;br /&gt;The main reason for this is that I want to use its IR ("intermediate representation") objects for moving code between images. The IR is effectively the bytecodes, but in object form, one object for one instruction, such that a final compilation step can be run on them to make CompiledMethods.&lt;br /&gt;&lt;br /&gt;This is important in SecureSqueak as it makes implementing a "bytecode verifier" much easier. Instead of verifying the bytecodes for incorrect variable accesses, invalid jump destinations and so forth, we just get the kernel to run the last step of compilation itself. This makes it impossible (*ahem* less possible) for malicious bytecodes to be injected into SecureSqueak.&lt;br /&gt;&lt;br /&gt;The rest of the compiler is completely optional. You merely need *something* that can generate the IR — it doesn't even need to be Smalltalk code.&lt;br /&gt;&lt;br /&gt;The current NewCompiler maintainers use Pharo, so I'll be moving development over to that for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-8263424960973556256?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/8263424960973556256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=8263424960973556256' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8263424960973556256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8263424960973556256'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/11/newcompiler.html' title='NewCompiler'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-2853939914799109429</id><published>2009-09-22T04:15:00.000-07:00</published><updated>2009-09-22T04:28:01.439-07:00</updated><title type='text'>UGP / SecureSqueak 0.1 released</title><content type='html'>Download from here: &lt;a href="http://sourceforge.net/projects/securesqueak/"&gt;http://sourceforge.net/projects/securesqueak/&lt;/a&gt;&lt;br /&gt;Or watch the video: &lt;a href="http://vimeo.com/6698843"&gt;http://vimeo.com/6698843&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is the first release of my "Unnamed Grand Project". It includes the SecureSqueak kernel (kind of), SiteBrowser, Subcanvas and the DPON object replication framework. Currently the "SecureSqueak kernel" is just the Squeak 3.10 kernel converted to use namespaces. Version 0.2 of UGP will start introducing security into it.&lt;br /&gt;&lt;br /&gt;This release is for show and tell only; it barely works and isn't at all secure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-2853939914799109429?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/2853939914799109429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=2853939914799109429' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/2853939914799109429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/2853939914799109429'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/09/ugp-securesqueak-01-released.html' title='UGP / SecureSqueak 0.1 released'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-8531195300410331749</id><published>2009-09-06T01:22:00.001-07:00</published><updated>2009-09-06T01:30:58.666-07:00</updated><title type='text'>Subcanvas, with windows!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VFjMEVBkrT0/SqNxaU6xEvI/AAAAAAAAABo/X_z2d7W0d6w/s1600-h/subcanvas-windows.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_VFjMEVBkrT0/SqNxaU6xEvI/AAAAAAAAABo/X_z2d7W0d6w/s320/subcanvas-windows.png" alt="" id="BLOGGER_PHOTO_ID_5378267077116236530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;...and they actually work, too! The yellow parts are the borders; you can drag them around, and clicking on them brings them to the front.&lt;br /&gt;&lt;br /&gt;The Subcanvas API is starting to prove that it really can work. The yellow bits are a subcanvas. Each of those contains a subcanvas with the window contents. The background is a subcanvas. The buttons (grey things with text) are subcanvases and will pop up a brand new window when you click on them.&lt;br /&gt;&lt;br /&gt;Next up: choose better colours and make the test sites actually do something.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-8531195300410331749?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/8531195300410331749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=8531195300410331749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8531195300410331749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8531195300410331749'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/09/subcanvas-with-windows.html' title='Subcanvas, with windows!'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VFjMEVBkrT0/SqNxaU6xEvI/AAAAAAAAABo/X_z2d7W0d6w/s72-c/subcanvas-windows.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-3055076065844676905</id><published>2009-09-01T13:57:00.000-07:00</published><updated>2009-09-02T14:19:47.895-07:00</updated><title type='text'>Subcanvas: Introducing Easels</title><content type='html'>Last night I started writing a real test for my Subcanvas graphics/events architecture: a trivial windowing system as the humble beginnings of a SiteBrowser [A SiteBrowser lets you browse "Sites" across the Internet, similar to navigating between Projects in Squeak]. The first problem I encountered was: from ordinary application code, how do I add a subcanvas? You aren't meant to hold references to canvases in your code, and the method to add a canvas is Canvas&gt;&gt;addCanvas. That would mean that you can only add a canvas from within an event handler. Oops. I needed to refactor the API to make it less brain-dead.&lt;br /&gt;&lt;br /&gt;As a result, I introduce the Easel, an object which specifies the structure of Canvases and their children. An Easel is an object that your code &lt;span style="font-style: italic;"&gt;should&lt;/span&gt; hold a reference to, and its API contains all the methods used to add, remove, move, resize, raise and lower subcanvases. I've also moved the canvas handler accessing methods to it, and added a method to cause a redraw event on a canvas.&lt;br /&gt;&lt;br /&gt;I'll be updating http://gulik.pbwiki.com/Canvas soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-3055076065844676905?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/3055076065844676905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=3055076065844676905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/3055076065844676905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/3055076065844676905'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/09/easels.html' title='Subcanvas: Introducing Easels'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-8254348171135528864</id><published>2009-08-01T19:03:00.001-07:00</published><updated>2009-08-01T19:35:33.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Form'/><category scheme='http://www.blogger.com/atom/ns#' term='BitBlt'/><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Subcanvas'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>Subcanvas with events</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_VFjMEVBkrT0/SnT0LLsXXFI/AAAAAAAAABg/GzuLoIpvWuc/s1600-h/subcanvas_with_events.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 222px;" src="http://2.bp.blogspot.com/_VFjMEVBkrT0/SnT0LLsXXFI/AAAAAAAAABg/GzuLoIpvWuc/s320/subcanvas_with_events.png" alt="" id="BLOGGER_PHOTO_ID_5365181529059712082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;What is the picture of? It's a simple test for the &lt;a href="http://gulik.pbwiki.com/Canvas"&gt;Subcanvas&lt;/a&gt; graphics / events API. It's Squeak, but with Morphic temporarily disabled and a Subcanvas test running full-screen and reacting to keyboard and mouse events. The blue squares are from mouse move events (offset by a few mm). The big green rectangle is a subcanvas that draws little red squares rather than blue squares on mouse move events. All the other sized squares are from mouse click events. The text is from keyboard events; the little white lines above text are key press events and the white lines below are key release events.&lt;br /&gt;&lt;br /&gt;Font rendering here is done &lt;span style="font-style: italic;"&gt;very&lt;/span&gt; simply. It will be improved.&lt;br /&gt;&lt;br /&gt;The performance of this implementation is currently usable with a single, small subcanvas, but the performance will suffer incredibly as subcanvases get bigger. This is because subcanvases are BitBltted in their entirety after each event; the implementation is currently naïve and there is a lot of room for optimisation.&lt;br /&gt;&lt;br /&gt;I'm disappointed by Squeak's graphics performance. BitBlts on Forms are very slow. As a result, I'm not going to try to optimise this implementation of Subcanvas (based on Forms and BitBlt) and instead re-implement it in the future using either a raw X11 socket with &lt;a href="http://en.wikipedia.org/wiki/Xrender"&gt;XRender&lt;/a&gt;, XDamage etc, or use OpenGL in 2-D. Subcanvas at heart is an API, so any users of it should be unaffected. Currently I'm favouring reimplementing it to use X11 as most POSIX systems (Linux, Solaris, BSD, Apple with OS/X) have an accelerated X server, and I could bundle something like &lt;a href="http://www.straightrunning.com/XmingNotes/"&gt;XMing&lt;/a&gt; with MS Windows. Forms, BitBLT and friends could then be completely purged from the VM leaving it headless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-8254348171135528864?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/8254348171135528864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=8254348171135528864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8254348171135528864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/8254348171135528864'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/08/subcanvas-with-events.html' title='Subcanvas with events'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_VFjMEVBkrT0/SnT0LLsXXFI/AAAAAAAAABg/GzuLoIpvWuc/s72-c/subcanvas_with_events.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-7618907807730253145</id><published>2009-06-28T17:21:00.001-07:00</published><updated>2009-06-28T18:00:46.481-07:00</updated><title type='text'>Keyboard events</title><content type='html'>Mouse events in Subcanvas now mostly work. A canvas's target now receives mouse movement events, mouse button press and release events and canvas enter and exit events. Now, I've moved my attention to keyboard events.&lt;br /&gt;&lt;br /&gt;There are three types of &lt;a href="http://isqueak.org/ioGetNextEvent"&gt;keyboard events in Squeak&lt;/a&gt;: Key Press, Character and Key Release. Key Press and Key Release &lt;span style="font-style: italic;"&gt;should&lt;/span&gt; give only the description of which physical key on the keyboard has been pressed or released, including modifier keys (shift, CTRL, etc). Currently the Squeak VM uses the "Mac-Roman" encoding to encode which key was pressed or released, which is less than ideal and still differs per platform. The Character event contains a Unicode character. A single Unicode character may have required multiple key presses and even some UI interaction to be &lt;a href="http://www.microsoft.com/globaldev/handson/user/IME_Paper.mspx"&gt;composed&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are three types of hardware keyboard in the world; the &lt;a href="http://en.wikipedia.org/wiki/IBM_PC_keyboard"&gt;US one&lt;/a&gt; (104 keys), the &lt;a href="http://en.wikipedia.org/wiki/Keyboard_layout"&gt;European one&lt;/a&gt; (105 keys) and the &lt;a href="http://en.wikipedia.org/wiki/Japanese_keyboard"&gt;East Asian one&lt;/a&gt; (109 keys). These are very similar to each other and based on the PS/2 keyboard. Almost every keyboard in the world is based on one of these hardware prototypes with different printed letters on it.&lt;br /&gt;&lt;br /&gt;I've also found that the &lt;a href="http://www.win.tue.nl/%7Eaeb/linux/kbd/scancodes-14.html"&gt;USB specification &lt;/a&gt;(made by Microsoft) has reasonably elegant "scan-codes" that specify the actual keys pressed with no regard for which character is printed on that key. I believe these codes would provide for a much more elegant way of specifying which keys were pressed in the "press" and "release" events than the Mac-Roman keys currently provided by the Squeak VM. Unfortunately, any notion of the original USB scan codes have long been forgotten by the OS by the time the character arrives at the Squeak VM, so the VM or the image will need to map OS-specific event IDs to the equivalent USB scan codes. It is a bit of a roundabout way to do it, but the end result is an OS-independent manner of doing raw keyboard events. Perhaps SqueakNOS can strip away the layers of abstraction and pass USB scan-codes through directly? :-)&lt;br /&gt;&lt;br /&gt;The end result is that an application using Subcanvas can either use the character events, or it can use the key press and key release events to roll its own "Input Method Editor". This gives a good level of initial functionality for most languages in the world by using the Unicode character input directly from the VM, as well as a future growth path for implementing new "Input Method Editors" (or games) using the raw key press and release events.&lt;br /&gt;&lt;br /&gt;On another chain of thought, I'm considering making &lt;a href="http://en.wikipedia.org/wiki/Pango"&gt;Pango &lt;/a&gt;and &lt;a href="http://en.wikipedia.org/wiki/Freetype"&gt;Freetype &lt;/a&gt;"libraries" available in SecureSqueak / &lt;a href="http://gulik.pbworks.com/Unnamed-Grand-Project"&gt;UGP&lt;/a&gt;. If they're provided as a resource such that &lt;a href="http://gulik.pbworks.com/Canvas"&gt;Subcanvas&lt;/a&gt; does not have any architectural dependencies on them, they can be implemented as a "deprecated on birth" resource that will provide necessary text rendering functionality until pure Smalltalk-based solutions can be written. At this stage, I'm a bit wary of just how complex the rendering of multilingual text can be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-7618907807730253145?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/7618907807730253145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=7618907807730253145' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/7618907807730253145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/7618907807730253145'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/06/keyboard-events.html' title='Keyboard events'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-929449624162170000</id><published>2009-04-11T21:58:00.001-07:00</published><updated>2009-04-12T02:00:18.165-07:00</updated><title type='text'>Squeak on ARM</title><content type='html'>&lt;p&gt;I'm trying to get Squeak running on my &lt;a href="http://gulik.pbwiki.com/Hardware+toys"&gt;HP Jornada 820&lt;/a&gt;. I've used an ancient 3.3 VM until now under Windows CE, but I'd like to get it running under Linux to see if I can improve performance a bit, especially with BitBLT which I know can perform a lot faster on this hardware.&lt;/p&gt;&lt;p&gt;I've learned one lesson: embedded programming requires &lt;em&gt;patience&lt;/em&gt;. Everything is slow.&lt;/p&gt;&lt;p&gt;So far I have:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Gotten &lt;a href="http://jornada820.sourceforge.net/"&gt;Linux&lt;/a&gt; (2.4) running on the Jornada from a CF card. This was the easy part.&lt;/li&gt;&lt;li&gt;Installed &lt;a href="http://cdimage.debian.org/cdimage/archive/3.1_r8/arm/iso-cd/"&gt;Debian Sarge&lt;/a&gt; (3.3) from the dusty archives of yore. You see, it needs to support the aforementioned 2.4 kernel.&lt;/li&gt;&lt;li&gt;Gotten GCC working, which needs a swap space on the CF card. I can hear it screaming in pain! "Hello, world!\n" works.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Nearly&lt;/em&gt; managed to get Squeak to compile. It failed on the Rome plug-in, which was internal.&lt;/li&gt;&lt;li&gt;Stripped Squeak of all plugins and discovered an &lt;a href="http://bugs.squeak.org/view.php?id=7334"&gt;unnecessary dependency&lt;/a&gt; on a Balloon 3D plugin. It's easy to fix, but I have better things to do.&lt;/li&gt;&lt;li&gt;Decided that I couldn't cause any more suffering on my CF card and now I'm setting up a &lt;a href="http://scratchbox.org/"&gt;Scratchbox&lt;/a&gt; environment for cross-compilation.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Currently, I'm stuck on the executables from the cross-compilation environment. GCC on the Jornada makes ELF binaries for "GNU/Linux 2.2" that run fine, but the cross-compiler makes ELF executables with no such versioning... which don't run. Google will inform me.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-929449624162170000?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/929449624162170000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=929449624162170000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/929449624162170000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/929449624162170000'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/04/squeak-on-arm.html' title='Squeak on ARM'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-5815389455369511507</id><published>2009-03-23T15:29:00.001-07:00</published><updated>2009-03-26T14:31:03.043-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='vm'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrent'/><title type='text'>Concurrency</title><content type='html'>I'm depressed.&lt;br /&gt;&lt;br /&gt;Over the last couple of weeks, I've been playing with various Smalltalk implementations. I always had this idea that some of them could use multiple CPU cores. As it turns out, none of them do it, and the ones that do concurrency don't do it well.&lt;br /&gt;&lt;a href="http://www.cincomsmalltalk.com/"&gt;&lt;br /&gt;VisualWorks &lt;/a&gt;is single-threaded. &lt;a href="http://www.squeak.org/"&gt;Squeak&lt;/a&gt; is single-threaded. &lt;a href="http://www.exept.de/"&gt;Smalltalk/X&lt;/a&gt; didn't fully use two CPU cores. &lt;a href="http://www.objectconnect.com/"&gt;Smalltalk/MT&lt;/a&gt; should, but didn't. &lt;a href="http://www.guillermomolina.com.ar/huemul/"&gt;Huemul&lt;/a&gt; 0.7 tried... but crashed.&lt;br /&gt;&lt;br /&gt;[update: Smalltalk/MT does use multiple cores as Peter Lount points out in the comments, but is severely limitied by the garbage collector.]&lt;br /&gt;&lt;br /&gt;Igor's &lt;a href="http://www.qwaq.com/HydraVM/"&gt;Hydra VM&lt;/a&gt; does concurrency the hard way: by making a completely separate VM in a separate thread but in the same process (using OS terminology here): VMs can communicate with each other, but each is single-threaded. &lt;a href="http://smalltalk.gemstone.com/"&gt;Gemstone&lt;/a&gt;, I hear, can make multiple Gems which share a transacted memory, but each Gem is single threaded.&lt;br /&gt;&lt;br /&gt;Surely it can't be &lt;a href="http://gulik.pbwiki.com/Block-based+virtual+machine"&gt;&lt;span style="font-style: italic;"&gt;that hard&lt;/span&gt;&lt;/a&gt; to make a VM that does fine-grained concurrency?&lt;br /&gt;&lt;br /&gt;Smalltalk, the language, is ideally suited to concurrency. The language lends itself to creating &lt;a href="http://gulik.pbwiki.com/Parallel-processing"&gt;concurrent abstractions&lt;/a&gt; and already has basic support, but there's no implementation which can take advantage of the CPU power.&lt;br /&gt;&lt;br /&gt;Smalltalk VMs are not going to be running any faster if we don't start exploring concurrency. The free ride in MHz increases is about to &lt;a href="http://en.wikipedia.org/wiki/Moore%27s_Law#Ultimate_limits_of_the_law"&gt;end soon&lt;/a&gt; (in theory, anyway). Moreso, the best Smalltalk VM can only use quarter of the power of a quad-core CPU, and this unused potential will increase exponentially as the number of cores increases exponentially.&lt;br /&gt;&lt;br /&gt;What am I going to do about it? Well, I'm going to be modifying the Process scheduler in Squeak to simulate multiple CPU cores. Individual Processes will have their speed throttled down so that using multiple forked processes will be required to get a speed increase. Then I will, eventually, start writing concurrent frameworks to take advantage of the "multiple cores". This way, if some smart alec makes me a nice concurrent VM, they have concurrent code to take advantage of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-5815389455369511507?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/5815389455369511507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=5815389455369511507' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/5815389455369511507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/5815389455369511507'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/03/concurrency.html' title='Concurrency'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-9117287242233863185</id><published>2009-03-12T20:49:00.000-07:00</published><updated>2009-03-12T21:49:47.793-07:00</updated><title type='text'>Playing with Blocks</title><content type='html'>Today I learned about blocks. We Smalltalkers all know and love blocks: those bits of code in square brackets that we can do all sorts of dandy tricks with. So what evils are there?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, Evil Trick number one:&lt;br /&gt;&lt;br /&gt;b := [ ^ Transcript show: 'In the block'; cr ].&lt;br /&gt;&lt;br /&gt;... in another method:&lt;br /&gt;&lt;br /&gt;b value.&lt;br /&gt;Transcript show: 'After the block evaluation'; cr.&lt;br /&gt;&lt;br /&gt;The latter message will not be printed on the transcript. When you evaluate a block that has a return statement in it (a "non-local" return), the current context is abruptly terminated and the method context where the block was defined is returned from.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Evil trick number two:&lt;br /&gt;&lt;br /&gt;b := [ ^ 1 ].&lt;br /&gt;[ b value ] fork.&lt;br /&gt;&lt;br /&gt;This will cause &gt;&gt;cannotReturn: to be evaluated on the BlockContext. The block has a non-local return in it but it cannot return. The containing MethodContext of that block is not on the call stack, because the block is evaluated in another process which has its another stack. When a non-local return happens, the VM searches down the call stack until it finds the method that the block is defined in.&lt;br /&gt;&lt;br /&gt;This will also happen if you get a block with a non-local return by calling a method that defines it and then evaluate that block after the method returns:&lt;br /&gt;&lt;br /&gt;someMethod&lt;br /&gt;   ^ [ ^ 1 ].&lt;br /&gt;&lt;br /&gt;self someMethod value. "Fails"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Evil trick number three:&lt;br /&gt;&lt;br /&gt;s := Semaphore new.&lt;br /&gt;b := [ s wait ].&lt;br /&gt;[ b value ] fork.&lt;br /&gt;[ b value ] fork.&lt;br /&gt;&lt;br /&gt;This will fail in Squeak, although it shouldn't. Squeak has an optimisation that prevents two concurrent evaluations of the same block. I'm not entirely sure why, but it certainly hinders concurrent programming in Squeak (that, and the fact that Squeak is single threaded).&lt;br /&gt;&lt;br /&gt;It also happens if you get a block to evaluate itself:&lt;br /&gt;&lt;br /&gt;b := [:block | block value: block].&lt;br /&gt;b value: b&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Evil trick number four:&lt;br /&gt;&lt;br /&gt;[ |b| b := 'bar'] value.&lt;br /&gt;[ |b| ^ b] value.&lt;br /&gt;&lt;br /&gt;You would expect to get a nil, but in Squeak, you'll get a 'bar' instead. This is because block variables are defined in their method contexts rather than in their block contexts. This is what the community is complaining about when they complain about the lack of closure support. So, how do you fix it?&lt;br /&gt;&lt;br /&gt;[ |b| b := 'bar'] value.&lt;br /&gt;[ |b| ^ b] fixTemps value.&lt;br /&gt;&lt;br /&gt;This version does not work: fixTemps disallows a block from doing non-local returns. How about:&lt;br /&gt;&lt;br /&gt;  | result |&lt;br /&gt;  [ |b| b := 'bar'] value.&lt;br /&gt;  [ |b| result := b] fixTemps value.&lt;br /&gt;  ^ result.&lt;br /&gt;&lt;br /&gt;Lame, but it actually works like it should. nil is returned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-9117287242233863185?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/9117287242233863185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=9117287242233863185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/9117287242233863185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/9117287242233863185'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/03/playing-with-blocks.html' title='Playing with Blocks'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-3564735299383117083</id><published>2009-02-22T12:38:00.000-08:00</published><updated>2009-02-22T13:10:01.287-08:00</updated><title type='text'>Low-level graphics in Squeak</title><content type='html'>It wasn't until I dug into how low-level graphics worked in Squeak that I realised how trivial it was.&lt;br /&gt;&lt;br /&gt;To draw on the screen, use the global variable "Display". This is an instance of a subclass of Form. A Form is a bitmap. To draw on Forms, you use "BitBlt" instances, which represent drawing commands.&lt;br /&gt;&lt;br /&gt;For handling events from the mouse and keyboard, you use the global variable Sensor, which is an instance of EventSensor. In a loop, you call EventSensor&gt;&gt;nextEvent to get the next event, which is either "nil" or the next keyboard or mouse event. Yes, you need to poll it, and if you don't want to use 100% CPU, then you need to suspend your thread for, say, 20ms on every iteration.&lt;br /&gt;&lt;br /&gt;Except for the details, that's all you need to do to draw on the screen and handle events. There's plenty of example code in a stock Squeak image.&lt;br /&gt;&lt;br /&gt;Now comes the tricky part: how do you wrestle control of these objects from Morphic? Well, as it turns out, Morphic wasn't designed in the resiliant, secure and reactive way I would have designed it. Morphic is single threaded! When you run your code, you're running it &lt;span style="font-style: italic;"&gt;in the same Process that handles event handling and screen drawing!&lt;/span&gt; So if you never return from your event polling loop, Morphic never runs (unless a Transcript is open and you write something to it).&lt;br /&gt;&lt;br /&gt;I find the single-threadedness of Morphic rather &lt;a href="http://dictionary.reference.com/browse/retarded"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;quaint.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Alternatively, you can use:&lt;br /&gt;Project uiProcess suspend. "This suspends the Morphic process; make sure your code runs in another process!"&lt;br /&gt;Project spawnNewProcess " If you terminated the Morphic process, this makes a fresh one. "&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-3564735299383117083?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/3564735299383117083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=3564735299383117083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/3564735299383117083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/3564735299383117083'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/02/low-level-graphics-in-squeak.html' title='Low-level graphics in Squeak'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-1473431992943044839</id><published>2009-02-08T13:22:00.000-08:00</published><updated>2009-02-08T13:35:11.885-08:00</updated><title type='text'>SiteBrowser</title><content type='html'>Last night I started work on a new SiteBrowser. This time, it will only use the &lt;a href="http://gulik.pbwiki.com/Canvas"&gt;Subcanvas&lt;/a&gt; API to do drawing and event management.&lt;br /&gt;&lt;br /&gt;Hopefully it won't take much more time before I can release &lt;a href="http://gulik.pbwiki.com/SecureSqueak"&gt;SecureSqueak&lt;/a&gt; version 0.1. I think I'll revise the &lt;a href="http://gulik.pbwiki.com/SecureSqueak"&gt;schedule&lt;/a&gt; to make lots more releases each with fewer new features.&lt;br /&gt;&lt;br /&gt;In the meanwhile, Matthew Fulmer has sent a progress report about Squeak 4.0. I'm not sure if that should affect me. My current state of thinking is that I'll be making such vast changes to the kernel that it doesn't really matter which version I begin with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-1473431992943044839?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/1473431992943044839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=1473431992943044839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/1473431992943044839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/1473431992943044839'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/02/sitebrowser.html' title='SiteBrowser'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-213837335621590895</id><published>2009-01-19T12:08:00.001-08:00</published><updated>2009-01-19T12:37:42.476-08:00</updated><title type='text'>Subcanvas progress</title><content type='html'>I'm always impressed by how quick you can get stuff working in Smalltalk and &lt;a href="http://www.squeak.org/"&gt;Squeak&lt;/a&gt;. I spent a couple of hours over the last weekend getting events working in &lt;a href="http://gulik.pbwiki.com/Canvas/"&gt;Subcanvas&lt;/a&gt;. I haven't touched it for a month now as I've only just come back from a 3-week holiday with my family.&lt;br /&gt;&lt;br /&gt;So now &lt;a href="http://gulik.pbwiki.com/Canvas/"&gt;Subcanvas&lt;/a&gt; can process left mouse button clicks. I coded up a small demo where the mouse click handler drew small 5mm x 5mm squares on the screen. You can add a child canvas, and the events and redrawing works in the simple case.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-213837335621590895?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/213837335621590895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=213837335621590895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/213837335621590895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/213837335621590895'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2009/01/subcanvas-progress.html' title='Subcanvas progress'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-5178100984385267839</id><published>2008-11-25T13:13:00.000-08:00</published><updated>2008-11-25T18:34:50.511-08:00</updated><title type='text'>Unicode in Squeak</title><content type='html'>(Excuse the odd formatting; blogger.com isn't liking my Unicode symbols in this post and is doing odd things with line heights)&lt;br /&gt;&lt;br /&gt;Somebody on the Squeak mailing list asked about how to do an open Interval. I came up with:&lt;br /&gt;&lt;br /&gt;1 to: ∞&lt;br /&gt;&lt;br /&gt;I had added "∞" as a global variable equal to "Float infinity" and my example... just worked! When I was looking at the character table for the infinity sign, I came across a ton of other gems. These would be all quite possible in Squeak, and many of them trivial.&lt;br /&gt;&lt;br /&gt;( (22 ÷ 7) ≈ (π ± ¼) )   →  true or false, π and ¼ are constants and ± would return an object representing a numeric accuracy object of some sort.&lt;br /&gt;((c ∪ d) ⊂ e) →  true or false for collections c, d, and e.&lt;br /&gt;(a ∧ b ∨ c) ¬    " The not-sign needs to come after expressions. "&lt;br /&gt;&lt;br /&gt;1 … 3     → returns an interval. The ellipses is a single Unicode character.&lt;br /&gt;2¹⁶         → 2 raisedTo: 16.&lt;br /&gt;∅      → An empty, immutable Set instance.&lt;br /&gt;&lt;br /&gt;There are loads of symbols available that would work as constants, method selectors, variables (greek letters anybody?) and so forth. Some of them won't work, such as using a dollar-sign for currency values. I'm not sure about '∃' and '∀' because of Smalltalk's message order; these two symbols are some odd prefix-type expression.&lt;br /&gt;&lt;br /&gt;Another useful symbol would be some sort of concatenation operator, but (not being a proper mathematician) I don't know one. This operator would allow you to easily make a collection, e.g.&lt;br /&gt;&lt;br /&gt;#a | ∅   " A new set containing #a. This could be implemented, but '|' is already used in Boolean operations. "&lt;br /&gt;varA | varB | varC | ∅   " Shorthand for making a collection. Replace '∅' to change the type of collection. "&lt;br /&gt;&lt;br /&gt;There's a Unicode character called a "Character tie": http://www.fileformat.info/info/unicode/char/2040/index.htm. Would this make a potential concatenation operator?:&lt;br /&gt;&lt;br /&gt;varA ⁀ varB ⁀ varC ⁀ ∅     " Meh "&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-5178100984385267839?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/5178100984385267839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=5178100984385267839' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/5178100984385267839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/5178100984385267839'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2008/11/unicode-in-squeak.html' title='Unicode in Squeak'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-4806080216874066910</id><published>2008-11-04T00:39:00.000-08:00</published><updated>2008-11-04T00:52:41.060-08:00</updated><title type='text'>Subcanvas: first graphics.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_VFjMEVBkrT0/SRAKlSzmFXI/AAAAAAAAAAo/-H8gmSJfja8/s1600-h/subcanvas.png"&gt;A screenshot:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_VFjMEVBkrT0/SRAKlSzmFXI/AAAAAAAAAAo/-H8gmSJfja8/s320/subcanvas.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5264719600215790962" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;What is it? Well, it's an orange line, green rectangle, filled blue rectangle and small blue bit of text. The relevance here is that I've gotten some basic graphics output from &lt;a href="http://gulik.pbwiki.com/Canvas"&gt;Subcanvas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The features that you aren't seeing here are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The code for this is in a Package, and the classes are all in Namespaces. Namespaces really work! Although... I have found some more nasty bugs that destroy  code.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The coordinates used are measured in micrometers. Those are 20mm by 20mm boxes on my screen, roughly.&lt;/li&gt;&lt;/ul&gt;My next steps are to add support for child canvases and keyboard / mouse event handling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-4806080216874066910?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/4806080216874066910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=4806080216874066910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/4806080216874066910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/4806080216874066910'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2008/11/subcanvas-first-graphics.html' title='Subcanvas: first graphics.'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_VFjMEVBkrT0/SRAKlSzmFXI/AAAAAAAAAAo/-H8gmSJfja8/s72-c/subcanvas.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2748388581844984599.post-5882995805101033204</id><published>2008-10-25T19:33:00.000-07:00</published><updated>2008-10-25T20:01:07.706-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='secure'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='squeak'/><title type='text'>SecureSqueak - what is it exactly?</title><content type='html'>I've decided to start a blog about SecureSqueak, and maybe other Smalltalk-related topics.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gulik.pbwiki.com/SecureSqueak"&gt;SecureSqueak&lt;/a&gt; is &lt;a href="http://www.squeak.org/"&gt;Squeak&lt;/a&gt; modified to run untrusted code. Code should be able to be loaded from a remote site and executed locally without any damage or unauthorised access to the local system. It is intended to be a kernel for my other &lt;a href="http://gulik.pbwiki.com/Unnamed+Grand+Project"&gt;unnamed project&lt;/a&gt; which is currently going by the name of "Unnamed Grand Project".&lt;br /&gt;&lt;br /&gt;SecureSqueak has been in stasus for a while while I pursued a rather less worthy topic: &lt;a href="http://wz2100.net/"&gt;Warzone 2100&lt;/a&gt;. Yes, I wasted a few hours of my life!&lt;br /&gt;&lt;br /&gt;So now I'm back in action. The next few items on the agenda are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Get &lt;a href="http://gulik.pbwiki.com/Canvas"&gt;Subcanvas&lt;/a&gt; working. Subcanvas is an enhanced version of the Canvas class which will provide the basic graphics and input handling  to SecureSqueak. Subcanvas is also a test bed to see how well I can write code using my recently developed Namespaces for Squeak.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Write another simple SiteBrowser package. This isn't part of SecureSqueak but rather the UGP. This will let the user navigate through distributed objects.&lt;/li&gt;&lt;li&gt;Get the package distribution (i.e. remote code loading) for UGP working. &lt;/li&gt;&lt;/ul&gt;Igor Stasenko provided some valuable feedback on the design of Namespaces. Once I've finished the above, I'll be looking at refactoring the namespaces system and put the code for managing namespaces, classes and methods in a namespace itself. Currently the code for managing namespaces sits in the SystemDictionary and is saved at &lt;a href="http://squeaksource.com/SecureSqueak"&gt;http://squeaksource.com/SecureSqueak&lt;/a&gt;, but I eventually plan to deprecate and perhaps even remove the SystemDictionary from the image.&lt;br /&gt;&lt;br /&gt;Want to see the code? Well, it's scattered all over the place:&lt;br /&gt;&lt;br /&gt;Documentation is at &lt;a href="http://squeaksource.com/SecureSqueak"&gt;http://gulik.pbwiki.com/&lt;/a&gt;.&lt;br /&gt;Code in the SystemDictionary (i.e. most of it) is at &lt;a href="http://squeaksource.com/SecureSqueak/"&gt;http://squeaksource.com/SecureSqueak/&lt;/a&gt;.&lt;br /&gt;Code in Namespaces and image files  are stored at&lt;a href="http://securesqueak.sourceforge.net/"&gt; http://securesqueak.sourceforge.net/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2748388581844984599-5882995805101033204?l=securesqueak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://securesqueak.blogspot.com/feeds/5882995805101033204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2748388581844984599&amp;postID=5882995805101033204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/5882995805101033204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2748388581844984599/posts/default/5882995805101033204'/><link rel='alternate' type='text/html' href='http://securesqueak.blogspot.com/2008/10/securesqueak-what-is-it-exactly.html' title='SecureSqueak - what is it exactly?'/><author><name>gulik</name><uri>http://www.blogger.com/profile/13284010440797843195</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://4.bp.blogspot.com/_VFjMEVBkrT0/SQPpA_wXvTI/AAAAAAAAAAM/20quYWi6PGU/S220/00004.jpg'/></author><thr:total>0</thr:total></entry></feed>
