Monthly Archives: July 2016

Pharo was used to build ATM software for Russian banks. Such devices could be found in Moscow streets. The Presenty UI frameworks offered full new adapted UI was developed for this project. Well done Denis: a really nice success story that was kept secret for business reasons.

Here is a sample video:

Summer Enhancements…

18757 Simple Shell Command Eval for 5.0

18676 Endless loop parsing e-mail addresses containing an ampersand
18766 Change TabModelTest and TabManagerTest to use the abstract class

18833 Error on TreeModels drag&drop

18830 RBPatternParser should respect RBErrorNode when parsing pattern blocks

18826 failing tests testMethodsReferencingClass on bootstrapped image

18740 selectAll of TextInputFieldModel dont react like its super class TextModel

18824 Fuel packages lost some integrated stuff

18750 Improve the abstract TestCase for widgets

18822 RBScanner>>#scanPatternVariable shouldnt continue parsing on error

18771 Add a manifest for critics

18743 Create an abstract class to remove code duplication between CheckboxModel and RadioButtonModel

18803 Cleanup of Spec-Polywidget
18734 Two tests failing in FFIExternalStructureTests

18807 Improve Margin>>#printOn:

18741 add RadioButtonGroupModel

18775 Fix a typo

18812 epicea is not respecting the new pharo-local directory

18770 Add a manifest and fix critics

18772 Fix critics in SpecLayout

18734 Two tests failing in FFIExternalStructureTests

18774 Fix some critics

18746 fix some typo in method comments

18745 Move what are not widget from Spec-core-widget to another subpackage of Spec-core

18747 Improve RadioButtonGroup

18742 add class to manage focusorder

18390 System version should be “Pharo 6.0” instead of “Pharo6.0” and PharoWelcomePage should not hard code version

18748 OpalCompiler Tests: OCNewCompilerWithChangesFunctionalTests should set encoder to OpalEncoderForV3PlusClosures

15688 Remove ComposableModel>>#instantiateModels:s senders in Spec-Examples
18739 CompiledMethod sourceNodeForPC is not working for primitives

18738 Context sourceNodeExecuted could fail when first line is block
18736 STCommandLineHandler>>installSourceFile:

18727 MessageBrowser Suggestions shortcut ignores selection

18718 usage of deprecated Pragma>>#selector in the kernel

18732 Workaround for isBlockReturn:

18721 external alignment for enumerations is bad in win32
18717 call on #name for SuggestionMenu

18726 Move CriticBrowser to work on Renraku model

18728 remove WorkingSession>>#sid

18719 Add an example, remove a duplicated example

18720 usage of deprecated Pragma>>#method: in the compiler

18707 Cannot open the context menu in Versionner

18715 QualityAssistant v3.2.0

18705 SistaV1 Bytecode: Opal tests down to 23 failures, 4 errors

18709 Improvements in CustomHelp and ClassAPIHelpBuilder

18714 can not rename a class

18710 remove “currentScope” from RBParser

18713 Load NeoUUIDGenerator without using it
18704 button border should be themable

17958 Add examples to the Symbol class comment

18618 Better additional comment for primitive: 79 error: ec usage

18697 Automatic deprecation refactoring needs to take traits into account

18700 SistaV1 bytecode: fix for Opal tests to not crash the image

18696 some cleanup for OCBytecodeDecompilerTest for new Bytecode set

18680 Forward port 18676 Endless loop parsing e-mail addresses containing an ampersand

18694 deprecate #getSource
16636 Rename layout to classLayout (step 4 deprecate)

18449 Glamour: “Do not use #ifNotNilDo:ifNil:, #ifNil:ifNotNilDo:, #ifNotNilDo:”

18690 deprecated BitBlt class>>#current

17434 debugger missing block local var for optimized blocks

18674 Turn spotter catalog off by default

18608 Impossible to delete a class

18665 Rename Pragma>>#selector to Pragma>>#methodSelector

18685 System-Changes depends on Compression

18689 deprecate #copyLast:
18682 remove Object>>wantsDiffFeedback

18686 Kernel does not depend any more on Compression

18683 Update pharo kernel dependencies
18636 FFICallback is broken since Alien was updated to support ARM and 64bits

