Re: [Pharo-users] looking for another iterator :)

2018-01-25 Thread Evan Donahue
It is also worth mentioning that there is now also the Cons library available
through the Pharo6 catalog browser. Cons is a lazy linked list that can be
used like a normal linked list, but can also be used as an iterator over
streams or infinite-sequence-generating blocks, using the usual Pharo
collections API.

myStream := (1 to: 100) readStream.
(myStream asCons take: 5) do: [ ... ].

Due to the laziness, Cons, like Clojure's transducers, doesn't build
intermediate representations, so things like #selectThenCollect: aren't
necessary. 

(myList select: sBlock) collect: cBlock

 just creates an iterator and never actually creates the whole list,
although you can still treat it like a list with #first, #allButRest, etc. 

The code is stable and in use in several of my projects. 

Evan



--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html



Re: [Pharo-users] looking for another iterator :)

2018-01-25 Thread Richard O'Keefe
I thought about that for my own Smalltalk, but then realised
that I didn't know whether #upTo:timesSelect: was bounding
the number of elements *considered* or the number of elements
in the *result*, and I could argue either way.  Arguably the cleanest
way would be to have something like
 (LimitedEnumerableAdapter on: collection limit: anInteger)
do: aBlock
select: aBlock
collect: aBlock
   ... *any* existing or new collection method.


On 22 January 2018 at 11:46, James Foster  wrote:

> Since ‘atMax:’ doesn’t seem as clear to me, I’d prefer ‘upToMax:’ or
> ‘withMax:’ or (especially) the following:
>
> upTo: anInteger timesDo: aBlock
> upTo: anInteger timesSelect: aBlock
> upTo: anInteger timesCollect: aBlock
>
> James Foster
>
> > On Jan 21, 2018, at 8:56 AM, Stephane Ducasse 
> wrote:
> >
> > I thought about something like that...
> >
> > SequenceableCollection >> atMax: numberOfItems do: aBlock
> >"Execute the iteration with at the maximum numberOfItems. If the
> > receiver contains less than numberOfItems iterate them all."
> >1 to: (numberOfItems min: self size) do: [:index | aBlock value:
> > (self at: index)]
> >
> > This is an abstraction that we need to treat some samples.
> >
> > Stef
> >
> > On Sun, Jan 21, 2018 at 5:47 PM, Stephane Ducasse
> >  wrote:
> >> Hi Ben and Clement
> >>
> >> I have a collection (a dictionary in my case) and I want to get
> >> maximum 5 bindings out of it and iterate on them.
> >> I want keysAndValuesDo: or do: but only up to 5 elements.
> >>
> >> aDict atMax: 5 do: [:each | ]
> >>
> >> So I learned from:to:do:
> >>
> >> aCollection atMax: 5 do: [:each | ]
> >>
> >> Does it make sense?
> >>
> >> Stef
> >>
> >> On Sun, Jan 21, 2018 at 1:16 PM, Clément Bera 
> wrote:
> >>> I don't think we do. Do you need it on SequenceableCollection or
> >>> HashedCollection too ?
> >>>
> >>> Recently I was trying to iterate over the first N elements of a
> collection
> >>> and since there was no #first:do: I used #from:to:do:. I guess you
> could use
> >>> that too:
> >>>
> >>> aCollection from: 1 to: (aCollection size min: 1000) do: aBlock
> >>>
> >>> Which guarantees you iterate at max over 1000 elements. But that API is
> >>> SequenceableCollection specific.
> >>>
> >>> On Sun, Jan 21, 2018 at 11:44 AM, Ben Coman 
> wrote:
> 
>  On 21 January 2018 at 18:36, Stephane Ducasse <
> stepharo.s...@gmail.com>
>  wrote:
> > Hi
> >
> > I would like to iterate at max on a certain amount of elements in a
> > collection.
> > And I was wondering if we have such iterator.
> 
>  I'm not clear what functionality your asking for.  Could you present
>  it as code & result if you assumed the iterator you want was
>  available?
> 
>  cheers -ben
> 
> >>>
> >>>
> >>>
> >>> --
> >>> Clément Béra
> >>> Pharo consortium engineer
> >>> https://clementbera.wordpress.com/
> >>> Bâtiment B 40, avenue Halley 59650 Villeneuve d'Ascq
> >
> >
>
>
>


