Planet Smalltalk

May 28, 2015

ESUG news - ESUG early registration deadline is June, 1st

ESUG early registration deadline is June, 1st!

Please register here

Torsten Bergmann - Pharo on LinkedIn

May 27, 2015

Torsten Bergmann - Pharo on Raspberry Pi video

I made a video about it:

May 26, 2015

Torsten Bergmann - SoundsLike

Soundex, Double Metaphone and NYSIIS algorithms from Robert Jarvis were ported to Pharo by Udo. Project "SoundsLike" is on SmalltalkHub. There is also "Phonet" - a program for context-sensitive phonetic string replacement.

Torsten Bergmann - Pharo4 getting started tips

Torsten Bergmann - DLS 2015

11th Dynamic Languages Symposium 2015 has a call for papers.

Torsten Bergmann - My Smalltalk

The Smalltalk on Rails project has been replaced by "My Smalltalk". Another Smalltalk that is written on top of JavaScript.

Torsten Bergmann - Smalltalk Reflections #14

James Foster - GemStone and Leap Seconds

Periodically the International Earth Rotation Service determines that Coordinated Universal Time needs to be adjusted to match the mean solar day. This is because the earth doesn’t rotate at a constant speed and in general takes slightly longer than 86,400 seconds. These adjustments have been done through adding (or, in theory, removing) a second every few years. The next leap second insertion is scheduled for June 30th, 2015 at 23:59:60 UTC. How does GemStone/S handle that?

GemStone gets time from the host OS (Unix Time) and is typically described as the number of seconds that have elapsed since 00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970. This definition is correct so long as we assume that each and every day has exactly 86,400 seconds. If you take into account the 27 leap seconds that will have been added as of June 30, 2015, it is more accurate to say that Unix Time is the number of atomic seconds that have elapsed since 00:00:27 UTC, 1 January 1970. The way the adjustment occurs is that when there is a leap second, the Unix time counter takes two atomic seconds to advance by one Unix second.

The impact of this approach is that a record of when something happened will be correct, but the time between two events could be reported as being one or more seconds less than the actual time between the events. For example, Unix time (and GemStone) will report that there are five seconds between June 30 at 23:59:55 and July 1 at: 00:00:00 when in fact in 2015 there were six seconds between those two times.

Whether this matters is an application-level or domain-level problem. If keeping track of the time between events needs to be accurate (e.g., recording some rapid physics event), then relying on Unix time (or GemStone) will not be sufficient. If all that is needed is a timestamp and it is acceptable to have June 30, 2015 23:59:59 UTC last for 2000 milliseconds, then things should be fine.

May 25, 2015

Smalltalk Jobs - Smalltalk Jobs – 5/25/15

Good luck with your job hunting,
James T. Savidge

View James T. Savidge's profile on LinkedIn

This blog’s RSS Feed

Filed under: Employment Tagged: jobs, Smalltalk, Smalltalk jobs

Pharo Weekly - New list widget under development

Esteban Lorenzano started to develop a new list widget to replace all the widgets into Pharo.

You can load it using

Gofer it
smalltalkhubUser: 'estebanlm' project: 'FastTable';

My idea is to ask community help finish it.

Implementation uses datasources to feed the list, so in theory you can browse infinite rows without loosing speed.
according to my tests (in my machine):

[ Object browse ] timeToRun asMilliSeconds. -> ~3000ms (without cache)
[ Object browse ] timeToRun asMilliSeconds. -> ~350ms (with cache active)
[ Object browse ] timeToRun asMilliSeconds. -> ~150ms with FastTable, always.

There is an adaptor FTPluggableIconListMorphAdaptor that has the same format as a PluggableIconListMorph so changing already existing calls will be easy (even if there should not be done like that in the long term :)

So, so far, list works fine, but

– still missing drag&drop support
– there are some issues remaining:
— cells escaping his width
— last elements in long lists sometimes are not visible

