Planet Squeak

blogs about Squeak, Pharo, Croquet and family
planet squeak - planet squeak es - planet squeak jp - planet croquet - planet squeak code - planet smalltalk

May 23, 2018


[Ann] New iceberg videos!

Hi all,

This time (just before releasing a new version of iceberg) I wanted to share some videos with you. Feedback is welcome.

!! How to contribute to Iceberg

This video shows how to contribute to iceberg.
For this, you should update your iceberg installation and then just do a pull request.
This means that you need to start by forking

- Path 1: Clone and pull (easy)
  - Clone your fork
  - Checkout the latest development branch (e.g., dev-0.7)
  - Pull from pharo-vcs/iceberg

  This path does not always work, as this is kind of self-brain surgery. Iceberg is updating itself. If this does not work, go to path 2

- Path 2: Install from scratch (if Path 1 does not work)
  - Use the script in the README file to unload and reinstall iceberg
  - Make sure you use the latest development branch in the Metacello script (e.g., dev-0.7)
  - Clone your fork and checkout the development branch

Once you have the correct version, you can load the tests by loading the development group of the baseline.

!! Basic Branching and Merging

This video shows in a simple example how to branch, merge and checkout different commits. In this video we first create a new class with a method, then we create another branch and force a conflict. We resolve the conflict during merge.

In the middle, bonus feature, we checked out a commit and stayed in
Detached HEAD for a while ;)

!! Loading a baseline from your repository

This video shows how to load a baseline from Iceberg's UI.
We clone an existing project, see it is "Not loaded" and use Metacello plugin to load the default group.


PS: Tomorrow I'll answer the threads about Iceberg that were going around
here in the mailing list. I was running today.

by Stéphane Ducasse at May 23, 2018 07:24 PM

Torsten Bergmann

Pharo 7 on SqueakJS (demo)

With some tweaks mostly related to FFI and fonts, we are able to run Pharo 7 on SqueakJS VM. Read more or try out directly in your web browser.