Re: [Pharo-users] looking for another iterator :)

2018-01-25 Thread Richard O'Keefe
My own Smalltalk has these:

Enumerable
  methods for: 'enumerating'
limit: n do: aBlock
  "Pass elements of the receiver to aBlock one at a time,
   as for #do:, but stop after n elements.  n must be a
   non-negative SmallInteger.  Which elements you get is
   for the receiver to decide."
  |count|
  n < 1 ifTrue: [
n = 0 ifTrue: [^self]ifFalse: [self pvtCountError: n]].
  count := 0.
  self do: [:each |
aBlock value: each.
(count := count + 1) < n ifFalse: [^self]].
AbstractKeyedCollection
  methods for: 'enumerating'
limit: n keysAndValuesDo: aBlock
  "Pass keys and corresponding values of the receiver
   to aBlock one at a time, as for #keysAndValuesDo:,
   but stop after n elements.  See #limit:do:."
  |count|
  n < 1 ifTrue: [
n = 0 ifTrue: [^self]ifFalse: [self pvtCountError: n]].
  count := 0.
  self keysAndValuesDo: [:key :value |
aBlock value: key value: value.
(count := count + 1) < n ifFalse: [^self]].


Enumerable is the superclass of Collection; it doesn't cover streams but
does
cover 2- and 3-dimensional arrays.  AbstractKeyedCollection covers both
dictionaries and sequences. Since they only depend on #do: and
#keysAndValuesDo:
respectively, they should fit nicely into some sort of Trait(s).

I gave a great deal of thought to the names, and decided on "limit" since it
is already in use in a similar sense in things like LimitedOutputStream or
#printStringLimitedTo:.  I did consider #do:limitedTo: and
#keysAndValuesDo:limitedTo:
which would be more consistent with #streamContents:limitedTo:, but "heavy"
things
like blocks really work better at the end.


Re: [Pharo-users] How to declare a do:[] loop for a matrix to read and acces its elements?

2018-01-25 Thread Richard O'Keefe
Sorry about the late reply, but I've been away on holiday.
You wrote "Im not sure is the gameworld should grow inifitly. In the
ruleset on
wikipedia there is a fixed board size. The smallest one is 3*3 but I could
implement is as one possible size to select from."

It's not your decision.  Conway's Life simply *is* defined for an infinite
world.
Without that, it wouldn't be Turing-universal, as it is.  The first
sentence in
the Rules section begins "The universe of the Game of Life is an infinite
two-dimensional orthogonal  grid".
The ruleset on the Wikipedia page does NOT have a fixed size.  The examples
are shown just big enough
to contain all the live cells, but that is another matter.

There are four things you can do when emulating a game on a grid:
(1) STOP when you hit the edge, deliberately or by crashing.
(2) ERR by pretending everything outside is dead. The program does
not stop, it just stops giving right answers.
(3) REDEFINE the world to be a toroidal space instead of an infinite one.
Again, this changes the rules enough to count as a different game.
(4) GROW the world.  Allocate a new bigger world and copy the old one
across.
But the best way to deal with limitations is to avoid building them into the
program in the first place.

It's a bit like concurrency.  It took a while before I realised that "how
do I
add concurrency to my programs" was the wrong question and that I
should have been asking "how do I learn to stop adding sequentiality to
my programs?"


Re: [Pharo-users] Voyage and Instance Mode

2018-01-25 Thread Esteban Lorenzano


> On 25 Jan 2018, at 23:24, Dominique Dartois  wrote:
> 
> Thanks Esteban.
> I was fooled by the doc : "In instance mode, the first argument is always the 
> repository on which to performed the operation"...
> Well, not really, but the object to store.

yeah, it should say: the receiver.

