Monthly Archives: October 2015

Pi with a touch screen and Pharo

I wrote a (really nice -changed from the editor) article on Medium on how to setup the Pi with a touch screen and Pharo:

Hope one or the other might be interested.

Have fun

CalipeL: a benchmarking tool for Smalltalk/X and Pharo

Hi there,

After more than 2 years of (time-to-time) development and about 
that much time of use, I'd like to announce CalipeL, a tool for
benchmarking and monitoring performance regressions.

The basic ideas that drove the development:

* Benchmarking and (especially) interpreting benchmark results 
  is always a monkey business. The tool should produce raw numbers,
  letting the user to use whichever statistics she need to make up
  (desired) results.
* Benchmark results should be kept and managed at a single place so
  one can view and retrieve all past benchmark results pretty much 
  the same way as one can view and retrieve past versions of 
  the software from a source code management tool.


- simple - creating a benchmark is as simple as writing a method 
  in a class
- flexible - a special set-up and/or warm-up routines could be
  specified at benchmark-level as well as set of parameters 
  to allow fine-grained measurements under different conditions
- batch runner - contains a batch runner allowing one to run 
  benchmarks from a command line or at CI servers such as Jenkins.
- web - comes with simple web interface to gather and process 
  benchmark results. However, the web application would deserve
  some more work.

Repository:!/~JanVrany/CalipeL-S (read-only export
  from the above and Pharo-specific code)

More information:

I have been using CalipeL for benchmarking and keeping track of 
performance of Smalltalk/X VM, STX:LIBJAVA, a PetitParser compiler 
and other code I was working over the time.

Finally, I'd like to thank to Marcel Hlopko for his work on the 
web application and Jan Kurs for his comments.

I hope some of you may find it useful. If you have any comments 
or questions, do not hesitate and let me know!

Regards, Jan

Another pack of great improvements

16786 Code formatter moves comments to wrong place

16815 DNU RBAndEnvironment>>packageNames while producing html report bootstrap architecture rule

16817 like 16798 #sourceInterval should work for every RBNode – RBLiteralNode too

16711 FileDialogWindow should fail silently on DirectoryDoesNotExist: when clicking on Junctions (Windows)

16807 SystemWindow refactoring (Events, activation ++)
16816 Storing System Settings produces error when preference directory does not exist

16809 Sort the variables from each class in the variables-menu alphabetically

16810 Floating editor size too large for Nautilus package pane

15184 Systembrowser package navigation inconsistent behavior

16799 RBParser assigns comments to wrong node

16798 #sourceInterval should work for every RBNode

16476 dropping an MCZ file on the world does not propose a browse anymore

16795 The package Random includes tests

16800 ask a SpecWindow for #isDisplayed always returns true

16803 Renaming method category with floating editor: size of editing rectangle
16790 RBUnpackagedCodeRule crashes if entity has nil package

16772 Renaming method category with floating editor

15460 UITheme>>#backgroundColor packaged in Glamour-Morphic-Theme

16681 Storing System Settings using STON
16793 Minor protocol cleanup in SystemWindow for taskbar related items

16777 Querying block with many temps fails
16789 RBUnaryAccessingMethodWithoutReturnRule refers to #nodes instead of #statements

16758 Unify SystemWindow announcing with Morph announcing

16653 Add an architectural rule for the bootstrap layer

16770 Create a basic version of checking methods in LintRules

16785 Replace the usages of #smalltalkCode in OpalTools

16525 Nautilus leaking SystemAnnouncements
16759 update comment for #ifNotEmpty:

16779 Reflectivity: fix to be able to invalidate all method of package Kernel

16778 Entering a number then $ in the Playground throws a SubscriptOutOfBounds: error

16763 Add #isUsed to Manifest classes

16764 Lost argument names in Rubric, resized example

16761 Method source should not contain linefeeds in Kernel

