[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