> 
> Regards
> 
> 2018-01-25 23:07 GMT+01:00 Esteban Lorenzano  >:
> 
> 
> > On 25 Jan 2018, at 23:03, Dominique Dartois  > > wrote:
> >
> > Hello all.
> >
> > I'am learning to use Voyage by trying the examples in the Voyage doc (in 
> > the Enterprise Pharo book).
> > I read "By default, Voyage works in instance mode".
> > If I run the example in instance mode, I get an error via the debugger.
> >
> > |repo anAssociation|
> > repo := VOMemoryRepository new.
> > anAssociation := #answer -> 42.
> > anAssociation save: repo.
> 
> repo save: anAssociation :)
> 
> cheers!
> Esteban
> 
> >  ==> "Instance of Association did not understand #save:"
> >
> > What am I doing wrong?
> >
> > --
> > Dominique
> 
> 
> 
> 
> 
> -- 
> Dominique



Re: [Pharo-users] Voyage and Instance Mode

2018-01-25 Thread Dominique Dartois
Thanks Esteban.
I was fooled by the doc : "In instance mode, the first argument is always
the repository on which to performed the operation"...
Well, not really, but the object to store.

Regards

2018-01-25 23:07 GMT+01:00 Esteban Lorenzano :

>
>
> > On 25 Jan 2018, at 23:03, Dominique Dartois  wrote:
> >
> > Hello all.
> >
> > I'am learning to use Voyage by trying the examples in the Voyage doc (in
> the Enterprise Pharo book).
> > I read "By default, Voyage works in instance mode".
> > If I run the example in instance mode, I get an error via the debugger.
> >
> > |repo anAssociation|
> > repo := VOMemoryRepository new.
> > anAssociation := #answer -> 42.
> > anAssociation save: repo.
>
> repo save: anAssociation :)
>
> cheers!
> Esteban
>
> >  ==> "Instance of Association did not understand #save:"
> >
> > What am I doing wrong?
> >
> > --
> > Dominique
>
>
>


-- 
Dominique


Re: [Pharo-users] Voyage and Instance Mode

2018-01-25 Thread Esteban Lorenzano


> On 25 Jan 2018, at 23:03, Dominique Dartois  wrote:
> 
> Hello all.
> 
> I'am learning to use Voyage by trying the examples in the Voyage doc (in the 
> Enterprise Pharo book).
> I read "By default, Voyage works in instance mode".
> If I run the example in instance mode, I get an error via the debugger.
> 
> |repo anAssociation|
> repo := VOMemoryRepository new.
> anAssociation := #answer -> 42.
> anAssociation save: repo.

repo save: anAssociation :)

cheers!
Esteban

>  ==> "Instance of Association did not understand #save:"
> 
> What am I doing wrong?
> 
> -- 
> Dominique




[Pharo-users] Voyage and Instance Mode

2018-01-25 Thread Dominique Dartois
Hello all.

I'am learning to use Voyage by trying the examples in the Voyage doc (in
the Enterprise Pharo book).
I read "By default, Voyage works in instance mode".
If I run the example in instance mode, I get an error via the debugger.

|repo anAssociation|
repo := VOMemoryRepository new.
anAssociation := #answer -> 42.
anAssociation save: repo.
 ==> "Instance of Association did not understand #save:"

What am I doing wrong?

-- 
Dominique


[Pharo-users] Download pillar image -> Error 403: Forbidden

2018-01-25 Thread Hernán Morales Durand
I am following the Publishing Pillar Booklet guide from here
https://github.com/SquareBracketAssociates/Booklet-PublishingAPillarBooklet

$ git clone 
g...@github.com:SquareBracketAssociates/Booklet-PublishingAPillarBooklet.git
$ cd Booklet-PublishingAPillarBooklet/
$ wget https://raw.githubusercontent.com/pillar-markup/pillar/master/download.sh
$ chmod +x download.sh
$ ./download.sh

--2018-01-25 17:56:32--  http://get.pharo.org/vm50
Resolving get.pharo.org (get.pharo.org)... 164.132.235.17
Connecting to get.pharo.org (get.pharo.org)|164.132.235.17|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5819 (5.7K)
Saving to: 'STDOUT'

 0K . 100%  371K=0.02s

2018-01-25 17:56:33 (371 KB/s) - written to stdout [5819/5819]