18223 GTInspector compose should use HelpBrowser openOn GTInspectorHelp

18681 Cleanup Compiled Method Trailers

18658 Browse class directly for global variables

18529 There is empty packages in the image

15857 review rule RBAsOrderedCollectionNotNeededRule

18675 Cleanup related to deprecated methods

18673 Move variable declaration refactoring creates undeclared variables

Navigating Objects


This is side project of my work on Seamess and RemoteDebuggingTools. You can load it by:

Gofer it
smalltalkhubUser: ‘Pharo’ project: ‘ObjectTravel’;
ObjectTravel is a tool to deeply traverse “native” references of given object through instance variables and “array contents”.
Usage is quite simple:

traveler := ObjectTraveler on: (1@2 corner: 3@4).
traveler referencesDo: [:eachRef | eachRed logCr].

Here is list of suitable methods:

  • collectReferences
  • countReferences
  • skip: anObject
  • traverseOnly: predicateBlock
  • copyObject
  • findAllPathsTo: targetObject
  • replaceCurrentReferenceWith: anObject
Best regards,

Pillar 4.0.0 is out


I’m happy to announce the latest release of Pillar.

This release has been possible because of the hard work of Damien Cassou, Cyril Ferlicot, Yann Dubois, Thibault Arloing and Lukas Komarek.

What did it bring and what are the largest changes ?

  • Huge cleaning of code and Dependencies
  • Many bug fixes
  • Huge refactoring of internal parts
    • Extract phase management into an external project (LightPhaser)
    • Transformers and Phases are all Pipes

Remove Compilation cycle

  • Remove template handling from Pillar
  • Remove generation of
  • Pillar now exports files to JSON format
  • Command for pillar archetypes “./pillar archetype book”, book can be replaced by other archetype names (see Pillar documentation)
  • Possibility to load an archetype with a Makefile to compile pillar files


  • Check phase to check syntax
  • EPub exporter for e-books (use pillar archetypes for this)
  • Semantic links to Youtube and Wikipedia
  • Citations for LaTeX
  • Structures (see Pillar documentation)
  • Footnotes for HTML, Markdown, LaTeX and AsciiDoc
  • Improvement of parsing configuration failure message

Major changes

  • Metadata field in configuration to separate data from configuration properties
  • Support files in configuration does no longer exists
  • “disableTransformers” property is now named “disabledPhases”
  • AsciiDoc file extension is now “.asciidoc”
  • Pillar now manages one input file, not a collection of input files anymore
    • Parameter inputFiles is now replaced by inputFile

The documentation of Pillar will be updated as soon as possible to fit those changes.



A taste of bootstrap


as you maybe know, we are working on Pharo image bootstrap – the process that can generate an image from source codes and initialize it correctly. Because of practical reasons we do not bootstrap the standard image at once but we are trying to bootstrap a small headless kernel image and then load the rest of the system into it.
The good news is that we are successful in our effor. We are already able to produce well usable images as you can test here:
From the Pharo/Squeak point of view this image is very special because it doesn’t contain any object inherited from 80’s. Pharo lost its umbilical cord.
Notice that the initial display width is too narrow and and we still need a lot of work on the building process, but In the next weeks and months it will change a lot the Pharo development – especially as soon as it will be combined with Git support.
— Pavel

JSONWebToken for Pharo


thanks to the inquiry of Sven I published an implementation of JSONWebToken to smalltalkhub. It is available at!/~NorbertHartl/JSONWebToken <!/~NorbertHartl/JSONWebToken>

For those who don't know JSONWebToken or short JWT pronounced "jot" is a token format suitable for authentication and authorization. The token consist of a header, a payload and a signature. The header defines crypto algorithms, compression and other things needed to read a token on reception. The payload is called a claim set which is basically a dictionary with well-known and custom keys. If we think about OAuth or OpenId the values contained map directly to JWT claims. For OpenID connect which is an identification mechanism on top of OAuth the usage of JWT is one of the building blocks. 

What are the advantages in using JWT?

- it defines a header for encoding the content so it is quite flexible in the ways compression and encryption of the key is done
- defines a payload which maps arbitrary keys and there is a set of well-known keys that implementations of OAuth, OpenID can understand
- defines a signature that makes it easy to trust the information contained or to give the token to someone who is not trusted
- token format is a single line string so it can be used e.g. in HTTP authentication headers