16577 Random should be in its own package
16752 problems with new search function in FastTable

16753 Invalidate ProtoObject

15713 CommandLineUIManager>>#merge:informing: is not doing anything
16751 link invalidation: install cm directly for primitives and optionCompileOnLinkInstallation

16729 Removing PluggableTextField from FT

16689 FileList: remove some usage of deprecated classes (StandardFileStream)

16733 Canvas>>#reset calls two methods, neither of them exists

16748 inline installation code for restoring the original CM
16729 Removing PluggableTextField from FT

16748 inline installation code for restoring the original CM

16747 updated Configuration
16542 FTSelectionStrategy>>toggleRowIndex: logic duplication

16744 ReflectiveMethod: make sure to not use DNU forwarding on invalidate

16741 remove addModelMenuItemsTo:forMorph:hand:

16741 remove addModelMenuItemsTo:forMorph:hand:

16729 Removing PluggableTextField from FT

16744 ReflectiveMethod: make sure to not use DNU forwarding on invalidate

16628 RBBrowseEnvironment doesnt respect the Set Theory

16739 Senders and implementors do not work when one parameter is a selector in the form “with:do” (no space)

16745 ReflectiveMethod: do not get class from AST
16737 fix all users of NautilusUI

12354 includesSubstring: should return true when the argument is empty

16738 Reflectivity: do not wrap primitives if there is no link

16418 ScriptLoader>>diffServerRootString with Pharo 3 repo for Pharo 5?

16577 Random should be in its own package

16726 move Reflectivity-Styling to a separate package

16732 DNU when cancel fetch on retrieve icon sets
16732 DNU when cancel fetch on retrieve icon sets

16577 Random should be in its own package

16726 move Reflectivity-Styling to a separate package

16651 remove old ThemeIcons structure

16713 Update FastTable (See description for more info)

16568 STCommandLineHandler class >>#isResponsibleFor: and >>#activate are not consistent

16692 Simplification of Author>>#checkAndSetFullNameWith:
16262 Use Rubric in Transcript

16722 Fixing RubScrolledText and removing some users of RubPluggableTextMorph

15162 #asLegalSelector: bad name and wrong for selectors with args
16719 Extract Tick and Tabs from Polymorph

16634 Rename layout to classLayout (step 2 use new accessors in the tests)

16718 Added Help topic on importing resources in the Pharo image
16278 Viewing the hierarchy from Object or ProtoObject is sloow

16716 fix testClassRespectsPolymorphismWithTrait

16721 Comment of BlockClosure>>sourceNode is unclear

16715 options defined by classes or methods need to have overlay semantics

16714 Remove Tool-DependencyAnalyser-Checker package

16704 no helptext for playground buttons


16695 allow classes to force meta link options: #metaLinkOptions

16699 remove ThemeIcons references in Versionner

New Brick Preview

A small technical Brick preview 🙂
What is new:
 – Refactored and improved layouts. Now they also work with views
 – Text editor widget
 – List performance improvements
 – Many new examples

– Rewrote tests.

      They are visual and displayed as examples in browser.

 – Improved example browser.
      Examples are categorised in expandable tree list.
      Added example hints.
 – Many small improvements and bug fixes
Gofer it
smalltalkhubUser: ‘Pharo’ project: ‘Brick’;
configurationOf: ‘Brick’;
Please note, it is impossible to load brick in Pharo for a moment because of upcoming integration of GT. (Brick uses new GT stuff which is not in pharo yet). Please use Moose 6.
I also added brick examples entry to world menu.
Screen Shot 2015-10-15 at 22.02.01
Aliaksei Syrel

HTTPS proxying using HTTP CONNECT


Yesterday I did a first implementation of HTTPS proxying using HTTP CONNECT tunneling for Zn+Zdc, this should now be tested by a wider audience. With this new feature it should now be possible to access HTTPS Urls from behind an HTTP proxy. This is for all OS platforms. Thanks Nicolai for finding the spec reference and Torsten for the push.