Downloading the latest pharoVM:
http://files.pharo.org/get-files/50/pharo-win-stable.zip
pharo-vm/Pharo.exe
Downloading PharoV50.sources:
http://files.pharo.org/get-files/50/sources.zip
Creating starter scripts pharo and pharo-ui
--2018-01-25 17:57:21--
https://github.com/pillar-markup/pillar/releases/download/50/Pillar-deployment50.zip
Resolving github.com (github.com)... 192.30.253.112, 192.30.253.113
Connecting to github.com (github.com)|192.30.253.112|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: 
https://github-production-release-asset-2e65be.s3.amazonaws.com/41843105/f4ea97f0-e63b-11e7-9012-edab5af1a547?X-Amz-Algorithm=AWS4-HMAC-SHA256=AKIAIWNJYAX4CSVEH53A%2F20180125%2Fus-east-1%2Fs3%2Faws4_request=20180125T205723Z=300=9ecb9c284b9a92c8dbae0c15d8e490324f0fc7ea3cbe98104080f99c4573e1d6=host_id=0=attachment%3B%20filename%3DPillar-deployment50.zip=application%2Foctet-stream
[following]
--2018-01-25 17:57:23--
https://github-production-release-asset-2e65be.s3.amazonaws.com/41843105/f4ea97f0-e63b-11e7-9012-edab5af1a547?X-Amz-Algorithm=AWS4-HMAC-SHA256=AKIAIWNJYAX4CSVEH53A%2F20180125%2Fus-east-1%2Fs3%2Faws4_request=20180125T205723Z=300=9ecb9c284b9a92c8dbae0c15d8e490324f0fc7ea3cbe98104080f99c4573e1d6=host_id=0=attachment%3B%20filename%3DPillar-deployment50.zip=application%2Foctet-stream
Resolving github-production-release-asset-2e65be.s3.amazonaws.com
(github-production-release-asset-2e65be.s3.amazonaws.com)...
54.231.115.35
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com
(github-production-release-asset-2e65be.s3.amazonaws.com)|54.231.115.35|:443...
connected.
HTTP request sent, awaiting response... 200 OK
Length: 18482449 (18M) [application/octet-stream]
Saving to: 'imageLn5zD.zip'

imageLn5zD.zip   10%[=>  ]   1.88M   502 B/sin 8m 7s

2018-01-25 18:15:45 (3.94 KB/s) - Read error at byte 191/18482449
(Bad file descriptor). Retrying.

--2018-01-25 18:15:46--  (try: 2)
https://github-production-release-asset-2e65be.s3.amazonaws.com/41843105/f4ea97f0-e63b-11e7-9012-edab5af1a547?X-Amz-Algorithm=AWS4-HMAC-SHA256=AKIAIWNJYAX4CSVEH53A%2F20180125%2Fus-east-1%2Fs3%2Faws4_request=20180125T205723Z=300=9ecb9c284b9a92c8dbae0c15d8e490324f0fc7ea3cbe98104080f99c4573e1d6=host_id=0=attachment%3B%20filename%3DPillar-deployment50.zip=application%2Foctet-stream
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com
(github-production-release-asset-2e65be.s3.amazonaws.com)|54.231.115.35|:443...
connected.
HTTP request sent, awaiting response... 403 Forbidden
2018-01-25 18:15:47 ERROR 403: Forbidden.


Also the download speed was super slow.

Any ideas?

Cheers,

Hernán



Re: [Pharo-users] Lengthy operations block UI

2018-01-25 Thread Andrei Stebakov
Thanks, Sven, got it

On Jan 25, 2018 10:36, "Sven Van Caekenberghe"  wrote:

> Hi Andrei,
>
> > On 25 Jan 2018, at 16:26, Andrei Stebakov  wrote:
> >
> > I have written some code that has a deep nested loop of calling
> ZnClient>>get.
> > In the loop I also execute Transcript>>show but I can only see the
> transcript output after a few seconds when the loop is finished. During all
> that time while the loop is busy the UI is also unresponsive.
> > Is there a way to execute code in some sort of asynchronous way?
>
> The problem is not specific to using ZnClient, it is with every loop you
> execute in the UI thread: the Transcript output is not updated (as it is
> the UI thread itself that has to do the drawing).
>
> For example, try
>
>   1 to: 10 do: [ :i | Transcript crShow: i. 5 seconds wait ].
>
> The solution is to run you long running code in another thread, like this
>
>   [ 1 to: 10 do: [ :i | Transcript crShow: i. 5 seconds wait ] ] fork.
>
> HTH,
>
> Sven
>