some details has to be around too… but this is a good design, taken from Cocoa… is years better than the naive implementation of old PluggableListMorph and better than the strategy used by NewList (spawning threads all around).

Please, help me finish!
Repository is open so anybody can contribute.

FTExamples has a set of wxamples with all things implemented :)


ps: I already has the adaptor working with Nautilus, but since it depends on some changes on it I will wait until is integrated to push it. But basically if you want to try you just need to go to: CategoryWidget>>#buildCategoriesList, ClassWidget>>#buildClassesList and MethodWidget>>#buildMethodList and change PluggableIconListMorph with FTPluggableIconListMorphAdaptor

May 24, 2015

Smalltalk on Rails - New Smalltalk Site

The “Smalltalk-on-Rails” project has been replaced by a newer project based on JavaScript.

“MySmalltalk” is written entirely in JavaScript and runs on:

  • desktop as a Chrome application (windows, mac, linux)
  • browsers (Chrome, Safari, Firefox, IE)
  • tablets (Android, iPad)
  • smartphones (Android, iPhone)
  • servers using Node.js

You can test it out online here:

The project is based on the Qooxdoo framework and will incorporate both desktop and mobile widgets.

There will be a free desktop version available from the Google Store in early June.

The server is written in Node.js using a Postgresql database, Redis for caching, and for messaging.

The blog for MySmalltalk is here:



May 22, 2015

Stefan Krecher - Smalltalkify Groovy

By adding some Mixins to a groovy script, it is possible to use some smalltalk-like expressions like

ifTrue: [ do something ] ifFalse: [do something else]

Or do some smalltalk-like exception handling like

[ aBlock ] on: #Error do: [ something ]

In groovy this would look like:

Find the full source here: gist on github

May 21, 2015

Torsten Bergmann - Seaside meets Mustache

Tired of writing all HTML in Seaside using methods. Then just combine Seaside with Mustache - saves you some time in the first place and later you can convert to messages and refactor the way you like.

Marten Feldtmann - PUM/Gemstone – migration of instances …

When creating new versions of a model one might change already defined classes in that model and add or remove attributes from that class definition.

Gemstone is able to handle different versions of classes and allows the programmer to migrate instances of old class versions to a specific new version of that class.

The job of migration can be very difficult and this is my first attempt in PUM is to at least do the initialize stuff (in the initialize method) also in the migration support method. The generated code looks for all current attributes (in den new model) defined and if they are new, they simply initialize them with the value from that model.

