Who can find the most useful usage of this? thisContext instVarNamed: #receiver put: 42. self factorial GOTO statement in Pharo: FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-) Cheers, -- Pavel
I am curious. Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers. I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors. On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <pavel.krivanek@gmail.com>wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-)
Cheers, -- Pavel
On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be>wrote:
I am curious.
Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers.
I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.
It *should* "just work" :-) (provided the jump distance of -12 is correct). The VM traps assignments to variables of contexts, and converts them to vanilla contexts. Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode. On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <pavel.krivanek@gmail.com>wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-)
this is my favourite, and would lock-up a strict blue book VM. (I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen]) | a | a := Array with: #perform:withArguments: with: nil. a at: 2 put: a. a perform: a first withArguments: a ;-)
Cheers, -- Pavel
-- best, Eliot
On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <eliot.miranda@gmail.com>wrote:
On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be>wrote:
I am curious.
Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers.
I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.
It *should* "just work" :-) (provided the jump distance of -12 is correct). The VM traps assignments to variables of contexts, and converts them to vanilla contexts. Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode.
How magical!
On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <
pavel.krivanek@gmail.com> wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-)
this is my favourite, and would lock-up a strict blue book VM. (I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen])
| a | a := Array with: #perform:withArguments: with: nil. a at: 2 put: a. a perform: a first withArguments: a
;-)
The infinite is near. Not as blocking, but still... (Alt-. interrupts this one) Crazy>>run Continuation currentDo: [ :cc | here := cc ]. here value: true. Crazy new run BTW, is there any support for partial continuations in Pharo? Continuations like this one look like full continuations and that's *huge*.
Cheers, -- Pavel
-- best, Eliot
On Mon, Mar 24, 2014 at 4:33 PM, phil@highoctane.be <phil@highoctane.be>wrote:
On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <eliot.miranda@gmail.com>wrote:
On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be>wrote:
I am curious.
Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers.
I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.
It *should* "just work" :-) (provided the jump distance of -12 is correct). The VM traps assignments to variables of contexts, and converts them to vanilla contexts. Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode.
How magical!
On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <
pavel.krivanek@gmail.com> wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-)
this is my favourite, and would lock-up a strict blue book VM. (I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen])
| a | a := Array with: #perform:withArguments: with: nil. a at: 2 put: a. a perform: a first withArguments: a
;-)
The infinite is near.
Not as blocking, but still... (Alt-. interrupts this one)
Crazy>>run Continuation currentDo: [ :cc | here := cc ]. here value: true.
Crazy new run
BTW, is there any support for partial continuations in Pharo? Continuations like this one look like full continuations and that's *huge*.
Yes, see Seaside. Remember a Process is simply a linked list of context /objects/, so it is easy to copy as much or as little of one as one wants.
Cheers, -- Pavel
-- best, Eliot
-- best, Eliot
Hello, The pharo continuations were ported from seaside because several people were using seaside continuations in non seaside related projects. I wouldn't rely on assigning the receiver on thisContext because it's a bit buggy. See: ByteSymbol>>bar thisContext receiver: #foo. ^ self 10 timesRepeat: [Transcript show: #bar bar] Transcript: foofoofoobarbarbarbarbarbarbar 2014-03-25 0:58 GMT+01:00 Eliot Miranda <eliot.miranda@gmail.com>:
On Mon, Mar 24, 2014 at 4:33 PM, phil@highoctane.be <phil@highoctane.be>wrote:
On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <eliot.miranda@gmail.com>wrote:
On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be>wrote:
I am curious.
Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers.
I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.
It *should* "just work" :-) (provided the jump distance of -12 is correct). The VM traps assignments to variables of contexts, and converts them to vanilla contexts. Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode.
How magical!
On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <
pavel.krivanek@gmail.com> wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-)
this is my favourite, and would lock-up a strict blue book VM. (I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen])
| a | a := Array with: #perform:withArguments: with: nil. a at: 2 put: a. a perform: a first withArguments: a
;-)
The infinite is near.
Not as blocking, but still... (Alt-. interrupts this one)
Crazy>>run Continuation currentDo: [ :cc | here := cc ]. here value: true.
Crazy new run
BTW, is there any support for partial continuations in Pharo? Continuations like this one look like full continuations and that's *huge*.
Yes, see Seaside. Remember a Process is simply a linked list of context /objects/, so it is easy to copy as much or as little of one as one wants.
Cheers, -- Pavel
-- best, Eliot
-- best, Eliot
Am 25.03.2014 um 00:33 schrieb "phil@highoctane.be" <phil@highoctane.be>:
On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <eliot.miranda@gmail.com> wrote:
On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be> wrote: I am curious.
Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers.
I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.
It *should* "just work" :-) (provided the jump distance of -12 is correct). The VM traps assignments to variables of contexts, and converts them to vanilla contexts. Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode.
How magical!
On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <pavel.krivanek@gmail.com> wrote: Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12.
Let's collect the next ones :-)
this is my favourite, and would lock-up a strict blue book VM. (I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen])
| a | a := Array with: #perform:withArguments: with: nil. a at: 2 put: a. a perform: a first withArguments: a
;-)
The infinite is near.
Not as blocking, but still... (Alt-. interrupts this one)
Crazy>>run Continuation currentDo: [ :cc | here := cc ]. here value: true.
Crazy new run
BTW, is there any support for partial continuations in Pharo? Continuations like this one look like full continuations and that's *huge*.
If you mean delimited continuations have a look here: http://www.lshift.net/blog/2011/04/20/direct-implementation-of-shiftreset-in... Norbert
Cheers, -- Pavel
-- best, Eliot
On Tue, Mar 25, 2014 at 8:36 AM, Norbert Hartl <norbert@hartl.name> wrote:
Am 25.03.2014 um 00:33 schrieb "phil@highoctane.be" <phil@highoctane.be>:
On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <eliot.miranda@gmail.com>wrote:
On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be>wrote:
I am curious.
Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers.
I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.
It *should* "just work" :-) (provided the jump distance of -12 is correct). The VM traps assignments to variables of contexts, and converts them to vanilla contexts. Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode.
How magical!
On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <
pavel.krivanek@gmail.com> wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-)
this is my favourite, and would lock-up a strict blue book VM. (I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen])
| a | a := Array with: #perform:withArguments: with: nil. a at: 2 put: a. a perform: a first withArguments: a
;-)
The infinite is near.
Not as blocking, but still... (Alt-. interrupts this one)
Crazy>>run Continuation currentDo: [ :cc | here := cc ]. here value: true.
Crazy new run
BTW, is there any support for partial continuations in Pharo? Continuations like this one look like full continuations and that's *huge*.
If you mean delimited continuations have a look here:
http://www.lshift.net/blog/2011/04/20/direct-implementation-of-shiftreset-in...
Thanks. I saw a mention of this but not that article.
Now, I loaded the code in Pharo3 and there are missing methods in BlockContext... ControlTests>>testNestedShiftResetNest (I guess other things would say the same) is broken testNestedShiftResetsNest | innerCont outerCont | [1 + [ :k | outerCont := k. "stack reified as [ :x | 1 + x ]" k value: [ 2 + [ :kk | innerCont := kk. "stack reified as [ :x | 2 + x ]" kk value: 0 ] shift ] reset ] shift ] reset. self assert: 3 equals: (innerCont value: 1). self assert: 2 equals: (outerCont value: 1). self assert: 5 equals: ((outerCont compose: [:x | x * 2]) value: 2) due to MethodContext's DNU: copyTo:bottomContextDo: [image: Inline image 1] There is a ContextPart: aContext blocks: dict but but looking like the same thing. Composition tests do work. Gurus welcome... If we put continuations in the Pharo image, why not put this as well? Phil
Norbert
Cheers, -- Pavel
-- best, Eliot
On 24 March 2014 23:33, phil@highoctane.be <phil@highoctane.be> wrote:
On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <eliot.miranda@gmail.com> wrote:
On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be> wrote:
I am curious.
Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers.
I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.
It *should* "just work" :-) (provided the jump distance of -12 is correct). The VM traps assignments to variables of contexts, and converts them to vanilla contexts. Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode.
How magical!
On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <pavel.krivanek@gmail.com> wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-)
this is my favourite, and would lock-up a strict blue book VM. (I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen])
| a | a := Array with: #perform:withArguments: with: nil. a at: 2 put: a. a perform: a first withArguments: a
;-)
The infinite is near.
Not as blocking, but still... (Alt-. interrupts this one)
Crazy>>run Continuation currentDo: [ :cc | here := cc ]. here value: true.
Crazy new run
BTW, is there any support for partial continuations in Pharo? Continuations like this one look like full continuations and that's *huge*.
Yes: http://ss3.gemstone.com/ss/Control.html Last time I checked I did need to add a shim (see the ControlPharo package), but it did load cleanly and pass all its own tests. Control not only provides a convenient way of making partial continuations (of the shift/reset sort, if you're familiar with the literature), but also _delimited_ dynamic variables. As soon as you start stack-slicing with partial continuations, you quickly find that standard implementations of dynamic variables fail in all sorts of nasty ways. Fundamentally, "normal" dynamic variables _cannot_ work cleanly with partial continuations because they either close over too much of the dynamic environment, or too little. Here's some reading on the topic: [1] http://okmij.org/ftp/Computation/dynamic-binding.html [2] http://www.cs.rutgers.edu/~ccshan/dynscope/DDBinding.pdf [3] http://www.lshift.net/blog/2012/06/27/resumable-exceptions-can-macro-express... frank
Cheers, -- Pavel
-- best, Eliot
On Tue, Mar 25, 2014 at 12:05 PM, Frank Shearar <frank.shearar@gmail.com>wrote:
On 24 March 2014 23:33, phil@highoctane.be <phil@highoctane.be> wrote:
On Tue, Mar 25, 2014 at 12:11 AM, Eliot Miranda <eliot.miranda@gmail.com
wrote:
On Mon, Mar 24, 2014 at 4:02 PM, phil@highoctane.be <phil@highoctane.be
wrote:
I am curious.
Maybe on the first one, substitute something when a DNU is encountered. Like logging undefined receivers.
I wonder how the next one behaves on JITted methods. I fear that offset errors may lead to weird errors.
It *should* "just work" :-) (provided the jump distance of -12 is correct). The VM traps assignments to variables of contexts, and converts them to vanilla contexts. Therefore the jump doesn't occur in JITTED code but back in normal interpreted bytecode.
How magical!
On Mon, Mar 24, 2014 at 11:51 PM, Pavel Krivanek <pavel.krivanek@gmail.com> wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12. Let's collect the next ones :-)
this is my favourite, and would lock-up a strict blue book VM. (I once locked up Allen Wirfs-Brock's 4404 with this and he wasn't best pleased [forgive me Allen])
| a | a := Array with: #perform:withArguments: with: nil. a at: 2 put: a. a perform: a first withArguments: a
;-)
The infinite is near.
Not as blocking, but still... (Alt-. interrupts this one)
Crazy>>run Continuation currentDo: [ :cc | here := cc ]. here value: true.
Crazy new run
BTW, is there any support for partial continuations in Pharo? Continuations like this one look like full continuations and that's *huge*.
Yes: http://ss3.gemstone.com/ss/Control.html
Last time I checked I did need to add a shim (see the ControlPharo package), but it did load cleanly and pass all its own tests.
I have now loaded the SS3 version. All tests do pass. I loaded the one from SqueakSource before.
Control not only provides a convenient way of making partial continuations (of the shift/reset sort, if you're familiar with the literature),
Nice article of yours. Now, I have something to chew on :-)
but also _delimited_ dynamic variables. As soon as you start stack-slicing with partial continuations, you quickly find that standard implementations of dynamic variables fail in all sorts of nasty ways. Fundamentally, "normal" dynamic variables _cannot_ work cleanly with partial continuations because they either close over too much of the dynamic environment, or too little.
Here's some reading on the topic:
[1] http://okmij.org/ftp/Computation/dynamic-binding.html [2] http://www.cs.rutgers.edu/~ccshan/dynscope/DDBinding.pdf [3] http://www.lshift.net/blog/2012/06/27/resumable-exceptions-can-macro-express...
Ah, more head banging against the desk, sweet. Phil
frank
Cheers, -- Pavel
-- best, Eliot
Hi frank It would really great if you send an article on this to the ESUG workshop. I can help reviewing the draft if you want. Stef
Yes: http://ss3.gemstone.com/ss/Control.html
Last time I checked I did need to add a shim (see the ControlPharo package), but it did load cleanly and pass all its own tests.
Control not only provides a convenient way of making partial continuations (of the shift/reset sort, if you're familiar with the literature), but also _delimited_ dynamic variables. As soon as you start stack-slicing with partial continuations, you quickly find that standard implementations of dynamic variables fail in all sorts of nasty ways. Fundamentally, "normal" dynamic variables _cannot_ work cleanly with partial continuations because they either close over too much of the dynamic environment, or too little.
Here's some reading on the topic:
[1] http://okmij.org/ftp/Computation/dynamic-binding.html [2] http://www.cs.rutgers.edu/~ccshan/dynscope/DDBinding.pdf [3] http://www.lshift.net/blog/2012/06/27/resumable-exceptions-can-macro-express...
frank
Cheers, -- Pavel
-- best, Eliot
+1 Doru On Wed, Mar 26, 2014 at 8:26 AM, Pharo4Stef <pharo4Stef@free.fr> wrote:
Hi frank
It would really great if you send an article on this to the ESUG workshop. I can help reviewing the draft if you want. Stef
Yes: http://ss3.gemstone.com/ss/Control.html
Last time I checked I did need to add a shim (see the ControlPharo package), but it did load cleanly and pass all its own tests.
Control not only provides a convenient way of making partial continuations (of the shift/reset sort, if you're familiar with the literature), but also _delimited_ dynamic variables. As soon as you start stack-slicing with partial continuations, you quickly find that standard implementations of dynamic variables fail in all sorts of nasty ways. Fundamentally, "normal" dynamic variables _cannot_ work cleanly with partial continuations because they either close over too much of the dynamic environment, or too little.
Here's some reading on the topic:
[1] http://okmij.org/ftp/Computation/dynamic-binding.html [2] http://www.cs.rutgers.edu/~ccshan/dynscope/DDBinding.pdf [3] http://www.lshift.net/blog/2012/06/27/resumable-exceptions-can-macro-express...
frank
Cheers, -- Pavel
-- best, Eliot
-- www.tudorgirba.com "Every thing has its own flow"
Hi Stef, Thanks for the kind words! How would I go about doing that? frank On 26 March 2014 07:26, Pharo4Stef <pharo4Stef@free.fr> wrote:
Hi frank
It would really great if you send an article on this to the ESUG workshop. I can help reviewing the draft if you want. Stef
Yes: http://ss3.gemstone.com/ss/Control.html
Last time I checked I did need to add a shim (see the ControlPharo package), but it did load cleanly and pass all its own tests.
Control not only provides a convenient way of making partial continuations (of the shift/reset sort, if you're familiar with the literature), but also _delimited_ dynamic variables. As soon as you start stack-slicing with partial continuations, you quickly find that standard implementations of dynamic variables fail in all sorts of nasty ways. Fundamentally, "normal" dynamic variables _cannot_ work cleanly with partial continuations because they either close over too much of the dynamic environment, or too little.
Here's some reading on the topic:
[1] http://okmij.org/ftp/Computation/dynamic-binding.html [2] http://www.cs.rutgers.edu/~ccshan/dynscope/DDBinding.pdf [3] http://www.lshift.net/blog/2012/06/27/resumable-exceptions-can-macro-express...
frank
Cheers, -- Pavel
-- best, Eliot
Hi Frank, It you be excellent to have a workshop paper on partial continuations. Here are the infos: http://www.esug.org/wiki/pier/Conferences/2014/IWST14 Cheers, #Luc 2014-03-26 14:25 GMT+01:00 Frank Shearar <frank.shearar@gmail.com>:
Hi Stef,
Thanks for the kind words! How would I go about doing that?
frank
On 26 March 2014 07:26, Pharo4Stef <pharo4Stef@free.fr> wrote:
Hi frank
It would really great if you send an article on this to the ESUG workshop. I can help reviewing the draft if you want. Stef
Yes: http://ss3.gemstone.com/ss/Control.html
Last time I checked I did need to add a shim (see the ControlPharo package), but it did load cleanly and pass all its own tests.
Control not only provides a convenient way of making partial continuations (of the shift/reset sort, if you're familiar with the literature), but also _delimited_ dynamic variables. As soon as you start stack-slicing with partial continuations, you quickly find that standard implementations of dynamic variables fail in all sorts of nasty ways. Fundamentally, "normal" dynamic variables _cannot_ work cleanly with partial continuations because they either close over too much of the dynamic environment, or too little.
Here's some reading on the topic:
[1] http://okmij.org/ftp/Computation/dynamic-binding.html [2] http://www.cs.rutgers.edu/~ccshan/dynscope/DDBinding.pdf [3] http://www.lshift.net/blog/2012/06/27/resumable-exceptions-can-macro-express...
frank
Cheers, -- Pavel
-- best, Eliot
Am 24.03.2014 um 23:51 schrieb Pavel Krivanek <pavel.krivanek@gmail.com>:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12.
Let's collect the next ones :-)
| injectedContext returnValue | injectedContext := [ returnValue := self dummySendToSkip. block value. returnValue ] asContext. injectedContext pc: injectedContext startpc + 2. injectedContext swapSender: (self targetContext swapSender: injectedContext) I used this once. It is hackish but I still like it because I donât know how to solver that better :) Norbert
On 24 Mar 2014, at 11:51 , Pavel Krivanek <pavel.krivanek@gmail.com> wrote:
Who can find the most useful usage of this?
thisContext instVarNamed: #receiver put: 42. self factorial
GOTO statement in Pharo:
FileStream stdout nextPutAll: 'Hello world'; lf. thisContext jump: -12.
Let's collect the next ones :-)
Cheers, -- Pavel
evaluator: aMethodBody "Uses a lightweight class to provide instance-specific value. |lightWeightClass | lightWeightClass := self class copy setSuperclass: MyBaseClass. lightWeightClass compile: aMethodBody classified: 'accessing'. lightWeightClass adoptInstance: self. evaluate: someThing âWill be replaced by specific behavior at runtime if appropriateâ ^true Because, well, storing a block and evaluating that, is too much overhead. Cheers, Henry
I still like: what #magic isSymbol ifTrue: [#magic become: #(0)]. #magic at: 1 put: #magic first + 1. ^#magic first. Execute it multiple times, and make sure there is no other #magic symbol in the system ;-) Marcus
participants (11)
-
Clément Bera -
Eliot Miranda -
Frank Shearar -
Henrik Johansen -
Luc Fabresse -
Marcus Denker -
Norbert Hartl -
Pavel Krivanek -
Pharo4Stef -
phil@highoctane.be -
Tudor Girba