 So yeah, Squeak is an implementation of the small talk language and while we are working with it, we love it, but we see that most people don't know about it or just don't want to use it. So I would like, with this talk, I would like to convince you that small talk is a really good language and that you should give it a try because it will change the way you think about programming with objects. So I said small talk is a little strange, this is 1980. So basically small talk is the system that brought us the graphical interface, bitmap tricks, the mouse, menus and whatever. So okay, yeah, I mean, what most people think when we say object oriented now is maybe Java or C++ or mostly statically typed languages, but the actual object orientation is not really like this. So in small talk, everything is an object. So numbers are objects, Booleans, classes are objects, methods are objects, even stack frames are objects. Those objects live within an image. So when you run the squeak environment, for instance, it looks like this and maybe to get the idea a little better, you should think of the small talk virtual machine, not as a Java or Python virtual machine, but as a Xen or VMware one. You open an image and you have all your tools, the objects, your application, it's just here and when you're finished working, you just save the image. You can move it to another computer, reload it, it's there. One point that plays a little against small talk is that its syntax is a little different, but it's really simple. I guarantee you you can learn it in 20 minutes, 30 minutes, and in fact this method contains every syntactical element of the language. So you have the basic Booleans, Neil is the equivalent of the void pointer, you have the basic control structures, whatever, variables, assignments, literal variables, message stands, etc. Okay. So the rest of the language is more or less like every other dynamic object oriented languages. The method in vocation is always dynamic or virtual. All methods are public. So in the tools, you can organize your method. So if you want to protect, then you just move the method away. Instance variables are always private. So yes, that means you have to define your accessors yourselves. The difference is that's just a menu, choosing a menu item and this choice is mainly for encapsulation. So the rest, it has single inheritance, garbage collection, etc. But maybe the most important and interesting way is that within the image, everything is written in small talk. So there is the VM and the VM basically doesn't know anything. Maybe it knows how to display bitmaps and touch system stuff, but all the rest is written in small talk. For instance, the control structures are just standard methods. There is no for loop in the syntax. This, so for instance, on all collections, you have the method do, which will take, we call it a block, but it's like a function and it will apply this function to every element of the collection. So in this case, it's using another method that is called the number one, which will iterate from one to the size of the collection, etc., etc. So this method was maybe written in five minutes, sometime in 1978. In comparison, the recent addition to Java, the quick for loop, while it was JSR201, it took roughly two years to implement, to add to the compiler, etc. So what do you need to run a quick environment first? You need the virtual machine, so this is a simple program, and your code will live in an image. So you have to start with basically a base image that contains the compiler, the development tools, and all the collections, strings, etc., base classes. For historical reasons, the image only contains the byte code and the data of the objects, so the text of the code is held separately. The most part is inside the sources file, so you get this one with the VM most of the time. And each time you add a new method, define a class, this is logged in a changes file that records every single modification you made to the source code, so even if you hit a bug in the VM and the whole system explodes, you still have the changes file with the sequence of changes. Your code is in there, you can't lose your modifications. And with this, you get a lot of tools, so this is just a sample. We have a distributed version control system in there. Anywhere you can type text, you can type a small talk expression, select it and execute it. So in this example, we ask to launch an explorer on this collection. And then we can look, this is a pointer which has an x and a y, the character has a key value 97, and there is a string, a symbol, etc. There are many other tools. One of the nice ones is the method finder, so often you don't remember what was the name of a method, because in the base image, for instance, there is 40,000 methods, several thousands of classes, so sometimes it's a little blurry, and you can find some just ask. I want to find the methods that when I send them to the small a, I get a big a as a result. Just tap this here, type enter, and the system answers. You can use first as uppercase or first capitalized or whatever. So basically you can also select an expression. So here building a rectangle from this point, and asking for the area of the rectangle, spawn a debugger from this, and so this is the frame for this expression. And I stepped into area, so you can just look at the code. So if there was a bug in this method, for instance, I could fix the bug here, save the method, and proceed. I don't stop the program, I just sometimes I just even code in the debugger if I want to. And at the beginning of the presentation, I said stack frames, objects, well, in the context of the execution of this method, there is a value here named this context. If you inspect this one, you get an explorer here. This is the object that sent the context of the method that invoked area. You have a stack pointer, whatever, and all those are also just objects. So squeak was released in 1996 by Apple. So it continues to evolve. Basically we are more or less making one release per year of the base code. So the latest 3.10 should be available really soon. This release particularly has worked on getting better tools, better modularization to be able to have a really kernel image and only what you want in there. And the whole process was based on having only green tests, passing tests in the image. So I'm done with squeak now. I would like to talk about maybe the killer app at the moment, which is Seaside. And Seaside is a web framework that is often called Heretic by its designers. Why? Because it was targeted at making interactive web applications, really interactive web applications. And doing it in a really quick way. So for instance, you can build nearly graphical interfaces in HTML and have the back button work even when you modify stuff and you have parallel sessions and you go back and you edit and et cetera. So the state of the application can be backtracked anyway. And you can compose applications really easily one inside another. So maybe the minus points are that having pretty URLs for instance is possible but it's not for free. You have to deal with it, which anyway you have to do. You have to design them to have them work for you. And the HTML code you generate with small talk for instance. So there is a simple API to generate the code. The point is that this gets version controlled. You can modularize it in different methods. And this basically implements the counter that you see here. So if you press to plus and minus, it's incremented and so on. You can press the back button and it will work. And yeah, so when you click on this link, this code here gets executed. There is no, you don't have to prepare a separate page for displaying the results. It's just all in one piece of code. So this is what it would like in, what it would look like in a debug mode. So you can see each part, each component on the page and for instance this button here you could edit the CSS code linked to this element just from the browser. So you don't have to think about element IDs or whatever. So the 2H release of suicide has been done at the end of last year. It's faster by 50% maybe, also lighter. It was optimized for this. And the big news is that it's supported by the major vendors of small talk implementation. So Syncom is one of the big enterprise systems for small talk and Jamstone is a distributed object database. If you really want, go take a look at this because it's really impressive. And for those of you that don't like graphical interfaces and prefer to use Emacs, well there is an implementation under the GNU umbrella. So GNU small talk in its version 3 has introduced a specific syntax that makes it easy to define classes and methods in text files because the usual small talk system, the classes are objects so you just click on the menu and you get a new class in the system at all if you want a new method the same. It has a nice command line thing and the whole library of classes is targeted at scripting so it makes it really easy to automate stuff and basically to use like you would use Ruby or Python on your machine. So yeah and there is packaging format that makes it easy to load code in your image. And yeah the maintainer just told me last night that CSIDE was ported and works on it too so that's really cool. So basically we wrote the books quick by example to explain all the tools, the syntax, how you work with the system because it's different and well when you don't have anyone to explain you it's a little confusing. The book is available for free on the website, you can download the PDF. If you don't want to print it yourself you can buy it too. We make barely no profit on this and the profit goes to the small talk user group to organize conferences and promote small talk events. So yeah this is the script website. There is a channel on FreeNode if you need help or want to discuss things and the CSIDE website, the small talk website too. Thank you.