Pharo-users
By thread
pharo-users@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
November 2017
- 87 participants
- 872 messages
Re: [Pharo-users] Pharo 6.1-64 on Ubuntu 17.10 (Artful Aardvark)
by Pavel Krivanek
https://github.com/pharo-project/pharo/pull/488
Thank you for reporting
-- Pavel
2017-11-17 2:21 GMT+01:00 Richard A. O'Keefe <ok(a)cs.otago.ac.nz>:
> The "Welcome to Pharo6.1" window has a navbar on
> the left starting with "Welcome to Pharo 6.1" and
> ending with "Getting Help". 3rd to last is
> "Using Eternal Packages", which should read "External".
>
>
Nov. 17, 2017
Re: [Pharo-users] Local community in south-west of France ?
by Cédrick Béler
yes that might be interesting. We're really close but as it is two
different administrative regions... we hardly work together (stupid
administration ^^).
2017-11-17 11:02 GMT+01:00 Serge Stinckwich <serge.stinckwich(a)gmail.com>:
>
>
> On Fri, Nov 17, 2017 at 10:17 AM, Cédrick Béler <cdrick65(a)gmail.com>
> wrote:
>
>> Hi all,
>>
>> I just wanders if there are pharoers, or more generally smalltalkers
>> located in the south west of France ?
>> If yes, Iâd like to meet from time to time to hack some stuffs or just
>> discuss around a beer.
>>
>> Meeting every 2 or 3 months could be nice.
>>
>> The area is quite large (from toulouse to Pau, Biarritz up to
>> Mont-de-Marsan, eventually Bordeaux and also Spain border).
>>
>>
>> I live between Tarbes and Saint-Gaudens.
>> I work in a mechanical engineering school and there, I try to push Pharo
>> and get some students into it (not easy as they are not computer
>> scientists).
>>
>> In Pau UPPA (University), there are computer science students, but I
>> donât know them really.
>>
>>
> âI have a CS colleague in Pau if you need to have access to students here
> (but he is not using Pharo).â
>
> âSee you.â
>
> --
> Serge Stinckwich
> UMI UMMISCO 209 (IRD/UPMC/UY1)
> "Programs must be written for people to read, and only incidentally for
> machines to execute."http://www.doesnotunderstand.org/
>
--
Cédrick
Nov. 17, 2017
Re: [Pharo-users] Local community in south-west of France ?
by Serge Stinckwich
On Fri, Nov 17, 2017 at 10:17 AM, Cédrick Béler <cdrick65(a)gmail.com> wrote:
> Hi all,
>
> I just wanders if there are pharoers, or more generally smalltalkers
> located in the south west of France ?
> If yes, Iâd like to meet from time to time to hack some stuffs or just
> discuss around a beer.
>
> Meeting every 2 or 3 months could be nice.
>
> The area is quite large (from toulouse to Pau, Biarritz up to
> Mont-de-Marsan, eventually Bordeaux and also Spain border).
>
>
> I live between Tarbes and Saint-Gaudens.
> I work in a mechanical engineering school and there, I try to push Pharo
> and get some students into it (not easy as they are not computer
> scientists).
>
> In Pau UPPA (University), there are computer science students, but I donât
> know them really.
>
>
âI have a CS colleague in Pau if you need to have access to students here
(but he is not using Pharo).â
âSee you.â
--
Serge Stinckwich
UMI UMMISCO 209 (IRD/UPMC/UY1)
"Programs must be written for people to read, and only incidentally for
machines to execute."http://www.doesnotunderstand.org/
Nov. 17, 2017
Re: [Pharo-users] FFI 64 bit libClang issue on Sierra.
by Ben Coman
On Nov 14, 2017, at 4:34 PM, Ben Coman <btc(a)openinworld.com> wrote:
On 15 November 2017 at 00:07, Todd Blanchard <tblanchard(a)mac.com> wrote:
> I've got it loaded, have fixed up the library path and fixed the test for
> version (built in lib returns very different version string).
>
> I have many tests green. However, as before, tests involving
> CXSourceRange that return CXSourceLocations return all zero'd data. The
> CXSourceRange struct looks sane.
>
> The calls to CXSourceLocation clang_getRangeStart(CXSourceRange range);
>
> and its twin RangeEnd result in zero'd structs.
>
> Any idea on where I can look to try to figure out where this is going
> wrong?
>
> I have compiled little C programs and verified that both struct sizes
> agree in FFI and native code (24 bytes each).
>
> Not sure what to try next.
> c
> -Todd Blanchard
>
Compile your own debug-VM** and make a little C wrapper MyCXSourceRange to
forward to Clang's CXSourceRange, and set a gdb a breakpoint in
MyCXSourceRange and compare 64 bit and 32 bit versions.
That still leaves differences in the callout before your breakpoint in
MyCXSourceRange is reached, so just do two callouts in a row and trace from
the first to the second.
** https://github.com/OpenSmalltalk/opensmalltalk-
vm/tree/Cog/build.linux64x64/pharo.cog.spur/build.debug
cheers -ben
On 17 November 2017 at 14:57, Todd Blanchard <tblanchard(a)mac.com> wrote:
> Right, so I have my own debug VM (64 bit Pharo Cog) and a debug version of
> libclang.
>
> I can attach with lldb and set a breakpoint on clang_getRangeStart
>
> Then I debug the test that gets diagnostics and I see that the
> CXSourceRange has data. Then I step into 'range start' and I land in my
> breakpoint for clang_getRangeStart and I can see that the argument to the
> function - supposedly a CXSourceRange passed by value - is all zero'd
> memory.
>
> So it appears that in the 64bit VM, structs passed by value doesn't work
> right.
>
> I've traced back up the stack and I confess the marshaling code is totally
> beyond my comprehension. This is what I was able to get:
>
> Process 1126 stopped
> * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
> 2.1
> frame #0: 0x000000011e33136b libclang.dylib`::clang_
> getRangeStart(range=CXSourceRange @ 0x00007fff55f4e380) at
> CXSourceLocation.cpp:89
> 86
> 87 CXSourceLocation clang_getRangeStart(CXSourceRange range) {
> 88 // Special decoding for CXSourceLocations for
> CXLoadedDiagnostics.
> -> 89 if ((uintptr_t)range.ptr_data[0] & 0x1) {
> 90 CXSourceLocation Result = { { range.ptr_data[0], nullptr }, 0
> };
> 91 return Result;
> 92 }
> Target 0: (Pharo) stopped.
> (lldb) p range
> (CXSourceRange) $0 = {
> ptr_data = ([0] = 0x0000000000000000, [1] = 0x0000000000000000)
> begin_int_data = 0
> end_int_data = 0
> }
> (lldb) bt
> * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
> 2.1
> * frame #0: 0x000000011e33136b libclang.dylib`::clang_
> getRangeStart(range=CXSourceRange @ 0x00007fff55f4e380) at
> CXSourceLocation.cpp:89
> frame #1: 0x0000000109e20b5a Pharo`primitiveCalloutWithArgs at
> X64SysVFFIPlugin.c:6041
> frame #2: 0x0000000109cb964c Pharo`primitiveExternalCall at
> gcc3x-cointerp.c:77188
> frame #3: 0x0000000109cb1629 Pharo`interpretMethodFromMachineCode at
> gcc3x-cointerp.c:19719
> frame #4: 0x0000000109cb77fc Pharo`ceSendsupertonumArgs(selector=4713336760,
> superNormalBar=0, rcvr=4692466872 <(469)%20246-6872>, numArgs=1) at
> gcc3x-cointerp.c:17767
> frame #5: 0x000000011774a135
> frame #6: 0x0000000109c76227 Pharo`interpret at gcc3x-cointerp.c:2703
> frame #7: 0x0000000109dbbf31 Pharo`-[sqSqueakMainApplication
> runSqueak](self=0x00006080000d7370, _cmd="runSqueak") at
> sqSqueakMainApplication.m:201
> frame #8: 0x00007fff81e5a8dd Foundation`__NSFirePerformWithOrder + 368
> frame #9: 0x00007fff803b1d37 CoreFoundation`__CFRUNLOOP_IS_
> CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
> frame #10: 0x00007fff803b1ca7 CoreFoundation`__CFRunLoopDoObservers +
> 391
> frame #11: 0x00007fff803926d9 CoreFoundation`__CFRunLoopRun + 873
> frame #12: 0x00007fff80392114 CoreFoundation`CFRunLoopRunSpecific +
> 420
> frame #13: 0x00007fff7f8f2ebc HIToolbox`RunCurrentEventLoopInMode +
> 240
> frame #14: 0x00007fff7f8f2bf9 HIToolbox`ReceiveNextEventCommon + 184
> frame #15: 0x00007fff7f8f2b26 HIToolbox`_
> BlockUntilNextEventMatchingListInModeWithFilter + 71
> frame #16: 0x00007fff7de89a54 AppKit`_DPSNextEvent + 1120
> frame #17: 0x00007fff7e6057ee AppKit`-[NSApplication(NSEvent)
> _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2796
> frame #18: 0x00007fff7de7e3db AppKit`-[NSApplication run] + 926
> frame #19: 0x00007fff7de48e0e AppKit`NSApplicationMain + 1237
> frame #20: 0x0000000109db5baf Pharo`main(argc=1,
> argv=0x00007fff55f8bca8, envp=0x00007fff55f8bcb8) at main.m:52
> frame #21: 0x00007fff95b18235 libdyld.dylib`start + 1
> frame #22: 0x00007fff95b18235 libdyld.dylib`start + 1
> (lldb) up
> frame #1: 0x0000000109e20b5a Pharo`primitiveCalloutWithArgs at
> X64SysVFFIPlugin.c:6041
> 6038 result2 = floatObjectOf(floatRet1);
> 6039 goto l14;
> 6040 }
> -> 6041 intRet1 = dispatchFunctionPointerwithwithwithwithwithwith(((SixteenByteReturn
> (*)(sqIntptr_t, sqIntptr_t, sqIntptr_t, sqIntptr_t, sqIntptr_t,
> sqIntptr_t)) (((void *) address2))), ((calloutState1->integerRegisters))[0],
> ((calloutState1->integerRegisters))[1], ((calloutState1->integerRegisters))[2],
> ((calloutState1->integerRegisters))[3], ((calloutState1->integerRegisters))[4],
> ((calloutState1->integerRegisters))[5]);
> 6042 /* begin maybeOwnVM:threadIndex: */
> 6043
> 6044 # if COGMTVM
>
> The struct that should have shown up appears in Pharo as
>
> "CXSourceRangeStruct (
> ptr_data1: (void*)@ 16r7FDF356C77B0
> ptr_data2: (void*)@ 16r7FDF356D0C70
> begin_int_data: 21
> end_int_data: 28
> )"
>
> Open to ideas at this point but I think to progress I would require deep
> knowledge of Intel calling conventions and I don't really know where to go
> next.
>
> Try to isolate the functions into a little dynamic lib and file a bug?
>
As you say, to minimize confounding factors the next step would be to try
to reproduce the "structs passed by value" problem in a minimal library,
and also someone trying to reproduce it doesn't need to compile the whole
libclang
Also now is a good time to move discussion to vm-dev.
cheers -ben
Nov. 17, 2017
Re: [Pharo-users] Pharo-Chrome (was: Soup bug(fix))
by Guillermo Polito
Yes, everything is on official's Mariano repository.
On Fri, Nov 17, 2017 at 10:29 AM, Stephane Ducasse <stepharo.self(a)gmail.com>
wrote:
> >
> > Well, in general the idea is to use the "upstream" project and not
> personal
> > forks. As far as I am aware of, I have merged all PR from Guille into
> > `master`.
>
> Ok so this is good
>
> > So unless he has recent commits that were not yet made available via a
> PR,
> > then my upstream project should be correct.
>
> Guille usually do it the right way. good.
>
> > The only thing I would do as a user is to load `master` rather than the
> > latest released stable version as latest Guille PR merge happened AFTER
> the
> > last release.
>
> I do not get why as a user I would load master instead of stable.
> Or I do not understand the diff between master, dev, stable, released,
>
> To me Stable means that it has been somehow release why I do not see a
> released concern
> in the master beside. This vocabulary is unclear to me.
>
> I do not get it but this sounds good.
>
>
> Stef
>
> >
> > Cheers,
> >
> >
> >>
> >> Stef
> >>
> >> On Wed, Nov 15, 2017 at 3:15 AM, Mariano Martinez Peck
> >> <marianopeck(a)gmail.com> wrote:
> >> > If this is a problem with OSSubprocess I am happy to help it debug it,
> >> > but
> >> > please share with me the exact steps to reproduce it and which code to
> >> > look
> >> > at. And which OS and which Pharo. And it should be 32 bits
> (OSSubprocess
> >> > doesn't work on 64 yet)
> >> >
> >> > Thanks,
> >> >
> >> > On Tue, Nov 14, 2017 at 9:47 PM, Sean P. DeNigris
> >> > <sean(a)clipperadams.com>
> >> > wrote:
> >> >>
> >> >> Alistair Grant wrote
> >> >> > This looks like you are using an old (cached?) version.
> >> >>
> >> >> Ugh, yes. I just deleted the local clone and let Iceberg reclone.
> >> >>
> >> >> Now when I tried:
> >> >> `GoogleChrome get:
> >> >> 'https://finance.yahoo.com/quote/%5EAXJO/history?p=%5EAXJO'`
> >> >> I got:
> >> >> Error: Error: posix_spawn(), code: 2, description: No such file
> or
> >> >> directory
> >> >> Even though pasting the command into Terminal successfully launched
> >> >> Chrome.
> >> >>
> >> >> BTW I had to insert a leading / to into the executable location.
> >> >>
> >> >>
> >> >>
> >> >> -----
> >> >> Cheers,
> >> >> Sean
> >> >> --
> >> >> Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Mariano
> >> > http://marianopeck.wordpress.com
> >>
> >
> >
> >
> > --
> > Mariano
> > http://marianopeck.wordpress.com
>
>
--
Guille Polito
Research Engineer
Centre de Recherche en Informatique, Signal et Automatique de Lille
CRIStAL - UMR 9189
French National Center for Scientific Research - *http://www.cnrs.fr
<http://www.cnrs.fr>*
*Web:* *http://guillep.github.io* <http://guillep.github.io>
*Phone: *+33 06 52 70 66 13
Nov. 17, 2017
Re: [Pharo-users] Pharo-Chrome (was: Soup bug(fix))
by Stephane Ducasse
>
> Well, in general the idea is to use the "upstream" project and not personal
> forks. As far as I am aware of, I have merged all PR from Guille into
> `master`.
Ok so this is good
> So unless he has recent commits that were not yet made available via a PR,
> then my upstream project should be correct.
Guille usually do it the right way. good.
> The only thing I would do as a user is to load `master` rather than the
> latest released stable version as latest Guille PR merge happened AFTER the
> last release.
I do not get why as a user I would load master instead of stable.
Or I do not understand the diff between master, dev, stable, released,
To me Stable means that it has been somehow release why I do not see a
released concern
in the master beside. This vocabulary is unclear to me.
I do not get it but this sounds good.
Stef
>
> Cheers,
>
>
>>
>> Stef
>>
>> On Wed, Nov 15, 2017 at 3:15 AM, Mariano Martinez Peck
>> <marianopeck(a)gmail.com> wrote:
>> > If this is a problem with OSSubprocess I am happy to help it debug it,
>> > but
>> > please share with me the exact steps to reproduce it and which code to
>> > look
>> > at. And which OS and which Pharo. And it should be 32 bits (OSSubprocess
>> > doesn't work on 64 yet)
>> >
>> > Thanks,
>> >
>> > On Tue, Nov 14, 2017 at 9:47 PM, Sean P. DeNigris
>> > <sean(a)clipperadams.com>
>> > wrote:
>> >>
>> >> Alistair Grant wrote
>> >> > This looks like you are using an old (cached?) version.
>> >>
>> >> Ugh, yes. I just deleted the local clone and let Iceberg reclone.
>> >>
>> >> Now when I tried:
>> >> `GoogleChrome get:
>> >> 'https://finance.yahoo.com/quote/%5EAXJO/history?p=%5EAXJO'`
>> >> I got:
>> >> Error: Error: posix_spawn(), code: 2, description: No such file or
>> >> directory
>> >> Even though pasting the command into Terminal successfully launched
>> >> Chrome.
>> >>
>> >> BTW I had to insert a leading / to into the executable location.
>> >>
>> >>
>> >>
>> >> -----
>> >> Cheers,
>> >> Sean
>> >> --
>> >> Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
>> >>
>> >
>> >
>> >
>> > --
>> > Mariano
>> > http://marianopeck.wordpress.com
>>
>
>
>
> --
> Mariano
> http://marianopeck.wordpress.com
Nov. 17, 2017
Local community in south-west of France ?
by Cédrick Béler
Hi all,
I just wanders if there are pharoers, or more generally smalltalkers located in the south west of France ?
If yes, Iâd like to meet from time to time to hack some stuffs or just discuss around a beer.
Meeting every 2 or 3 months could be nice.
The area is quite large (from toulouse to Pau, Biarritz up to Mont-de-Marsan, eventually Bordeaux and also Spain border).
I live between Tarbes and Saint-Gaudens.
I work in a mechanical engineering school and there, I try to push Pharo and get some students into it (not easy as they are not computer scientists).
In Pau UPPA (University), there are computer science students, but I donât know them really.
Cheers,
Cédrick
Nov. 17, 2017
Re: [Pharo-users] Timespan translateToUTC problematic
by Sven Van Caekenberghe
Hmm, in Pharo 7 I see this:
TimeZone local.
=> a LocalTimeZone(LT1:00)
{
Date today.
Date today translateToUTC.
Month month: 6 year: 2015.
(Month month: 6 year: 2015) translateToUTC } collect: [ :each | each printString -> each start ].
=>
an Array(
'17 November 2017'->2017-11-17T00:00:00+00:00
'17 November 2017'->2017-11-17T00:00:00+00:00
'June 2015'->2015-06-01T00:00:00+00:00
'June 2015'->2015-06-01T00:00:00+00:00)
Seems correct to me. And the internal start DateAndTime is already in UTC.
> On 16 Nov 2017, at 18:36, Trussardi Dario Romano <dario.trussardi(a)tiscali.it> wrote:
>
> Ciao,
>
> i have a Pharo 4.0 image run on macbook with time zone is set to Rome +1 UTC .
>
> When i send the translateToUTC to Date instance it is ok:
>
> Date today > 2017-11-16T00:00:00+01:00
>
> Date today translateToUTC > 2017-11-16T00:00:00+00:00
>
>
> But for Month instance :
>
> Month month: 6 year: 2015 > 2015-06-01T00:00:00+01:00
>
> ( Month month: 6 year: 2015 ) translateToUTC > 2015-06-01T00:00:00+01:00
>
> The same problematic is for Year instance.
>
> Considerations ?
>
> Thanks,
>
> Dario
Nov. 17, 2017
Re: [Pharo-users] Bloc installation on Linux [WAS: Re: About implementing a "Mini Pillar" in-image renderer for Pharo ...]
by Peter Uhnák
> Please also note that the rendering on Linux is not using Moz2D so it
will not be as beautiful as in pictures. The reason for this is that there
are external dependencies that are required and we would need help to
figure that setup.
Note that cairo is not shipped with linux Pharo either. So you have
external dependency in both cases.
Peter
On Thu, Nov 16, 2017 at 10:32 PM, Tudor Girba <tudor(a)tudorgirba.com> wrote:
> Hi Offray,
>
> Please do not forget to try and let us know if it works now.
>
> Cheers,
> Doru
>
>
>
> > On Nov 15, 2017, at 9:20 AM, Tudor Girba <tudor(a)tudorgirba.com> wrote:
> >
> > Hi Offray,
> >
> > Alex took a look at your specific distro and he found and fixed your
> issue.
> >
> > Please try again installing GT/Bloc from scratch in a fresh Pharo 6.1
> image.
> >
> > Please also note that the rendering on Linux is not using Moz2D so it
> will not be as beautiful as in pictures. The reason for this is that there
> are external dependencies that are required and we would need help to
> figure that setup.
> >
> > Cheers,
> > Doru
> >
> >
> >> On Nov 14, 2017, at 10:07 PM, Offray Vladimir Luna Cárdenas <
> offray.luna(a)mutabit.com> wrote:
> >>
> >> Hi,
> >>
> >> The readme is clearer now about Iceberg integration as an option not as
> >> prerequisite. Installation works, but Pillar preview tab is grey and
> >> clicking on it rises: "Instance of FFIExternalResourceManager class did
> >> not understand #removeResource:". Also the syntax highlighting in the
> >> (plain) Pillar tab is not working and neither the image preview. A plain
> >> installation of just Pillar (without GT Documenter) got those two
> >> working once.
> >>
> >> Cheers,
> >>
> >> Offray
> >>
> >>
> >> On 14/11/17 12:37, Tudor Girba wrote:
> >>> Hi,
> >>>
> >>> We changed the baseline to not require Moz2D on Linux. Could you
> please try again?
> >>>
> >>> I also updated the README.
> >>>
> >>> Cheers,
> >>> Doru
> >>>
> >>>
> >>>> On Nov 14, 2017, at 6:25 PM, Offray Vladimir Luna Cárdenas <
> offray.luna(a)mutabit.com> wrote:
> >>>>
> >>>> Alex,
> >>>> I understand that frustration on installation could be motivated by
> other issues instead of GT Documenter, but if the team ask to use "Iceberg
> enableMetacelloIntegration: true." in the project readme, where it also
> says that is supported for Pharo 6.1 and 7.0, is natural to think that
> something is wrong with documentation and/or in the project's expectations
> about its intended users and their will to invest the effort, time and
> motivation for "living in the edge". I understand that if we want stuff to
> be improved it should be tested, but also that not all the people that is
> willing to test stuff for Pharo 6.1 needs to live in such edge. Or the
> project is sending a message that is not giving the bests firsts
> impressions, or is going to users which are not intended . I would go for a
> smooth install first and then for collaboration with git. I'll make a pull
> request with the proposal for a better documentation, but my understanding
> about how you can go from the first (user of GT Documenter) to the second
> (developer using Git integration) is not clear.
> >>>>
> >>>> GT Tools has been pretty empowering. I have told that several times
> and I don't think that I have wrote a single line of code in their repos.
> But is getting more difficult just to test and use them and I think that is
> related with the idea that my user *needs* to be also my co-developer,
> starting with their ssh git key pair. If we don't make easier to contribute
> by just making easier to install, there will be no evolution either.
> >>>>
> >>>> Cheers,
> >>>>
> >>>> Offray
> >>>>
> >>>> On 14/11/17 11:45, Aliaksei Syrel wrote:
> >>>>> Hi Offray,
> >>>>>
> >>>>> I understand your frustration, but with all respect, the fact that
> you have problems with Iceberg does not mean that GT Documenter or any
> other GT tool is responsible for described problems.
> >>>>>
> >>>>> Most complains about bloc, brick, whatever is because of unrelated
> stuff. It is a little bit disappointing. Especially for me, as one of the
> maintainers. But it is ok, I got used to it :)
> >>>>>
> >>>>> I donât remember when last time I used stable Pharo (not because it
> does not exist), simply live on the edge since Pharo4. If no one will use
> Git and report problems Iceberg will never progress. If no one will use
> Bloc it will never get âthereâ. Unfortunately, living on the edge is
> dangerous, requires effort, motivation and time.
> >>>>>
> >>>>> The script that Doru provided works flawlessly on OSX, we load it
> almost everyday. !! Bloc is tested on CI and builds are green on Windows,
> Linux and OSX !!. If computer (CI) manages to install it, I am pretty sure
> human can do it too. Looks like there is something missing in your
> configuration, something tiny :) Error handling in Iceberg can be
> definitely improved, but it is a different story.
> >>>>>
> >>>>> P.S. Documenter can be installed without enabled Iceberg
> integration. This is how CI does it. You will just not be able to
> contribute.
> >>>>>
> >>>>> Cheers,
> >>>>> Alex
> >>>>>
> >>>>> On Tue, 14 Nov 2017 at 16:37, Offray Vladimir Luna Cárdenas <
> offray.luna(a)mutabit.com> wrote:
> >>>>> I have been just trying to install GT Documenter and is really
> frustrating (I have been unable to install it even for the first time!).
> >>>>>
> >>>>> This was the list of errors I got and steps I followed, in almost
> sequential order, just to get a (bittersweet!) taste of GT Documenter:
> >>>>>
> >>>>> ⢠1st: LGit_GIT_ERROR: No ssh-agent suitable credentials found. So
> I go to GitHub, follow the five pages of documentation to get my SSH
> credentials that start at [1], then, because I still get the same error, go
> to the Iceberg FAQ [2], try to surpass the erro,r via command line and
> doesn't work, so I go to the Iceberg settings and try the manual
> configuration, going to the next item
> >>>>>
> >>>>> [1] https://help.github.com/articles/generating-a-new-ssh-
> key-and-adding-it-to-the-ssh-agent/#generating-a-new-ssh-key
> >>>>> [2] https://github.com/pharo-vcs/iceberg/blob/master/README.md
> >>>>>
> >>>>> ⢠Now I get "Instance of LGitCredentialsSSH class did not
> understand #ifTrue:ifFalse:". I try to make sense of it in the debugger,
> but is something I cannot. Anyway, I rerun it and now I get:
> LGit_GIT_EEXISTS: '/home/offray/Programas/Pharo/6.1a/Dev24/pharo-local/iceberg/feenkcom/gtoolkit'
> exists and is not an empty directory. I delete that directory and try an
> installation... again
> >>>>> ⢠Now I get: "Instance of FileReference did not understand
> #notEmpty". I try to make sense of it in the debugger. My user is git, my
> public and private ssh keys are not empty. Despite of not making sense of
> all I understand that is trying to clone something at git(a)github.com:
> feenkcom/gtoolkit.git. I go to my image dir and then to
> `iceberg/feenkcom/gtoolkit/`. There is a git repository there, but is empty.
> >>>>> ⢠Now I wonder, maybe if I can just clone the directory there, but
> how I say Iceberg to load it? So I run now only the Metacello part. Same
> error and solution that the last time but now for gtoolkit-visualizer,
> Brick, gtoolkit-examples, Bloc and Sparta.
> >>>>> ⢠After getting my ssh keys, overcome config problems in shell and
> the Pharo settings, chasing these errors and solving them by cloning the
> repositories manually, I'm, a couple of hours later, ready to test GT
> Documenter, but with the last Iceberg's duplicated repository message about
> Sparta I give up. Is not nice to start your day accumulating frustration...
> that sets a bad mood for the rest of it, and you need to actively fight
> against.
> >>>>> I have thought that Git is overcomplicated for most of the
> developers' tasks and communities. I don't know if the root of previous
> issues is in the "Iceberg enableMetacelloIntegration: true" line, but
> having to get your pair of keys working to just install software is
> overkill for the common user (and when LibGit errors are present, the
> documented solutions don't work seamlessly). Maybe a more sensitive
> solution would be just to use libgit, without any ssh auth to clone
> repositories and its prerequisites or even better, some download that goes
> to the files in the tip (or other) version without all this overhead.
> >>>>>
> >>>>> Anyway, as I said, I have been unable to test GT Documenter properly
> and getting feedback over GT Tools from the team usually requires a lot of
> effort in my case (insisting on getting answers or getting none). And that
> is just to test a promising tech that still doesn't offer saving features
> (just and awesome preview). I think that a more sensible approach for a
> good documentation toolkit for now is on Spec and creating custom syntax
> highlighters with SmaCC[3], that is well documented and works today.
> >>>>> [3] https://medium.com/@juliendelplanque/hacking-a-
> simple-syntactic-highlighter-around-specs-textmodel-44ba2e2b1ab9
> >>>>> I understand that community is trying its best, but expressing how
> current offerings are not mature and constructive criticism can help on
> that. At the moment my feeling is that if you want to try the new shinny
> alpha stuff from GT Documenter, you will need to be prepared for a lot of
> frustration and silence.
> >>>>>
> >>>>> Cheers,
> >>>>>
> >>>>> Offray
> >>>>>
> >>>>>
> >>>>> On 10/11/17 12:41, Tudor Girba wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> As shown at ESUG, GT Documenter offers an advanced viewer (and
> editor) for Pillar working on top of Bloc.
> >>>>>>
> >>>>>> You can get it by loading:
> >>>>>>
> >>>>>> Iceberg enableMetacelloIntegration: true.
> >>>>>> Metacello new
> >>>>>> baseline: 'GToolkit';
> >>>>>> repository: 'github://feenkcom/gtoolkit/src';
> >>>>>> load.
> >>>>>>
> >>>>>> For example, you can then inspect:
> >>>>>> 'PATH_TO_ICEBERG/feenkcom/gtoolkit/doc/transcript/index.pillarâ
> asFileReference
> >>>>>>
> >>>>>> Cheers,
> >>>>>> Doru
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>> On Nov 10, 2017, at 12:58 PM, H. Hirzel <hannes.hirzel(a)gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>> A note:
> >>>>>>>
> >>>>>>> Tudor Girba wrote:
> >>>>>>>
> >>>>>>> <tudor(a)tudorgirba.com>
> >>>>>>> Fri, Aug 25, 2017 at 1:31 PM
> >>>>>>> Reply-To: Any question about pharo is welcome
> >>>>>>> <pharo-users(a)lists.pharo.org>
> >>>>>>>
> >>>>>>> To: Any question about pharo is welcome
> >>>>>>> <pharo-users(a)lists.pharo.org>
> >>>>>>>
> >>>>>>>
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> As mentioned in an announcement about 10 days ago, we are building
> a
> >>>>>>> Pillar editor with inline viewing abilities in Bloc. Here is how it
> >>>>>>> looked like. Please note the embedded picture. We continued
> working on
> >>>>>>> it since then and we will probably announce the next version this
> >>>>>>> weekend:
> >>>>>>>
> >>>>>>>
> >>>>>>> Maybe there is now enough progress to do simple presentations in
> Bloc?
> >>>>>>>
> >>>>>>>
> >>>>>>> On 11/10/17, H. Hirzel
> >>>>>>> <hannes.hirzel(a)gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Hello
> >>>>>>>>
> >>>>>>>> In the thread 'including Pillar in Pharo image by default' it was
> >>>>>>>> suggested by Stephane Ducasse to include a subset of Pillar in the
> >>>>>>>> Pharo image[1] .
> >>>>>>>>
> >>>>>>>> I'd like to extend that proposal a little bit it in order to do
> very
> >>>>>>>> simple presentations. This should allow to describe at least part
> of
> >>>>>>>> the slides used in the MOOC course [3].
> >>>>>>>>
> >>>>>>>> This will be _a possible_ solution to the question brought up
> in the
> >>>>>>>> thread 'Writing "powerpoint" like presentations in Pharo?'.
> >>>>>>>>
> >>>>>>>> Another use is to write instructions with executable content
> within
> >>>>>>>> the image ("Assistants").
> >>>>>>>>
> >>>>>>>> So below is the a proposal for a Pillar syntax _subset_ for class
> >>>>>>>> comments and _simple_ presentations.
> >>>>>>>> The numbering scheme follows the 'Pillar syntax cheat sheet' [2]
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> MINI PILLAR SYNTAX (a subset of Pillar)
> >>>>>>>>
> >>>>>>>> 1. Headers
> >>>>>>>>
> >>>>>>>> !Header 1
> >>>>>>>> !!Header 2
> >>>>>>>> !!!Header 3
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 2. Lists
> >>>>>>>>
> >>>>>>>> - Unordered List
> >>>>>>>> # Ordered list
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 5. Emphasis
> >>>>>>>>
> >>>>>>>> ""bold""
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 6. Code blocks
> >>>>>>>>
> >>>>>>>> [[[
> >>>>>>>> Transcript show: 'Hello World'.
> >>>>>>>> \]]]
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 9. Annotation
> >>>>>>>>
> >>>>>>>> ${slide:title=About Pharo}$
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Next week I plan to implement the rendering of this 'Mini Pillar'
> in
> >>>>>>>> Morphic using the Morphic API subset that works in Pharo and
> Squeak.
> >>>>>>>>
> >>>>>>>> A renderer using Bloc would also be nice. [4]
> >>>>>>>>
> >>>>>>>> Comments, suggestions, code snippets and other help is welcome.
> >>>>>>>>
> >>>>>>>> Regards
> >>>>>>>> Hannes
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ------------------------------------------------------------
> --------------------------------------
> >>>>>>>> [1] Pillar subset for class comments
> >>>>>>>>
> >>>>>>>> Stephane Ducasse
> >>>>>>>>
> >>>>>>>> <stepharo.self(a)gmail.com>
> >>>>>>>> Fri, Aug 11, 2017 at 7:09 PM
> >>>>>>>> To: Any question about pharo is welcome
> >>>>>>>> <pharo-users(a)lists.pharo.org>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Tx cyril
> >>>>>>>>
> >>>>>>>> For class comment I image that we want
> >>>>>>>>
> >>>>>>>> !
> >>>>>>>>
> >>>>>>>> -
> >>>>>>>> -
> >>>>>>>> *url*
> >>>>>>>> and bold
> >>>>>>>> [[[
> >>>>>>>>
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> Did I miss something.
> >>>>>>>>
> >>>>>>>> Stef
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ------------------------------------------------------------
> --------------------------------------
> >>>>>>>> [2]
> >>>>>>>>
> >>>>>>>> http://pillarhub.pharocloud.com/hub/pillarhub/pillarcheatsheet
> >>>>>>>>
> >>>>>>>> ------------------------------------------------------------
> --------------------------------------
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 1. Headers
> >>>>>>>>
> >>>>>>>> !Header 1
> >>>>>>>> !!Header 2
> >>>>>>>> !!!Header 3
> >>>>>>>> !!!!Header 4
> >>>>>>>> !!!!!Header 5
> >>>>>>>> !!!!!!Header 6
> >>>>>>>>
> >>>>>>>> 2. Lists
> >>>>>>>>
> >>>>>>>> - Unordered List
> >>>>>>>> # Ordered list
> >>>>>>>>
> >>>>>>>> 3. Table
> >>>>>>>>
> >>>>>>>> |! Left |! Right |! Centered
> >>>>>>>> |{Left |}Right| Centered
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 4. Description
> >>>>>>>> Note
> >>>>>>>> on a new line
> >>>>>>>>
> >>>>>>>> ;head
> >>>>>>>> :item
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 5. Emphasis
> >>>>>>>>
> >>>>>>>> ""bold""
> >>>>>>>> ''italic''
> >>>>>>>> --strikethrough--
> >>>>>>>> __underscore__
> >>>>>>>> ==inline code==
> >>>>>>>> @@subscript@@
> >>>>>>>> ^^sub-script^^
> >>>>>>>>
> >>>>>>>> 6. Code blocks
> >>>>>>>>
> >>>>>>>> [[[labÂel=ÂhelÂloSÂcriÂpt|ÂcapÂtioÂn=How to print Hello
> >>>>>>>> World|ÂlanÂguaÂge=ÂSmaÂlltalk
> >>>>>>>> Transcript show: 'Hello World'.
> >>>>>>>> \]]]
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 7. Raw
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> {{{latex:
> >>>>>>>> this is how you inject raw \LaTeX in your output file
> >>>>>>>> }}}
> >>>>>>>>
> >>>>>>>> {{{marÂkdown:
> >>>>>>>> this is how you inject raw `markdown` in your output file
> >>>>>>>> }}}
> >>>>>>>>
> >>>>>>>> {{{html:
> >>>>>>>> this is how you inject raw <b>ÂhtmÂl</Âb> in your output file
> >>>>>>>> }}}
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 8. Links
> >>>>>>>>
> >>>>>>>> Anchor @anchor (new line)
> >>>>>>>> Internal link *anchor*
> >>>>>>>> External link *Google>
> >>>>>>>> http://google.com
> >>>>>>>> *
> >>>>>>>> Image +Caption>
> >>>>>>>> file://image.png|width=50|label=label+
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 9. Annotation
> >>>>>>>> Note
> >>>>>>>> on a new line
> >>>>>>>>
> >>>>>>>> Annotation @@note this is a note
> >>>>>>>> Todo item @@todo this is to do
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 10. Comments
> >>>>>>>>
> >>>>>>>> % each line starting with % is commented
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> 11. References
> >>>>>>>>
> >>>>>>>> This document is copied from
> >>>>>>>>
> >>>>>>>> http://www.cheatography.com/benjaminvanryseghem/cheat-
> sheets/pillar/
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ------------------------------------------------------------
> ----------
> >>>>>>>> [3] Example pillar code for slides
> >>>>>>>> ------------------------------------------------------------
> ----------
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> https://github.com/SquareBracketAssociates/
> PharoMooc/blob/master/Slides/1-Templates/SlideExample.pillar
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> {
> >>>>>>>> "title":"To the Roots of Objects",
> >>>>>>>> "subtitle":"Learning from beauty",
> >>>>>>>> "author":"Stephane Ducasse",
> >>>>>>>> "complement":
> >>>>>>>> "http://stephane.ducasse.free.fr/ \\\\
> >>>>>>>> stephane.ducasse(a)inria.fr"
> >>>>>>>>
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ${toc:depthLevel=2|level=0|highlight=0}$
> >>>>>>>>
> >>>>>>>> %Les sections ne sont pas des titres de slide mais définnissent la
> >>>>>>>> structure du doucment. Il est possible de rajouter
> >>>>>>>> "renderStructureAsSlide":false dans pillar.conf pour ne pas créer
> de
> >>>>>>>> slide à partir d'un titre.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ${slide:title=License}$
> >>>>>>>>
> >>>>>>>> +>
> >>>>>>>> file://figures/CreativeCommons.png|width=50|
> label=figCreativeCommons+
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ! Introduction
> >>>>>>>>
> >>>>>>>> %
> >>>>>>>> ${toc:depthLevel=1|level=0|highlight=1}$
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ${slide:title=Really?!|label=really}$
> >>>>>>>>
> >>>>>>>> ${columns}$
> >>>>>>>>
> >>>>>>>> ${column:width=50}$
> >>>>>>>>
> >>>>>>>> %the width parameter take an Int between 1 and 100
> >>>>>>>> %For now we have to pass a line before and after an annotation,
> I'll
> >>>>>>>> correct that soon in Pillar.
> >>>>>>>> - No primitive types
> >>>>>>>> - No hardcoded constructs for conditional
> >>>>>>>> - Only messages
> >>>>>>>> - Only objects
> >>>>>>>>
> >>>>>>>> ${column:width=50}$
> >>>>>>>>
> >>>>>>>> - and this works?
> >>>>>>>> - I mean really?
> >>>>>>>> - Not even slow?
> >>>>>>>> - Can't be real!
> >>>>>>>>
> >>>>>>>> ${endColumns}$
> >>>>>>>>
> >>>>>>>> ${slide:title=Motto}$
> >>>>>>>>
> >>>>>>>> - Let's open our eyes, look, understand, and deeply understand the
> >>>>>>>> underlying design aspects of object-oriented programming.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> *@really*
> >>>>>>>>
> >>>>>>>> *TEST !>@really*
> >>>>>>>>
> >>>>>>>> ${slide:title=Booleans}$
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> 3 > 0
> >>>>>>>> ifTrue: ['positive']
> >>>>>>>> ifFalse: ['negative']
> >>>>>>>> -> 'positive'
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=Yes ifTrue\:ifFalse\: is a message!}$
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> Weather isRaining
> >>>>>>>> ifTrue: [self takeMyUmbrella]
> >>>>>>>> ifFalse: [self takeMySunglasses]
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> - Conceptually ==ifTrue:ifFalse:== is a message sent to an
> object: a
> >>>>>>>> boolean!
> >>>>>>>> - ==ifTrue:ifFalse:== is in fact radically optimized by the
> compiler
> >>>>>>>> but you can implement another one such ==siAlors:sinon:== and
> check.
> >>>>>>>>
> >>>>>>>> ${slide:title=Booleans}$
> >>>>>>>>
> >>>>>>>> In Pharo booleans have nothing special
> >>>>>>>> - & | not
> >>>>>>>> - or: and: (lazy)
> >>>>>>>> - xor:
> >>>>>>>> - ifTrue:ifFalse:
> >>>>>>>> - ifFalse:ifTrue:
> >>>>>>>> - ...
> >>>>>>>>
> >>>>>>>> ${slide:title=Lazy Logical Operators}$
> >>>>>>>>
> >>>>>>>> *LINK>@frm:really*
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> false and: [1 error: 'crazy']
> >>>>>>>> -> false and not an error
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ! Exercices
> >>>>>>>> ${toc:depthLevel=1|level=0|highlight=1}$
> >>>>>>>>
> >>>>>>>> !! Exercise 1: Implement not
> >>>>>>>>
> >>>>>>>> ${slide:title=Exercise 1\: Implement not}$
> >>>>>>>>
> >>>>>>>> - Propose an implementation of not in a world where you do not
> have
> >>>>>>>> Booleans.
> >>>>>>>> - You only have objects and messages.
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> false not
> >>>>>>>> -> true
> >>>>>>>>
> >>>>>>>> true not
> >>>>>>>> -> false
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> !!Exercise 2: Implement | (Or) ifTrue: ifFalse:
> >>>>>>>>
> >>>>>>>> ${toc:depthLevel=2|level=0|highlight=1}$
> >>>>>>>>
> >>>>>>>> ${slide:title=Exercise 2\: Implement \| (Or)}$
> >>>>>>>>
> >>>>>>>> - Propose an implementation of or in a world where you do not have
> >>>>>>>> Booleans.
> >>>>>>>> - You only have objects and messages.
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> true | true -> true
> >>>>>>>> true | false -> true
> >>>>>>>> true | anything -> true
> >>>>>>>>
> >>>>>>>> false | true -> true
> >>>>>>>> false | false -> false
> >>>>>>>> false | anything -> anything
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=Exercise2\: Variation - Implement
> ifTrue\:ifFalse\:}$
> >>>>>>>>
> >>>>>>>> - Propose an implementation of not in a world where you do not
> have
> >>>>>>>> Booleans.
> >>>>>>>> - You only have objects, messages and closures.
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> false ifTrue: [ 3 ] ifFalse: [ 5 ]
> >>>>>>>> -> 5
> >>>>>>>> true ifTrue: [ 3 ] ifFalse: [ 5 ]
> >>>>>>>> -> 3
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ! Boolean Implementation
> >>>>>>>>
> >>>>>>>> ${toc:depthLevel=1|level=0|highlight=1}$
> >>>>>>>>
> >>>>>>>> ${slide:title=Booleans Implementation Hint One}$
> >>>>>>>>
> >>>>>>>> - The solution does not use conditionals
> >>>>>>>> - else we would obtain a recursive definition of
> ==ifTrue:ifFalse:==
> >>>>>>>>
> >>>>>>>> ${slide:title=Boolean Implementation Hint Two}$
> >>>>>>>>
> >>>>>>>> - The solution uses three classes: ==Boolean==, ==True== and
> ==False==
> >>>>>>>> - ==false== and ==true== are unique instances described by their
> own
> >>>>>>>> classes
> >>>>>>>> - ==false== is an instance of the class ==False==
> >>>>>>>> - ==true== is an instance of the class ==True==
> >>>>>>>>
> >>>>>>>> +Boolean Hierarchy>
> >>>>>>>> file://figures/BooleanHiearchyAndInstances.png|width=50+
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ${slide:title=How do we express choice in OOP?}$
> >>>>>>>>
> >>>>>>>> - We send messages to objects
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> aButton color
> >>>>>>>> -> Color red
> >>>>>>>>
> >>>>>>>> aPane color
> >>>>>>>> -> Color blue
> >>>>>>>>
> >>>>>>>> aWindow color
> >>>>>>>> -> Color grey
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> - Let's the receiver decide
> >>>>>>>>
> >>>>>>>> - Do not ask, tell
> >>>>>>>>
> >>>>>>>> ${slide:title=Boolean not implementation}$
> >>>>>>>>
> >>>>>>>> - Class ==Boolean== is an abstract class that implements behavior
> >>>>>>>> common to true and false. Its subclasses are ==True== and
> ==False==.
> >>>>>>>> Subclasses must implement methods for logical operations ==&==,
> >>>>>>>> ==not==, and controls ==and:==, ==or:==, ==ifTrue:==,
> ==ifFalse:==,
> >>>>>>>> ==ifTrue:ifFalse:==, ==ifFalse:ifTrue:==
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> Boolean>>not
> >>>>>>>> "Negation. Answer true if the receiver is false, answer
> false if the
> >>>>>>>> receiver is true."
> >>>>>>>> self subclassResponsibility
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=Not implementation in two methods}$
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> False>>not
> >>>>>>>> "Negation -- answer true since the receiver is false."
> >>>>>>>> ^ true
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> True>>not
> >>>>>>>> "Negation--answer false since the receiver is true."
> >>>>>>>> ^ false
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=Not implementation in two methods}$
> >>>>>>>>
> >>>>>>>> +Not
> >>>>>>>> implementation.>
> >>>>>>>> file://figures/BooleanHiearchyAndInstancesWit
> hNotMethods.png|width=80+
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ${slide:title=\| (Or)}$
> >>>>>>>> [[[language=smalltalk
> >>>>>>>>
> >>>>>>>> true | true -> true
> >>>>>>>> true | false -> true
> >>>>>>>> true | anything -> true
> >>>>>>>>
> >>>>>>>> false | true -> true
> >>>>>>>> false | false -> false
> >>>>>>>> false | anything -> anything
> >>>>>>>>
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=Boolean>> \| aBoolean}$
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> Boolean>> | aBoolean
> >>>>>>>> "Evaluating disjunction (OR). Evaluate the
> argument. Answer true if
> >>>>>>>> either the receiver or the argument is
> >>>>>>>> true."
> >>>>>>>> self subclassResponsibility
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=False>> \| aBoolean}$
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> false | true -> true
> >>>>>>>> false | false -> false
> >>>>>>>> false | anything -> anything
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> False >> | aBoolean
> >>>>>>>> "Evaluating disjunction (OR) -- answer with the argument,
> aBoolean."
> >>>>>>>> ^ aBoolean
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=True>> \| aBoolean}$
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> true | true -> true
> >>>>>>>> true | false -> true
> >>>>>>>> true | anything -> true
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> True>> | aBoolean
> >>>>>>>> "Evaluating disjunction (OR) -- answer true since the
> receiver is true."
> >>>>>>>> ^ self
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=Or implementation in two methods}$
> >>>>>>>>
> >>>>>>>> +>
> >>>>>>>> file://figures/BooleanHiearchyAndInstancesWit
> hOrMethods.png|width=80+
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ${slide:title=Implementing ifTrue\:ifFalse\:}$
> >>>>>>>>
> >>>>>>>> - Do you see the pattern?
> >>>>>>>> - Remember that a closure freezes execution and that value
> launches
> >>>>>>>> the execution of a frozen code.
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> True>>ifTrue: aTrueBlock ifFalse: aFalseBlock
> >>>>>>>> ^ aTrueBlock value
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> [[[language=smalltalk
> >>>>>>>> False>>ifTrue: aTrueBlock ifFalse: aFalseBlock
> >>>>>>>> ^ aFalseBlock value
> >>>>>>>> ]]]
> >>>>>>>>
> >>>>>>>> ${slide:title=Implementation Note}$
> >>>>>>>>
> >>>>>>>> - Note that the Virtual Machine shortcuts calls to boolean such as
> >>>>>>>> condition for speed reason.
> >>>>>>>> - But you can implement your own conditional method and debug to
> see
> >>>>>>>> that sending a message is dispatching to the right object.
> >>>>>>>>
> >>>>>>>> ! So what ?
> >>>>>>>>
> >>>>>>>> ${toc:depthLevel=1|level=0|highlight=1}$
> >>>>>>>>
> >>>>>>>> ${slide:title=Ok so what?}$
> >>>>>>>>
> >>>>>>>> - You will probably not implement another Boolean classes
> >>>>>>>> - So is it really that totally useless?
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ${slide:title=Message sends act as case statements}$
> >>>>>>>>
> >>>>>>>> - The execution engine will select the right method in the class
> of the
> >>>>>>>> receiver
> >>>>>>>> - The case statements is dynamic in the sense that it depends on
> the
> >>>>>>>> classes loaded and the objects to which the message is sent.
> >>>>>>>> - Each time you send a message, the system will select the method
> >>>>>>>> corresponding to the receiver.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> ${slide:title=A Class Hierarchy is a Skeleton for Dynamic
> Dispatch}$
> >>>>>>>>
> >>>>>>>> - If we would have said that the ==Boolean== would be composed of
> only
> >>>>>>>> one class, we could not have use dynamic binding.
> >>>>>>>> - A class hierarchy is the exoskeleton for dynamic binding
> >>>>>>>>
> >>>>>>>> - Compare the solution with one class vs. a hierarchy.
> >>>>>>>>
> >>>>>>>> +One single class vs. a nice
> >>>>>>>> hierarchy.>
> >>>>>>>> file://figures/Design-FatVsDispatch.png|width=70+
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> - The hierarchy provides a way to specialize behavior.
> >>>>>>>> - It is also more declarative in the sense that you only focus on
> one
> >>>>>>>> class.
> >>>>>>>> - It is more modular in the sense that you can package different
> >>>>>>>> classes in different packages.
> >>>>>>>>
> >>>>>>>> ${slide:title=Avoid Conditionals}$
> >>>>>>>>
> >>>>>>>> - Use objects and messages, when you can
> >>>>>>>> - The execution engine acts as a conditional switch: Use it!
> >>>>>>>> - Check the AntiIfCampaign.
> >>>>>>>>
> >>>>>>>> ${slide:title=Follow-up: Implement ternary logic}$
> >>>>>>>>
> >>>>>>>> - Boolean: ==true==, ==false==, ==unknown==
> >>>>>>>> +Ternaru Logic decision table
> >>>>>>>>
> >>>>>>>>> file://figures/ArrayBoolean.png|width=30|label=fig:ternLogic+
> >>>>>>>> - Implementing in your own classes.
> >>>>>>>>
> >>>>>>>> ! Summary
> >>>>>>>>
> >>>>>>>> ${toc:depthLevel=1|level=0|highlight=1}$
> >>>>>>>>
> >>>>>>>> ${slide:title=Summary}$
> >>>>>>>> - Tell, do not ask
> >>>>>>>> - Let the receiver decide
> >>>>>>>> - Message sends as potential dynamic conditional
> >>>>>>>> - Class hiearchy builds a skeleton for dynamic dispatch
> >>>>>>>> - Avoid conditional
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> -----------------------------------------
> >>>>>>>> [4] Bloc
> >>>>>>>> Load Bloc with executing in a playground (Pharo 6.1)
> >>>>>>>>
> >>>>>>>> Metacello new
> >>>>>>>> baseline: 'Bloc';
> >>>>>>>> repository: 'github://pharo-graphics/Bloc:pharo6.1/src';
> >>>>>>>> load: #core
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> A tutorial to use bloc is available on
> >>>>>>>>
> >>>>>>>> http://files.pharo.org/books/
> >>>>>>>>
> >>>>>>>> Bloc Memory Game (alpha) is a first tutorial on Bloc the new
> graphics
> >>>>>>>> core for Pharo. Booklet written by A. Chis, S. Ducasse, A. Syrel.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> http://files.pharo.org/books-pdfs/booklet-Bloc/2017-11-09-
> memorygame.pdf
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> To load the memory game
> >>>>>>>>
> >>>>>>>> Metacello new
> >>>>>>>> baseline: 'BlocTutorials';
> >>>>>>>> repository: 'github://pharo-graphics/Tutorials/src';
> >>>>>>>> load
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> A similar booklet could be done for the title
> >>>>>>>> 'Doing a presentation / slide show / assitant with Bloc' (or
> similar,
> >>>>>>>> adapt .....)
> >>>>>>>>
> >>>>>>>>
> >>>>>> --
> >>>>>>
> >>>>>> www.tudorgirba.com
> >>>>>> www.feenk.com
> >>>>>>
> >>>>>>
> >>>>>> "Obvious things are difficult to teach."
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>> --
> >>>>> Cheers,
> >>>>> Alex
> >>> --
> >>> www.tudorgirba.com
> >>> www.feenk.com
> >>>
> >>> "There are no old things, there are only old ways of looking at them."
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>
> >>
> >>
> >
> > --
> > www.tudorgirba.com
> > www.feenk.com
> >
> > "From an abstract enough point of view, any two things are similar."
> >
> >
> >
> >
>
> --
> www.tudorgirba.com
> www.feenk.com
>
> "Reasonable is what we are accustomed with."
>
>
>
Nov. 17, 2017
Re: [Pharo-users] Timespan translateToUTC problematic
by Peter Uhnák
I find the concept of translating TZ of a Date silly. The real bug imho
should be that it prints both time and TZ.... this is Date, not DateAndTime.
Peter
On Thu, Nov 16, 2017 at 8:23 PM, Pavel Krivanek <pavel.krivanek(a)gmail.com>
wrote:
> I openend an issue: https://pharo.fogbugz.com/f/cases/20700/
> translateToUTC-does-not-work-on-Month-and-Year
>
> Thank you for reporting
> -- Pavel
>
> 2017-11-16 18:36 GMT+01:00 Trussardi Dario Romano <
> dario.trussardi(a)tiscali.it>:
>
>> Ciao,
>>
>> i have a Pharo 4.0 image run on macbook with time zone is set to
>> Rome +1 UTC .
>>
>> When i send the translateToUTC to Date instance it is ok:
>>
>> Date today > 2017-11-16T00:00:00+01:00
>>
>> Date today translateToUTC >
>> 2017-11-16T00:00:00+00:00
>>
>>
>> But for Month instance :
>>
>> Month month: 6 year: 2015 >
>> 2015-06-01T00:00:00+01:00
>>
>> ( Month month: 6 year: 2015 ) translateToUTC >
>> 2015-06-01T00:00:00+01:00
>>
>> The same problematic is for Year instance.
>>
>> Considerations ?
>>
>> Thanks,
>>
>> Dario
>>
>
>
Nov. 17, 2017