[squeak-dev] [ANN] Squeak Inbox Talk - bringing squeak-dev into your image
bernhard at pieber.com
bernhard at pieber.com
Sat Jul 17 08:26:59 UTC 2021
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>
More information about the Squeak-dev
mailing list
|