Monthly Archives: July 2015


Hi all,

Let me introduce PharoVX: a Pharo binding to OpenVX, the standard for accelerated computer vision.
OpenVX is currently [being] implemented by various vendors, but right now we can download a sample implementation from Khronos for free and use it in Pharo.
PharoVX is mostly written during ESUG 2015 in Italy, and I just wrapped it up a bit on this week before posting to list.
The project homepage provides some instructions on how to obtain and build the reference implementation, how to do the basic setup, and how to debug your VX pipelines.
PharoVX now also allows to run all kernels specified in standard v1.0.1.
There are some known problems:
1. Mapping data to-and-from VX is slow – it is currently done pixel-by-pixel in a Smalltalk code. I will probably try to speed it up with NativeBoost.
2. On the first invocation, the image data can be corrupted. For the subsequent VX executions, it seems to be fine.
With best regards,

QualityAssistant in Pharo50

Dear all,

QualityAssistant was integrated in Pharo5. You can read more about its functionality there:
If you will spot any bug please let me know, or report here:
Write a good quality code!

New academic partner: Rych

The Pharo Consortium is very happy to announce that RyCh
has joined the Consortium as an Academic Partner.

RyCh (Robotics and Computation in Chile) is a laboratory 
of the Computer Science Department (DCC) of the Universidad
de Chile. RyCh is a new research group, with a focus on the 
computational aspects of robotics, more specifically machine 
learning and the software engineering process of robotics.
At RyCh, Pharo is the implementation technology for 
Live Robot Programming.


   - RyCh:
   - Pharo Consortium:

The goal of the Pharo Consortium is to allow companies and institutions to
support the ongoing development and future of Pharo.

Individuals can support Pharo via the Pharo Association:

Pharocloud Ephemeric

Dear Pharo users,

I'm so excited to introduce you a project I'm currently working on which is
called "Ephemeric cloud". It is a very simple and fast way to publish your
Images to the web. Basically to publish a Smalltalk Image you just need to
call a usual HTTP POST request to Pharocloud Ephemeric API and you'll get a
hostname in response.

Check those small video examples below. 2 minutes each (and most of the time
is uploading time of my not-so-fast home internet :)

Publish with curl:
Publish with Drag&Drop:

The main idea of the project is to put as many images as possible and as
simple as possible. And I'm so confident in efficiency of this solution that
I included a free plan for you guys:)

Hooray to Pharo Free hosting! :) (scared smile)

I see Ephemeric cloud as a corner stone of all Pharo web development. 
For instance, I can imagine some kind of "Publish" button on Marina project
site, clicking on which a user will spawn a new instance in the cloud and
will be able to test it immediately. Another good use case is running
unit-tests by publishing an Image and running some API calls on it by
script. Or you can have an A-B publish scheme when a part of users are sent
to a new version for a test and the rest to a stable one. By the way,
ephemerics are a great case for Pharo Remote Debug project;) 

My intentions are to get to the point when Ephemeric cloud subscription is a
must-have tool for a Pharo developer! :)

You may check some project details here:

All questions are so-very welcomed. If anyone is interested in participation
in cloud beta-testing please contact me at and I'll
extend your subscription plan.

Pharocloud Team

Couple of weeks of continuous enhancements

16009 Reflectivity: always compile primitive methods on Link install

16007 remove #isAssociation is RGDefiniton

16010 Fix typos in RBAssignmentInIfTrueRules comment

15494 Integrate new pretty printer (Blue Ink)

16004 Cleanup useFaultyForParsing

16005 Enable new decompiler and remove the old

15347 rename package GroupManager as Nautilus-GroupManager

16001 New decompiler

15979 Make useFaultyForParsing a compiler option

15968 refactoring move method (class/instance side) does not work anymore
15995 UnlimitedInstanceVariableSlot

16002 use pushLiteralVariable for code generated for reflective slot read

15971 SubscriptOutOfBounds: 0 on whileFalse:

15999 remove empty package ToolsTest

13686 Morphic-Widgets-Tabs depends on Spec-Core

15998 Rename RPackageCreated into RPackageRegistered

15997 Manifest storing/loading of metaclass is broken

15393 Optimizing repeat

15991 System settings search is slow

14442 ToolsTest package should be Tools-Test

3893 There is no way to revert a change in a patch browser nor in Plymorph diff

15993 Temporary variable pos is only written in NumberParser>>#nextInteger
14616 Package Tags causing merge conflict

15987 SparseLargeTable>>zapDefaultOnlyEntries creates an unused copy

15985 Bottom Plugin takes too much space

15986 implement optionCompileOnLinkInstallation

15988 add catalog command line handler
6964 “Changes” in Monticello seems to compare to the latest in the cache

15976 Feature a buffer with offset type

15978 disable fasttable
15928 “Push up” refactoring presents a question as a disappearing notification

15965 Strange Slice+Changes behavior (shows too many changes)

15964 RingChunkImporter can not import TraitDefinitions

15727 RingChunkImporter can not import ClassOrganizationChunk

15963 Test: code coverage per node