In Zn #bleedingEdge

Name: Zinc-HTTP-SvenVanCaekenberghe.437
Author: SvenVanCaekenberghe
Time: 6 October 2015, 9:57:35.790306 pm
UUID: 96b9026b-561e-4d6f-88b7-46389b163e99
Ancestors: Zinc-HTTP-SvenVanCaekenberghe.436

Implementation of HTTPS proxying using HTTP CONNECT tunneling (section 5)

Rewrite ZnClient>>#newConnectionTo: with delegate to newly added ZnClient>>#setupTLSTo: which implements the mechanism described in the links above

Change ZnClient>>#readResponse: not to expect a body with a CONNECT request

Change ZnHeaders>>#request: to use #authorityWithPort for the Host header

Add ZnNetworkingUtils [class]>>#secureSocketStreamOn:

Change ZnRequestLine>>#writeOn: to write the correct Request-URI portion of the Request-Line in case of CONNECT and/or plain HTTP(S) proxying

Tested with Squid 3 as proxy
Name: Zinc-Resource-Meta-Core-SvenVanCaekenberghe.54
Author: SvenVanCaekenberghe
Time: 6 October 2015, 9:58:39.204572 pm
UUID: 134e875c-d2dd-4970-9697-b9d56833d77d
Ancestors: Zinc-Resource-Meta-Core-SvenVanCaekenberghe.53

Add ZnUrl>>#authorityWithPort and ZnUrl>>#hasSecureScheme
Name: Zinc-Tests-SvenVanCaekenberghe.234
Author: SvenVanCaekenberghe
Time: 6 October 2015, 9:59:59.387302 pm
UUID: d2831cd8-fa01-4f44-8533-f5045dabbd7d
Ancestors: Zinc-Tests-SvenVanCaekenberghe.233

Modify ZnClientTests>>#testIfFailNonExistingHost because of different behavior when a proxy is involved

On my machine all Zn+Zdc tests succeed with a proxy set (squid 3). Let's hope it works for others too. I did not yet test proxy authorization but I think it should work like before.

An HTTP Proxy can be set in World > System > Settings

Here is some code to do a simple test

ZnClient new get: ''.

ZnClient new get: ''.

ZnClient new get: ''.

ZnNetworkingUtils default isProxySet.

ZnNetworkingUtils shouldProxyUrl: '' asUrl.



A warm testimony

Hello Offray,

My apologies for the delay in reply. I have been on holiday.

Thanks for the suggestions. I am pretty much wanting to stick with Pharo solutions. I want to use and contribute to the Pharo ecosystem.

I believe the more we use our own tools and contribute toward the ecosystem the better our tools and the ecosystem will be. In Pharo I can possibly offer an occasional bug fix, contribute to documentation or tests.

And yes, the other solutions do offer that as well as they are open source. But the bar is much higher. I now have to understand their ecosystems, languages, and development cultures of a variety of tools.

In Pharo I have Pharo/Smalltalk. Even a simple user can often contribute in simple ways. Even as a simple user of a Pharo tool. I can submit issues, fix simple issues, improve method or class comments, etc. As I learn the Pharo tools and ecosystem I continually improve my ability to take care of myself and also contribute to the community. I think Pharo is the most user empowering environment I have found. Sure I can find lots and lots of other quality tools in other languages. But each is their own island. And depending on how broadly I spread the net. Different languages, different cultures, different licenses, all independent of each other.

I much prefer the Pharo ecosystem and culture. It is home.
I know others who like the other tools, and multiplicity of choice. And they feel comfortable there.

Choice is nice. Pharo is mine.

Thanks again for suggestions and for a view on how others approach problems and their solutions. That is always available as inspiration even within Pharo. I take a look at your stuff.


Steady progress is Pharo rythm

16696 Execution Demo with Reflectivity