A problem JWT can solve:

In our company we have a lot of little REST servers serving some duties. To minimize the chaos I want to have a central authentication and authorization point. If we assume having 20 images running and we look at typical way how authorization works:

there is image A (Authentication), image S (Service) und client C. Client C wants to use the service S

1. client C authenticates and retrieves authorization information from A (or from S which redirects him to A)
2. client C hands out the authorization information to S
3. S needs to check at A if the information is valid (client C could have modified it or generated it)
4. S grants C access

Taking the assumption of having 20 service images, every image would need to get back to A in order to check authorization information. The more services images you have the more load it will put on A. In a JWT use case scenario the same would look like

1. client C authenticates and receives a JWT containing authorization information. The token is signed by A
2. client C hands out JWT to service S
3. S checks the signature of A and knows that the authorization information contained is valid. 
4. S grants C access



New version of Seamless

I glad to finally release new version of Seamless (0.8.2).

It could be loaded by:
       Gofer it
      smalltalkhubUser: ‘Pharo’ project: ‘Seamless’;
It works in Pharo 5 and 6.
It is complete redesign of original version with the goal to make it more flexible, reliable and simple.
(original version was created by Nikolaos Papoulias)
Seamless is foundation for RemoteDebuggingTools. It allows reuse existing debugger to work with remote process by transparent network communication. Particularly new version provides required flexibility to reduce number of requests between distributed objects. No debugger changes was needed to make it work relatively fast with remote model.
For more details look at my blog and read docs: Seamless and Basys 
As usual feedback is welcome.
Best regards,

OpenGLES2 bindings ready

Hi all,

My tiny binding for OpenGLES2 is ready :)!/~ThibaultRaffaillac/OpenGLES2/

It takes a different direction than that of NBOpenGL. I found the support for all versions of OpenGL overwhelming, both for beginners and to maintain. With a limited number of functions I could carefully name all messages.

A demo using either SDL2 or GLFW (faster) is included, supporting VSync and retina displays.
Tested only on Mac OSX, patches welcome!


Metacello support for GitFileTree metadata-less mode

In the last month or so we’ve had a couple of different discussions on this list involving adding support to Metacello (otherwise known as “Cypress package extension”) for GitFileTree’s metadata-less mode[1] and [4] and earlier this week I released a new version of Metacello[2] that includes an updated version of the  “Cypress package extension”[5].

Depending on the version of Pharo you are using, at some point in time, I expect this new release of Metacello to be available in the standard download. Until then, to install the latest version of Metacello into Pharo execute the following in a workspace:

Metacello new
baseline: ‘Metacello’;
repository: ‘github://dalehenrich/metacello-work:master/repository’;
Metacello new
baseline: ‘Metacello’;
repository: ‘github://dalehenrich/metacello-work:master/repository’;
onConflict: [:ex | ex allow];

If you are using GitFileTree’s metadata-less mode and Metacello, then add the following method to your BaselineOf:

^ MetacelloCypressBaselineProject

and you are good to go.

If you are curious as to why “Cypress package extensions” are needed, you can read this comment[6] for a description of what rules Metacello uses when fetching/loading packages from a FileTree repository using a baseline.

On a slightly different topic, Alistair Grant ran into a bug involving Metacello and how it semantic version numbers[7] a couple months ago and this release includes a bug fix … the bug was related to the fact that the parser was too lenient and did throw an error for some forms of invalid Semantic version numbers … with this fix an error is thrown … of course it is entirely possible that there are ConfigurationOfs out in the wild that “depend upon the old behavior” so if you get an “invalid version number” error while working with a configuration and discover that it is not practical to redefine the version numbers to conform to the semantic version number format then you can add the following method to the ConfigurationOf and the old, buggy version of the parser will be used:

^ MetacelloOldSemanticVersionNumber

If you are sharing code between GemStone and Pharo, then you will want to make sure that you install the new version of Metacello in GemStone as well. See the GemStone release announcement for details[8].



Remote Debugger now available

I glad to release first version of RemoteDebuggingTools project. It allows explore and debug remote images.

Any feedback is welcome.
Best regards,