Monthly Archives: April 2016

New OpenGL bindings for Pharo 5


I made new OpenGL bindings for Pharo 5 using the UFFI (Available at:!/~ronsaldo/UFFIOpenGL ).
Unlike the old NBOpenGL, these new bindings make a heavy use of OSWindow SDL2 which is integrated and enabled by default in the Pharo 5 image. These bindings do not provide a way to create an OpenGL context or to create a Morphic window using OpenGL unlike NBOpenGL.
For testing quickly OpenGL in Pharo 5, it should be enough to do the following in the playground:
(ConfigurationOfOSWindow project version: #stable) load: ‘WithOpenGLAndExamples’.
(Smalltalk at: #OSGLExampleBasic3) new.
As for Woden, it is now working in Pharo 5 with the UFFI. For loading Woden in a Pharo 5 image, is enough to do the following in the playground (Also available at the Woden Smalltalkhub page):
Gofer new smalltalkhubUser: ‘ronsaldo’ project: ‘Woden’; package: ‘ConfigurationOfWoden’; load. (Smalltalk at: #ConfigurationOfWoden) loadBleedingEdge.
For an example the following script should be executed in a Playground:
WDFPSSimpleExample6 new open.

Happy with Pharo 50 release!

Hi guys,

This is just to let you know I am very happy with Pharo 5.0 upcoming release. I was already used quite a lot for other projects (OSSubprocess etc), but a couple of days ago, I started to develop my client’s app (Quuve) and so far so great. It only took me an hour or so to update all my dependencies in my Metacello conf (I have a lot of dependencies). So..thanks for all those who have been updating their confs!
I was already familiar with all the GT tools so I was happy with that. I really notice a speed up (I guess in big part thanks to Spur) and so far it was quite robust. I also noticed some memory leak fixing…as previously in 4.0 I was re-building images all the time because I get to 500MB in no time. Right now I keep using the same image as for several days and so far no problem with memory.
Finally…let me say…. if for Pharo 6.0 we finally get Git support directly integrated into the image and we get expected Sista speedup, I think it will be the best release ever hahahahha.
Thanks for all your efforts and congratulations for the upcoming release. I am already enjoying it since several weeks already.

A nano tuto on Command Line …

pharo Pharo.image  --list 

will give you the command lines available, then 

pharo Pharo.image  aCommand --help 

will give you the subcommands possible

in your case, you want something like this: 

pharo Pharo.image eval “99 factorial”


Pharo Monthly Newsletter April 2016

Pharo Monthly Newsletter April 2016

The Pharo Community is busy preparing the release of Pharo5 for May. We got so busy that we forgot to send out a newsletter for March…

For this April Newsletter, we have three topics:

  1. The Pharo MOOC
  2.  Pharo Consortium: Membership Matching Campaign
  3. Pharo Days Report

To get Pharo related news every day, follow us on twitter @pharoproject.

Pharo MOOC
The Pharo MOOC is a new online course about Live Object Programming in Pharo.

The MOOC starts with over 2000 registrations on May 2nd. Register today!

Membership Matching Campaign
The Pharo Board is proud to announce a special campaign for attracting new Consortium Members during 2016.
A new fund has been created from which the Consortium will receive the equivalent of one yearly membership fee for every new member, and the increment in yearly fees for every upgrading member. For example, if a new company joins the Consortium as a Silver member (2000 EUR / year), the fund will contribute a one-time amount of 2000 EUR to the Consortium. Similarly, if a company upgrades from Bronze (1000 EUR / year) to Gold (4000 EUR / year), the fund will contribute a one-time amount of 3000 EUR.

This campaign will take place until the end of 2016, or until the fund is depleted. Currently, the fund totals 21000 EUR, a sum which is graciously supported by three companies: LabWare, Object Profile and Fenk.

Pharo Days
Pharo days were organised on Thursday March 31 & Friday April 1 in Namur (Belgium). It was a great moment to encounter other Pharo programmers, to feel community spirit, to discuss about the Pharo ecosystem and the improvment of the language, listen many interesting talks about various themas.

The schedule was interesting: We were lucky to listen talks about Seaside 3.2, data formats and protocols, Unified FFI, Bloc, Spur, etc. If you didn’t go to Namur, all the slides will be available on this website soon.

Many photographies and a video are already available on the web:

Thanks to the event organizers for their incredible work. The Pharo Days took place in a beautiful place (Le cercle de Wallonie).

Arff Generator for Pharo

Hello everyone,

For a university project in ”Datamining and Datawarehousing”, I have to convert data stored as text files in different formats to the Weka[1] ARFF format[2].

I did it with Pharo of course! 🙂

So, I wrote this little project [3] to share what I have done with you, just in case someone else needs to export data from Pharo objects to an ARFF string for further analysis with Weka.




[1] Weka’s website:

[2] ARFF format spec:

[3] Arff generator for Pharo:

Soup1.8 [ANN] Introspect web content


I added a few GT inspector extensions to Soup and cleaned up a little bit. Released as a new version 1.8 of Soup - you will find easily in Catalog 
for Pharo 5 or by opening Spotter and entering "Soup" to load.

As the attached screenshots shows you now have a nice way to introspect 
the structure of a web page as a tree in the inspector or see the 
attributes of tags/nodes in a table.



Pillar 3.0.0 release

Hi everybody,

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, Damien Pollet, Stephan Eggermont, Yann Dubois, Thibault Arloing and Lukas Komarek.

What did it bring and what are the largest changes ?

  • Addition of an AsciiDoc Exporter
  • LaTeX exporter:
    • external links now produce footnotes
    • replace \begin{code}{} with \begin{listing}[language=XXXX]
    • replace \ct with \code
    • use \textasciitilde instead of \texttildelow to represent a ~ character in Pillar
    • SBALaTeX writer for sba book (by Damien Pollet)
  • HTML exporter:
    • default template charset is UTF-8
  • Features: For more  you can see Pillar documentation at
    • hideable scripts with the option hideable.
      •  e.g., [[[hideable=true
        with a parameter in pillar.conf “scriptHide”=true this text will be hidden.
      • It’s, for example useful if you’re a teacher and you want to have two versions of your document, one with solutions (for you) and one without (for students)
    • auto anchor for headers
      • e.g, in a level configuration
        there will be an automatic creation of an anchor for headers of level 1.
      • It’s useful when you want to link a title in the text, for example for a table of contents
    • header capitalization in a level configuration with options: capitalize, capitalizeEnglish, uppercase, lowercase
      •  ex: “level1”:{
        Will render all headers of level 1 to Uppercase.
      • It’s useful if you want all headers of a same level to be capitalize likewise
      • e.g., if you have “==i am a level 1 header” with “capitalizeEnglish” it will produce “<h2>I Am a Level 1 Header<\h2>”



Zinc: much more than HTTP server

Although Zinc HTTP Components is a framework for HTTP with full featured client and server implementations, it has long contained two sub packages that are independent of HTTP or even networking: Zinc-Resource-Meta (which implements URL and MimeType) and Zinc-Character-Encoding (for all kinds of character encoding).

While implementing the Pharo Unicode project, I made a couple of changes to Zinc-Character-Encoding.

The ZnCharacterEncoder hierarchy was refactored a bit with the introduction of ZnUTFEncoder and ZnEndianSensitiveUTFEncoder while a new encoder was added: ZnUTF32Encoder.

This means all official Unicode encoders, UTF-8, UTF-16 and UTF-32 are now supported. See the chapters ‘3.9 Unicode Encoding Forms’ and ‘3.10 Unicode Encoding Schemes’ in

The API of the encoders was also extended to not only work between characters and bytes, but also between integer Unicode code points and bytes.

A refactoring was done regarding streams as well with the introduction of ZnEncodedStream and ZnEncoded[Read|Write]Stream above ZnCharacter[Read|Write]Stream and the addition of ZnCodePoint[Read|Write]Stream.

Summary: some new features, all public API remains the same.


Metronomic improvements

18010 CompiledMethod>>#hasBreakpoint speedup

18011 QA async task flood

17697 Badly encoded icon data

18005 speed up Nautilus tests

17999 Four tests failing in SmalllintManifestCheckerTest

16560 test runs: open debugger on failing tests

18003 multiple usage in the weak subscriptions to the local announcers in the system

18001 GToolkit version 3.19

17998 Update Athens to latest

17984 Method pane of Nautilus does not honor test methods of abstract unit test classes (and lets them run instead)

17970 String Utility method “repeat:”

17983 Update GTSpotter to latest version that reduces memory leaks

17975 #hierarchyClassTree sort by #name instead of #printString

17995 load rubric 2.19
17989 QualityAssistant v2.6.3 (memory leak fix)
17985 Package and methods icon cache are references nautilus instance which shows them first time

17964 Remove usage of Announcer in MultistateButtonMorph for the action to be done when clicked

17986 Nautilus uses old EventManager to subscribe on historyChanged which never garbage collected

17966 garbage subinstance of SystemWindow at image startup

17987 RubFindReplaceService produce leak subscriptions

17015 Failing test: SetTest>>#testAllSetsAreHealthy

17979 (MessageDialogWindow new text: Hello) open should work

17897 Slot method used by Nautilus but not implemented
17284 Rubric SubscriptOutOfBounds error

17972 Remove depended in MorphTreeNodeMorph on deletion

17968 a window should not be the top window after its deletion

17804 –no-default-preferences does not work on the latest Pharo 5
50679 Moose

Addresses cases:
– case 17679
– case 17936
– case 17931
Other updates:

– made the width of the sequenceable number items to be 50
– examples for SharedQueue, CatalogProject
– specify an after: message in GTExamples

17950 Improve Collection Sequenciable comments ver2

16947 Class-side Inst Var “#name” Makes It Too Easy to Break System

17841 Creating a class from a debugger/during compilation doesnt create a record in .changes file

17945 TextEditor setEmphasisHereFromTextForward: broken for empty text

17943 It is not possible to write [ in Nautilus on the french keyboard layout

17937 Monticello does not fully unload packages

17621 Failing test SizeInMemoryTest>>#testSizeInMemoryOfByteObjects
17930 MenuModel>>fromSpec: fails to open a PluggableMenuSpec if it contains a subMenu

17932 Natuilus “Class” button no longer shows if theres anything on the class-side

17929 Missing parenthesis around condition (testAsCommaStringMore)
17632 Can not remove classes that are referenced

17923 SUnit Rules

17699 Finders code pane allows to save code with invalid syntax

17926 Improve Pharo Project Catalog Loading

17780 “Analyzing Packages” progress should not be shown when running package critics

16775 Class Button is in the wrong state sometimes

17871 Slots need to be notified when they changed

16373 Methods called but not implemented in SUnit

17904 Update athens 3.9

17912 QualityAssistant v2.6.2

17909 Update Rubric to 2.16

17218 needs to use new spec drag n drop transfer models

17823 Critic browser is not dark theme friendly

17898 RPackage>>#isDirty speedup
17901 Morph#>>openCenteredInWorld do not use Display

14107 Truncated text on text lists with bold font

17885 ThemeChanged improvements

17891 creating of a new method in “no messages” category does not update methods list in Nautilus

16309 ThreadSafeTranscript>>examples doesnt work anymore

16922 Nautilus: Using class pane menu entry “Add class” can cause problems

17878 KM calls to unimplemented methods
17782 RPackageOrganizer data do not full correspond to the newely generated ones

15893 Nautilus refresh not fine enough

14528 OSWindow: move tests out of package

17893 CompiledMethod>>hasLiteralThorough: does not work properly for GlobalVariables
17869 add support for indirect calls

17872 simulation mirror primitive100 for perform with superclass is not working

17873 Simple Test Cases for String (continued)

Object centric debugging

I glad to present very simple implementation of object centric debugging based on Ghost and ObjectVirus projects.
You can try it by:
Metacello new
smalltalkhubUser: ‘Pharo’ project: ‘Ghost’;
configuration: ‘Ghost’;
version: #development;
load: ‘ObjectCallHalt’
With this package you can ask any object to #haltOnNextCall and It adds new button in debugger “Run to next self send”.
Best regards.