migrateFrom: oldValue instVarMap: unusedParameter
	|  oldNames |

	oldNames := oldValue class allInstVarNames.

	(oldNames includes: #'studyMembership') ifFalse:[ studyMembership := StringKeyValueDictionary new ].
	(oldNames includes: #'quotas') ifFalse:[ quotas := Set new ].
	(oldNames includes: #'quotaFullAppointmentHandling') ifFalse:[ quotaFullAppointmentHandling := CATIEnumQuotaFullAppointmentHandling noHandling ].

Filed under: Smalltalk Tagged: Gemstone, PUM, Smalltalk

May 20, 2015

The Weekly Squeak - Dynamic Languages Symposium 2015 Call For Papers

pittsburgDLS copy


C A L L   F O R   P A P E R S


======== DLS 2015 ===========

11th Dynamic Languages Symposium 2015

October, 2015

Pittsburgh, Pennsylvania, United States

Co-located with SPLASH 2015

In association with ACM SIGPLAN

The 11th Dynamic Languages Symposium (DLS) at SPLASH 2015 is the premier forum for researchers and practitioners to share knowledge and research on dynamic languages, their implementation, and applications. The influence of dynamic languages — from Lisp to Smalltalk to Python to Javascript — on real-world practice and research continues to grow.

DLS 2015 invites high quality papers reporting original research, innovative contributions, or experience related to dynamic languages, their implementation, and applications. Accepted papers will be published in the ACM Digital Library, and freely available for 2 weeks before and after the event itself.  Areas of interest include but are not limited to:

Innovative language features and implementation techniques

Development and platform support, tools

Interesting applications

Domain-oriented programming

Very late binding, dynamic composition, and run-time adaptation

Reflection and meta-programming

Software evolution

Language symbiosis and multi-paradigm languages

Dynamic optimization

Hardware support

Experience reports and case studies

Educational approaches and perspectives

Semantics of dynamic languages

== Invited Speaker ==

DLS is pleased to announce a talk by the following invited speaker:

Eelco Visser: Declare your Language.

== Submissions and proceedings ==

Submissions should not have been published previously nor under review at other events. Research papers should describe work that advances the current state of the art. Experience papers should be of broad interest and should describe insights gained from substantive practical applications. The program committee will evaluate each contributed paper based on its relevance, significance, clarity, length, and originality.

Papers are to be submitted electronically at in PDF format. Submissions must be in the ACM format (see and not exceed 12 pages. Authors are reminded that brevity is a virtue.

DLS 2015 will run a two-phase reviewing process to help authors make their final papers the best that they can be. After the first round of reviews, papers will be rejected, conditionally accepted, or unconditionally accepted. Conditionally accepted papers will be given a list of issues raised by reviewers. Authors will then submit a revised version of the paper with a cover letter explaining how they have or why they have not addressed these issues. The reviewers will then consider the cover letter and revised paper and recommend final acceptance or rejection.

Accepted papers will be published in the ACM Digital Library.

Important dates

Abstract Submissions: Sun 7 Jun 2015

Full Submissions: Sun 15 Jun 2015

First phase notification: Mon 27 Jul

Revisions due: Mon 3 Aug

Final notification: Mon 17 Aug

Camera ready: Fri 21 21 Aug

Program chair

Manuel Serrano, Inria Sophia-Antipolis,

Program committee

Carl Friedrich Bolz, DE

William R. Cook, UTexas, USA

Jonathan Edwards, MIT, USA

John Field, Google, USA

Matt Flatt, USA

Elisa Gonzalez Boix, Vrije Universiteit, BE

Robert Hirschfeld, Hasso-Plattner-Institut Potsdam, DE

Benjamin Livshits, Microsoft, USA

Crista Lopes, UC Irvine, USA

Kevin Millikin, Google, DN

James Noble, Victoria University of Wellington, NZ

Manuel Serrano, Inria, FR (General chair)

Didier Verna, EPITA, FR

Jan Vitek, Purdue, USA

Joe Politz, Brown University, USA

Olivier Tardieu, IBM, USA

Robert Hirschfeld

Torsten Bergmann - ICSEconf tool demo video on Vidi in Pharo

Cincom Smalltalk - Smalltalk Digest: May Edition

The May edition of The Cincom Smalltalk Digest is available now.

May 19, 2015

Torsten Bergmann - Smalltalk Reflections episode 13 - an Interview with John O'Keefe from Instantiations

The Smalltalk Reflections podcast episode 13 is up - An Interview with John O'Keefe from Instantiations.

Torsten Bergmann - ARM Cog progress

Tim can now run the ARM cog/spur system on a Pi 2. Read about the progress they made.

Torsten Bergmann - Scripting with Pharo

May 18, 2015

Torsten Bergmann - Osmocom and Pharo

Osmocom (Open Source Mobile Communication) is a collection of Free Software / Open Source Software projects in the area of mobile communications. There is also some activity in the Pharo space for it with an own Osmocom team on SmalltalkHub with several projects like GSM, SMPP, TCAP, ...

Torsten Bergmann - System Monitoring for Pharo Images

Torsten Bergmann - Pharo HoneyGinger on CI

HoneyGinger is a fluid dynamics simulator and visulalizer based on the SPH method written in Pharo. There is now a CI job for it.

Smalltalk Jobs - Smalltalk Jobs – 5/17/15

  • New York, NYObject Oriented/Smalltalk Developer – Associate (Job ID 150046448) and Smalltalk/Object Oriented Developer (Job ID 150050665) at J.P. Morgan
    • Required Skills:
      • Strong understanding of Object Oriented development practices.
      • Experience of Smalltalk programming language preferable but not essential
      • Strong interpersonal skills.
      • Experience or familiarity with basic principles of pricing financial products.
      • The successful applicant is most likely to be a graduate, or equivalent with work experience, who is keen to develop a career in a world class investment bank
      • Good experience developing commercial software and are familiar with controls, tools and processes used in source code management, build management, and development lifecycle.
      • Experience of working in a large development team with groups in various global locations
      • The successful candidate will have confidence, ability and will to work on a trading floor which will require abilty to build and maintain strong working relationships with demanding sponsors and stakeholders
      • Excellent analytical and problem solving skills
      • Excellent verbal and written communication skills, able to communicate accurately, concisely, and effectively in a global organization
      • Experience in project and software development life cycles, particularly Agile technique and methodologies, including breaking down high level requirements into technical deliverables, providing reliable estimates of work and delivering on time.
      • The ability to work under pressure on multiple items in parallel with agreed timelines
      • Self starter with proven ability to produce end results with minimal assistance and supervision
    • Additional listings: J.P. Morgan, J.P. Morgan
  • Jersey City, NJ – Smalltalk Developer through VDart, Inc.
    • Required Skills:
      • Bachelor‘s degree in a computer related field or equivalent experience
      • 5+ years of experience developing using Smalltalk
      • Excellent planning/organizational, problem-solving, and analytical skills
      • Experience in coordination with client and onsite offshore model
      • Excellent communication skills
      • Basic presentation skills
      • Basic decision-making skills
      • Basic leadership skills
      • Must be able to maintain a high degree of accuracy and confidentiality
      • Some travel may be required, including overnight stays
      • Basic knowledge of insurance and financial services products
      • Basic knowledge of business unit applications preferred
      • Excellent time management skills
  • Omaha, NE – Smalltalk Developer through SYNTEL Inc.
    • Required Skills:
      • Hands on experience in Smalltalk programming
      • Exposure to basic UNIX commands
      • Exposure to Oracle SQL
      • Exposure to Java programming
      • Strong OOP concepts.
      • Experience in coordination with client and onsite offshore model.
    • Wanted Skills:
      • Cards & payments domain knowledge
    • Additional listings: SYNTEL, SYNTEL
  • Denver, CO – Application Developer through CTG
    • Required Skills:
      • 3-5 yrs experience with Visual Age Smalltalk Object Oriented Programming
      • 3-5 yrs experience with Informix
      • Strong OOP concepts
      • Should have good knowledge on Unix Shell Scripting – Korn Shell
    • Additional listings: CTG
  • Bangalore, IndiaSoftware Engineer through Career Creatorz
    • Required Skills:
      • Hands on experience working in C programming language
      • Strong analytical, logical, problem solving, trouble shooting skills
      • Knowledge of project life cycle
      • Excellent communication skills
    • Wanted Skills:
      • Knowledge of OOPS concepts, Scripting
      • Exposure on C++ is a plus
      • Experience in the semiconductor equipment manufacturing industry
      • Understanding of distributed systems and socket programming
      • Understanding of Design Patterns
      • Knowledge of RTOS
      • Knowledge of SQL server
      • Knowledge of SmallTalk and VisualWorks

Updates on 5/25/15: Updated expired listing for the position in Fort Lauderdale, FL.

Updates on 5/25/15: Added a listing for the position in Fort Lauderdale, FL.

Updates on 5/25/15: Added a listing for the position in New York, NY.

Updates on 5/25/15: The position in Jersey City, NJ has been filled or is no longer available.

Updates on 5/25/15: Removed listings for the position in Omaha, NE.

Updates on 5/25/15: The position in Denver, CO has been filled or is no longer available.

Good luck with your job hunting,
James T. Savidge

View James T. Savidge's profile on LinkedIn

This blog’s RSS Feed

Filed under: Employment Tagged: jobs, Smalltalk, Smalltalk jobs

May 17, 2015

Smalltalk Jobs - Smalltalk Job at Cincom – 5/17/15

Cincom has an open position in North America in the Smalltalk team.

  • Software Engineer – VisualWorks at Cincom Systems
    • Required Skills:
      • Five years in Smalltalk
      • Documentable experience in Object Oriented Design (OOD) of application frameworks
      • Hands-on experience with VisualWorks and/or ObjectStudio
      • Background developing quality Smalltalk code and delivering product feature documentation
      • Publicly available work in VisualWorks, especially tools enhancements
      • Familiarity with the internals of the VisualWorks tool set
      • Comfortable using VisualWorks to design and build user interfaces
      • Thorough familiarity with agile development methodologies
      • Strong written communication skills and planning abilities
      • Works well in a distributed team environment
Good luck with your job hunting,
James T. Savidge

View James T. Savidge's profile on LinkedIn

This blog’s RSS Feed

Filed under: Employment Tagged: jobs, Smalltalk, Smalltalk jobs

Torsten Bergmann - NBSQLite3 Online Backup

Pharo Weekly - Pharo pi machine

Got my Raspberry Pi B+ with a Tontec® 3.5 touch screen display
to bootstrap into Pharo.

The Raspberry Pi from CI (
worked out of the box on Raspbian. Nice!

Torsten B.


Pierce Ng - Scripting with Pharo

A couple of links to set the scene, one from 2004, the other from 2005. Their titles relate to this post, although their content doesn’t really.

While Pharo is an immersive interactive programming environment, it can also be used for operating system command line-oriented scripting. Take a freshly downloaded standard Pharo 4 image, here renamed p4cli.image:

% pharo -vm-display-null p4cli.image --list
Currently installed Command Line Handlers:
Fuel            Loads fuel files
config          Install and inspect Metacello Configurations from the command line
save            Rename the image and changes file
update          Load updates
printVersion    Print image version
st              Loads and executes .st source files
test            A command line test runner
clean           Run image cleanup
eval            Directly evaluates passed in one line scripts

Let’s see how to use NBSQLite3’s online backup functionality to back up a live SQLite database through a Pharo script.

Firstly, install the current bleedingEdge version of NBSQLite3.

% pharo -vm-display-null p4cli.image config \ \
      ConfigurationOfNBSQLite3 --install=bleedingEdge
'Installing ConfigurationOfNBSQLite3 bleedingEdge'

Loading 1.2 of ConfigurationOfNBSQLite3...
Fetched -> NBSQLite3-Core-PierceNg.7 --- ...
...finished 1.2%

Now make a script of the backup code snippet seen in my previous blog post, changing the database file names. In this case, I am using the script to make a copy of my server’s firewall log database, which is live and constantly updated by the logging daemon. The script is named ‘’.

| srcDB dstDB backup |
srcDB := NBSQLite3Connection openOn: '/var/log/ulog/ulogd.db'.
dstDB := NBSQLite3Connection openOn: '/tmp/ulogd-backup.db'.
[   backup := NBSQLite3Backup new.
    srcDB asBackupSource: backup.
    dstDB asBackupDestination: backup.
    backup prepare.
    [ [ backup completed ] whileFalse: [ backup step ] ] ensure: [ backup finish ]
] ensure: [ srcDB close. dstDB close. ]

Run the script under Unix “time”:

% time pharo -vm-display-null p4cli.image st --quit
pharo -vm-display-null p4cli.image st --quit 
0.26s user 0.10s system 53% cpu 0.675 total

% ls -l /var/log/ulog/ulogd.db* /tmp/*.db
-rw-r--r-- 1 pierce pierce 11636736 May 17 20:49 /tmp/ulogd-backup.db
-rw-r--r-- 1 ulog   ulog   11643904 May 17 20:50 /var/log/ulog/ulogd.db

The database files aren’t identical, because the logging daemon has written yet more data since the backup was taken.

Torsten Bergmann - Short example of composing RTDynamicStackedGrapher