[squeak-dev] [ANN] Squeak Inbox Talk - bringing squeak-dev into your image

Thiede, Christoph Christoph.Thiede at student.hpi.uni-potsdam.de
Sat Jul 17 15:13:50 UTC 2021


Hi Bernhard,


Thanks a lot for your feedback! :-)


> I clicked on the Beta version button as well. Not sure if this did install a newer version, though.


Actually, this button only opens an app menu. If you want to install the latest updates, click "self-update" in this menu.


> What is the best way to find this out, by the way.

At the moment, there isn't one, I'm afraid. But if you hit the "send feedback" button in the app menu, you can see the change date of the current version. You could then compare this date to the latest commit date in the GitHub repository. But yes, it would be nice to have an easier way for this. Maybe a contemporary package manager for Squeak that supports Metacello ...

> I ran into a MNU when trying to filter conversions by myself.

Ouch, sorry for that! I have just commited a fix for that, if you choose the self-update option, you should be able to use these filters now.

> This e-mail is a test if replying works for me.

It works! :-)

If there are any other bugs or inconveniences, please report back. Otherwise, I'll also accept success experience reports. :D

Best,
Christoph

________________________________
Von: bernhard at pieber.com <bernhard at pieber.com>
Gesendet: Samstag, 17. Juli 2021 10:26:59
An: squeak-dev at lists.squeakfoundation.org; Thiede, Christoph
Betreff: Re: [ANN] Squeak Inbox Talk - bringing squeak-dev into your image

Hi Christoph,

Congratulations on Squeak Inbox Talk. Impressive work!

I have yet to use it more to give more extensive feedback. However, the first impression is great.

Installation went smoothly. I clicked on the Beta version button as well. Not sure if this did install a newer version, though. What is the best way to find this out, by the way.

I ran into a MNU when trying to filter conversions by myself.

This e-mail is a test if replying works for me.

Cheers,
Bernhard

17 July 2021 9:59:48.332407 am

