Monthly Archives: April 2018

Iceberg 7.4

Hi all,

Time for the weekly Iceberg update.
The next pharo build will include Iceberg 0.7.4, with many improvements
done during this last week.

Documentation wise, all documentation/workflow valid for 0.7.3 is still
valid for 0.7.4. Thanks to all brave users, issue reporters and
contributors :).

Key changes:
 - Several improvements in merging (mostly UI)
 - Optimize Pharo workflow (less fetches and unnecessary diffs)
 - Lots of new automated tests to cover merging, reverting and some git
interactions that are difficult to capture manually

Infrastructure changes:
 - Since 0.7.2 was released, we made the resolution of making an
enhancement in the infrastructure per release
 - In 0.7.3 we fixed travis CI so builds are run on every commit and on
pull requests
 - In this relese (0.7.4) we introduced in the build tests againt pharo 6.1
and 64 bits
   * The idea is to prepare the field for a future backport to Pharo 6.1
   * And have good 64 bit support

In the next version our idea is to put the focus on enhancing
 - metacello integration
 - Pharo6.1 compatibility working smoothly
 - add a couple of more videos on scenarios like:
   * how to upgrade and contribute to iceberg
   * how to review a pharo fix
   * how to reuse your image for other fixes
   * handling merges
   * how to update a fork

Here is the detailed changelog with all closed issues during this week:

#729 Update .travis.yml to test Pharo 6 and 64 bits
#689 Creating a repository in an existing location shows a debugger UI
#556 Removed packages are not removed from git Model bug
#727 Adapt properties reading of Tonel projects for Pharo 6.1.
#728 Ask confirmation on fetch all action
#543 In merge window removed methods are not taken into account Model bug
#695 Specifying that Clone GitHub repository only deals with ssh mode
Github plugin UI
#690 Revert all does not behave correctly in detached working copy Model
bug important
#720 Commit panel should be selected by default when opening the commit
window UI enhancement
#724 Change focus order of commit window  UI enhancement
#719 Typing just after entering commit windows throw an error UI bug
#721 Repository creation error not handled Github plugin bug
#722 Typo in email git properties Libgit bug
#716 "#pathString was sent to nil" if Pharo repository is not resolved
Metacello Integration bug important
#709 Cannot see the arrow in merge view
#701 Merge view shows extra things UI enhancement merge
#710 Merge does not apply changes right bug merge
#711 The merge lose some changes bug merge
#694 Extra diffs happen Model enhancement important
#705 Clone repair action does extra actions Model enhancement
#647 Following script for Pharo6.1 leads to unusable Iceberg
(>>#binaryWriteStream) Pharo6-backport bug important


Pharo, Roassal and Grafoscopio at re:publica 2018


I will be showcasing Pharo, Roassal and Grafoscopio at re:publica 2018,
next week. As you may know, re:publica[2] is one of the most important
and visible media & digital culture conventions in Europe and is a good
scenario for the Pharo community.  You can find details about my
participation at [1]


I will be making intensive refactoring on the Dataviz package to create
some usual and unusual data visualizations from data exported from
Twitter, so I may be more active those days in the Discord and mailing
list channels, is some questions arise.

Thanks in advance for the Pharo communities support. I wouldn't be able
to be there without it.



Iceberg 0.7.3

Hi all,

We just introduced Iceberg 0.7.3 into Pharo. This new version solves
several issues people had when contributing to Pharo in general and others.
I've made a screencast on how to contribute to Pharo, and added some
tutorial and glossary in Iceberg's wiki.

Below the links and the changes log.

Thanks for making your issue reports ^^. We will schedule a backporting to
Pharo6.1 in a couple of weeks, once we have another iteration.


# Contribute to Pharo with Iceberg 0.7.3

- wiki page:

- Screencast:

This screencast shows how to use Iceberg 0.7.3 to contribute to latest Pharo 7, by cloning from scratch your own (potentially outdated) clone.

This video will guide you through:
 - solve the "Missing local repository" by cloning
 - solve the "Fetch required" that appears because the fork is out of date
 - solve the "Detached working copy" by creating a new branch
 - use the pharo plugin to create an issue branch
 - make some changes, commit them and push them to your fork
 - make a pull request

If you already have a clone, you can just import an existing repository
from your disk. The rest of the instructions should be the same.

If you don't have a fork, create one before doing anything else.

New videos to come with more explanations.

# Iceberg Glossary

# 0.7.3 ChangesLog

   - #693 <>: fixing problem
   when the announcement of changes in a package is nil. (bug, important)
   - #682 <>: update update
   script (Pharo6-backport)
   - #681 <>: Author name is
   not correctly decoded (UI, enhancement)
   - #680 <>: Repair actions
   dialog should explain the situation (UI, enhancement, important)
   - #679 <>: Create branch
   repair action should show create branch from issue if available (Pharo
   plugin, UI)
   - #678 <>: Iceberg does
   not correctly recognize packages (bug, important)
   - #677 <>: Unknown commit
   can only be solved with repair action (Model, bug, important)
   - #676 <>: Unknown commit
   state is not properly shown (UI, bug, important)
   - #667 <>: Merging
   branches with file deletion doesn't seem possible (bug, important, merge)
   - #666 <>: Iceberg
   sometimes add a $ to commit message (Model, bug)
   - #662 <>: The Pharo
   plugin has to do the fetch only if required. (Pharo plugin, enhancement)
   - #660 <>: Add a star badge
   in the push button in case of a new branch ()
   - #658 <>: Progress Bar
   during checkout of Repository. (UI, enhancement)
   - #657 <>: Confusing UI:
   Ghost Test maybe should be default? (UI, enhancement)
   - #656 <>: Typo in
   Progress Bar (UI, bug)
   - #651 <>: When pushing a
   new branch the list of commit is empty (UI, bug)
   - #650 <>: "Create new
   branch from issue" is leaving image in detached working copy state ()
   - #649 <>: The VM is
   crashing when trying to use Iceberg from a saved image (bug)
   - #645 <>:
   IceLibgitRepository should use "utilities" protocol instead of "utils"
   (clean up)
   - #644 <>: Unnecessary
   temp in IceTipGitHubRepositoryPanel>>#getGitHubRepository" (clean up)
   - #643 <>:
   LGit_GIT_ERROR: error authenticating: no auth sock variable loading a Tonel
   based baseline dependency in smalltalkCI (bug, important)
   - #639 <>: Create pull
   request fails if branch has not been pushed (Github plugin, bug)
   - #636 <>: The pull
   button should have a star badge when it has no upstream (UI, enhancement,
   - #634 <>: Travis is not
   building Pull Requests (CI, bug, important)
   - #624 <>: add "add
   remote" to remote picking on pull/push browsers (enhancement)
   - #610 <>: Fix for issue
   #608 <> and #607
   <>. (clean up)
   - #609 <>: New branch
   repair action does not refresh dirty packages (UI, bug)
   - #583 <>: Creating a
   tonel project does not commit the properties file (Model, bug)
   - #542 <>: Bug during
   commit of a new package (Model, bug)


Guille Polito

Pharo contributor: to contribute to Pharo

Hi Sven

if you like you can also use my "" - at least 
on Ubuntu (where I wrote, tested and use it)

- just clone the project
- use "" to download latest P7 automatically and started, it will also load a contribution 
  help book I did where all is explained

- For a quick start usually you just have to go to the very last help page of the appearing help tool and click 

    CPTCloneTool run

  to automagically download and update you fork (after giving your Github username)

Then you can contribute as usual by having a branch for a bug number in Iceberg and so on. 

Side note:
Currently new Iceberg still has some trouble:
 - one has to discard the changes on Fuel (as there are none) after the automatic synch of the tool
 - one has to "LGitLibrary initialize" when one reopens a saved image (see, otherwise VM will crash
I already notfied Esteban.

For questions on my workflow with the tool: I'm usually available on Discord.

I'm sure there will also be an update of the official contribution tutorial and AFAIK Esteban
want to do some screencasts. 


Using P3 to connect to CockroachDB


Just a quick note: it is possible to use P3 (the lean and mean PostgreSQL client for Pharo using frontend/backend protocol 3.0, to connect to CockroachDB (an SQL database for global cloud services, an open source clone of Google Spannner, as it supports the same line protocol. 

Just make sure to load the latest version of P3 (and ZTimestamp when you are on Pharo 7).

If you do their tutorial, you can set up your connection as follows:

  P3Client url: 'psql://root@localhost:26257/bank'.


Pharo Weekly is looking for a good soul

Dear reader,

I hope that you enojoyed Pharo Weekly. For me it helps me to remember what was happening in this super cool environment.

Now I will take a break and I do not expect to have the time and energy to feed this great blog. If you want to feed Pharo Weekly please contact me at


Migration of Seaside book started!


I decided to start to migrate the Seaside book to Pillar and make it a community-oriented book.
I will work regularly on it and offer it as a gift to the community.

If some of you want to join the effort, you are welcome.


QRCode – A thank you note


Given that the mailing lists are often used to ask questions when we get in trouble, report bugs and other issues, conduct public discussion between strong headed individuals, we quickly forget what a fantastic platform Pharo is.
Last month I implemented a rough MVP-style ticket sales platform that was successfully used to sell and validate at the entrance, about 1000 digital, online tickets for a relatively large 3000+ attendance event (a party). It took only a couple of days to build and deploy, and it was a lot of fun – it was even done in ‘unstable’ Pharo 7.
Early on I decided to identify each individual ticket by a unique URL. For easier presentation and scanning purposes, I encoded that URL in a QR code.
Although I am grateful for the whole Pharo ecosystem (including Seaside), we all build on top of other people’s work, I was especially happy with Jochen Rick’s QRCode package (!/~JochenRick/QRCode/). This is such a great piece of work !
It worked right out of the box in Pharo 7 (even though it is from 2013/2014), was well designed, easy to figure out, was well documented, had unit tests. I can’t say anything bad about it, it is as close to perfect as I have ever seen. So: thanks Jochen, you made my day !
Here is how a ticket generates its own QR code:

^ self url asString asQRCode formWithQuietZone magnifyBy: 5

Just beautiful.
It is also easy (for a non-graphics, non-UI person like me) to combine the QR code with some text:
T123Ticket >>#asQRCodeWithText

| form font |
form := Form extent: 535 @ 185 depth: 1.
font := LogicalFont familyName: ‘Bitmap DejaVu Sans’ pointSize: 14.
self asQRCode displayOn: form at: 0 @ 0.
form getCanvas
drawString: self url asString at: 180 @ 20 font: font color: Color black;
drawString: self id36, ‘ – ‘, ticketId asString at: 180 @ 45 font: font color: Color black;
drawString: (name ifNil: [ ‘N.N’ ]) at: 180 @ 90  font: font color: Color black;
drawString: (email ifNil: [ ‘@’ ]) at: 180 @ 115 font: font color: Color black;
drawString: (phone ifNil: [ ‘+’ ]) at: 180 @ 140 font: font color: Color black.
^ form

Next we combine this with a nice template designed by a graphics artist:
T123Ticket >>#asQRCodeWithTextInTemplate
| templateFile form |
templateFile := ‘tickets123-template-{1}.jpg’ format: { self event id }.
form := PluginBasedJPEGReadWriter formFromFileNamed: templateFile.
self asQRCodeWithText displayOn: form at: 20@540.
^ form
And finally, the ticket form is encoded as a JPEG (to be mailed and so on):
T123Ticket >>#asJPEGBytes
^ ByteArray streamContents: [ :out |
PluginBasedJPEGReadWriter putForm: self asQRCodeWithTextInTemplate onStream: out ]
I also found GT Inspector very handy (again) in doing back end work (managing payments and other administration), especially the ability to use Spotter on a collection open in an inspector.
Anyway, I know many of you have similar happy experiences, I just wanted to share (one of) mine.
Thanks Jochen, thanks everyone.

[Testimony] migration to 6.1 was super easy.

Thanks for all the hard work.

It took me about 30 minutes to migrate one of my projects from 32bit Pharo 5 to 64bit 6.1 this afternoon.  It has about 40 external dependencies so I thought it would take much longer to get everything sorted.