Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- 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
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
January 2016
- 75 participants
- 1435 messages
Re: [Pharo-dev] Rubric: spotter with preview leaks some memory
by Andrei Chis
Tried it in the last latest image and if I execute before #garbageCollect I
just get 4 instances.
Smalltalk garbageCollect.
RubTextLine allInstances size "4"
Now indeed if I browse the same class in nautilus I get a much smaller
number of RubTextLine instances
On Wed, Jan 20, 2016 at 2:32 PM, Nicolai Hess <nicolaihess(a)gmail.com> wrote:
> Open fresh image 50536
> Open Spotter,
> enable preview (cmd+p)
> search for EllipseMorph
> dive in instance-methods
> scroll through the list one item after another.
>
> open playground
> evaluate
> RubTextLine allInstances size. "553896"
>
>
> case 17421 is related to this, but does not fully solves this.
> please review and comment on that fix,
> so we can integrate this soon.
>
> The problem sometimes remains even with this fix. The memory
> (instance count of RubTextLine) just grows in the background
>
Jan. 20, 2016
Re: [Pharo-dev] [ANN] OSSubprocess v0.2.0 release
by Hilaire
Thanks,
The link miss instructions about what it is and how to load it (load
script and Pharo version)
Thanks
Hilaire
--
Dr. Geo
http://drgeo.eu
Jan. 20, 2016
Rubric: spotter with preview leaks some memory
by Nicolai Hess
Open fresh image 50536
Open Spotter,
enable preview (cmd+p)
search for EllipseMorph
dive in instance-methods
scroll through the list one item after another.
open playground
evaluate
RubTextLine allInstances size. "553896"
case 17421 is related to this, but does not fully solves this.
please review and comment on that fix,
so we can integrate this soon.
The problem sometimes remains even with this fix. The memory
(instance count of RubTextLine) just grows in the background
Jan. 20, 2016
Re: [Pharo-dev] another spotter question
by Aliaksei Syrel
On Wed, Jan 20, 2016 at 12:59 PM, Ben Coman <btc(a)openinworld.com> wrote:
> +1. Its annoying that it takes two clicks to dive into categories like
> "Implementors" (one to click an item under the category to make the arrow
> appear, and then another to click on it) when it would only take one if
> that arrow for each category was always visible.
Doru is right, always visible arrows would pollute UI. A compromise
solution would be to show them on mouse hover - one click + not overcrowded
interface.
Cheers,
Alex
Jan. 20, 2016
Re: [Pharo-dev] [ANN] Pharo bootstrap
by Guillermo Polito
Well, there is no formal specification⦠But I could summarize the features as follows (and as Christophe points mostly out)
OzVM supports having two images in logically separated spaces. This separation is achieved by using the free bit in the object header. Thus we support only two spaces by now.
- The main addition is actually a new primitive: #resumeFromSpecialObjectsArray that receives an special objects array as argument and:
- resumes the execution from the active process of such array
- on context switch, if the VM is running from a second special objects array, it will return to the first one instead.
- fixes to primitives/bytecodes that assume a single special objects array. e.g.,
- #someObject and #nextObject should only iterate objects from the correct âspaceâ
- #isNil comparisons should take the correct nil
- the GC should set the correct nil object on Weak containers
The extensions I made are about 20 overrides to StackPrimitive and NewObjectMemory methods.
The rest is implemented completely on image side. We use mirror primitives to manipulate objects from other space (as each image/space has itâs own selector table).
I have in my long TODO list see if the "clever hackâ I did can be supported in a nice manner on top of Spurâs segmented memory. However, I should stop commencing new projects and start finishing them :P.
> On 20 ene 2016, at 9:03 a.m., Christophe Demarey <Christophe.Demarey(a)inria.fr> wrote:
>
> Hi Eliot,
>
> Le 19 janv. 2016 à 19:29, Eliot Miranda a écrit :
>
>> Hi All,
>>
>> great news! Where can I read a specification of the Oz VM facilities?
>
> I do not know all the details of the Oz VM but basically, it is a standard stack interpreter vm specialized to be able to run 2 images at the same time on top of it.
> Guillermo made it possible by using one available bit in the object header of objects to mark the ownership of an object (e.g. is my object from image1 or image2?). Then, he mainly had to specialize VM primitives dealing with objects retrieval from memory. By example, he had to modify the garbage collector to set the right nil instance (yes, we have 2 images so 2 nil instances. we need to take the one of the active image) when an object is garbage collected; the primitive someObject has to return an object from the active image, etc.
> There is also a way to switch execution from an image to the other just by switching the special objects array reference.
>
> You can find some information in: https://guillep.github.io/files/publications/Poli15Thesis.pdf <https://guillep.github.io/files/publications/Poli15Thesis.pdf>.
> The Oz code is in http://smalltalkhub.com/#!/~Guille/ObjectSpace <http://smalltalkhub.com/#!/~Guille/ObjectSpace> and in https://github.com/guillep/OzVM <https://github.com/guillep/OzVM>
> The current implementation uses Cog 6.6.1and OzVM-GuillermoPolito.22.
> I do not know if Guille has a more formal specification of the Oz VM.
>
> If you have advices on what is the best way to handle two distinct object (memory) spaces in Spur, they will be welcomed :)
>
> Cheers,
> Christophe
>
>
>> _,,,^..^,,,_ (phone)
>>
>> On Jan 19, 2016, at 6:29 AM, Christophe Demarey <christophe.demarey(a)inria.fr <mailto:christophe.demarey@inria.fr>> wrote:
>>
>>> Hi all,
>>>
>>> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).
>>>
>>> This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
>>> The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.
>>>
>>> With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf <https://guillep.github.io/files/publications/Poli15Thesis.pdf>, we succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
>>> This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
>>> It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-… <http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-…>.
>>>
>>> Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
>>> Then, we need to implement an Oz VM on top of Spur.
>>> After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).
>>>
>>> Christophe.
>>>
>>> -------
>>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
>>> 2
>>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
>>> 'ab'
>>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
>>> ZeroDivide
>>> SmallInteger>>/
>>> UndefinedObject>>DoIt
>>> OpalCompiler>>evaluate
>>> OpalCompiler(AbstractCompiler)>>evaluate:
>>> SmalltalkImage>>evaluate:
>>>
>>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
>>> BlockClosure>>on:do:
>>> EvaluateCommandLineHandler>>evaluate:
>>> EvaluateCommandLineHandler>>evaluateArguments
>>> EvaluateCommandLineHandler>>activate
>>> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>>
>>> BasicCommandLineHandler>>no (source is Undeclared)
>>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
>>> BlockClosure>>on:do:
>>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
>>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>>>
>>> BasicCommandLineHandler>>no (source is Undeclared)
>>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
>>> BlockClosure>>on:do:
>>> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>>> PharoCommandLineHandler>>activate
>>> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>>
>>> PharoCommandLineHandler class>>no (source is Undeclared)
>>> no source in PharoCommandLineHandler class>>activateWith: in Block: no source
>>> NonInteractiveUIManager(UIManager)>>defer:
>>> PharoCommandLineHandler class>>activateWith:
>>> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
>>> BlockClosure>>on:do:
>>> BasicCommandLineHandler>>activateSubCommand:
>>> BasicCommandLineHandler>>handleSubcommand
>>> BasicCommandLineHandler>>handleArgument:
>>> no source in BasicCommandLineHandler>>activate in Block: no source
>>>
>>> SmallInteger>>no (source is Undeclared)
>>>
>>> UndefinedObject>>no (source is Undeclared)
>>>
>>> AbstractCompiler>>no (source is Undeclared)
>>>
>>> SmalltalkImage>>no (source is Undeclared)
>>>
>>> BlockClosure>>no (source is Undeclared)
>>>
>>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>>
>>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>>
>>> CommandLineHandler class>>no (source is Undeclared)
>>>
>>> BasicCommandLineHandler>>no (source is Undeclared)
>>>
>>> BasicCommandLineHandler>>no (source is Undeclared)
>>>
>>> PharoCommandLineHandler>>no (source is Undeclared)
>>>
>>> UIManager>>no (source is Undeclared)
>>>
>>> UndefinedObject>>no (source is Undeclared)
>>>
>>> CommandLineUIManager>>no (source is Undeclared)
>>>
>>> SmalltalkImage>>no (source is Undeclared)
>>>
>>> DelayMicrosecondScheduler>>no (source is Undeclared)
>>>
>>> BlockClosure>>no (source is Undeclared)
>>>
>>> SmalltalkImage>>no (source is Undeclared)
>>>
>>> WeakArray class>>no (source is Undeclared)
>>>
>>>
>>> ps: source cannot be displayed because there is no formatter available in the bootstrap
>>>
>
Jan. 20, 2016
Re: [Pharo-dev] [ANN] Pharo bootstrap
by Guillermo Polito
> On 20 ene 2016, at 9:08 a.m., Christophe Demarey <Christophe.Demarey(a)inria.fr> wrote:
>
> Hi Pavel,
>
> Le 19 janv. 2016 à 19:53, Pavel Krivanek a écrit :
>
>> Hi,
>>
>> amazing! Do you have any idea how to speed up it? The bootstrap process is now running on my machine about one and half hour and it is still far from finish.
>
> The process is indeed far too long (takes around 10 hours) on the CI server.
> Reasons are:
> - we use a stack interpreter VM
> - we modified it and is a bit slower than a classical stack VM
Not quite so. My measurements did not show that⦠But I can understand the feeling as the StackVM is in general half as fast as the CogVM, which is the VM we are used to use since years.
> - we use AST interpretation to build the bootstrap and it is very slow. Guille already did some speed improvements by avoiding to interpret loops by example.
>
> I did not yet spend time on this point because I first wanted to have something working.
> Definitely, this problem will be tackled when we will put in production the bootstrap.
We should really measure because I see three main aspects:
1) class creation (executes the class builder using AST interpretation)
2) method compilation
3) method installation (using AST interpretation to respect trait copying)
My feeling (from what I observe only) is that most of the time is consumed in 2) and 3), and that specially it is in 3).
And I particularly want to see how the growing of collections perform.
>
> Cheers,
> Christophe
>
>
>> Cheers,
>> -- Pavel
>>
>> 2016-01-19 15:29 GMT+01:00 Christophe Demarey <christophe.demarey(a)inria.fr <mailto:christophe.demarey@inria.fr>>:
>> Hi all,
>>
>> In case you do not know, we work on bootstrapping Pharo, i.e. create a Pharo image from sources, not based on a previous image (well, we use a pharo image to produce it but no code / state from it).
>>
>> This process will allow to define a minimal Pharo kernel (currently 52 packages but we could have it far smaller) and to modularize the whole image (currently packages have too much dependencies on packages already loaded into the image).
>> The bootstrap process also allows to write down the recipe to initialize a new image from scratch (some code is missing in the image or is wrong). In addition, I think we will clean a lot of historical objects that are not used anymore.
>>
>> With the amazing work done by Guillermo Polito during his Phd (around Espell, Oz): https://guillep.github.io/files/publications/Poli15Thesis.pdf <https://guillep.github.io/files/publications/Poli15Thesis.pdf>, we succeeded to get a first prototype of a bootstraped Pharo 5 image (from 5.392).
>> This prototype is able to run an eval command line handler and to log output / errors. Not all classes are yet initialized and you cannot yet save / restart this image but it is a big step forward.
>> It is a 4 mb image (could be half the size without unicode data). You can download it at: http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-… <http://chercheurs.lille.inria.fr/~demarey/pmwiki/pub/pharo-bootstrap/pharo-…>.
>>
>> Next steps are to have a bootstrapped image fully working, then to load packages on top of it (like network, sunit) to produce a minimal image.
>> Then, we need to implement an Oz VM on top of Spur.
>> After that, we need to work on a reliable way to build the bootstrap (not too sensitive to changes in the image).
>>
>> Christophe.
>>
>> -------
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 + 1"
>> 2
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "'a' , 'b'"
>> 'ab'
>> demarey@193-51-236-143:~/dev/rmod/bootstrap/bootstrap-2016-01-19$ ../pharo bootstrap.image --no-default-preferences eval "1 / 0"
>> ZeroDivide
>> SmallInteger>>/
>> UndefinedObject>>DoIt
>> OpalCompiler>>evaluate
>> OpalCompiler(AbstractCompiler)>>evaluate:
>> SmalltalkImage>>evaluate:
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>> no source in EvaluateCommandLineHandler>>evaluate: in Block: no source
>> BlockClosure>>on:do:
>> EvaluateCommandLineHandler>>evaluate:
>> EvaluateCommandLineHandler>>evaluateArguments
>> EvaluateCommandLineHandler>>activate
>> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
>> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>> no source in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: no source
>> BlockClosure>>on:do:
>> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
>> PharoCommandLineHandler>>activate
>> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
>>
>> PharoCommandLineHandler class>>no (source is Undeclared)
>> no source in PharoCommandLineHandler class>>activateWith: in Block: no source
>> NonInteractiveUIManager(UIManager)>>defer:
>> PharoCommandLineHandler class>>activateWith:
>> no source in BasicCommandLineHandler>>activateSubCommand: in Block: no source
>> BlockClosure>>on:do:
>> BasicCommandLineHandler>>activateSubCommand:
>> BasicCommandLineHandler>>handleSubcommand
>> BasicCommandLineHandler>>handleArgument:
>> no source in BasicCommandLineHandler>>activate in Block: no source
>>
>> SmallInteger>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> AbstractCompiler>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> EvaluateCommandLineHandler>>no (source is Undeclared)
>>
>> CommandLineHandler class>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> BasicCommandLineHandler>>no (source is Undeclared)
>>
>> PharoCommandLineHandler>>no (source is Undeclared)
>>
>> UIManager>>no (source is Undeclared)
>>
>> UndefinedObject>>no (source is Undeclared)
>>
>> CommandLineUIManager>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> DelayMicrosecondScheduler>>no (source is Undeclared)
>>
>> BlockClosure>>no (source is Undeclared)
>>
>> SmalltalkImage>>no (source is Undeclared)
>>
>> WeakArray class>>no (source is Undeclared)
>>
>>
>> ps: source cannot be displayed because there is no formatter available in the bootstrap
>>
>>
>
Jan. 20, 2016
Re: [Pharo-dev] another spotter question
by Ben Coman
On Wed, 20 Jan 2016 at 3:37 AM stepharo <stepharo(a)free.fr> wrote:
>
> Hmm. Thanks for describing this way of working.
>
> Here is the thing. We observed users working with this, and they all used predominantly the keyboard. So, we favored keyboard use. This is not an argument for anything, and it does not mean that that is the best design, I am just telling you how we designed it. Things can change, and this is why it is important to understand how people tend to use the UI.
>
> So, every (and only) selection has actions. In your example, the #Menu category has a right arrow next to it. If you click on that you âDive in categoryâ. That means that if you want to dive in #Implementors, you navigate there, and then you get the option of diving in.
>
> We consciously chose to not show all actions all the time because that would have led to an overcrowded UI with too many things to choose from. Right now, you have 5 main things to click on and that is it.
>
> Now, hearing your scenario, it seems to make sense to make the category clickable as well and make it dive in that category. We will look at it (or maybe someone else does it beforehand :)). Thanks.
>
> Does this make more sense now?
>
>
> Yes! I do not get why keyboard is orthogonal to direct access.
>
> To me what I hate in UI is UI that are showing information but do not let
> you access it.
>
> How can I see that I can do something on the list?
> The arrows only arrive when I click on ........
> So I was trying to click on the label and it did not work. Of course I
> must click on the first element
> of the list so that the arrow show up on the element and the label!!!!!
>
>
+1. Its annoying that it takes two clicks to dive into categories like
"Implementors" (one to click an item under the category to make the arrow
appear, and then another to click on it) when it would only take one if
that arrow for each category was always visible.
cheers -ben
> What???
>
> Seriously doru. You should have asked UI blind like me to test
> Spotter.
> I would have recorded a session and you can see that there are
> glitches that you do not even see.
> I'm just continuously bumping on them.
> This is why I could understand Spotter and use it only to find a
> class.
>
>
>
>
>
>
>
>
> This is why I like the grabbing possibility of file on mac via the icons
> and the navigation from there
> because I see the file it is in front of my nose and I do not to jump into
> a file system (like a mail download folder
> I have no clue where it is) to grab it.
> So to me Spotter should offer the same. Show information and let me grab
> it. Especially when this is on the suggstion
> list.
>
> I do not understand how you solve the problem I got with shortcut btw.
>
> You see the point is the following. Diving can be frustrating.
> If on click on the labl you get the list then it can work really well.
>
> Doru
>
>
> Stef
>
>
>
> <icfedjib..png>
>
> --www.tudorgirba.comwww.feenk.com
>
> "When people care, great things can happen."
>
>
>
>
>
>
>
>
>
Jan. 20, 2016
Re: [Pharo-dev] Spotter suggestions
by David Allouche
> On 20 Jan 2016, at 11:05, Tudor Girba <tudor(a)tudorgirba.com> wrote:
>
> Hi,
>
>> On Jan 20, 2016, at 10:48 AM, David Allouche <david(a)allouche.net> wrote:
>>
>>
>>> On 20 Jan 2016, at 10:39, David Allouche <david(a)allouche.net> wrote:
>>>
>>> And some suggestion for all lists:
>>
>> Another one: Esc should close Spotter.
>
> It does.
Right. I'm puzzled. I did double check before. That's how I found out about Cmd-W.
Sorry for the noise.
Jan. 20, 2016
Re: [Pharo-dev] Spotter suggestions
by Tudor Girba
Hi,
This is indeed long and I am unable to read this now. It might take a while to get to reply.
Cheers,
Doru
> On Jan 20, 2016, at 10:39 AM, David Allouche <david(a)allouche.net> wrote:
>
> Since you asked to keep challengingâ¦
>
> Preamble: Sorry, I did one of those long messages again. I hope I am not annoying people with that.
>
>> On 19 Jan 2016, at 22:40, Tudor Girba <tudor(a)tudorgirba.com> wrote:
>>
>> Hi,
>>
>>> On Jan 19, 2016, at 9:18 PM, stepharo <stepharo(a)free.fr> wrote:
>>>
>>>
>>>
>>> Le 19/1/16 20:25, David Allouche a écrit :
>>>> BTW, thanks for the explanations for Spotter.
>>
>> You are welcome. Please keep challenging. This is how good design happens.
>>
>>
>>>>> On 19 Jan 2016, at 18:37, Tudor Girba <tudor(a)tudorgirba.com> wrote:
>>>>>
>>>>> And then, in Spotter we have another discovery mechanism: Shift. When you press it, all clickable things get highlighted (including the arrow). We chose Shift because it is something that you type often as part of a text, so it will be very likely that you will press it when working with Spotter as well. And this will get you to see that something happens.
>>>> I am lazy and fearful of RSI. If I can avoid using the shift key at all, I am quite happy. So I did not notice that the arrows where clickable.
>>>
>>> :)
>>> Same here.
>>
>> What is RSI?
>>
>> Most people I know use Shift to type an upper case, and we observed that when people search, they often tend to still use uppercase. Not all, but many. That is why we put this functionality on Shift. This does not mean that it is enough, but we just wanted to increase the chance of people stumbling across this without any documentation. It only partially succeeded.
>
> You already stated your reasoning, and I understand it. I was just making noise for people like Stef and me, who never use Shift unless they HAVE TO.
>
>> Anyway, we should externalize the key bindings. Another thing on the to do list :)
>
> Sure, great!
>
>
>>>> Here are a few suggestions that would fit my workflow.
>>>>
>>>> I also think that "Selectors" should appear after classes and before packages, and be called "Messages". Typically I want to open a specific class, or a specific message in a specific class.
>>
>> #Messages is not a bad name, but then again I also thought that #Selectors was explicit enough :). What do others think?
>
> Any interest in putting "Messages" after "Classes" and before "Packages"?
>
> Another advantage of "Messages" is that "#m" is unambiguous. Currently, "#se" is ambiguous (#senders and #selectors), that is a serious annoyance.
>
>>>> The short list of implementors at the top level is usually noise and might have confused Stef. It becomes relevant once the message is fully specified.
>>>>
>>>> Diving in should be done with right arrow when at the end of the command line.
>>>> Diving out with left arrow at the start of the command line.
>>> I was wondering what is the benefit to have cmd - shit arrow vs arrow
>>
>> Left/Right is used to move inside the text area (there is only one text field in the whole UI), and that is why you cannot consistently use it for navigating through results.
>>
>> Navigating when the cursor is at the end is a tempting idea, but it implies a mode that is not contextual (you need to things to look at). That is why I would not want to have it in this interface.
>
> Not overloading unmodified right/left arrows sounds like an obvious good idea.
>
> But as you already mentioned, Spotter is a special context, so one needs to take a step back to evaluate the interaction possibilities.
>
> Typically, in the Spotter command line, I never use left-right arrows, and I think this is common. If people mistype something, and have immediate feedback, they tend to use backspace to fix it, instead of in-line editing.
>
> Spotter is also very similar to a class browser like Nautilus, where left-right arrows are the primary way to dive in and out of packages, classes, protocols, methods. That makes right and left arrows intuitive to dive in and out in Spotter.
>
> If right and left arrows dive in and out, it's very easy to cancel a mistake, just immediately press the opposite arrow. That also means that dive-out should remember what was the search line, so immediately diving back in does not lose the previous input, as is the current behaviour. Can you fix that?
>
> Cmd-arrows and Cmd-shift-arrows is uncommon, and it takes a conscious effort to remember, it's not intuitive in any way.
>
> Cmd-arrows and Cmd-shift-arrows are slow and hard to reach combinations. They require me to move my left arm from the shoulder so left hand goes to the modifier keys corner. Reaching arrows already requires me to move my right arm so my right hand gets over the arrow pad. So every time I want to dive in or out, I need to move both arms and completely lose kinaesthetic connection with the home row. Then to continue filtering I need to find the home row again. Repetitive switching between home row and cmd-shift-arrows is frustrating at a deep, motor level. That kind of frustration leads to angry people and the Dark Side.
>
> One could consider using Tab and Shift-Tab instead, but that would be a bad choice. Tab should mean "autocomplete this", and in the context of Spotter you cannot overload this with navigation. (I could expand on that)
>
> I am not sure what you mean by "not contextual": I type some words, use up/down arrows to choose the line I want, which is often not the first one, then use right arrow to dive in. That is contextual: I am looking at the list, I already have my hand on the arrow pad, I did a vertical motion action and now I want to do an horizontal motion action.
>
> If you insist right-left arrow should not be overloaded in the search line, then you could use the first down arrow to move out of "command context" and into "matches context". Other actions like Enter and Backspace need not depend on the context. But I am convinced it is not necessary to make a distinction between command context and matches context.
>
> At the very least, I would like some reassurance that the Spotter UI machinery would make it easy for people like me to hack in the interaction behaviour they expect from arrow keys.
>
>>>>
>>>> When a list of paginated (only first N items), then the category line should be accessible with arrows, so we can dive into a category just with arrows.
>>
>> We explicitly chose not to do that because we did not want to mingle different kinds of elements in the same list. So, like this, when you press Cmd+Right, you will always dive in one single element, and not in many by mistake.
>
> I understand that. But I think it is the wrong trade-off.
>
> Diving into the wrong element with right arrow is cheap, just press left arrow to dive out. That's easy to do and totally intuitive.
>
> To prevent a cheap, easily corrected mistake, you make one of the most common actions significantly harder. That is bad UI design, sorry to be harsh.
>
>> Actually, our original goal was to have a way to expand the list in place (not only to dive in category). For this we wanted a ⦠line and clicking on that would expand the list in place. We did not get to do it yet, but I think this would solve quite some of the reported problems.
>
> Expanding in place is a bad idea. Please do not do that.
>
> Categories often have dozens, sometimes hundreds of items. Once you have expanded such a category, the rest of the list is essentially lost, you need an easy way to cancel that, and that easy way is diving out. Also when you are scrolling a long expanded list, you do NOT want to scroll past the end and into another category, that would be annoying, and not useful.
>
> What you do need is to make it easier NOT to have browse the full categories at all. For that:
>
> ⢠Prefix matches should be sorted in lexicographic order of the thing being matched first, and its container second.
> ⢠"items" in the top search, should show implementors only for "#items", there are a lot of them, and not things like DialogGroupManagerUI>>#itemSelected.
> ⢠When a category is fully specified by #word ("items #i"), it should display the full list. There should still be the ability to dive into the category (retaining "items" in the command line), But there is NO benefit in adding a layer of indirection.
> ⢠Non-prefix matches, or matches for a line containing multiple words need fuzzy search relevance sorting with history sensitivity. For exemple:
> ⢠"if else" should find ifNil:else:, ifTrue:else: etc.
> ⢠"m m" should find MenuMorph as one of the first results. Only other classes whose two first two words start with M should come before.
> ⢠"menu morph items" should find "#Implementors: MenuMorph>>#items"
>
> Here's another few, unrelated, suggestion. For the top-level list:
>
> ⢠When the line is empty:
> ⢠Display a short graphic cheat sheet. Not a wall of plain text, something pretty with boxes and small bits of text that the eye wants to read.
> ⢠That should explain # words and important action keys.
> ⢠That should provide a way to immediately dive into categories.
> ⢠Provide an easy way to disable the cheat sheet: a button "Do not show me this"
> ⢠Do not use separate lists per category, but one list with all matches, sorted by search proximity and with history sensitivity
> ⢠History sensitivity here is very beneficial, it effectively lets one define custom shortcuts, by always using the same letters to reach to frequently used items. For example in Alfred on my Mac, "sl" finds "Sleep" first and "Slack" second.
> ⢠Categories can be displayed again by typing a single #.
> ⢠Keep the categories separated in the list after diving in, it is essential for things like senders/implementors.
>
> And some suggestion for all lists:
> ⢠Please, please, GET RID OF VERTICAL WRAP AROUND, thanks. When I hit the bottom of the list, I want to know I got there.
> ⢠When a non matching #word is typed ("#x"), the available #words should be displayed, not the empty list.
> ⢠When moving into category with arrow up/down, please scroll more. If the category list is long compared to the scroller viewport, at 50-75% of the viewport should display the category I just moved in.
> ⢠Scrolling should probably be a bit optimistic. Unless we are at the end of the list, the current line should never be the first or last displayed, unless the viewport is very small.
> ⢠When the current category name is out of the viewport, it should stick at the top, maybe with some transparency gradient over the first item, I need to know what category I am in. It is especially important when scrolling up, after overshooting.
> I hope you are familiar with Alfred (Mac only) and Sublime Text. They both provide very useful fuzzy search with history sensitivity.
>
>> But, please do keep challenging. And give it a try with writing your own processors. It would help us a lot.
>
> Right now, I keep bouncing in all sorts of bugs in other packages. So I am rather happy to just provide feedback for enhancements, so I can spend more time fixing the actual bugs. :-)
>
> Regards.
--
www.tudorgirba.com
www.feenk.com
"It's not how it is, it is how we see it."
Jan. 20, 2016
Re: [Pharo-dev] Spotter suggestions
by Tudor Girba
Hi,
> On Jan 20, 2016, at 10:48 AM, David Allouche <david(a)allouche.net> wrote:
>
>
>> On 20 Jan 2016, at 10:39, David Allouche <david(a)allouche.net> wrote:
>>
>> And some suggestion for all lists:
>
> Another one: Esc should close Spotter.
It does.
Doru
> I see Cmd-W does that, but Spotter is not a "normal" window, it is an incremental search popup.
>
> Thanks.
--
www.tudorgirba.com
www.feenk.com
"Every now and then stop and ask yourself if the war you're fighting is the right one."
Jan. 20, 2016