by Torsten ( at May 23, 2018 06:06 AM


PngSuiteExplorer is a simple tool to test the support for PNG files in Pharo using the "official" test-suite for PNG.

by Torsten ( at May 23, 2018 06:03 AM

May 20, 2018

Pierce Ng

SQLite Boolean

From its documentation, SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).

I've added Boolean handling to UDBC-SQLite. When writing to an SQLite database from Pharo, true is written as integer 1 and false as integer 0. SQLite uses dynamic typing, and any column in an SQLite database, except an INTEGER PRIMARY KEY column, may be used to store a value of any type, irrespective of the column's type declaration. As such, when writing Boolean values to a database, UDBC-SQLite does not check the database's type declaration.

When reading an SQLite database, UDBC-SQLite does check a column's type declaration: If a column is Boolean, UDBC-SQLite reads 1 as true, 0 as false, NULL as nil, and any other integer values raises an exception. I've encountered real world data where the string "t" means true and "f" means false for a Boolean column, so UDBC-SQLite handles these cases too.

Glorp has been similarly updated. Loading GlorpSQLite, from my development fork for now, installs both UDBC-SQLite and Glorp:

Metacello new
  repository: 'github://PierceNg/glorp-sqlite3';
  baseline: 'GlorpSQLite';

All Glorp unit tests should pass. Tested on Linux using fresh 32- and 64-bit 60540 images.

by Pierce Ng at May 20, 2018 02:27 PM


Compiling squeak.cog.spur/build on FreeBSD 11 amd64

After some hacking, I can invoke squeak and get some version info
As I get time, I will continue hacking on this and as time permits, I will work with whoever is interested.
Process I am following is as follows
git clone
cp -Rv build.linux64x64/ build.freebsd64x64
cd build.freebsd64x64/squeak.cog.spur/
[create backup copies of original plugins.* and build/mvm
cp ; cp plugins.ext plugins.ext.orig
cp build/mvm ./
[hack,baby hack!]
reduce to minimal (I blogged on this a couple of years ago: )
AsynchFilePlugin \
B2DPlugin \
BitBltPlugin \
after some hacking, I reduced plugins.ext to this:
B3DAcceleratorPlugin \
SqueakFFIPrims \
LocalePlugin \
UnicodePlugin \
UnixOSProcessPlugin \
UUIDPlugin \
ImmX11Plugin \
modified mvm to this (note the FreeBSD addition to the case statement, the addition of libiconv and the –without–vm-sound-FOO)
#!/usr/bin/env bash
set -e
# Spur VM with VM profiler and threaded heartbeat
case $(uname -s) in
           CFLAGS=”$CFLAGS -I/usr/local/include”
           LIBS=”$LIBS -lexecinfo”
           LDFLAGS=”$LDFLAGS -L/usr/local/lib”
           CFLAGS=”$CFLAGS -I/usr/local/include”
           LIBS=”$LIBS -lexecinfo -liconv”
           LDFLAGS=”$LDFLAGS -L/usr/local/lib”
if [ $# -ge 1 ]; then
        INSTALLDIR=”$1″; shift
echo -n “clean? “
read a
case $a in
n|no|N|NO)      echo “ok but this isn’t safe!!”;;
*)                      test -f Makefile && make reallyclean
test -f || (test -f ../ && cp -p ../ . || cp -p ../../ .)
test -f plugins.ext || (test -f ../plugins.ext && cp -p ../plugins.ext . || cp -p ../../plugins.ext .)
test -f config.h || ../../../platforms/unix/config/configure –without-npsqueak \
                –with-vmversion=5.0 \
                –with-src=spur64src \
                –without-vm-sound-MacOSX \
                –without-vm-sound-Sun \
                –without-vm-sound-custom \
                –without-vm-sound-ALSA \
        TARGET_ARCH=”-m64″ \
        CFLAGS=”$CFLAGS” \
        LIBS=”$LIBS” \
rm -f vm/sqUnixMain.o # nuke version info
rm -rf ../../../products/$INSTALLDIR
# prefer make install prefix=`readlink -f \`pwd\`/../../../products/$INSTALLDIR`
# but older linux readlinks lack the -f flag
make install-squeak install-plugins prefix=`(cd ../../../;pwd)`/products/$INSTALLDIR 2>&1 | tee LOG
./mvm  (it will error out trying to build sound plugins even though I put those –without-vm-sound-foo thingies in)
make[1]: stopped in /usr/home/timmy/usr/src/opensmalltalk-vm/build.freebsd64x64/squeak.cog.spur/build/vm-sound-ALSA
edit the Makefile and search for “sound”
modify LIBS
LIBS=           -luuid -lutil -lpulse-simple -lasound  -lm  -lexecinfo -liconv
LIBS=           -luuid -lutil  -lm  -lexecinfo -liconv
PLUGINS_LA      =  vm-display-X11${la} vm-display-null${la} vm-sound-ALSA${la} vm-sound-NAS${la} vm-sound-OSS${la} vm-sound-null${la} vm-sound-pulse${la} B3DAcceleratorPlugin${la} SqueakFFIPrims${la} LocalePlugin${la} UnixOSProcessPlugin${la} UUIDPlugin${la} ImmX11Plugin${la} XDisplayControlPlugin${la}
becomes :
PLUGINS_LA      =  vm-display-X11${la} vm-display-null${la}  B3DAcceleratorPlugin${la} SqueakFFIPrims${la} LocalePlugin${la} UnixOSProcessPlugin${la} UUIDPlugin${la} ImmX11Plugin${la} XDisplayControlPlugin${la}
(Why are the –without-vm-sound–… directives ignored?)
type make.
it compiles.
but the ‘getversion’ program barfs a bit (probably UUID problemvi M):
VM_RELEASE: $CommitHash$
VERSION_TAG: 5.0-$CommitHash$
VERSION_NUMBER: 5.0.$CommitHash$
DEFAULT_IMAGE_NAME: squeak.image
timmy@dpdev1:~/usr/src/opensmalltalk-vm/build.freebsd64x64/squeak.cog.spur/build %
and the resulting products output reflects that:
tree sqcogspur64linuxht/
|– bin
|   `– squeak
|– lib
|   `– squeak
|       `– 5.0-$CommitHash$
|           `– squeak
`– squeak
hack some more, renaming the lib/squeak/5.0
mv 5.0-\$CommitHash\$/ 5.0
check the executable:
file 5.0/squeak 5.0/squeak: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/, for FreeBSD 11.1, FreeBSD-style, not stripped
invoke it and check version (outputs as at the beginning of the post)
try to run it..
../opensmalltalk-vm/products/sqcogspur64linuxht/lib/squeak/5.0/squeak Squeak5.1-16548-64bit.image -headless
squeak: could not find any display driver
Abort (core dumped)

by timothy at May 20, 2018 07:38 AM

May 19, 2018


PharoContributor videos

Pharo contributor is a simple tool to help you contributing to Pharo.

now provides two videos demonstrating how this tool can be used as an alternative to easily contribute to latest Pharo 7



by Stéphane Ducasse at May 19, 2018 06:17 PM

Call for new GC testers

Hi all.

We’ve been working on a GC with lower pause time recently and we are looking for people working with images over 2 Gb to tune it (Deployed applications, not interested in quick hacks). We can sign NDAs if required.

Companies and people helping us will be guaranteed that the GC about to be deployed will be fine-tuned for the use-cases they provided. To evaluate and tune it properly, we need three kind of use-cases (>2 Gb):

– an image growing from a small size to a large size

– an image performing random accesses on objects on a large heap

– an image decreasing memory

The best would be for us 3 DoIts performing the 3 examples with low dependencies aside from the image so we can reproduce easily.

Clément Bera <>

by Stéphane Ducasse at May 19, 2018 05:52 AM

May 18, 2018


[Ann] OSSubprocess 1.0.0

Hi all,

News from the OSSubprocess side. For those who do not know it, OSSubprocess is the library to call external processes from Pharo.

These are the main points of this release.

- 64bits support
- Issues Working on both Pharo 6 and 7
- Issue #34: Adding tests to validate that the return code is correctly handled
- Issue #27: Cleanup: remove OSSubprocess-Tests package
- PR #26: Add stress tests

This version works for Pharo >=6. Users of Pharo5 will need to stick with v0.2.5, because of non-compatible changes in uFFI (required mostly for 64 bits).

- We moved the repository to pharo-contribution to remove pressure from Mariano for releases and integrations
- We updated the configuration in the catalog
- We decided to move to a 1.0.0 versioning schema because 0.* does look like the library is not stable and it actually is (We have been using it in pillar and iceberg for quite some time).

You can load this version from the catalog or using with:

Metacello new
   baseline: 'OSSubprocess';
   repository: 'github://pharo-contributions/OSSubprocess:v1.0.0/repository';

Detailed changes log in

If you have any issues (or PR!), we wait for your issue entry in

Have a nice weekend,

Guille Polito

Research Engineer

by Stéphane Ducasse at May 18, 2018 06:15 PM

Torsten Bergmann

Alternative Pharo-contributor tool explained with videos now provides two videos demonstrating how this tool can be used as an alternative to easily contribute to latest Pharo 7

Video 1:


and Video 2:

by Torsten ( at May 18, 2018 10:43 AM

May 17, 2018

Torsten Bergmann

Pillar Techtalk

by Torsten ( at May 17, 2018 04:30 PM

May 08, 2018


[Ann] Containers-UniqueOrdered


Just a short notice to announce a newcomer to the Containers project. Now we have OrderedSets or UniqueOrderedCollection.

Stef (talking less Pharoing more)


by Stéphane Ducasse at May 08, 2018 08:48 PM

[ANN] OSC and TUIO on github


A short notice to announce that OSC and TUIO smalltalkhub packages are now available at

Stef (talking less pharoing more)


by Stéphane Ducasse at May 08, 2018 08:38 PM

Torsten Bergmann

Intelligent System Construction

Video from latest tech talk of PharoClub: Intelligent System Construction by Alexandre Bergel

by Torsten ( at May 08, 2018 07:51 AM

May 07, 2018


[ANN] TelescopeCytoscape for Seaside v1.0.0


Telescope is an engine for efficiently creating meaningful
visualizations. It allow users to create models of visualizations and to
render them via connectors to visualization frameworks.

Until now, it was hosted on SmalltalkHub and we just migrated it to Github.

We also finished the v1.0.0 of the CytoscapeJs
( Telescope connector. It is build on top of
Seaside to use visualizations as components.

You can find the project at:

And a demo at:

Cyril Ferlicot

by Stéphane Ducasse at May 07, 2018 06:53 PM

30/4-6/05 Esteban ChangeLog


This is my weekly ChangeLog, from 30 April 2018 to 6 May 2018.
You can see it in a better format by going here:


3 May 2018:

*    I took some time to polish a long time waiting PR: [](, which finally 
    closed [case: 20878]( and incidentally cleaned up some dependencies with old Compiler we no longer need. 
    Not bad :)
*    I spent last 5 working days working on a change on metacello that I thought it was going to be just a morning. 
    Considering murphy's law of estimations, I'm still 5 days early ;)
    ... but I'm not done (even if PR is working, you can see it [here](, 
    I'm waiting for some feedback from Dale (there are some problems on gemstone side and I need help for it).
    Anyway. this PR basically makes tonel format available even when declaring +filetree://+ repositories (+filetree://+
    now is just a declaration of "smalltalk format", not binded to +cypress+ as before). 
    This should provide backward compatibility on baselines (who can still be declared with +github://+ etc. protocol) and 
    makes tonel format available up to Pharo 3.0 versions (since it does not depends on iceberg presence anymore).


by Stéphane Ducasse at May 07, 2018 06:48 AM

May 06, 2018


[ANN] Heimdall logging manager for Seaside v1.0.0


Guillaume Larcheveque begun a simple login manager for Seaside.

I just finished to port it to github and we released the v1.0.0.

It is still experimental and help is welcomed.

Project can be found at:

Cyril Ferlicot

by Stéphane Ducasse at May 06, 2018 06:52 PM

May 05, 2018


[ANN] PrismCodeDisplayer for Seaside v1.0.0


We just finished the release v1.0.0 of PrismCodeDisplayer for Seaside.

Prism ( is a lightweight, robust,
elegant syntax highlighting library.

The Seaside binding allows to:
    Display code
    See line numbers
    Select code and act on the selection
    Customize the style of some text intervals
    Add links to text intervals
    Add a search feature
    Have a dynamic loading of the text content
    Copy the text content
    Have a minimap

Project can be found at:

Demo at:

Cyril Ferlicot

by Stéphane Ducasse at May 05, 2018 06:51 PM

Book Update: Voyage


I published a new version of the Voyage booklet. It includes a pattern to support tests and description of excluded attributes.

Available at:


by Stéphane Ducasse at May 05, 2018 08:06 AM

May 04, 2018


[ANN] ChartJs for Seaside v1.0.0


I'm happy to announce the release v1.0.0 of ChartJs for Seaside.

This is a binding of ChartJs v1. We did not got the time to bind v2 of

v1.0.0 includes:
    Creation of 1D charts
    Creation of 2D charts
    Creation of Boxplots
    Callbacks on 1D and 2D charts
    Tooltips on charts
    Style customization

The project can be found at:

Demo at:

Cyril Ferlicot

by Stéphane Ducasse at May 04, 2018 06:50 PM

Torsten Bergmann

PrismCodeDisplayer for Seaside

A wrapper for PrismJS for Seaside web framework. Read more here or check the demo here.

by Torsten ( at May 04, 2018 03:52 PM

TelescopeCytoscape for Seaside

Telescope is an engine for efficiently creating meaningful visualizations using Seaside and Pharo. Now there is a connector for CytoscapeJs for Seaside. Read more here and a demo is here.

by Torsten ( at May 04, 2018 03:48 PM

Reproducible moldable interactions using Pharo and Bloc

A new inspector model in Pharo that records developer interactions as first-class entities and uses them to reduce repetition: this is part of "Reproducible moldable interactions" master thesis. You can directly jump to the PDF here. Note that the solution presented is implemented in Pharo using Bloc UI infrastructure.

by Torsten ( at May 04, 2018 02:56 PM

Pharo - "Containers" for collections and data structures

"Containers" - a project for alternate collections and data-structures for Pharo Smalltalk is now on GitHub. Read more

by Torsten ( at May 04, 2018 02:10 PM

ChartJs for Seaside

a binding of ChartJs for Seaside (the web framework running on Pharo). Read more
or try the demo here. Note that the demo link is different from what was originally announced.

by Torsten ( at May 04, 2018 02:08 PM


Willow-Mixpanel is now part of the ba-st Web Stack family. Read more.

by Torsten ( at May 04, 2018 01:55 PM

Grafoscopio Sucess Story

Grafoscopio is a moldable and versatile tool for that allows to mix prose, data, code, visualizations into interactive reproducible documents, raging from single notebooks to complete books. There is new success story availabe for it available on the Pharo homepage.

by Torsten ( at May 04, 2018 01:53 PM

Iceberg 0.7.5

the git tooling for Pharo is vailable and integrated into latest image of Pharo 7

by Torsten ( at May 04, 2018 01:49 PM


Containers now on github!

All the collections on earth do not have to be loaded in the default Pharo image!
Beside a small kernel, we should have well packaged, well tested and documented collections: Containers is this modular library.
This project is to collect, clean, test and document alternate collections and data-structures. Each package is modular so that users can only load the collection they need without 100 of related collections. The vision is to think modular.
“Containers” currently includes:
All packages follow the same structure
  • Containers-XXX,
  • have tests, examples,
  • class names start with CT,
  • They can be loaded without class names.

Underway development

External projects

Some existing data structure may want to be listed as part of Containers. It is easy I can create a package for them and package them to follow the conventions.


If you want to participate, you are welcome.
You can

S. Ducasse



by Stéphane Ducasse at May 04, 2018 08:26 AM

May 03, 2018


Iceberg 7.5

Time for the weekly Iceberg update.

Iceberg 0.7.5. will be in the next Pharo build.
Thanks to all brave users, issue reporters and contributors :).

Key improvements:
 - Several improvements in metacello integration. (see #625, #664, #688 +
more tests)
 - For those using CI, we think this release will also fix

Infrastructure improvements:
 - In 0.7.4 we introduced in the build tests againt pharo 6.1 and 64 bits
 - In 0.7.5 all iceberg tests run green on Pharo 6.1 32 bits
 - In the next release we plan to do a pass on 64 bits

** Pharo 6.1 backport **
 - We plan to backport this version to Pharo 6.1
 - Cyril has been using the development version of Iceberg on Pharo 6.1 for
a couple of weeks now.
 - This plus the green CI encourages us to backport to Pharo 6.1

Detailed ChangesLog:

#625 Non explicit error while loading a project
#758 [Regression] Repair action clone is not setting pharo repository
#756 Iceberg dev-0.7 is broken in Pharo6.1 (Instance of IceTipURLLabelMorph
did not understand #addEmphasis:)
#749 Adding repair actions to the code subdirectory missing problem
#655 Rename extension method buildToolbarItem of CommandActivator
#755 Extracting the URL label behavior as a component that we can reuse
#468 Commiting via Iceberg does not commit package removal
#750 Add possibility to see current commit in Repositories/Package view
#754 Showing and coping the Commit ID
#753 Create branch dialog layout is broken
#664 Package wrongly shown with "uncommited changes" status
#752 Add "invalid ssh"
#747 Cloning a Git repository should change the path with the project name.
#738 Remove "pharo" Repository with "also remove from filesystem" gives
#746 Make tests run on pharo 6
#735 Issue while registering a new project on Pharo 6.1
#733 Add license file
#740 Fogbugz panel: Improve label, focus order and layout
#549 IceRestoreRepositoryModel should have a class comment
#688 Duplicated project error when loading in a fresh image

Guille in behalf of all people that contributed :)

by Stéphane Ducasse at May 03, 2018 06:37 PM

May 01, 2018


ba-st Web Stack family gets a new member: Willow-Mixpanel and new releases


We're happy to announce a new member in the Web Stack family hosted at : Willow-Mixpanel

This is also a multi-release announcement of the following project versions:

   - Willow-Mixpanel <> v1.0.0
      - Provides Integration between Willow
      <> and the Mixpanel Javascript API
      making easy to send events directly from the browser
      - HighchartsSt <> v7.0.0
      - Updated Highcharts and Highstock JS libraries to version 6.0.7
      - Improved Importing Tools
      - Migrated sources to Tonel
      - Willow <> v8.0.2. Changes since
   latest announcement:
   - Migrate sources to Tonel format
      - Improve ScrollIntoViewCommand
      - Updated JQuery to 3.3.1
      - Improve libraries test cases to verify the file contents
      - Fixed Bug #108 <>:
      Senders of #identifier must ensure the component has assigned an id
      - Added FAQs to documentation
      - Added an easy way to add additional libraries to a WillowApplication
      - Added table footer support
      - Added to interaction interpreters:
         - show:whileCallingServerToRender: This will replace
         anIdentifiedWebView contents with aRenderable in the DOM
before doing the
         server call, and replace it again with the rendering obtained from the
         server call response
         - transform:into: This will replace anIdentifiedWebView content
         with aRenderable on the browser side

      - Willow-Bootstrap <> v8.0.2
   - Improve file deployment tests
      - Update datepicker plugin to v1.8.0
      - Migrated sources to Tonel format
      - Willow-JQueryUI <> v7.1.0
      - Added JQuery UI dialog builder to component supplier
      - Improve file deployment tests
      - Migrated sources to Tonel format
      - Willow-SpinKit <> v5.0.2
      - Improve file deployment tests
      - Migrated sources to Tonel format
      - Willow-Playground <>
   - Improve package tagging and rename some classes to make the code more
      - Use the new interaction facilities
      - RenoirSt <> v5.0.0
      - Migrated sources to Tonel format
      - Updated dependencies

Find a more detailed changelog and migration instructions on the release
pages of each repository.

Special thanks to Tim Mackinnon <> for the
constructive feedback driving some of the improvements in Willow and Francisco
Ortiz <> for the Mixpanel support.

Anyone interested in joining our ba-st projects <>
is welcomed.

Gabriel Cotelli, Maxi Tabacman and all the contributors.

by Stéphane Ducasse at May 01, 2018 02:28 PM