Planet Smalltalk

December 21, 2014

Pharo Weekly - New release of Dr Geo

Dear fellow pharoers,

I am please to announce release 14.12[1] of Dr. Geo is ready for

Main changes appeared in the script system:

- script becomes first class citizen, understand defined as a Smalltalk
class; script calculus/side effect is defined in the #compute method,
– when building a script, the user first dictates the expected argument
– when using a script, only objects matching these argument types are
– the argument sent to a script instance are of type Costume, those from
a script you can modify the visual property of the arguments (i.e.
objects in the sketch),
– a script menu is now present to quickly use a script (as for
– the script system is incompatible with the previous one, sketch using
script need to be rewritten.

Thanks to read



December 19, 2014

ESUG news - Smalltalk Reflections Podcast

Smalltalk Reflections is a weekly podcast discussing the Smalltalk programming language:

Already 3 episodes online!

Mariano Martinez Peck - What is GemStone? Part 2

A bit on GemStone history

When talking about Smalltalk, one of the advantages always mentioned is its “maturity”. In the previous post, I commented some GemStone features. If you read them carefully, it seems like if we were talking about a modern technology that couldn’t have been possible years ago. Wrong!!!!  GemStone Systems was funded in 1982 and I think the first release was a few years after. Of course, not all the features I commented exist back then, but nobody can discuss it’s history. That means that when using GemStone not only you will be getting the “maturity” of Smalltalk, but also it’s own maturity as an object database.

For a long time, GemStone was owned and developed by GemStone Systems. In 2010, VMWare acquired GemStone Systems. However, later on, in 2013, GemStone and all other Smalltalk products were acquired by a new company called GemTalk Systems. I don’t know all the details (if you want, you can check them online)… but what I think that matters most is the fact that now GemTalk Systems has all GemStone engineers working, it does not depend on higher companies decisions (like VMWare) and is 100% focused in Smalltalk!

If you want to have a look at a general overview of the company and the impact of their products, I recommend the slides of this presentation.

Why GemStone is even more interesting now than before?

Just in case… I will clarify again: in these posts, I always give my opinion. Not everybody should agree with me.

Let’s go back some years ago. At that time, a few things happened:

  1.  Most of the developed apps were fat desktop and GemStone did not have a UI nor an IDE to develop.
  2. There was no good open-source and business friendly Smalltalk (I said it was my opinion!).
  3. GemStone did not have a free license.

The above things meant that someone developing a fat client app would require two Smalltalks: one for the UI and GemStone as the database. That also meant paying two licenses, one for the commercial Smalltalk for the UI and one for GemStone. And that could have been expensive for certain uses. However, things have changed in the recent years:

  1. Most apps are now web based so we do not need a fat UI.
  2. There is a very cool open-source and business friendly Smalltalk: Pharo.
  3. Gemstone does offer a free license with generous limits (in future posts, I will explain better the limits).

That means that you can develop a whole web app in Pharo, put the code in Gemstone and run it from there. And… paying no license (with GemStone free license limits). This is why I think GemStone is even more interesting now than it was ever before.

A bit more about fat client vs web based

When using an app with fat client and GemStone as object database, we actually have two Smalltalk communicating with each other. It is not like “I develop in Smalltalk Whatever and I deploy in GemStone”. No… it is both, Smalltalk Whatever and GemStone running and each of them is communicating to each other. This means there must be some connection or some kind of mapping/adaptor between the two, because both can have some differences in the kernel classes. This kind of software is what GemTalks Systems sells as “GemBuilder”. So we have “GemBuilder for VisualWorks” and “GemBuilder for VisualAge” etc… I have never used these products so I can’t talk much about them.

Just a last comment. Of course, building a GemBuilder for a Smalltalk dialect seems “easy” in the sense that GemStone is also a Smalltalk. But what if there were GemBuilders for other languages so that these can use GemStone as the object database?  Well, there is also a “GemBuilder for Java“. This tell us a little about the internal GemStone architecture (the object repository process is a bit decoupled from the VirtualMachines running the language). But we will see this later.

What do people mean by “Develop in Pharo and deploy in GemStone”

In a very first step, an app could be both developed and deployed in Pharo. That means we use Pharo tools to develop it and we also use Pharo to run our application in production. This may work well enough for small apps or a prototype. But, at some point, we may need more power. As I discussed in the previous post, there are many alternatives. Not all solutions are available for all situations. The solution I am interested in this post is to directly run (deploy) your app in GemStone. Which are the requirements? The app cannot be fat client (in Pharo, this means the app should not be a Morphic app). It could be either a web app or a rest server or whatever form that doesn’t involve a fat UI.

In fact… I guess you could even use GemStone as your backend language and database and provide a REST api answering JSON or whatever to a mobile app (maybe even using Amber??? I don’t know…).

With this alternative, the idea is to develop in Pharo. Then… we simply load our code (using Metacello, Git, Monticello, whatever) into GemStone and we run it there. Hence, “develop in Pharo and deploy in GemStone”. Of course… all the code we have developed in Pharo may not work perfectly in Gemstone or it may behave a little bit different. So some adjustments and work will likely must be done when making the app to work in GemStone besides Pharo. But we will talk about this in a future post.

Most of the times, the app continues to be able to be run by Pharo (besides developing with it). So you can likely continue to develop, run, test and debug your app locally with Pharo. And then periodically you deploy and test it in GemStone.

To sum up

I hope I have clarified a bit the different scenarios when using GemStone and what people mean when they say “develop in Pharo and deploy in GemStone”. All my posts from now onward will take this scenario in mind.

See you soon,

Tagged: GemStone, Pharo, Smalltalk

Pharo Weekly - HTML2PDF

Need an easy way to convert HTML into PDF for printing? The project can help you here.

If you want to use it from Pharo just check out:!/~TorstenBergmann/WKHTML2PDF

This project allows you to easily use the library. First select the

HTML2PDFConverter useExecutable.


HTML2PDFConverter useLibrary.

and then convert:

convert: ‘’
toFile: ‘pharo.pdf’

to get a printable version of the Pharo homepage. As ever docu is on the
STHub project website.

It uses NativeBoost to call the library and OSProcess to call the


Benoit St-Jean - Trachel

Trachel est une librairie pour Pharo fournissant un API permettant de dessiner et créer des éléments graphiques de base.

Circonscrite dans 7 simples concepts (Shapes, Canvas, Camera, Events, Callback, Focuses), la librairie Trachel diffère des autres librairies graphiques en ce sens qu’elle incorpore le concept de caméra en plus des fonctionnalités habituelles des librairies graphiques.

Classé dans:Smalltalk Tagged: API, graphique, librairie, Pharo, Smalltalk, Trachel

Benoit St-Jean - Woden

Woden est un graphics engine (quelqu’un a une meilleure traduction que bibliothèque graphique à me suggérer?) écrit pour Pharo.  Ce projet vise surtout une clientèle intéressée par les applications multimédia et les jeux vidéo.

Des vidéos de ce que Woden peut faire ici et ici.  Certains remarqueront un petit côté Minecraft dans une partie de la seconde démo!

D’autres vidéos de Ronie Salgado sont accessibles ici.

Classé dans:Smalltalk Tagged: engin, graphics engine, graphiques, jeux vidéos, multimédia, Pharo, Ronie Salgado, Smalltalk, visualisation, Woden

Nicolas Petton - No, I'm no doing any Smalltalk anymore

December 19, 2014

... at least for now!

Since I decided to step down as Amber maintainer, several colleagues and friends have asked me why I wasn’t doing any Smalltalk anymore, some urging me to get back on track.

This is an attempt to explain why I’m currently not doing any Smalltalk.

Read the full post.

Benoit St-Jean - WKHTML2PDF

Un nouveau package de Torsten Bergmann sur SmalltalkHub : WKHTML2PDF.

Ce package pour Pharo utilise l’outil wkhtmltopdf pour convertir des pages HTML our des URL en format PDF.  L’annonce en a été faite ici.

Notez ce package utilise NativeBoost ainsi que OSProcess.

Classé dans:Smalltalk Tagged: conversion, HTML, NativeBoost, OSProcess, PDF, Pharo, Smalltalk, SmalltalkHub, Torsten Bergmann, URL, WKHTML2PDF

Torsten Bergmann - WKHTML2PDF for Pharo

Want to use from Pharo to convert HTML pages or URLs to PDF?

Then read more here and checkout the project on STHub. You can also load it from the config browser in Pharo 4 beta.

Benoit St-Jean - Smalltalk Digest de décembre 2014

L’édition de décembre de Smalltalk Digest est maintenant disponible!

Classé dans:Smalltalk Tagged: 2014, Cincom, décembre, Smalltalk, Smalltalk Digest

December 17, 2014

Torsten Bergmann - Another Smalltalk Book in 2015

ESUG news - New Smalltalk book: Programming Smalltalk

A new book about Smalltalk will be released March 2015:

Programming Smalltalk - Object-Orientation from the Beginning: An introduction to the principles of programming by Johannes Brauer

on Amazon

" A straightforward, step-by-step introduction to clear and elegant object-oriented programming. Using a language that's perfect for this kind of programming, the book has been tested in numerous courses and workshops over ten years.

Programming Smalltalk is particularly suited for readers with no prior programming knowledge. Starting from the first principles of programming, it teaches you how to use and create algorithms (reusable rules for problem-solving) and the basic building blocks of software. It goes on to explain how to develop complete applications and has a whole chapter on web applications as well as case studies.

Now translated into English, this edition was completely revised to be consistent with the latest version of Cincom® VisualWorks®, a professional Smalltalk environment. All examples were created using VisualWorks, which is available without cost for educational purposes, and can be downloaded and installed on any up-to-date computer. "

Torsten Bergmann - New Collections for Pharo

There is a package to introduce new kind of collections. Lets see how this moves forward.

Benoit St-Jean - Un autre carrefour

Il existe un autre carrefour pour les projets Pharo : PillarHub.  Allez-y jeter un coup d’oeil!

Classé dans:Smalltalk Tagged: Pharo, PillarHub

Benoit St-Jean - L’Ebola et Smalltalk

Pendant qu’on n’en parle pas, l’Ebola continue ses ravages : 6841 décès et 18464 personnes contaminées en date d’aujourd’hui…

Dans un effort de la communauté internationale de cerner le problème, plusieurs projets de simulation et de modélisation de la propagation ont débuté…

Smalltalk et Pharo se sont également mis à la tâche avec Kendrick, un outil de modélisation épidémiologique mathématique basé sur Moose, Roassal et PetitParser (Moose4Ebola).

Classé dans:Smalltalk Tagged: épidémiologie, Ebola, Kendrick, mathématique, modèle, Moose, Moose4Ebola, PetitParser, Pharo, propagation, Roassal, simulation, virus, visualisation

December 16, 2014

Benoit St-Jean - ESUG 2014

Tous les vidéos des conférences de ESUG 2014 sont maintenant disponibles ici.

Classé dans:Smalltalk Tagged: conférences, ESUG 2014, European Smalltalk User Group, présentations, vidéos

ESUG news - Smalltalks 2014 Videos

The videos for Smalltalks 2014 are now online here

Torsten Bergmann - Smalltalk2014 videos

Craig Latta - Smalltalk Reflections episode three is up

Benoit St-Jean - Quel Smalltalk?

December 14, 2014

Ricardo Moran - Robotics as a way of getting students closer to mathematical thinking

Today I’d like to share with you a fragment of “A Mathematician’s Lament”, by Paul Lockhart.

So how do we teach our students to do mathematics? By choosing engaging and natural problems suitable to their tastes, personalities, and level of experience. By giving them time to make discoveries and formulate conjectures. By helping them to refine their arguments and creating an atmosphere of healthy and vibrant mathematical criticism. By being flexible and open to sudden changes in direction to which their curiosity may lead. In short, by having an honest intellectual relationship with our students and our subject.

I think this post’s title and the cited fragment speak by themselves.

You can read the full piece here.

Hoy me gustaría compartir con ustedes un fragmento de “El lamento de un matemático”, escrito por Paul Lockhart.

De modo que ¿cómo deberíamos enseñar matemáticas a nuestros estudiantes? Escogiendo problemas naturales e interesantes, que vayan con sus gustos, personalidades y nivel de experiencia. Dándoles tiempo para hacer descubrimientos y formular conjeturas. Ayudándoles a refinar sus argumentos y creando una atmósfera de crítica matemática sana y saludable. Siendo flexibles y abiertos a cambios súbitos en la dirección a la que apunte su curiosidad. En resumen, manteniendo una relación intelectual honesta con nuestros estudiantes y las matemáticas.

Creo que el título de este post, en conjunto con el fragmento citado, hablan por sí solos.

Pueden leer la pieza entera acá


Andres Valloud - Smalltalks 2014 videos now available

All Smalltalks 2014 videos are now available here.  Enjoy, and happy holidays!

Mariano Martinez Peck - What is GemStone?

What is GemStone

When you ask a Smalltalker what Smalltalk is, you will find many different answers: a language, an environment, an object system, a platform or simply a combination of all of those or more. With GemStone, I have a similar feeling. I think different people will answer differently. To me, GemStone is an object system with two big concepts included: an object database and a language. Others will say that it’s a transactional or persistent Smalltalk, an object database, etc.

Before continuing, let me clarify a few things for this post and all the posts I will write after this one:
– I will not be discussing here relational databases vs object databases vs NoSQL. That’s a whole other discussion that I am not willing to write about right now.
– These posts are aimed mostly for Smalltalkers and GemStone newbies, but not for GemStone experts.

Ok…that being clarify…let’s start. When I refer to an object database, I mean exactly that: an Object Database Management System. Rather than dealing with tables as in relational databases, we can directly persist and query objects. Most of the OODB I have seen in other languages, are kind of an external piece of software that is only a database (just as relational databases are). For the moment, just imagine any of the relational databases you know but storing objects instead. In this case, you still need a language (and probably a VM running that language) for your application logic and you still must communicate to the database to perform the storage and retrieval of objects. I know… that should already be easier than dealing with relational databases but I personally think it could be better.

GemStone goes a step forward. What if the “database” would also include the language to run your application? Sounds cool, doesn’t it? So, this is the second concept GemStone has: it’s also a language implementation in itself. And which language? Smalltalk, of course!!! This means GemStone IS a Smalltalk dialect, just as any other dialect like Pharo, Visual Works, VisualAge, etc. So… GemStone is a Smalltalk dialect but also acts as an object database. You might be thinking “any Smalltalk can act as an object database because we have image persistency”. Fair enough. However, image persistency lacks lots of needed features to be a really scalable database (we will talk about this in other posts).

GemStone analogy to an image-based Smalltalk

As I said, the aim of these posts is to explain GemStone in a way that most readers can get it. And sometimes a good way to do so is by making a comparison to what we already know. So… let’s take an example with Pharo. Say we have one application running in one image. Soon, one image can start to be too little power and we need to scale. Smalltalk is cool and allow us to run the very same image with N number of VMs. Ok… so now we have 10 VMs running our app. Imagine this app needs persistency (as most apps do). If the database is outside Pharo (say a relational DB, NoSQL, etc), then we have no problem since the access to the database from multiple images will be correctly synchronized. But would you be allowed to use image persistency in this scenario? Of course not, because it’s not synchronized among all the VMs. But hell… that would be nice, wouldn’t it?

GemStone offers exactly what I would like: multiple (hundreds) Smalltalk VMs running and sharing the same “image” (repository/database of objects) in a synchronized fashion.

Note, however, that GemStone does NOT have a UI (it is headless) nor development tools (no IDE). So you still need another Smalltalk to develop your app code. And this is why the Pharo / GemStone combination is so great. But I will talk about this in another post.

To sum up

So you are the happiest programmer on the block. Your language has closures (have you ever try to imagine not using closures again???), an amazingly simple syntax, a small learning curve, decades of maturity, serious open-source and free dialects available, etc. Now I tell you can literally run hundreds of Smalltalk VMs all sharing the same repository of objects. But not only that… also imagine not having to write a simple mapping to SQL. Imagine that saving an object in the database is just adding an object to a collection (“clientList add: aClient”) and a query as a normal select (“clientList select: [:each | each age = 42 ]”). BTW… Did someone notice that, apart from selecting via an instance variable (‘age’ in this example), I can also send other domain specific messages? Say…. “clientList select: [:each | each associatedBankPollicy = BankPolicy strict ]”.

Ok, you might still not be convinced. What if I also tell you GemStone supports:

  • Multiple-user database support
  •  Indexes and reduce conflict Collection classes
  • Distributed env (imagine that your hundred VMs can also be running in different nodes!
  • Fault tolerance
  • Security at different levels (even at object level)
  • 64 bits VMs and multi-cpu VMs
  • Free license with generous limits

Ok…too much info for today. As you can note, I am very happy with these technologies so I will try to be objective… but I cannot promise you anything hahaha! I hope I have provoked and intrigued you enough to read on the future posts.

Stay tuned,

Tagged: GemStone, Smalltalk

December 13, 2014

Benoit St-Jean - RMapViewer

RMapViewer est un outil de chimie computationnelle permettant d’étudier l’isomérie de visualiser le comportement des réactifs. Le projet nécessite Pharo et est sur SourceForge ici.

Classé dans:Smalltalk Tagged: chimie, isomérie, Pharo, réactifs, réactions, RMapViewer, Smalltalk

Benoit St-Jean - GetOpt

Vous utilisez une foule d’arguments quand vous votre application (ou Pharo) démarre? Il existe (un autre!) package pouvant vous faciliter la tâche dans ce domaine : GetOpt.

Prenez toutefois note que ce package n’est fonctionnel que pour la version 3.0 de Pharo!

Classé dans:Smalltalk Tagged: arguments, GetOpt, ligne de commande, Pharo, Smalltalk

Benoit St-Jean - Diagrammes de Voronoï

Si votre application requiert des diagrammes de Voronoï et que, par chance, vous utilisez Pharo, ne désespérez pas!

Roassal possède maintenant un outil appelé RTVoronoyjDiagram développé par Natalia Tymchuk!

On peut trouver les 2 vidéos de sa présentation Mr. Voronoyj joins Roassal ici : première partie et deuxième partie. 2

La présentation slideshare utilisée dans les vidéos est disponible ici.

Mais au fait, qui était Gueorgui Voronoï ?



Classé dans:Smalltalk Tagged: décomposition de Voronoï, diagramme, Gueorgui Voronoï, mathématiques, Natalia Tymchuk, partition de Voronoï, Pharo, polygones de Thiessen, polygones de Voronoï, Roassal, RTVoronoyjBuilder, RTVoronoyjDiagram, Smalltalk, tesselation de Dirichlet, visualisation, Voronoï, Voronoyj

Benoit St-Jean - HoneyGinger

Si l’hydronamique vous intéresse et que vous avez besoin d’un outil pour simuler le flux de fluides avec la méthode SPH (Smoothed particle hydrodynamics), il existe HoneyGinger. C’est un outil interactif disponible sur Squeaksource ici.

Classé dans:Smalltalk Tagged: hydrodynamique, Pharo, simulation HoneyGinger, Smalltalk, Smoothed particle hydrodynamics, SPH, Squeak

Benoit St-Jean - Smalltalk et… l’art!


Un petit billet (en anglais) qui nous rappelle que bien avant Windows, Apple et tout ce que nous prenons aujourd’hui pour acquis, il y avait surtout Smalltalk et la joyeuse bande de rêveurs (fous?!?) du centre de recherche PARC de Xerox

Que ce soit de façon directe ou indirecte, les recherches qui portaient sur Smalltalk à l’époque ont eu des conséquences importantes dans nos vies actuelles.

C’est grâce à Smalltalk qu’aujourd’hui nous avons la téléprésence, la souris, le multimédia, les interfaces usager graphiques (GUI, on pense surtout aux fenêtrage de style Windows avec tout ce que ça suppose : fenêtre, onglets, menus, menus popup, raccourcis clavier, barres déroulantes, curseur de souris, les fontes, copier/coller/couper, éditeur graphique, etc), les tablettes (Dynabook), l’hypertexte, les fenêtres multiples, le concept du desktop, le concept de WYSIWYG (What You See Is What You Get), etc.

Tout le monde a entendu mille fois l’histoire de Steve Jobs qui a eu une révélation en assistant à une démo de Smalltalk chez PARC à l’époque.  On connait maintenant l’importance que ce bref moment allait avoir sur la vision de Steve Jobs et sur l’avenir de l’informatique et du multimédia!

Nous savons maintenant que Susan Fox, une artiste américaine, a elle aussi été marquée par Smalltalk à l’époque.

Classé dans:Smalltalk Tagged: Apple, art, barres déroulantes, coller, copier, couper, curseur, desktop, Dynabook, fenêtres, fontes, GUI, hypertexte, interface usager graphique, menus, multimédia, onglets, Palo Alto, PARC, Smalltalk, souris, Steve Jobs, tablettes, téléprésence, Windows, WYSIWYG, Xerox

Benoit St-Jean - VisualWorks 8.0 et ObjectStudio 8.6

Les toutes nouvelles versions de ces deux environnements de développement Smalltalk (VisualWorks et ObjectStudio) sont maintenant disponibles!  De quoi meubler vos temps libres pendant la période des Fêtes!

Classé dans:Smalltalk Tagged: Cincom, ObjectStudio, Smalltalk, VisualWorks

December 12, 2014

Pharo Weekly - HTML5 output for Roassal


We have worked very hard on a Roassal exporter for the Web.

Milton has produced the class RTHTML5Exporter, which may be simply invoked as: RTHTML5Exporter new export: aRoassalView.

Check this out:

Try moving the mouse above the circle or dots in the curve.

The html file you see from your web browser is the result of do-iting the following expression:
| c b c2 |
c := RTComposer new.

b := RTGraphBuilder new.
b view: c view.
b edges
connectFrom: #superclass;

b edges
if: [ :fromClass :toClass | toClass name beginsWith: ‘TR’ ];
connectTo: #dependentClasses;
color: (Color blue alpha: 0.3).

b nodes
if: [ :cls | cls name beginsWith: ‘RT’ ];
color: Color blue.
b nodes
color: Color red.
b layout cluster.

b global
normalizeSize: #numberOfMethods min: 5 max: 40 using: #sqrt;
alphaColor: 0.4.

b addAll: TRShape withAllSubclasses, RTShape withAllSubclasses.

b build.
c group.

c2 := RTCharterBuilder new.
c2 view: c view.

c2 interaction popup.
c2 extent: 300 @ 200.
c2 points: (RTShape withAllSubclasses sortedAs: #numberOfMethods).
c2 connectDotColor: Color blue.

c2 points: (TRShape withAllSubclasses sortedAs: #numberOfMethods).
c2 stackX.
c2 allY: #numberOfMethods.
c2 connectDotColor: Color red.

c2 axisX.
c2 axisY.
c2 build.
c group.

c layout: RTVerticalLineLayout new.
c propagateHighlightToAll.

legend := RTLegendBuilder new.
legend view: c view.
legend addText: ‘This is a demonsration of a combination of builders’.
legend addText: ‘The above visualization shows the dependencies between Roassal and Trachel shapes.’.
legend addText: ‘Curves indicate the distribution of the number of methods’.
legend build.

RTHTML5Exporter new export: c view.
c view