16694 optionMetalevel and some cleanups

16697 NautliusPluginManager context menu broken
16685 remove ThemeIcons references in GTools

16702 remove ThemeIcons references in GTInspector

16701 remove ThemeIcons references in Catalog

16700 remove ThemeIcons references in GTSpotter
16680 remove direct references to icontheme classes
16602 Only get a basic command line handler in the bootstrap (avoid startup preferences)
16686 remove ThemeIcons references in ShoreLine

16673 Senders of… highlights wrong code segment
16691 MouseFocus and triggering modal dialogs from mouse event dispatcher

16690 Spec WidgetBuilt is send with an Adapter but it should be a widget (Morph)

16068 Debugger is losing the source code changes on method context change

16688 Coverage Demo with Reflectivity

16490 MorphSlot

16682 Syntax Error when recompiling the image

16679 links on Slots: add all reifications

16645 RBParser should not accept # <whitespace> and # <number>

16655 Menu stay up icon isnt removed
16674 Navigate from Variables to AST Node accessing that variable

16677 #after on Globals and Slots

16676 Desktop Logo hidden behind Background image

16660 improve #isUsed for Behaviours

16669 MetaLinks on Slots

16670 optionInlineCondition: do not inline condition

16668 Variables button throws KeynotFound when a variable is selected
16663 Minor tweaks to the Nautilus variable menu

16667 do not inline meta link: #optionInlineMetaObject

14618 Add a comment describing RBFileBlocksRule

16654 test for #optionOneShot and accessors for pre-defined options

16662 SlotClassBuilderError –> tClassBuilderError

16658 Reflectivity: crash on Morph Invalidate
16661 compatibility check when putting links on variables

10219 Completion: enter on accept awkwardness

16659 add #entity reification
16652 Menues now have a very strange reddish color

16631 Move integration rules to a PharoCriticRules class
16647 Nautilus Variable Menu Improvement

16648 ThemeSettings protocol cleanup

16649 Links of Globals and Class Vars: implement all reifications + extend for Globals
16646 test + fix: #after mit access to temp in method

16642 availableReifications: return the list of supported reifications for an entity

16632 RBParser should reject – space literal

16640 Reflectivity: add support for reifications #name and #value for Class Variables
16591 #findVariable:ifNone: methods needs to go back to Opal

16633 Rename layout to classLayout (step 1 add accessor)

16639 fix non common smalltalk syntax in PointTest

16620 Add a category “Pharo integration rules” to the critics browser

15858 review rule RBAbstractClassRule

16402 Diff view partly broken (Refactorgin ChangesBrowser)

16600 System-Changes should not depend on system-FileRegistry

16616 “Eliminate guarding clauses” critic is named wrong and maybe should be removed

16624 SimpleBorder borderStyle should initialize its width to a number

16622 Merge latest rubric fixes

16603 System-Hashing should not depend on Graphics Primitives

16615 Improve ContributingToTheCatalogHelp

16614 To use at:ifPresent:ifAbsent:, ifPresent block argument should not be mandatory
16597 DNU RBParseErrorNode>>statements: when | is placed before a .

16599 Compression should not depend on Graphics-Display Object (leftover)

16610 test: block body vs block
16606 remove bubble like ballon tooltip from menus

16605 senders/implementors window shows unrelated content

16598 Cannot save the contents of the standard workspace to disk

16596 #before for Class Variable
16595 Get rid of UnicodeInitialization in the bootstrap

16594 System-Changes should not depend on Text-Core
16523 Nautilus Regex Search Box borken

16587 Deprecate SmalltalkImage>>#logChange:

16573 Monticello should not depend on System-FileRegistry
16589 #instead for block sequence

16588 Integrate Catalog 0.9

16586 Load latest version of CodeImporter

16581 one-shot links

16582 Reflectivity: #instead for sequence nodes

15260 WriteStream on new string

16578 Add an id to Session