Monthly Archives: February 2014

Installing Pharo 30 in 40 seconds

Pharo 3.0 on Mac OS X 10.9 

The out of the box experience. Installing and running Pharo 3.0 on a blank Mac OS X 10.9 account in 40 seconds.

With 3 extra minutes to demo some networking and image manipulation interactions.
The out of the box experience. Installing and running Pharo 3.0 on a blank Mac OS X 10.9 account in 40 seconds.

With 3 extra minutes to demo some networking and image manipulation interactions.

Pharo 3.0 on Windows 8.1 

Installing and running Pharo 3.0 on a blank Windows 8.1 machine in under 1 minute.

With an extra minute to demo some elementary interactions.

Pharo 3.0 on Ubuntu 13.10

The hacker experience: using ZeroConf to get Pharo 3.0 up and running in a blank Ubuntu 13.10 (32-bit) account in 1 minute flat. Doing some HTTP hacking in the next 5 minutes. Includes terminal headless execution as well.
Please note that there are alternative ways to install and run Pharo [ ].

In addition Damien Cassou developped several installers for Windows, Mac and Linux.


Pharo Business: a dedicated mailing-list

Dear Pharoers and Smalltalkers from all over the world

We would really like to push business in our community and we believe that it is important to create a community around business questions.
We created a new mailing-list

The idea is to identify 
– potential market
– missing technical solutions that we could build together
– share technical assets from a business perspective (which frameworks for what).

We hope that you will like the idea and that more business can emerge!

Commits: February – Three























VM Simulator is now running Pharo in Pharo

Stefan Marr is doing an important job for the VM. He worked on the virtual machine simulator.

Here is the announce of Stefan:

Now the simulator for the StackInterpreter running in a Pharo 3 image is running 🙂

Over the last years, people have been tinkering with the simulator from time to time, but I have the feeling everyone gave up before the thing was fully functioning, and not even the trivial things have found their way back into the VM code base.
I am aware that Phil was busy with it recently, but I think there was also someone else posting notes here.

Would be great if those people could send me their change sets so that I can try getting everything working again.

The simulator loads up properly, and executes the first 10,000,000 bytecodes.
Which is enough to make it notice that a primitive fails, and to pop up the error dialog.
However, it is a Pharo 1.2 image. Later images trigger some bug, I haven’t identified yet. They execute code, but don’t manage to bring up the display.

Thanks to having a unified code repository, everything I got so far (minus a few small changes) is here:

More to come soon.
Best regards


After some efforts, fighting with cross-compilers (cross assemblers) Jean-Baptiste Arnaud finally fixed the PharoS bug on Raspbian and now Pharo runs totally on Raspberry. Well done JB.


Here is the announce made by Jean-Baptiste

I made some advances and cleans for the RaspberryPi, compilation. I cross compile from an unix slave, that is really faster and this allows me easily to compile the fast bltbit file.

Now I integrated the fastbltbit into the StackVM (there a job associated but at term It will be merged):
We have a small bug on the git tracker now but once it will solve the job will automatically follow the update.
The version downloadable should work.

We compile the StackVM now for RaspberryPi based on a Raspbian os.

In order to do that you have to:
– get your image
– prepare your RaspberryPi or your cross compile environment
– and compile

First step, the VMMaker image:
Here is the link to the source (basically the job just prepare the source and a image):

You will find a preconfigured image in the image folder.
If you want to create your own and not just extend this one, you need to clone the pharo-vm git repository:
all the used source code is in mc use the filetree in montecello.
Second Step Preparing the Raspberry:
I used the linux source (raspbian),
Then you can recompile using a RaspberryPi (what I do),
but you need to follow Nick instruction for install all the required dependencies on the RaspberryPi:

On the raspberry PI:
# install build tools
sudo apt-get install gcc g++ cmake

# dependencies for vm plugins
sudo apt-get install libasound2-dev libssl-dev libfreetype6-dev libgl1-mesa-dev

sudo apt-get install build-essential

# to fix:
# /usr/bin/ld: cannot find -lSM
#/usr/bin/ld: cannot find -lICE
# create the following links in: /usr/lib/arm-linux-gnueabihf/

sudo ln -s
sudo ln -s

Once the source is installed:

