The Pharo MOOC will start october 16th, 2017 on France Université Numérique (FUN).
This MOOC is free and fully available in French and in English.
Registration web page:

If you are either a beginner or an expert in object-oriented programming, this MOOC will change the way you program with objects: come and learn or rediscover object-oriented programming with Pharo! Pharo is a pure object-oriented programming language in the tradition of Smalltalk. It offers a unique developing experience in constant interaction with live objects. Pharo is an open-source platform (MIT licence) supported and used by a joint consortium of industrials and academics (

From the research point of view, Pharo provides a very malleable language to prototype new ideas thanks to its unique and advanced reflective layer.

More details on the MOOC web page:

Over the last years, the RMOD team of INRIA Lille and the CAR theme of IMT Lille Douai have been working together on creating tiny language cores. For example, Guillermo Polito demonstrated in his PhD a fully reflective kernel that fits into 80 kb of memory and that it is possible to have hyper specialized kernels down to 11 kb. We have also worked on remote debugging (PhD of N. Papoulias) and dynamic code updates (PhD of P. Tesone) of such kernels. All of these works are prototyped in Pharo. More recently, RMOD have been working on advanced probes mechanisms (M. Denker) and a solid remote debugging infrastructure (D. Kudriashov).

The goal of this PhD is to revisit the architecture around such mini-kernels for building IoT applicatons. The following tasks are foreseen:

- improve the tools to: edit, compile, debug, deploy and update such kernels on IoT devices. Learning how to debug remotely and dynamically update such IoT systems using the PharmID Pharo environment. This task will be in cooperation with M. Denker and D. Krudiakov on remote debugging for IoT and G. Polito for the kernel edition and tooling,

- define some language extensions to manage groups of IoT devices to program them at once. Managing hundreds or even thousands of IoT devices is a challenging task. We want to explore different solutions to help deploying and updating groups of IoT devices using some registration mechanism in a cloud server or some groups/roles based approaches for example,

- expressing the architecture of IoT applications. We would like to explore also how to express IoT architectures and what are the abstractions that should be offered to developers such as expressing event-driven architectures with declarative ECA (Event-Conditions-Actions) rules.
But we will study a couple of typical IoT applications.

- dynamically update an IoT application. An IoT application needs to adapt itself because unreachable or faulty devices or the diminution of available bandwith. We would like that the whole application can reconfigure itself in such situations as Guillaume Grondin proposes it in its PhD.

- Lighweight virtual machines. Virtual machines in the IoT context are very powerful for incremental deployment or dynamic updates. Although they are tuned for speed, they consume space compared to a non VM-based program. In this task, we would like to investigate what is the minimal memory consumption that we can reach for a VM usable for IoT. To do so we will use a standard VM such as Cog (the open-source virtual machine of Pharo) and degrade it. We will use it since our minimal kernels are running on it.

Note that ZweiDenker GmbH is interested in collaboration on the IoT management cloud infrastructure.

To apply, please send us:

- a CV
- a copy of your Master diploma
- a copy of your Master thesis
- 2 (two) reference letters, with the contact details of the referents
- links to videos of demos of your experiments and/or simulations

The application materials should be sent no later than August 30th 2017 by email to Prof. S. Ducasse
Email subject must start with: [PhD-RMoD-CAR-2017].

- G Polito, Stéphane Ducasse, N Bouraqadi, L Fabresse, M Mattone. Virtualization Support for Dynamic Core Library Update. Onward!, Oct 2015, Pittsburg, USA.
- Guillermo Polito. Virtualization Support for Application Runtime Virtualization and Extension. Ph.D. Thesis 2015. Co-delivrée par l’Université de Lille et l’École des Mines de Douai.
- Extended results of Tornado: A Run-Fail-Grow approach for Dynamic Application Tayloring. Commanditeur: École des mines de Douai, France. 50p, July 2014
- Nick Papoulias, Noury Bouraqadi, Luc Fabresse, Stéphane Ducasse and Marcus Denker, Mercury: Properties and Design of a Remote Debugging Solution using Reflection, Journal of Object Technology, 14, 1:1-36, 2015
- Madcar: an abstract model for dynamic and automatic (re-)assembling of component-based applications
G Grondin, N Bouraqadi, L Vercouter. International Symposium on Component-Based Software Engineering, 360-367.

PDF Job Description


Automatically copy files that are added or modified in a specific folder of an svn repository.
Useful for Web sites, …

Prepare a post-commit script

cd /svn/robots/hooks
cp post-commit.tmpl post-commit
chmod ug+x post-commit

Be careful of the owner/group of this post-commit file because it is the unix user that is dedicated to execute post-commits that must have executable rights.

The post-commit script

Example of script that checks if files in “PhaROS/Scripts” are involved in the latest commit.
If yes, copy them in /var/www.



for scriptfile in `svnlook changed /svn/robots | awk -F "PhaROS/Scripts/" '{print $2}' | xargs`; do
        svn export --force --non-interactive -q  file:///svn/robots/PhaROS/Scripts/$scriptfile /var/www/Scripts/$scriptfile

Test the script

./post-commit /svn/robots 395

Be careful of the rights here too.
This post-commit script may be executed by a different user than yours when testing like above.
The real test is to modify the files in a repository copy and effectively do a commit.

CodeJam is a programming contest. It includes a lot of problems.
For each problems, 2 data sets are provided: a small one and a large one. It is really interesting to learn programming.
You can try a solution on the small data set and also send it to the CodeJam web site to know if it is correct and then try on the larger data set.

CJSover is a framework written in Pharo to easily implement algorithms to solve CodeJam problems.
It simplifies data file reading and writing. I also implemented some (really naïve and non-optimized ;-)) solutions to some problems.
And for those “solved” problems, I commit here the correct solution to then be able to run automated tests that re-run them.


$ git clone CJSolver.git
$ cd CJSolver.git
$ sh                # this will download the Pharo VM + Pharo image + load the CJSolver code
$ ./pharo-ui cjsolver.image

I did this small framework because:
- I want that students learn Pharo,
- I want that students participate to some programming contests using Pharo,
- I want to show students that YES, we can also implement these problems in Pharo

Please, checkout the code,
optimize already implemented solutions,
or implement solution to new problems,
and have fun ;-)

Lots of fonts are available for LaTeX here

1. Example: install the emerald package


ln -s ~/Libary/texmf .texmf # because I am on mac

cp -fr emeral/tex/latex/emarald/ ~/.texmf/
cp -fr emeral/fonts ~/.texmf/

cd ~/.texmf
texhash .

cd ~/.texmf/fonts/map/dvips/
updmap updmap --enable Map

2. emerald-test.tex


\title{Emerald testing}
\author{Luc Fabresse}


	\csname \showFontaux \endcsname%
	\marginpar{\vspace*{0.6cm}\small\csname \showFontaux \endcsname #1}%


We are going to try a series of standard Laserwriter fonts.

% \showFont{ECFDecadence}
% \showFont{ECFDecadenceWithoutTheDiamonds}
% \showFont{ECFDecadenceCondensed}
% \showFont{ECFDecadenceInTheDark}
% \showFont{ECFDecadenceInTheDarkCondensed}
% \showFont{ECFDecadenceInADifferentLight}
% \showFont{ECFDecadenceInTheDarkCondensedMarquee}
% \showFont{ECFSyriac} 


3. Compile and see

pdflatex emerald-test.tex