15958 undeclared in StartupLoader

15961 Options for Meta Links

15962 NumberParser>>#makeIntegerOrScaledInteger to be removed in favor of makeIntegerOrScaledIntegerOrFloat
15956 Temporary variable oldNeg is only written in NumberParser>>#nextInteger

15952 Update configuration of Rubric

15953 Replace PluggableTextMorph of the Finder

15954 Replace PluggableTextMorph of the HelpBrowser

15955 Replace PluggableTextMorph of the Mail Composition

15950 create Reflectivity-Examples

15947 Right and left click exchanged for world menu

15898 enable FastTable in Nautilus by default

15856 When we cancel the creation of a class we get an error

15939 ChangesBrowser missing tests

15943 Cleaning LessonView

15937 DNU MethodChunk on change browser file in

15940 ast Cache: retain entries with linkCount on image save

14676 World menu should open on right click under Windows and Linux

15942 drag&drop not working when fast table is activated

11680 DropListMorph accepts on ESCAPE

15933 Wrong metacelloPlatformAttributes for pharo 5

15936 Remove titleAndPaneText

11730 UTF8TextConverter dependent on Zinc

15922 Add Jobs to MC version loading
15907 add beForCode for all tools using specs TextModel

15921 Make SystemReporter use Rubric

15934 test: Coverage per method, see #testCoverageMethod
15912 Classes are not rebuilt when changing only slot parameters

14310 Renaming a package just by changing upper/lowercase removes the package

15926 Monticello should raise MCRepositoryError and not Error

12190 Nautilus right click menus do not work on empty panes
15925 Reflectivity: test refactoring

15910 Add a factory method fromUrl on MCRepository

15914 Add Manifest for the Pharo kernel

15919 Disable format as you read should put back the unformatted code

15917 Job can answer who is the owner

15784 clean Nautilus Plugins

15906 PharoChangesCondenser broken

15902 image saved notification showed on image startup

15916 FastTable scrolling deltas need improving

15888 use “Smalltalk tools messageList” for “Search Code” result list

15913 Reflectivity: more tests

15911 Remove VariableChooserTree from Nautilus-Tree
15908 Reflectivity: more tests

15909 Replace Smalltalk at: to Smalltalk globals at: in RPackage

15237 Spec TextModel for plain text

14785 intersecting not overlapping rectangles should returen an empty rectangle

13059 Dynamic Spec Ui cannot resize the window

15905 Reflectivity: More work on #instead

15904 fast table need to react better to selections and searches

15894 nautilus need to take into account the new fast table when selecting and testing

15884 review rule RBUnaryAccessingMethodWithoutReturnRule

15895 Reflectivity: reifications for #after working
15890 some cleaning

15072 Senders and implementors do not work when one parameter is a string containing :

15899 Remove destructive example

15897 Load new Workspace from AlainPlantec/WorkspaceRevisited
7008 Shared Pools to be treated like dictionaries still necessary?

15886 Find class dialog from a scope nautilus window shows all classes

15889 do not call asOrderedCollection on compiled methods

15892 Cleanups: clean annotation handling + rename HookGenerator2

15891 Reflectivity: New HookGenerator

15871 enable ProcessList

15881 Add a method to lookup a Job in the chain of parent jobs

15883 LinkedList>>#collect:thenReject: is slow

15879 No more stepping and huge buttons on a right pane for browsing variables

15865 code limit panel is HARDCODING colors

15530 Clicking play twice in empty Playground gives DNU

15227 Horrible drawing glitch in Spotter Breadcrumb

15351 GTSpotter strange rendering for menu preview

15792 GTInspector UndefinedObject(Object)>>doesNotUnderstand: #collect:

15804 GTInspector should not raise an error when inspecting an unitialized morph

15803 GTInspector should not raise an error when inspecting an unitialized collection
15874 Reflectvity: small refactoring

15873 Clean new class builder: #copyTraitCompositionFromExistingClass not needed

15870 TestRunner: packages is shadowed

15396 Refactor Duplicated #itemFromPoint: (3 slightly-differing implementations)

15868 Differentiate ProcessList and LinkedList
15450 VM crash with disabled optionInlineIfNil

15867 Fix shortcut for smart suggestions in Nautilus
15396 Refactor Duplicated #itemFromPoint: (3 slightly-differing implementations)

15863 Update Glamour to load last version of Rubric

15867 Fix shortcut for smart suggestions in Nautilus
15862 Better method comment for withIndexDo: and doWithIndex:

15864 Reflectivity: error when installing incompatibe link

15312 Wrong position for completion menu in Rubric/Playground

13416 Problem with Refactoring : temporary to instvar

15760 ToggleMenuItemShortcut do not draw on athens

15854 template proposed to dynamically create class (on the fly)

15852 Reflectivity: #ensure: wrapping #after

15851 update Rubric to support edition in place of string morph

15850 Editable StringMorph revival

15846 Monticello cleaning and repackaging

15848 Update Rubric support for temporaries addition

15835 enable use of experimental fast table for Nautilus

15843 Tiny cleanup Opal