Re: [Pharo-users] Lengthy operations block UI

2018-01-25 Thread Sven Van Caekenberghe
Hi Andrei,

> On 25 Jan 2018, at 16:26, Andrei Stebakov  wrote:
> 
> I have written some code that has a deep nested loop of calling 
> ZnClient>>get. 
> In the loop I also execute Transcript>>show but I can only see the transcript 
> output after a few seconds when the loop is finished. During all that time 
> while the loop is busy the UI is also unresponsive.
> Is there a way to execute code in some sort of asynchronous way?

The problem is not specific to using ZnClient, it is with every loop you 
execute in the UI thread: the Transcript output is not updated (as it is the UI 
thread itself that has to do the drawing).

For example, try

  1 to: 10 do: [ :i | Transcript crShow: i. 5 seconds wait ].

The solution is to run you long running code in another thread, like this

  [ 1 to: 10 do: [ :i | Transcript crShow: i. 5 seconds wait ] ] fork.

HTH,

Sven


[Pharo-users] Lengthy operations block UI

2018-01-25 Thread Andrei Stebakov
I have written some code that has a deep nested loop of calling
ZnClient>>get.
In the loop I also execute Transcript>>show but I can only see the
transcript output after a few seconds when the loop is finished. During all
that time while the loop is busy the UI is also unresponsive.
Is there a way to execute code in some sort of asynchronous way?


Re: [Pharo-users] [ANN] PharoLauncher v1.1 released!

2018-01-25 Thread Christophe Demarey

> Le 25 janv. 2018 à 14:46, Mariano Martinez Peck  a 
> écrit :
> 
> Thanks Christophe,
> 
> Is there a way to update my existing Launcher image or should I wait until 
> you release a future binary (no problem, I can wait).
> 
> Thanks!
> 
> On Thu, Jan 25, 2018 at 10:23 AM, Christophe Demarey 
> > wrote:
> 
> > Le 25 janv. 2018 à 13:54, Christophe Demarey  > > a écrit :
> >
> > Hi Mariano,
> >
> >> Le 25 janv. 2018 à 12:33, Mariano Martinez Peck  >> > a écrit :
> >>
> >> Hi Christoph,
> >>
> >> One issue I am having is that the Launch without settings is actually 
> >> running the settings  anyway... (it was not the case before).
> >>
> >> Do you see this as well?
> >
> > Hum, yes I’m able to reproduce that.
> > Could you open a bug entry for this problem 
> > (https://github.com/pharo-project/pharo-launcher/issues 
> > )? I will take a 
> > look at it ASAP.
> 
> Was easy to fix:
> 
> Name: PharoLauncher-Core-ChristopheDemarey.173
> Author: ChristopheDemarey
> Time: 25 January 2018, 2:22:42.742766 pm
> UUID: 975f6569-fb1f-0d00-89b5-97830cafd288
> Ancestors: PharoLauncher-Core-ChristopheDemarey.172
> 
> fixes 2 bugs:
>  - OS detection tu run image for a shell was wrong for OS X
>  - no default preferences option was lost when running image from a shell
> 

The fastest thing for you would be to open Pharo Launcher, then press cmd + p 
to open monticello browser. Here, just load 
PharoLauncher-Core-ChristopheDemarey.172 and it will do the job.
PharoLauncher bleedingEdge is also available here: 
http://files.pharo.org/pharo-launcher/bleedingEdge/ but is not always up to 
date because the build process also build 64-bits images and loading code in 
64-bits image fails at least 4 times / 5 tries, so resulting artifacts are not 
published.
I wonder if I should remove 64-bits build for now.

Re: [Pharo-users] [ANN] PharoLauncher v1.1 released!

2018-01-25 Thread Mariano Martinez Peck
Thanks Christophe,

Is there a way to update my existing Launcher image or should I wait until
you release a future binary (no problem, I can wait).

Thanks!

On Thu, Jan 25, 2018 at 10:23 AM, Christophe Demarey <
christophe.dema...@inria.fr> wrote:

>
> > Le 25 janv. 2018 à 13:54, Christophe Demarey <
> christophe.dema...@inria.fr> a écrit :
> >
> > Hi Mariano,
> >
> >> Le 25 janv. 2018 à 12:33, Mariano Martinez Peck 
> a écrit :
> >>
> >> Hi Christoph,
> >>
> >> One issue I am having is that the Launch without settings is actually
> running the settings  anyway... (it was not the case before).
> >>
> >> Do you see this as well?
> >
> > Hum, yes I’m able to reproduce that.
> > Could you open a bug entry for this problem (https://github.com/pharo-
> project/pharo-launcher/issues)? I will take a look at it ASAP.
>
> Was easy to fix:
>
> Name: PharoLauncher-Core-ChristopheDemarey.173
> Author: ChristopheDemarey
> Time: 25 January 2018, 2:22:42.742766 pm
> UUID: 975f6569-fb1f-0d00-89b5-97830cafd288
> Ancestors: PharoLauncher-Core-ChristopheDemarey.172
>
> fixes 2 bugs:
>  - OS detection tu run image for a shell was wrong for OS X
>  - no default preferences option was lost when running image from a shell
>



-- 
Mariano
http://marianopeck.wordpress.com


Re: [Pharo-users] [ANN] PharoLauncher v1.1 released!

2018-01-25 Thread Christophe Demarey

> Le 25 janv. 2018 à 13:54, Christophe Demarey  a 
> écrit :
> 
> Hi Mariano,
> 
>> Le 25 janv. 2018 à 12:33, Mariano Martinez Peck  a 
>> écrit :
>> 
>> Hi Christoph,
>> 
>> One issue I am having is that the Launch without settings is actually 
>> running the settings  anyway... (it was not the case before).
>> 
>> Do you see this as well?
> 
> Hum, yes I’m able to reproduce that.
> Could you open a bug entry for this problem 
> (https://github.com/pharo-project/pharo-launcher/issues)? I will take a look 
> at it ASAP.

Was easy to fix:

Name: PharoLauncher-Core-ChristopheDemarey.173
Author: ChristopheDemarey
Time: 25 January 2018, 2:22:42.742766 pm
UUID: 975f6569-fb1f-0d00-89b5-97830cafd288
Ancestors: PharoLauncher-Core-ChristopheDemarey.172

fixes 2 bugs:
 - OS detection tu run image for a shell was wrong for OS X
 - no default preferences option was lost when running image from a shell 


Re: [Pharo-users] [ANN] PharoLauncher v1.1 released!

2018-01-25 Thread Christophe Demarey
Hi Mariano,

> Le 25 janv. 2018 à 12:33, Mariano Martinez Peck  a 
> écrit :
> 
> Hi Christoph,
> 
> One issue I am having is that the Launch without settings is actually running 
> the settings  anyway... (it was not the case before).
> 
> Do you see this as well?

Hum, yes I’m able to reproduce that.
Could you open a bug entry for this problem 
(https://github.com/pharo-project/pharo-launcher/issues)? I will take a look at 
it ASAP.

Thanks,
Christophe




Re: [Pharo-users] [ANN] PharoLauncher v1.1 released!

2018-01-25 Thread Mariano Martinez Peck
Hi Christoph,

One issue I am having is that the Launch without settings is actually
running the settings  anyway... (it was not the case before).

Do you see this as well?



On Fri, Jan 19, 2018 at 9:04 AM, Stephane Ducasse 
wrote:

> tx!
>
>
> On Thu, Jan 18, 2018 at 9:28 PM, Christophe Demarey
>  wrote:
> >
> >> Le 18 janv. 2018 à 21:16, Stephane Ducasse  a
> écrit :
> >>
> >> supe super col
> >> Christophe? do have I just to replace the previous version and use
> >> this one and I will get everything as before
> >> but with the new version?
> >
> > yes.
> > Only settings directory is different but it did not work very well
> before. So, if you had settings that were no defaults settings, you will
> need to store your settings with the new launcher.
>
>


-- 
Mariano
http://marianopeck.wordpress.com


[Pharo-users] [ANN] Pharo Consortium New Gold Member: KnowRoaming

2018-01-25 Thread Marcus Denker
The Pharo Consortium is very happy to announce that KnowRoaming
has joined the Consortium as a Gold Member.

About
- KnowRoaming: https://www.knowroaming.com
- Pharo Consortium: http://consortium.pharo.org

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:

- http://association.pharo.org