chmod +x platforms/unix/config/version
chmod +x platforms/unix/config/verstamp

Then compile:
I have done a configuration to generate VM on raspbian.
StackRaspbianConfig, you need to subclass and add your plugin + configure Cmake as you want.
“YourSubclass generate”

and recompile (cmake . & make from a terminal in build folder) on the Raspberry Pi, it should work.
My jenkins job actually take the last version of the source VM, and it is able to rebuild it on RaspPi.
You can cross-compile but I do not explore that way.

I hope that help you.


Handling of $+ in URLs

There was an interesting discussion about handling URL in Zinc. Zinc is the fully rewritten HTTP client server of Pharo developed by Sven

Zinc has an excellent design and Sven takes really care of it because he uses it in production on the servers of . Zinc is also an important player in the Pharo Web stack with Seaside or other web frameworks (soon there will be a nice new comers around Amber – stay tuned).

Pharo is really grateful for his involvement and contributions. Here is the summary of the discussion:


Johan Brichau reported an issue a couple of days ago concerning the handling of $+ in ZnUrl (Pharo 3’s URL class) and in Seaside’s WAUrl. #bleedingEdge of Zinc HTTP Components fixes the issue, as far as I can see. I want to explain the problem and the solution.

Before october 24 of last year, ZnUrl used a ‘better safe than sorry’ safe set when doing percent encoding of unsafe characters. However, the URL spec defines different allowed characters per URL part. This behaviour was then added to Zinc-Resource-Meta-Core, ZnUrl’s package.

Soon after that a discussion with Jan van de Sandt let to a first small change: since ZnUrl interprets the query part of a URL as key-value pairs, it is necessary to treat $= and $& as unsafe, even though they are not according to the URL spec (which doesn’t concern itself with how the query part is interpreted).

All that time, $+ kept on being interpreted as a space, independent of the safe set. As Johan reported, this conflicted with $+ being a safe character. Which eventually let to the functional problem of not being able to enter a + in an input field, in Seaside.

Why only in Seaside ? Because ZnZincServerAdaptor>>#requestUrlFor: was implemented by printing the interpreted incoming ZnUrl and parsing it again. There, the escaping of $+ disappeared and it became an unintended space.

This situation is now fixed by

Changes to ZnPercentEncoder:
– adding an #decodePlusAsSpace boolean option

Changes to ZnResourceMetaUtils:
– #decodePercent: no longer decodes plus as space
– #decodePercentForQuery: does plus as space decoding
– #queryKeyValueSafeSet no longer includes $+
– #parseQueryFrom: not uses #decodePercentForQuery:

Added ZnDefaultServerDelegate>>#formTest1: to test simple form submit encoding handling

Modify ZnZincServerAdaptor>>#requestUrlFor: to build a WAUrl explicitely from the interpreted parts of the incoming ZnUrl instead of going via printing and parsing

Adding new unit tests
– ZnUrlTests>>#testPlusHandling
– ZnServerTests>>#testFormTest1

I think WAUrl should best be changed as well, but that is not my call.

In code, this summarises the implemented behaviour:

“While percent decoding, a + is translated as a space only in the context of
application/x-www-form-urlencoded get/post requests:
ZnUrl interprets its query part as key value pairs where this translation is applicable,
even though strictly speaking + (and =, &) are plain unreserved characters in the query”