VM: Mac OS - Smalltalk
Image: Squeak6.0alpha [latest update: #20587]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /Users/bernhard/Entwicklung/Squeak/new-trunk
Trusted Dir /Users/bernhard/Entwicklung/Squeak/new-trunk/secure
Untrusted Dir /Users/bernhard/Entwicklung/Squeak/new-trunk/My Squeak

MorphicUIManager(Object)>>doesNotUnderstand: #multiLineRequest:initialAnswer:
        Receiver: a MorphicUIManager
        Arguments and temporary variables:
                aMessage:        multiLineRequest: 'What e-mail adresses do you use on the inbox?
Ente...etc...
                exception:       MessageNotUnderstood: MorphicUIManager>>multiLineRequest:initialAnsw...etc...
                resumeValue:     nil
        Receiver's instance variables:
                builderClass:    MorphicToolBuilder

TalkPerson>>requestLines:initialAnswer:ifAccepted:
        Receiver: a TalkPerson
        Arguments and temporary variables:
                queryString:     'What e-mail adresses do you use on the inbox?
Enter one per line....etc...
                initialLines:    an OrderedCollection()
                acceptBlock:     [closure] in TalkPerson>>initializeInteractively
                answer:  nil
                newLines:        nil
        Receiver's instance variables:
                names:   an OrderedCollection()
                mailAddresses:   an OrderedCollection()
                allAuthorInitials:       an OrderedCollection()

TalkPerson>>initializeInteractively
        Receiver: a TalkPerson
        Arguments and temporary variables:

        Receiver's instance variables:
                names:   an OrderedCollection()
                mailAddresses:   an OrderedCollection()
                allAuthorInitials:       an OrderedCollection()

TalkPerson class>>current
        Receiver: TalkPerson
        Arguments and temporary variables:

        Receiver's instance variables:
                superclass:      TalkDataView
                methodDict:      a MethodDictionary(#allAuthorInitials->(TalkPerson>>#allAuthorIniti...etc...
                format:  65539
                instanceVariables:       #('names' 'mailAddresses' 'allAuthorInitials')
                organization:    ('accessing' allAuthorInitials allAuthorInitials: mailAddresses mailAddresses:...etc...
                subclasses:      nil
                name:    #TalkPerson
                classPool:       a Dictionary(#Current->nil )
                sharedPools:     nil
                environment:     Smalltalk
                category:        #'SqueakInboxTalk-Core'

TalkInvolvementFilter>>assurePerson
        Receiver: a TalkInvolvementFilter
        Arguments and temporary variables:

        Receiver's instance variables:
                involvements:    a Set()

TalkInvolvementFilter>>setInvolvement:to:
        Receiver: a TalkInvolvementFilter
        Arguments and temporary variables:
                aSymbol:         #author
                aBoolean:        true
        Receiver's instance variables:
                involvements:    a Set()

[] in [] in TalkInvolvementFilter>>filterMenu:for:
        Receiver: a TalkInvolvementFilter
        Arguments and temporary variables:
                menu:    nil
                aModel:  nil
                label:   'conversations by myself'
                involvement:     #author
                boolean:         true
        Receiver's instance variables:
                involvements:    a Set()

[] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
        Receiver: a TalkInboxBrowser
        Arguments and temporary variables:
                menu:    a MenuMorph(1191274)
                label:   'conversations by myself'
                getter:  [closure] in [] in TalkInvolvementFilter>>filterMenu:for:
                setter:  [closure] in [] in TalkInvolvementFilter>>filterMenu:for:
                target:  nil
        Receiver's instance variables:
                dependents:      a DependentsArray(a PluggableSystemWindow<Squeak Inbox Talk - squea...etc...
                backgroundWorkers:       a WeakValueDictionary(#contents->nil #conversations->a Process...etc...
                backgroundWorkerUpdateMessages:  a SharedQueue(1)
                inbox:   a TalkInbox<squeak-dev>
                searchModel:     a TalkTextSearchModel
                selectedConversation:    a TalkConversation ('[squeak-dev] The Inbox: System-ct.12...etc...
                allConversations:        {a TalkConversation ('[squeak-dev] Documenting the system') ....etc...
                numberOfConversations:   nil
                conversations:   an OrderedCollection(a TalkConversation ('[squeak-dev] Documenti...etc...
                menuFilter:      a TalkFilterSet
                contents:        'Name: System-ct.1241 (pending)
Author: ct
Time: 15 July 2021, 1:11:0...etc...

FullBlockClosure(Object)>>perform:orSendTo:
        Receiver: [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
        Arguments and temporary variables:
                selector:        #value
                otherTarget:     a PluggableMultiColumnListMorph(2530911)
        Receiver's instance variables:
                outerContext:    TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
                startpcOrMethod:         ([] in TalkModel>>#menu:add:getState:setState: "a CompiledBlock...etc...
                numArgs:         0
                receiver:        a TalkInboxBrowser

[] in UpdatingMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
        Receiver: an UpdatingMenuItemMorph(1010122)'conversations by myself'
        Arguments and temporary variables:
                evt:     [1208 at 413 mouseUp ( red ) 2069153]
                world:   a PasteUpMorph(2434915) [world]
        Receiver's instance variables:
                bounds:  1100 at 407 corner: 1370 at 423
                owner:   a MenuMorph(1191274)
                submorphs:       {an ImageMorph(2514698)}
                fullBounds:      1100 at 407 corner: 1370 at 423
                color:   Color black
                extension:       a MorphExtension (2733736) [other:  (layoutProperties -> (LayoutProp...etc...
                font:    a StrikeFont(Bitmap DejaVu Sans 9 14)
                emphasis:        0
                contents:        'conversations by myself'
                hasFocus:        false
                isEnabled:       true
                subMenu:         nil
                isSelected:      false
                target:  [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
                selector:        #perform:orSendTo:
                arguments:       {#value . a PluggableMultiColumnListMorph(2530911)}
                icon:    nil
                wordingProvider:         [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:...etc...
                wordingSelector:         #value
                enablementSelector:      nil
                wordingArgument:         nil

FullBlockClosure(BlockClosure)>>ensure:
        Receiver: [closure] in UpdatingMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
        Arguments and temporary variables:
                aBlock:  [closure] in CursorWithMask(Cursor)>>showWhile:
                complete:        nil
                returnValue:     nil
        Receiver's instance variables:
                outerContext:    UpdatingMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
                startpcOrMethod:         ([] in MenuItemMorph>>#invokeWithEvent: "a CompiledBlock(28284...etc...
                numArgs:         0
                receiver:        an UpdatingMenuItemMorph(1010122)'conversations by myself'

CursorWithMask(Cursor)>>showWhile:
        Receiver: ((CursorWithMask
        extent: 16 at 16
        depth: 1
        fromArray: #(
                2r0
                2r10000000000000000000000...etc...
        Arguments and temporary variables:
                aBlock:  [closure] in UpdatingMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
                oldcursor:       ((CursorWithMask
        extent: 16 at 16
        depth: 1
        fromArray: #(
                2r0
                2r1...etc...
        Receiver's instance variables:
                bits:    a Bitmap of length 16
                width:   16
                height:  16
                depth:   1
                offset:  -1@ -1
                maskForm:        Form(16x16x1)

UpdatingMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
        Receiver: an UpdatingMenuItemMorph(1010122)'conversations by myself'
        Arguments and temporary variables:
                evt:     [1208 at 413 mouseUp ( red ) 2069153]
                world:   a PasteUpMorph(2434915) [world]
        Receiver's instance variables:
                bounds:  1100 at 407 corner: 1370 at 423
                owner:   a MenuMorph(1191274)
                submorphs:       {an ImageMorph(2514698)}
                fullBounds:      1100 at 407 corner: 1370 at 423
                color:   Color black
                extension:       a MorphExtension (2733736) [other:  (layoutProperties -> (LayoutProp...etc...
                font:    a StrikeFont(Bitmap DejaVu Sans 9 14)
                emphasis:        0
                contents:        'conversations by myself'
                hasFocus:        false
                isEnabled:       true
                subMenu:         nil
                isSelected:      false
                target:  [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
                selector:        #perform:orSendTo:
                arguments:       {#value . a PluggableMultiColumnListMorph(2530911)}
                icon:    nil
                wordingProvider:         [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:...etc...
                wordingSelector:         #value
                enablementSelector:      nil
                wordingArgument:         nil

UpdatingMenuItemMorph(MenuItemMorph)>>mouseUp:
        Receiver: an UpdatingMenuItemMorph(1010122)'conversations by myself'
        Arguments and temporary variables:
                evt:     [1208 at 413 mouseUp ( red ) 2069153]
        Receiver's instance variables:
                bounds:  1100 at 407 corner: 1370 at 423
                owner:   a MenuMorph(1191274)
                submorphs:       {an ImageMorph(2514698)}
                fullBounds:      1100 at 407 corner: 1370 at 423
                color:   Color black
                extension:       a MorphExtension (2733736) [other:  (layoutProperties -> (LayoutProp...etc...
                font:    a StrikeFont(Bitmap DejaVu Sans 9 14)
                emphasis:        0
                contents:        'conversations by myself'
                hasFocus:        false
                isEnabled:       true
                subMenu:         nil
                isSelected:      false
                target:  [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
                selector:        #perform:orSendTo:
                arguments:       {#value . a PluggableMultiColumnListMorph(2530911)}
                icon:    nil
                wordingProvider:         [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:...etc...
                wordingSelector:         #value
                enablementSelector:      nil
                wordingArgument:         nil

UpdatingMenuItemMorph(MenuItemMorph)>>handleMouseUp:
        Receiver: an UpdatingMenuItemMorph(1010122)'conversations by myself'
        Arguments and temporary variables:
                anEvent:         [1208 at 413 mouseUp ( red ) 2069153]
        Receiver's instance variables:
                bounds:  1100 at 407 corner: 1370 at 423
                owner:   a MenuMorph(1191274)
                submorphs:       {an ImageMorph(2514698)}
                fullBounds:      1100 at 407 corner: 1370 at 423
                color:   Color black
                extension:       a MorphExtension (2733736) [other:  (layoutProperties -> (LayoutProp...etc...
                font:    a StrikeFont(Bitmap DejaVu Sans 9 14)
                emphasis:        0
                contents:        'conversations by myself'
                hasFocus:        false
                isEnabled:       true
                subMenu:         nil
                isSelected:      false
                target:  [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
                selector:        #perform:orSendTo:
                arguments:       {#value . a PluggableMultiColumnListMorph(2530911)}
                icon:    nil
                wordingProvider:         [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:...etc...
                wordingSelector:         #value
                enablementSelector:      nil
                wordingArgument:         nil

MouseButtonEvent>>sentTo:
        Receiver: [1208 at 413 mouseUp ( red ) 2069153]
        Arguments and temporary variables:
                anObject:        an UpdatingMenuItemMorph(1010122)'conversations by myself'
        Receiver's instance variables:
                timeStamp:       2069153
                source:  a HandMorph(2614111)
                type:    #mouseUp
                buttons:         0
                position:        1208 at 413
                handler:         nil
                wasHandled:      true
                wasIgnored:      false
                whichButton:     4
                nClicks:         0

UpdatingMenuItemMorph(Morph)>>handleEvent:
        Receiver: an UpdatingMenuItemMorph(1010122)'conversations by myself'
        Arguments and temporary variables:
                anEvent:         [1208 at 413 mouseUp ( red ) 2069153]
                filteredEvent:   [1208 at 413 mouseUp ( red ) 2069153]
        Receiver's instance variables:
                bounds:  1100 at 407 corner: 1370 at 423
                owner:   a MenuMorph(1191274)
                submorphs:       {an ImageMorph(2514698)}
                fullBounds:      1100 at 407 corner: 1370 at 423
                color:   Color black
                extension:       a MorphExtension (2733736) [other:  (layoutProperties -> (LayoutProp...etc...
                font:    a StrikeFont(Bitmap DejaVu Sans 9 14)
                emphasis:        0
                contents:        'conversations by myself'
                hasFocus:        false
                isEnabled:       true
                subMenu:         nil
                isSelected:      false
                target:  [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
                selector:        #perform:orSendTo:
                arguments:       {#value . a PluggableMultiColumnListMorph(2530911)}
                icon:    nil
                wordingProvider:         [closure] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:...etc...
                wordingSelector:         #value
                enablementSelector:      nil
                wordingArgument:         nil

MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph:
        Receiver: a MorphicEventDispatcher
        Arguments and temporary variables:
                anEvent:         [1208 at 413 mouseUp ( red ) 2069153]
                aHandler:        an UpdatingMenuItemMorph(1010122)'conversations by myself'
                aMorph:  an UpdatingMenuItemMorph(1010122)'conversations by myself'
                result:  #rejected
                filteredEvent:   [1208 at 413 mouseUp ( red ) 2069153]
        Receiver's instance variables:
                lastType:        #mouseUp
                lastDispatch:    #dispatchDefault:with:

MorphicEventDispatcher>>dispatchDefault:with:
        Receiver: a MorphicEventDispatcher
        Arguments and temporary variables:
                anEvent:         [1208 at 413 mouseUp ( red ) 2069153]
                aMorph:  an UpdatingMenuItemMorph(1010122)'conversations by myself'
        Receiver's instance variables:
                lastType:        #mouseUp
                lastDispatch:    #dispatchDefault:with:


--- The full stack ---
MorphicUIManager(Object)>>doesNotUnderstand: #multiLineRequest:initialAnswer:
TalkPerson>>requestLines:initialAnswer:ifAccepted:
TalkPerson>>initializeInteractively
TalkPerson class>>current
TalkInvolvementFilter>>assurePerson
TalkInvolvementFilter>>setInvolvement:to:
[] in [] in TalkInvolvementFilter>>filterMenu:for:
[] in TalkInboxBrowser(TalkModel)>>menu:add:getState:setState:
FullBlockClosure(Object)>>perform:orSendTo:
[] in UpdatingMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
FullBlockClosure(BlockClosure)>>ensure:
CursorWithMask(Cursor)>>showWhile:
UpdatingMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
UpdatingMenuItemMorph(MenuItemMorph)>>mouseUp:
UpdatingMenuItemMorph(MenuItemMorph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
UpdatingMenuItemMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph:
MorphicEventDispatcher>>dispatchDefault:with:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MorphicEventDispatcher>>dispatchEvent:with:
UpdatingMenuItemMorph(Morph)>>processEvent:using:
UpdatingMenuItemMorph(Morph)>>processEvent:
[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf:
Array(SequenceableCollection)>>do:
MenuMorph(Morph)>>submorphsDo:
MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf:
MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
MenuMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>doProcessingForFocusEvent:with:
MorphicEventDispatcher>>dispatchFocusEventFully:with:
MenuMorph>>processFocusEvent:using:
MenuMorph(Morph)>>processFocusEvent:
[] in [] in [] in HandMorph>>sendFocusEvent:to:clear:
[] in ActiveEventVariable class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveEventVariable class(DynamicVariable class)>>value:during:
[] in ActiveEventVariable class>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveEventVariable class>>value:during:
MouseButtonEvent(MorphicEvent)>>becomeActiveDuring:
[] in [] in HandMorph>>sendFocusEvent:to:clear:
[] in ActiveHandVariable class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveHandVariable class(DynamicVariable class)>>value:during:
[] in ActiveHandVariable class>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveHandVariable class>>value:during:
HandMorph>>becomeActiveDuring:
[] in HandMorph>>sendFocusEvent:to:clear:
[] in ActiveWorldVariable class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveWorldVariable class(DynamicVariable class)>>value:during:
[] in ActiveWorldVariable class>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveWorldVariable class>>value:during:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
-- and more not shown --

> An HTML attachment was scrubbed...
> URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210709/c7619efa/attachment-0001.html>
> -------------- next part --------------
> Hi all! :-)
>
> I'm very excited to announce a new tool to you today that aims to make the Squeak development cycle a bit easier for all of us. Introducing Squeak Inbox Talk, which allows you as Squeak contributors and maintainers to review and discuss new features for Squeak directly in your image!
>
> Installation:
>        Install the latest Trunk updates first.
>        Metacello new
>                  baseline: 'SqueakInboxTalk';
>                  repository: 'github://hpi-swa-lab/squeak-inbox-talk:main';
>                  load.
> After the installation, in the main docking bar, choose "Squeak Inbox Talk" from the Apps menu, click Refresh, and there you go!
> Alternatively, you can download a ready-to-use image here: https://github.com/hpi-swa-lab/squeak-inbox-talk/releases
> In [1] you can find the open-source GitHub repository, including a project board and some theoretical background.
> Your feedback is especially helpful for my research before 2021-07-19 (but still appreciated later very much).
>
> Maybe you have already experienced at least one of the following troubles in the past:
> 1. Tedious navigation on the list: Where has this patch gone? Can someone remember where we were discussing this funky thing recently?
> 2. High entry barrier for new contributors: You need to sign up on the mailing list to follow discussions.
> 3. Hard review process: Notifications and discussions appear in your email client, but if you want to check out some code, you will switch to your image, of course.
>
> In the last months, I have been trying to solve these and other issues. Now I'm inviting you to figure out whether I have been successful! Squeak Inbox Talk allows you to interact with all relevant artifacts right in Squeak, including emails as well as Monticello contributions. It comes with a free-text search and several powerful filters for aspects such as packages, review state of a contribution, and your personal involvement. These filters should make it easier to survey certain domains, gain a better understanding of the connection between inbox versions, or keep track of your own proposals.
>
> Please give it a try and return feedback! As one possible starting point, you could search for "terminate" to recapitulate Jaromir's recent efforts on Process. I had the great opportunity to run this project in the course of a seminar at HPI, and the luck to be guided by Marcel while doing so. In a few weeks, I will present the project internally, and your thoughts and feedback will of course be very helpful for my evaluation. Needless to say, I'm also looking forward to making the tool even more convenient for you. :-)
>
> Thank you so much in advance!
>
> Best,
> Christoph
>
> ---
>
> APPENDIX: How does it work?
>
> Basically, Squeak Inbox Talk is implemented by reusing and assembling together the following existing solutions: Squeak History [2], a project originally developed by Marcel (mt) that scrapes and processes all mailing list conversations from the pipermail archives [3]; the SMTPClient in Squeak [5] for sending messages; and the Monticello infrastructure, which remains the heart of our development workflow. Optionally, further components such as IMAPClient [4] might follow later. On top of this, Squeak Inbox Talk adds a convenient layer for exploring and filtering conversations and contributions.
>
> [1] https://github.com/hpi-swa-lab/squeak-inbox-talk
> [2] https://github.com/hpi-swa/squeak-history
> [3] http://lists.squeakfoundation.org/pipermail/squeak-dev/
> [4] https://github.com/hpi-swa-teaching/IMAPClient
> [5] This mail was sent from Squeak Inbox Talk using the latest version of the SMTPClient. Yeah, it's actually still alive and doing well! =D
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: SqueakInboxTalk.png
> Type: application/octet-stream
> Size: 184000 bytes
> Desc: not available
> URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210709/c7619efa/attachment-0001.obj>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210717/bd43f0e5/attachment.html>


More information about the Squeak-dev mailing list