Hi
It appears that I have Roassal and Glamorous Toolkit conflated.
Roassal
http://agilevisualization.com/
vs.
Glamourous Toolkit
https://feenk.com/gt/
They both make pretty graphs!
heh..funny how the "todo stack" keeps growing.
both are intriguing.
---- On Thu, 01 Oct 2020 14:36:02 -0400 Alexandre Bergel <mailto:alexandre.bergel@me.com> wrote ----
Hi!
The email seems to discuss more about the VM extension. Roassal is a pure software solution.I would love to see Roassal running on Squeak and other Smalltalks.
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
On 01-10-2020, at 15:24, Eliot Miranda <mailto:eliot.miranda@gmail.com> wrote:
Hi t,
On Thu, Oct 1, 2020 at 11:11 AM gettimothy <mailto:gettimothy@zoho.com> wrote:
Hi Eliot
---- On Thu, 01 Oct 2020 11:07:08 -0400 Eliot Miranda <mailto:eliot.miranda@gmail.com> wrote ----
Hi Tty,
On Oct 1, 2020, at 2:33 AM, gettimothy via Squeak-dev <mailto:squeak-dev@lists.squeakfoundation.org> wrote:
Hi folks.
Has anybody coded a way , using plain text, to output a
https://en.wikipedia.org/wiki/Abstract_syntax_tree
to a workspace?
It would be a handy debug tool if so.
An infinitely better way would be to port the Rossal visualisation system. I’ve talked with Alexandre and he says Rossal is designed with portability in mind (it currently runs on Pharo and BisyalWorks and predates Pharo’s current imaging model). This would give you a graphical representation of the entire tree, with the ability to attach behaviour to elements of the representation.http://agilevisualization.com/
thx
I would love too, Rossal is intriguing.
IIRC , "Mr. Feenk" and the board had a thread recently about "what it would take to make Rossal work on Squeak" and the discussion decided on waiting on everybody having a block of time to make that happen.
I don't see any mention of Rossal in the below. What's the linkage between feek's use of either opensmalltalk-vm or Pharo's fork of it?
Here is a cut-n-paste of that email, I saved it for future reference:
Hi,
Currently, at feenk we have feenkcom/opensmalltalk-vm:
https://github.com/feenkcom/opensmalltalk-vm
This is a small fork of the headless branch from pharo-project/opensmalltalk-vm that appeared out of practical necessities, but that we would like to avoid having. This post briefly describes the changes in the feenkcom/opensmalltalk-vm repo and the functionality those changes provide for Glamorous Toolkit.
For Glamorous Toolkit we aimed for the following functionality:
• Open the GUI natively and have native display quality (GUI opened through FFI calls)
• Have a Glamorous Toolkit app for Mac OS that works as any other apps for Mac OS
• Create end-user applications that are fully customisable (executable name, menus, etc)
• Use Github actions for doing all compilations of external libraries and the vm instead of Travis CI.
• Have Iceberg running in native windows (which requires nested FFI callbacks)
There has been work on these issues in both OpenSmalltalk/opensmalltalk-vm and pharo-project/opensmalltalk-vm but they were not entirely addressed. We needed to have something reliable a few months ago, and forking and doing some quick changes made that possible.
Ideally we want to be able to run Glamorous Toolkit on both OpenSmalltalk/opensmalltalk-vm and pharo-project/opensmalltalk-vm.
To have native GUIs we relied on Ronie Salgado’s work on the headless vm and started with pharo-project/opensmalltalk-vm - headless branch:
https://github.com/pharo-project/opensmalltalk-vm/tree/headless
That provided a solution for opening the GUI from the image through FFI calls. Currently we use Glutin (a library for OpenGL context creation, written in pure Rust) and this made it possible to run the entire Glamorous Toolkit inside a callback.
On macOS when running an app, even a notarized one, the OS warns the user that the app is downloaded from the internet, and the user needs to confirm that they agree. Once the user agrees the app should automatically start. This is not currently possible with Pharo apps (for example PharoLaunched.app) and users have to again run the app manually after giving permission. Also Gatekeeper in macOS runs applications downloaded from zips in a randomized read-only DMG. We do not want this behaviour as users not copying Glamorous Toolkit to the Applications folder on macOS would then experience incorrect application behaviour.
To create end-user applications we also need to fully customize the executable name (what the user sees in the Task Runner/Activity monitor), icons, native menus. Part of this work is already integrated in the pharo-project/opensmalltalk-vm - headless branch (Customizing the OS X icons, Brand the VM executable and package).
Since last year Github offers Github Actions similar to Travis. We found it much easier to use than Travis for external libraries and the vm. Also we get to manage the code and the builds in the same place. This work is already integrated in the pharo-project/opensmalltalk-vm - headless branch (Build the VM under GitHub actions: https://github.com/pharo-project/opensmalltalk-vm/pull/56).
The issues related to running Iceberg is a bit more technical. By moving to the headless vm we are running the entire image computation inside a callback from Glutin (https://github.com/rust-windowing/glutin/). When using Iceberg we get nested callbacks which we could not get to work using Alien. Instead we are using the ThreadedFFI Plugin and running all callback from Iceberg and Glutin using the Threaded FFI plugin (https://github.com/pharo-project/threadedFFI-Plugin). Currently we have a small fork of this plugin (feenkcom/threadedFFI-Plugin) and we also ship a custom plugin with the VM to fix a race condition due to having two copies of the callback stack (a pull request is here: https://github.com/pharo-project/threadedFFI-Plugin/pull/17).
While not specific to our environment, openssl1.0 is no longer supported, and we are seeing users who are unable to run Pharo due to version conflicts, as reported in https://github.com/pharo-project/opensmalltalk-vm/issues/62.
To sum up, a fork was the easiest way to get all this running. Now some changes are already in the pharo-project/opensmalltalk-vm - headless branch. What we are still missing are the changes that get the VM to work nicely with Mac OS and a bug fix in ThreadedFFI.
We would also love it to have all these changes integrated in OpenSmalltalk/opensmalltalk-vm in the headless vm. This requires additional coordination as the required changes are somewhat deeper.
Please let us know you would prefer to coordinate.
Cheers,
Tudor, on behalf of the feenk team
--
http://feenk.com/
"The coherence of a trip is given by the clearness of the goal."
If these things have already happened, I can push (most) other projects down the stack and take this up part-time. Let me know.
Wow, that's quite an offer. I wish I could devote time to this, and probably won't be able to stay away once it starts, but for the moment I have other commitments precluding joining in this effort.
If not, I briefly looked into piping output to graphviz via OSProcess .
Regardless, the tool would be invaluable in groking / debugging the PEG grammars.
cheers,
t
_,,,^..^,,,_
best, Eliot
Marcel Taeumel uploaded a new version of ToolBuilder-MVC to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-MVC-ct.60.mcz
==================== Summary ====================
Name: ToolBuilder-MVC-ct.60
Author: ct
Time: 27 June 2020, 10:37:01.784959 pm
UUID: dd09ecec-d16e-854c-8564-d21576eb58fc
Ancestors: ToolBuilder-MVC-mt.59
Don't fail in MVCToolBuilder when opening a menu
The semantics of ToolBuilder >> #open: are to work regardless of the build state of the passed object (thus "anObject"). As a consequence, [MVCToolBuilder new open: (MVCToolBuilder new build: PluggableMenuSpec new)] should work, too.
=============== Diff against ToolBuilder-MVC-mt.59 ===============
Item was changed:
----- Method: MVCToolBuilder>>open: (in category 'opening') -----
open: anObject
"Build and open the object. Answer the widget opened."
| window |
+ window := (anObject isKindOf: View orOf: PopUpMenu)
- window := (anObject isKindOf: View)
ifTrue: [anObject]
ifFalse: [self build: anObject].
(window isKindOf: PopUpMenu)
ifTrue: [window invokeOn: nil].
(window isKindOf: View)
ifTrue: [window controller open].
^window!
Marcel Taeumel uploaded a new version of ToolBuilder-MVC to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-MVC-TheresaHMartenK.60.mcz
==================== Summary ====================
Name: ToolBuilder-MVC-TheresaHMartenK.60
Author: TheresaHMartenK
Time: 20 June 2020, 4:32:44.419561 pm
UUID: ce7849e7-d47c-434e-8bbd-f6ec2b896a4c
Ancestors: ToolBuilder-MVC-mt.59
Same reason as: ToolBuilder-Morphic-TheresaHMartenK.261
Copy:
The current implementation searches for the supplied answer in the valueList and if found returns the value at the found index in the valueList which of course is the supplied answer. However from the behaviour that gets mimicked you would expect the implementation to look for the suppliedAnswer in the labelList - the same as you click on the label and not on its connected value. Additionally this produces less readable / understandable code compared to supplying the label, especially if the value happens to be a block.
With the new implementation, the answer is searched in the labelList, and the returned value is the coresponding value from the valueList.
=============== Diff against ToolBuilder-MVC-mt.59 ===============
Item was changed:
----- Method: MVCUIManager>>chooseFrom:values:lines:title: (in category 'ui requests') -----
chooseFrom: labelList values: valueList lines: linesArray title: aString
"Choose an item from the given list. Answer the selected item."
| menu |
self askForProvidedAnswerTo: aString ifSupplied: [:answer |
(answer = #cancel or: [answer isNil]) ifTrue: [^ nil].
+ ^ valueList at: (labelList indexOf: answer) ifAbsent: [
- ^ valueList at: (valueList indexOf: answer) ifAbsent: [
answer isNumber
ifTrue: [valueList at: answer ifAbsent: [nil]]
ifFalse: [nil]]].
menu := SelectionMenu labels: labelList lines: linesArray selections: valueList.
^ aString
ifEmpty: [menu startUp]
ifNotEmpty: [menu startUpWithCaption: aString]!
Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk:
http://source.squeak.org/trunk/ToolBuilder-Morphic-TheresaHMartenK.261.mcz
==================== Summary ====================
Name: ToolBuilder-Morphic-TheresaHMartenK.261
Author: TheresaHMartenK
Time: 20 June 2020, 4:04:09.471561 pm
UUID: ec0bd065-4cc8-7d48-b940-4bf5a0f4a7cf
Ancestors: ToolBuilder-Morphic-mt.260
The current implementation searches for the supplied answer in the valueList and if found returns the value at the found index in the valueList which of course is the supplied answer. However from the behaviour that gets mimicked you would expect the implementation to look for the suppliedAnswer in the labelList - the same as you click on the label and not on its connected value. Additionally this produces less readable / understandable code compared to supplying the label, especially if the value happens to be a block.
With the new implementation, the answer is searched in the labelList, and the returned value is the coresponding value from the valueList.
=============== Diff against ToolBuilder-Morphic-mt.260 ===============
Item was changed:
----- Method: MorphicUIManager>>chooseFrom:values:lines:title: (in category 'ui requests') -----
chooseFrom: labelList values: valueList lines: linesArray title: aString
"Choose an item from the given list. Answer the selected item."
| index |
self askForProvidedAnswerTo: aString ifSupplied: [:answer |
(answer = #cancel or: [answer isNil]) ifTrue: [^ nil].
+ ^ valueList at: (labelList indexOf: answer) ifAbsent: [
- ^ valueList at: (valueList indexOf: answer) ifAbsent: [
answer isNumber
ifTrue: [valueList at: answer ifAbsent: [nil]]
ifFalse: [nil]]].
index := self chooseFrom: labelList lines: linesArray title: aString.
^ index = 0
ifTrue: [ nil ]
ifFalse: [ valueList at: index ]!
Marcel Taeumel uploaded a new version of WebClient-Core to project The Trunk:
http://source.squeak.org/trunk/WebClient-Core-ct.124.mcz
==================== Summary ====================
Name: WebClient-Core-ct.124
Author: ct
Time: 31 August 2020, 1:54:11.685896 am
UUID: b0d7790c-c195-6e4d-ad0f-fce8cf8b3b00
Ancestors: WebClient-Core-ul.123
Fixes a syntax error in multipart/form-data encoding
Phew! It costed me a few hours to track some higher-level application bug down to this low level code ...
=============== Diff against WebClient-Core-ul.123 ===============
Item was changed:
----- Method: WebUtils class>>encodeMultipartForm:boundary: (in category 'decoding') -----
encodeMultipartForm: fieldMap boundary: boundary
"Encodes the fieldMap as multipart/form-data.
The fieldMap may contain MIMEDocument instances to indicate the presence
of a file to upload to the server. If the MIMEDocument is present, its
content type and file name will be used for the upload.
The fieldMap can be EITHER an array of associations OR a Dictionary of
key value pairs (the former is useful for providing multiple fields and/or
specifying the order of fields)."
^String streamContents:[:stream|
(fieldMap as: Dictionary) keysAndValuesDo:[:fieldName :fieldValue | | fieldContent |
"Write multipart boundary and common headers"
stream nextPutAll: '--', boundary; crlf.
stream nextPutAll: 'Content-Disposition: form-data; name="', fieldName, '"'.
"Figure out if this is a file upload"
(fieldValue isKindOf: MIMEDocument) ifTrue:[
+ stream nextPutAll: '; filename="', fieldValue url pathForFile, '"'; crlf.
- stream nextPutAll: ' filename="', fieldValue url pathForFile, '"'; crlf.
stream nextPutAll: 'Content-Type: ', fieldValue contentType.
fieldContent := (fieldValue content ifNil:[
(FileStream readOnlyFileNamed: fieldValue url pathForFile) contentsOfEntireFile.
]) asString.
] ifFalse: [fieldContent := fieldValue].
stream crlf; crlf.
stream nextPutAll: fieldContent asString.
stream crlf.
].
stream nextPutAll: '--', boundary, '--', String crlf.
].
!