“$+ is not special in the path part of the URL and it remains itself”
assert: ‘http://localhost/foo+bar’ asZnUrl firstPathSegment
equals: ‘foo+bar’.
assert: ‘http://localhost/foo+bar’ asZnUrl printString
equals: ‘http://localhost/foo+bar’.
“$+ gets decoded to space in the interpreted query part of the URL,
and becomes an encoded space if needed”
assert: (‘http://localhost/test?q=foo+bar’ asZnUrl queryAt: #q)
equals: ‘foo bar’.
assert: ‘http://localhost/test?q=foo+bar’ asZnUrl printString
equals: ‘http://localhost/test?q=foo%20bar’.
“to pass $+ as $+ in a query, it has to be encoded”
assert: ‘http://localhost/test?q=foo%2Bbar’ asZnUrl printString
equals: ‘http://localhost/test?q=foo%2Bbar’

I hope this is a good and correct solution. In any case, it fixes the functional problem that $+ disappeared in WAUrlEncodingFunctionalTest – which I took over in ZnDefaultServerDelegate>>#formTest1:

Thanks Johan for the whole discussion !


FOSDEM 2014 Talk Videos

the videos of fosdem start to be available:

sadly something went wrong with the Pharo4 one
(the video just is the same as Macel Weiher’s). Stephane Eggermont is checking.

But here is Pharo3:

this is not yet public, I will do that when putting it on Pharo News, sometimes
the next days.

Commits February Week One

12830 MethodFinderTest>>testPower

11579 When adding a class variable, the monticello package is not dirty

12500 No accept/ok button in FileList

12833 IconicListItem does not give visual feedback about the enablement status

12628 KeyNotFound in RPackage>>methods in the presence of anonymous classes

12739 Class definition NOT available in the “Recover Lost Changes” tool

12255 Integrate Versionner in Pharo 3.0

12825 SimulateMouseSpecification>>testSimulateClick

12789 RPackage>>#moveClass:fromPackage:toTag: Ignores Tag

12827 Part II : Compiling a method often makes nautilus deselect the package

12522 Package filter input capture all keyboard shortcuts

12812 Class comments missing in package Spec-Tools and Spec-Tests and BlocEditor should be renamed to BlockEditor

12822 CategoryAdded announced twice when a class is created

12803 SimulationGuardException is not referenced and should therefore be moved to “Deprecated” package

12514 OCSemanticWarnings ignore “cancel” from a confirmation dialog

12824 Class comment missing for package ConfigurationCommandLineHandler

12512 SemanticAnalyzer ignores answer from UnknownSelectorWarning

12442 Nautilus brakes code when removing more than one unused local variables

12823 Class comment missing in Monticello package

12813 Class comments missing in Gofer package

12816 Class comments missing in Multilingual package

12811 Class comments missing in KernelTests packages

12789 RPackage>>#moveClass:fromPackage:toTag: Ignores Tag

12792 remove empty package ReactiveVariable

12808 #testObsoleteClasses: AnObsoleteEyeContextInspector

12817 Class comments missing for Polymorph-Widgets package

12814 FTPConnectionException is not in use and should be moved to Deprecated30 package or renamed

12801 Class comments missing in AsmJIT package

12805 Class comments missing in ClassOrganizer package

12791 Failing test: #testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits

12795 Class comments missing for package System-FileRegistry

12799 Class comments missing in Help package

12794 Class comments missing in UpdateStreamer package

12802 Class comments missing for Kernel package

12804 Class comment missing in AST packages

12797 Class comments missing for tools package

12796 Class comments missing for Traits package

12798 Class comments missing in GroupManager package

12806 Class comment missing in package FreeType + categorizing for FreeTypeCacheTest

12800 EyeContextInspector should be renamed to EyeMethodContextInspector

12765 Athens font rendering missing letters and missizing others

12778 NB generated code user initials

12788 Please review ProtocolClient(class)>>retrieveMIMEDocument:

12781 Class comment missing for package Compression

12787 Class comment missing in package Morphic-Examples

12785 Class comment missing in Smart suggestions package

12784 Class comment missing in File package

12737 Morph sends mouseUp twice to handlers

12782 Class comments missing in Deprecated package

12783 Class comments missing in Fuel package

12772 Missing example methods in Spec

12309 Manifest-Core should be cleaned

12771 KeyNotFound: key #localSelectors not found in MethodDictionary

12769 Add a full class definition menu in nautilus

12727 Duplicated categories in Nautilus

12157 Wrong announcement of ClassModifiedClassDefinition

11670 strange MC package Generated-code-non-existing-package

12469 Sometimes an empty protocol is created

12761 Class comments missing for FileSystem package

11674 MNU: receiver of #> is nil

12762 Class comments missing in UIManager

12756 Class comments missing in System-* package


NativeBoost by example: X11

NativeBoost is a Pharo library  supporting FFI based on assembly on the fly generation. Today one nice chapter has been announced. Here is the announce:

Hi guys

today igor helped me to understand some hidden parts of NativeBoost and we massively revisited and expanded the chapter started
by L. Laffont this summer. Now you this is up to you to expand your knowledge 🙂 It was really fun to get the X11 window resize and move 🙂


Stef and Igor