14776 Create test package for Jobs

15841 Removing Monticello dead and duplicated code
15840 RF: add support for #instead links

15833 Remove Notifications from Job implementation
15830 enable compiler subclass for Reflectivity, start to move hooks from superclass

15836 Abort Rename class refactoring

New academic partner

The Pharo Consortium is very happy to announce that RyCh
has joined the Consortium as an Academic Partner.

RyCh (Robotics and Computation in Chile) is a laboratory 
of the Computer Science Department (DCC) of the Universidad
de Chile. RyCh is a new research group, with a focus on the 
computational aspects of robotics, more specifically machine 
learning and the software engineering process of robotics.
At RyCh, Pharo is the implementation technology for 
Live Robot Programming.


   - RyCh:
   - Pharo Consortium:

The goal of the Pharo Consortium is to allow companies and institutions to
support the ongoing development and future of Pharo.

Individuals can support Pharo via the Pharo Association:

An interesting testimony

If an opinion from a newcomer is useful, I’m not so obsessed about how popular Smalltalk is.

I came to Smalltalk because a friend of mine (Rafa Luque) was enthusiastic about it, and suggested me to try it.
The candy was not to build applications faster, but to think differently, to question what and how we approach problems with mainstream, industry “best practice” technologies and languages.

I see Smalltalk more like what security researches think of their discipline: it’s a process, not a list of tools or recipes. After almost two decades of developing commercial software for others and open-source projects (mainly) for myself, using mostly Java but also Lisp, Smalltalk has blown my mind. That wouldn’t have happened if I’d tried Seaside just because I wanted to try a different web framework.

In my case, to approach Smalltalk I needed a certain state of mind. You have to be aware programming is not memorizing design patterns and pay for an IDE to do most things for you, including to check for non-functional stuff nobody seems to care about. We’re in the “i’m proud to be lazy” era. I’ve seen smart people reject Smalltalk just because they don’t seem to care about what they do, or at least they don’t want to invest their time and energy.

Probably there’s a way to convert Pharo in node.js or Go, to make people use Seaside instead of ruby on rails. More people potentially means more financial support, and a better, sooner, full-featured, Pharo.

But even then, Smalltalk empowers people to think differently and gives the means to do so, and to promote that has to tackled differently.

I’d focus on how using Smalltalk gradually makes you a better professional, before blaming ourselves for not yet providing sophisticated frameworks anyone can use even if they don’t know what they’re doing.

Let’s take the Scala or the Git case. What made people invest in learning them was, at least in part, that they felt smarter. We should focus on that: comparing how the same problem is solved in other languages. Showing what live programming is. Don’t be humble just to be polite.

On the other hand, Smalltalk enables us to face problems that are potentially unachievable in other languages / ecosystems. Let’s define on a “Pharo way to do X”, which inevitably starts building a domain-specific browser, a custom IDE, and recipes for common scenarios.

In summary, as Martin Bahr says, it’s critically important to ensure we can survive indefinitely until the perfect “timing” arrives. But don’t punish ourselves too much for not being popular. For me, the greatest value lies elsewhere.

Jose San Leandro

New Code Formatter

Hello everyone,

We just integrated Blue Ink, the new pretty printer, in the latest Pharo 5 image ! Basically what was working still is and what was not well now is.

It is not yet enabled by default, we will wait for feedbacks first. If you want to try it, just type :

RBProgramNode formatterClass: BIConfigurableFormatter.

BIConfigurableFormatter formatAsYouReadPolicy: true

Feel free to contact me via the mailing list or personnal mail if you experience a strange behavior. I tried to improve all of them but with you I am sure all the cases will be treated in an exhaustive way.

Thanks for testing it, I hope it will convince you to use format as you read in Nautilus or just automatically format your code.

Franck Warlouzet


Pharo and OpenMP


I haven’t really seen anything related to this on the Internet and maybe some people will find it cool so I just wanted to report one thing I found out today :

NativeBoost works great with OpenMP !

I wrote a C function twice, once with openMP and once without. I made 32 bits libraries and used them from inside Pharo with NativeBoost.

When using the non – openMP library, only one core was used but when using the openMP library, both my cores were used and the time it took to run was really divided by (a little bit less than) 2 !

That’s just me but i find it really cool :p



Dear Pharoers and others,
As you know, the purpose of the Pharo Consortium is to secure Pharo by taking care about different needs, working on essential infrastructure assets and managing updates. The consortium is also an umbrella so that companies can control the system that they use daily.
Since last year, we (the board) has been working to complement this offer with a service completely dedicated to concrete and specific customer needs. PharoPro support for companies and business has as sole objective to make Pharo a strong and reliable choice for developing business critical application. PharoPro will make sure  that Pharo companies can fulfill their needs using Pharo as a platform for business.
Offering this new service will bring Pharo to another level of business acceptance. We propose to offer it in the umbrella of the Consortium.
We sketch the PharoPro services here:
We worked hard to on it and we will be at ESUG to discuss with you about business opportunities.
Do not hesitate to send us feedback about your needs
Esteban, in behalf of Pharo Board