From leves at caesar.elte.hu Wed Jul 1 00:55:10 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed, 1 Jul 2020 02:55:10 +0200 (CEST) Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: On Tue, 30 Jun 2020, Chris Muller wrote: > Might be worth reopening this discussion.  ANY dependencies on #class seem like a bad thing to me, especially while it's still an in-lined message.  Below is the MC version that did it.  Looks like the time to change this Using #class by default sounds correct to me. If some instances of classes want to be equal to each other, they should handle that themselves by overriding #=. Using #species everywhere is just horrible. > 19-year old core method went from "itch" to trunk in all but just a few hours... How did you come to that conclusion? Levente > ________________ > Name: Collections-nice.820 > Author: nice > Time: 12 February 2019, 11:56:35.262017 pm > UUID: bb383133-067c-4133-987b-c481a7de69c7 > Ancestors: Collections-ul.819, Collections-cbc.813 > > Definitively abandon SequenceableCollection equality tests based on equal species. > > Old behaviour can still be obtained thru hasEqualElements: but the default is to not try to support such trans-class equality feature because it is much too complex. > > Particularly Interval are no more equal to Arrays with same sequence. We can thus optimize hash a bit more and fix the old bugs of equa objects with different hashes. Merge Collections-cbc.813 for this and rehashAll in > postscript. > > There are not so many classes concerned by this change, mainly RunArray, Interval and LinkedList: > > Collection withAllSubclasses select: [:e | [e basicNew species ~= e] on: Error do: [false]] > -> an OrderedCollection(WeakRegistry LinkedList Interval ByteCharacterSet CharacterSetComplement LazyCharacterSet WideCharacterSet ShortRunArray Semaphore Mutex TextLineInterval WeakArray Monitor MCVersionName ByteSymbol > WideSymbol) > > We will have to change the tests that rely on such equality. > > On Mon, Jun 29, 2020 at 3:42 AM Nikolay Suslov wrote: > Thanks Levente,  > > Yes, seems to be RFB/VNC from the SqueakSource-SqF project page is outdated (at least it is working in Squeak 5.2 and not in 5.3 and later). Your version works fine! > However, it is interesting what was the reason for that change just in SequenceableCollection #=. As Set, Bitset, SortedCollection etc. classes still use species comparison in #= (checking they have the same set of > keys)? > > Best regards, > Nikolai > > On Mon, Jun 29, 2020 at 3:43 AM Levente Uzonyi wrote: > Hi Nikolai, > > On Mon, 29 Jun 2020, Nikolay Suslov wrote: > > > Hello all, > > Figuring out, could we go back to the previous version of SequenceableCollection #= method (as in Squeak 5.2), to check if the receiver is equivalent to the otherCollection by using "self species == > otherCollection species", > > instead of "self class = otherCollection class"? > > IIRC there was a good reason for that change though I can't recall > what it was. I'm sure the mailing list remembers. > > > > The current version of #= method breaks code in different places. For example the RFB/VNC server gives wrong results starting from an authentication process, where RFBMessage is the ByteArray subclass and > implements #species. > > If you're looking for a fix, try this: > http://leves.web.elte.hu/squeak/RFB-ul.18.mcz > > > Levente > > > > > Best regards, > > Nikolai > > > > > > > > From leves at caesar.elte.hu Wed Jul 1 00:57:24 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed, 1 Jul 2020 02:57:24 +0200 (CEST) Subject: [squeak-dev] The Inbox: Monticello-ul.726.mcz In-Reply-To: References: Message-ID: On Tue, 30 Jun 2020, Chris Muller wrote: > Hi Levente and Jakob, > > > Am Mo., 29. Juni 2020 um 01:43 Uhr schrieb : > >> > >> + ----- Method: MCDirectoryRepository>>includesVersionNamed: (in category 'versions') ----- > >> + includesVersionNamed: aString > >> + > >> +       | comparable | > >> +       comparable := ((aString endsWith: '.mcz') and: [ aString size > 4 ]) > >> +               ifTrue: [ aString allButLast: 4 ] > >> +               ifFalse: [ aString ]. > > > > Thank you for the suggestion. Why not use aString asMCVersionName > > versionName here? > > Copy-paste from parent. > When Chris introduced MCVersionName, he tried to use #asMCVersionName > there, but later he reverted it according to the history of the parent > method. It probably broke stuff (see below).  > > > Hmm...  that's true, unfortunately, my comment only says, "Fix" it with no other details.  I can't help but wonder if it was due to a #class test somewhere.. >   > > I think MCVersionName is something that should not exists in its current > form. Why? > - it's a subclass of ByteString, which limits the possible character set > > > It's common in the IT industry for Name identifiers to be restricted to a subset of ASCII to support interoperation with as many types of systems as possible.  It seems an appropriate choice for MC Version names. >   > - #= is not commutative when one object is an MCVersionName, the other is > a ByteString: >         'foo' = 'foo.mcz' asMCVersionName. "==> false" >         'foo.mcz' asMCVersionName = 'foo'. "==> true" > - the above property breaks the contract of #hash and #=, so they > sometimes misbehave in hashed collections > > > Not in actual practice, though.  The intent was that all uses of version names would be ensuring they're dealing with the first-class MCVersionName.  If one, theoretically, were to mix Strings and MCVersionNames as in your > example, yes, it would misbehave so... "don't do that."  :) If it shouldn't be mixed with strings, why is it a string? Levente > >  - Chris > > From leves at caesar.elte.hu Wed Jul 1 00:59:11 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed, 1 Jul 2020 02:59:11 +0200 (CEST) Subject: [squeak-dev] The Trunk: Monticello-cmm.726.mcz In-Reply-To: References: Message-ID: On Tue, 30 Jun 2020, Chris Muller wrote: > Hi Eliot, > The order of repositories is part of the model, sorting them conceptually breaks a couple of MC's use-cases.  Would list-filtering help you find the repository you seek amongst your list of 40 repositories? What model is it part of? And if it is, how come the GUI doesn't let you change that order? Levente > >  - Chris > > On Tue, Jun 30, 2020 at 5:21 PM wrote: > Chris Muller uploaded a new version of Monticello to project The Trunk: > http://source.squeak.org/trunk/Monticello-cmm.726.mcz > > ==================== Summary ==================== > > Name: Monticello-cmm.726 > Author: cmm > Time: 30 June 2020, 5:21:11.609668 pm > UUID: 1a529d96-0be7-45a8-a65e-b9dcae087b85 > Ancestors: Monticello-mt.725 > > Revert incorrect implementation of sorting repositories, because it broke "demote to bottom" which broke "browse revisions" and "browse origin". > > =============== Diff against Monticello-mt.725 =============== > > Item was changed: >   ----- Method: MCWorkingCopyBrowser>>repositories (in category 'morphic ui') ----- >   repositories > +       ^ self repositoryGroup repositories! > -       | repositories | > -       repositories := self repositoryGroup repositories. > -       ^{repositories first}, (repositories allButFirst sort: [:r1 :r2| r1 description < r2 description])! > > > > From ma.chris.m at gmail.com Wed Jul 1 03:54:43 2020 From: ma.chris.m at gmail.com (Chris Muller) Date: Tue, 30 Jun 2020 22:54:43 -0500 Subject: [squeak-dev] The Trunk: Monticello-cmm.726.mcz In-Reply-To: References: Message-ID: On Tue, Jun 30, 2020 at 7:59 PM Levente Uzonyi wrote: > On Tue, 30 Jun 2020, Chris Muller wrote: > > > Hi Eliot, > > The order of repositories is part of the model, sorting them > conceptually breaks a couple of MC's use-cases. Would list-filtering help > you find the repository you seek amongst your list of 40 repositories? > > What model is it part of? > Monticello's. MCWorkingCopyBrowser's. > And if it is, how come the GUI doesn't let you change that order? > It's "demote to bottom" on the menu. But it seemed to have gotten broke due to the #repositories list always being sorted. My hope is that Eliot's use-case is for only when there are no WorkingCopy's selected, thus showing _all_ repositories -- because we can sort that output. But sorting as far as when an individual WorkingCopy is selected, it breaks one or two use cases. - Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: From ma.chris.m at gmail.com Wed Jul 1 04:00:56 2020 From: ma.chris.m at gmail.com (Chris Muller) Date: Tue, 30 Jun 2020 23:00:56 -0500 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: On Tue, Jun 30, 2020 at 7:55 PM Levente Uzonyi wrote: > On Tue, 30 Jun 2020, Chris Muller wrote: > > > Might be worth reopening this discussion. ANY dependencies on #class > seem like a bad thing to me, especially while it's still an in-lined > message. Below is the MC version that did it. Looks like the time to > change this > > Using #class by default sounds correct to me. If some instances of > classes want to be equal to each other, they should handle that > themselves by overriding #=. > Because it causes that same undesirable loss of symmetry you mentioned about MCVersionName and String, except much worse because it's in a more general sense instead of application-specific. It makes headaches for Magma applications because client code has to be aware of it. Smalltalk wants to be about messages, not types. What do we need to do to make #class non-inlined and therefore overridable? My impression is that this is on the table for 6.0, is it still? - Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Wed Jul 1 08:56:58 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Wed, 1 Jul 2020 10:56:58 +0200 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: Le mer. 1 juil. 2020 à 06:01, Chris Muller a écrit : > On Tue, Jun 30, 2020 at 7:55 PM Levente Uzonyi > wrote: > >> On Tue, 30 Jun 2020, Chris Muller wrote: >> >> > Might be worth reopening this discussion. ANY dependencies on #class >> seem like a bad thing to me, especially while it's still an in-lined >> message. Below is the MC version that did it. Looks like the time to >> change this >> >> Using #class by default sounds correct to me. If some instances of >> classes want to be equal to each other, they should handle that >> themselves by overriding #=. >> > > Because it causes that same undesirable loss of symmetry you mentioned > about MCVersionName and String, except much worse because it's in a more > general sense instead of application-specific. It makes headaches for > Magma applications because client code has to be aware of it. > > Smalltalk wants to be about messages, not types. What do we need to do to > make #class non-inlined and therefore overridable? My impression is that > this is on the table for 6.0, is it still? > > - Chris > > Hi Chris, wait a minute, the failure of symmetry of MCVersionName is ABSOLUTELY UNRELATED to species or class. There are some wonderful hacks, there are some clever hacks, but at the end, you very well know that you can cheat as long as you don't get caught. MCVersionName is not a good hack. Here we are dressing the String with additional application specific semantics. The MCVersionName is a String which knows how to be interpreted in some context. There are lot's of contexts where we could dress strings like that, imagine that we create a DateString, a NumberString... Should we really do that? When we do that, we confer more responsibilities to such subclasses. They are a String, and also more than a String. But here, the application specific behavior is in contradiction with superclass, we redefined = with a different behavior. At the end, we will always get caught with schemes like that, because we complexify and entangle the concepts. It seems to me that it's a simple inheritance vs composition anti-pattern. MCVersion name hash ~= MVVersion name asString hash is a good illustration. It means that we're breaking a more general contract for implementing our hack. It's typical of what will happen by abuse of inheritance. Think of it, = is a relationship of equivalence. We don't want to loose that. So it has to be symmetric, but also transitive: String new = StringSubclass1 & ( String new = StringSubclass2 new ) ==> (StringSubclass1 new = StringSubclass2 new). That means that we would have accidental equivalence of separate domains if ever the string representation matches. That's not what we want. Also, if StringSubclass1 is more than a String, then how something less than a StringSubclass1 could be equivalent? It's not equivalent, it does not behave the same, or we would not need to subclass in the first place. Oh but we have String subclasses, ByteString and WideString, so what's the difference? The difference is that those are implementation details. They are optimized internal representations of Strings. We're not at all after conferring a different behavior, on the contrary. We absolutely want to confer the same behavior to the outside whatever the internal representation (class) and try to make them be really equivalent. Yes, more than often, the implementation details leak out of encapsulation. It's the problem of tradeoffs between efficiency and universality. We have to trade some generality for some efficiency. That's what happens with Interval and Array. They are not equivalent. They have slightly different behaviors and properties. An Interval is more than an Array (it has numeric elements with arithmetic progression). And it is less than an Array (it cannot at:put: or embed arbitrary objects). We can casually have an Array carrying the same elements as an Interval, which can be expressed by #hasEqualElements: species semantics was overloaded. It did also mean, in which recipient class should I select:, collect:... If we use the same recipient for collecting, then we are similar (of same species)... And if similar, maybe equal? It might be that Interval was originally seen as an implementation detail, a (space) optimized version of Array afterall. But doing so, introduced complexity. It entangled things. It broke contracts (hash), or imposed very inefficient implementation of hash (enumerating all elements of an Interval). In the end, we get caught, that is carrying more inconvenients than advantages when trying to sustain the illusion of equivalence. It's far better and simpler to just abandon the illusion, because it's just that, a deceitful illusion. I understand what you mean by abuse of using the class message, we have somehow lost a hook. But IMO, this hook was not useful, except for one thing proxy. We have more than one message in our palette, even if = is a very convenient symbol (short binary), we cannot dress it with different context specific meanings, the cheat is getting too apparent. -------------- next part -------------- An HTML attachment was scrubbed... URL: From leves at caesar.elte.hu Wed Jul 1 11:40:10 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed, 1 Jul 2020 13:40:10 +0200 (CEST) Subject: [squeak-dev] The Trunk: Monticello-cmm.726.mcz In-Reply-To: References: Message-ID: On Tue, 30 Jun 2020, Chris Muller wrote: > On Tue, Jun 30, 2020 at 7:59 PM Levente Uzonyi wrote: > On Tue, 30 Jun 2020, Chris Muller wrote: > > > Hi Eliot, > > The order of repositories is part of the model, sorting them conceptually breaks a couple of MC's use-cases.  Would list-filtering help you find the repository you seek amongst your list of 40 repositories? > > What model is it part of? > > > Monticello's.  MCWorkingCopyBrowser's. >   > And if it is, how come the GUI doesn't let you change that order? > > > It's "demote to bottom" on the menu.  But it seemed to have gotten broke due to the #repositories list always being sorted. That's a really poor way to make the list sortable. In my opinion there should be the following options if that's the goal: alphabetize, move down, move up, move to front, move to end (this is the one called demote now which is not a good name IMO). Levente > > My hope is that Eliot's use-case is for only when there are no WorkingCopy's selected, thus showing _all_ repositories -- because we can sort that output.  But sorting as far as when an individual WorkingCopy is selected, it > breaks one or two use cases. > >  - Chris > > From marianopeck at gmail.com Wed Jul 1 12:45:03 2020 From: marianopeck at gmail.com (Mariano Martinez Peck) Date: Wed, 1 Jul 2020 09:45:03 -0300 Subject: [squeak-dev] Webminar about VA Smalltalk new OS Process Framework In-Reply-To: <20200630172510.GA66593@shell.msen.com> References: <20200630172510.GA66593@shell.msen.com> Message-ID: Hi David, Based on your person and expertise in the area I would say I am really happy to hear that :) On Tue, Jun 30, 2020 at 2:25 PM David T. Lewis wrote: > Hi Mariano, > > Thank you for sharing this, I just signed up for the webinar. > > :-) > > Dave > > > On Tue, Jun 30, 2020 at 10:25:09AM -0300, Mariano Martinez Peck wrote: > > Greetings all, > > > > Some time ago, I had the pleasure and privilege of being sponsored by the > > Pharo Consortium to implement OSSubprocess. Because of that work, I > quickly > > realized that a new OS process framework created by Instantiations was > > quite advanced and unlike anything I had seen before. If you are able, I > > would highly recommend that you attend the technology preview of this > > framework coming to VAST 2021: > > > > Seth Berman will be presenting, registration here: > > https://attendee.gotowebinar.com/register/7491754880594201356 > > > > We hope the community can attend and we look forward to your feedback and > > questions during the event's Q&A session. > > > > Best regards, > > > > -- > > Mariano Martinez Peck > > Email: marianopeck at gmail.com > > Twitter: @MartinezPeck > > LinkedIn: www.linkedin.com/in/mariano-martinez-peck > > > > Blog: https://marianopeck.wordpress.com/ > > > > > > -- Mariano Martinez Peck Email: marianopeck at gmail.com Twitter: @MartinezPeck LinkedIn: www.linkedin.com/in/mariano-martinez-peck Blog: https://marianopeck.wordpress.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From forums.jakob at resfarm.de Wed Jul 1 13:49:07 2020 From: forums.jakob at resfarm.de (Jakob Reschke) Date: Wed, 1 Jul 2020 15:49:07 +0200 Subject: [squeak-dev] The Trunk: Monticello-cmm.726.mcz In-Reply-To: References: Message-ID: Should we separate sorting the view from sorting the model, or the UI model object from the actual domain object/data? Eliot wants to view the list sorted and Chris insists not to break a deliberate order of repositories in the model because other functionality depends on it. Disconnect them. The bytes on my disk do not move when I sort a list of files by name. Levente Uzonyi schrieb am Mi., 1. Juli 2020, 13:40: > On Tue, 30 Jun 2020, Chris Muller wrote: > > > On Tue, Jun 30, 2020 at 7:59 PM Levente Uzonyi > wrote: > > On Tue, 30 Jun 2020, Chris Muller wrote: > > > > > Hi Eliot, > > > The order of repositories is part of the model, sorting them > conceptually breaks a couple of MC's use-cases. Would list-filtering help > you find the repository you seek amongst your list of 40 repositories? > > > > What model is it part of? > > > > > > Monticello's. MCWorkingCopyBrowser's. > > > > And if it is, how come the GUI doesn't let you change that order? > > > > > > It's "demote to bottom" on the menu. But it seemed to have gotten broke > due to the #repositories list always being sorted. > > That's a really poor way to make the list sortable. In my opinion there > should be the following options if that's the goal: alphabetize, move > down, move up, move to front, move to end (this is the one called demote > now which is not a good name IMO). > > > Levente > > > > > My hope is that Eliot's use-case is for only when there are no > WorkingCopy's selected, thus showing _all_ repositories -- because we can > sort that output. But sorting as far as when an individual WorkingCopy is > selected, it > > breaks one or two use cases. > > > > - Chris > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Wed Jul 1 17:05:12 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 1 Jul 2020 17:05:12 0000 Subject: [squeak-dev] The Trunk: Compiler-eem.440.mcz Message-ID: Eliot Miranda uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-eem.440.mcz ==================== Summary ==================== Name: Compiler-eem.440 Author: eem Time: 1 July 2020, 10:05:10.178038 am UUID: a39848b4-1bc8-4b31-93f8-e4f343d1400b Ancestors: Compiler-mt.439 Improve slightly the EncoderForSistaV1 class comment specifying the SistaV1 bytecode set in the light of recent discussion. =============== Diff against Compiler-mt.439 =============== Item was changed: BytecodeEncoder subclass: #EncoderForSistaV1 (excessive size, no diff calculated) From eliot.miranda at gmail.com Wed Jul 1 17:10:27 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed, 1 Jul 2020 10:10:27 -0700 Subject: [squeak-dev] The Trunk: Compiler-eem.440.mcz In-Reply-To: References: Message-ID: On Wed, Jul 1, 2020 at 10:05 AM wrote: > Eliot Miranda uploaded a new version of Compiler to project The Trunk: > http://source.squeak.org/trunk/Compiler-eem.440.mcz It's in tune ;-) Vanessa, Clément, your proof-reading and/or editing is appreciated. ==================== Summary ==================== > > Name: Compiler-eem.440 > Author: eem > Time: 1 July 2020, 10:05:10.178038 am > UUID: a39848b4-1bc8-4b31-93f8-e4f343d1400b > Ancestors: Compiler-mt.439 > > Improve slightly the EncoderForSistaV1 class comment specifying the > SistaV1 bytecode set in the light of recent discussion. > > =============== Diff against Compiler-mt.439 =============== > > Item was changed: > BytecodeEncoder subclass: #EncoderForSistaV1 > (excessive size, no diff calculated) > EncoderForSistaV1 encodes a bytecode set for Smalltalk that lifts limits on the number of literals, branch distances, the number of temporary variables, and provides extended push integer and push character bytecodes. The bytecode set also supports creating FullBlockClosures, closures whose method is separate from their home method's. Bytecodes are ordered by length to make decoding easier. Bytecodes marked with an * are extensible via a prefix extension bytecode. N.B. Extension bytecodes can only come before extensible bytecodes, and only if valid (one cannot extend a bytecode extensible by Ext A with an Ext B). An extensible bytecode consumes (and zeros) its extension(s). Hence the hidden implicit variables holding extensions are always zero except after a valid sequence of extension bytecodes. The implication is that a bytecode interpreter should maintain the extension values in static variables initialized to zero at start-up, and live only from the start of a sequence of extension bytecodes to the end of the extended bytecode immediately following. While the bytecode set lifts limits, it still assumes there are no more than 65535 literals (as of 2020 the CompiledCode header word imposes a 32,767 limit on number of literals), and no more than 256 stack slots (used for arguments, temporaries, and stack contents) in a Context. EncoderForSistaV1 also includes an extended set of bytecodes for Sista, the Speculative Inlining Smalltalk Architecture, a project by Clément Bera and Eliot Miranda. Scorch is an optimizer that exists in the Smalltalk image, /not/ in the VM, and optimizes by substituting normal bytecoded methods by optimized bytecoded methods that may use special bytecodes for which the Cogit can generate faster code. These bytecodes eliminate overheads such as bounds checks or polymorphic code (indexing Array, ByteArray, String etc). But the bulk of the optimization performed is in inlining blocks and sends for the common path. This bytecode set therefore differs from a normal Smalltalk set in providing a set of inlined primitives that do not validate their arguments that the compiler generates only when it can prove that the primitives' arguments are valid. The basic scheme is that the Cogit generates code containing performance counters. When these counters trip, a callback into the image is performed, at which point Scorch analyses some portion of the stack, looking at performance data for the methods on the stack, and optimises based on the stack and performance data. Execution then resumes in the optimized code. The Sista Cogit (e.g. SistaStackToRegisterMappingCogit) adds counters to conditional branches. Each branch has an executed and a taken count. On execution the executed count is decremented and if the count goes below zero the VM sends a message at a special index in the specialObjectsArray (as of writing, conditionalCounterTrippedOn:). Then if the branch is taken the taken count is decremented. The two counter values allow the Sista optimizer to collect basic block execution paths and to know what are the "hot" paths through execution that are worth agressively optimizing. Since conditional branches are about 1/6 as frequent as sends, and since they can be used to determine the hot path through code, they are a better choice to count than, for example, method or block entry. The VM provides a primitive that fills an Array with the state of the counters, and the state of each linked send in a method. The optimizer obtains the branch and send data for a method via this primitive. Instance Variables (inherited) Here is the list of bytecodes. An asterisk implies the bytecode takes either extA or extB extensions. Two asterisks imply it takes both extA and extB extensions. A number in parentheses is a note. See the notes at the end of the table. 1 Byte Bytecodes code (note) binary name 0-15 0000 iiii Push Receiver Variable #iiii 16-31 0001 iiii Push Literal Variable #iiii 32-63 001 iiiii Push Literal #iiiii 64-71 01000 iii Push Temp #iii 72-75 010010 ii Push Temp #ii + 8 76 01001100 Push Receiver 77 01001101 Push true 78 01001110 Push false 79 01001111 Push nil 80 01010000 Push 0 81 01010001 Push 1 * 82 01010010 Push thisContext, (then Extend B = 1 => push thisProcess) 83 01010011 Duplicate Stack Top 84-87 010101 ii UNASSIGNED 88-91 010110 ii Return Receiver/true/false/nil 92 01011100 Return top 93 01011101 BlockReturn nil * 94 01011110 BlockReturn Top [* return from enclosing block N, N = Extend A, then jump by Ext B ] * 95 01011111 Nop 96-111 0110 iiii Send Arithmetic Message #iiii (+ - < > <= >= = ~= * / \\ @ bitShift: // bitAnd: bitOr:) 112-119 01110 iii Send Special Message #iii + 0 (at: at:put: size next nextPut: atEnd == class) 120-127 01111 iii Send Special Message #iii + 8 (~~ value value: do: new new: x y) 128-143 1000 iiii Send Literal Selector #iiii With 0 Argument 144-159 1001 iiii Send Literal Selector #iiii With 1 Arguments 160-175 1010 iiii Send Literal Selector #iiii With 2 Arguments 176-183 10110 iii Jump iii + 1 (i.e., 1 through 8) 184-191 10111 iii Pop and Jump 0n True iii +1 (i.e., 1 through 8) 192-199 11000 iii Pop and Jump 0n False iii +1 (i.e., 1 through 8) 200-207 11001 iii Pop and Store Receiver Variable #iii 208-215 11010 iii Pop and Store Temporary Variable #iii 216 11011000 Pop Stack Top 217 (5) 11011001 Unconditional trap 218-219 1101101 i UNASSIGNED 220-223 110111 ii UNASSIGNED 2 Byte Bytecodes * 224 11100000 aaaaaaaa Extend A (Ext A = Ext A prev * 256 + Ext A) A is an unsigned extension. * 225 11100001 bbbbbbbb Extend B (Ext B = Ext B prev * 256 + Ext B) B is a signed extension. * 226 11100010 iiiiiiii Push Receiver Variable #iiiiiiii (+ Extend A * 256) * 227 11100011 iiiiiiii Push Literal Variable #iiiiiiii (+ Extend A * 256) * 228 11100100 iiiiiiii Push Literal #iiiiiiii (+ Extend A * 256) 229 11100101 iiiiiiii Push Temporary Variable #iiiiiiii 230 11100110 iiiiiiii UNASSIGNED (was pushNClosureTemps) 231 11100111 jkkkkkkk Push (Array new: kkkkkkk) (j = 0) & Pop kkkkkkk elements into: (Array new: kkkkkkk) (j = 1) * 232 11101000 iiiiiiii Push Integer #iiiiiiii (+ Extend B * 256, where bbbbbbbb = sddddddd, e.g. -32768 = i=0, d=0, s=1) * 233 11101001 iiiiiiii Push Character #iiiiiiii (+ Extend B * 256) ** 234 11101010 iiiiijjj Send Literal Selector #iiiii (+ Extend A * 32) with jjj (+ Extend B * 8) Arguments ** 235 (1) 11101011 iiiiijjj ExtendB < 64 ifTrue: [Send To Superclass Literal Selector #iiiii (+ Extend A * 32) with jjj (+ Extend B * 8) Arguments] ifFalse: [Send To Superclass of Stacked Class Literal Selector #iiiii (+ Extend A * 32) with jjj (+ (Extend B bitAnd: 63) * 8) Arguments] 236 11101100 iiiiiiii UNASSIGNED * 237 11101101 iiiiiiii Jump #iiiiiiii (+ Extend B * 256, where bbbbbbbb = sddddddd, e.g. -32768 = i=0, d=0, s=1) ** 238 (4) 11101110 iiiiiiii Pop and Jump 0n True #iiiiiiii (+ Extend B * 256, where Extend B >= 0) ** 239 (4) 11101111 iiiiiiii Pop and Jump 0n False #iiiiiiii (+ Extend B * 256, where Extend B >= 0) ** 240 (3) 11110000 iiiiiiii Pop and Store Receiver Variable #iiiiiii (+ Extend A * 256) ** 241 (3) 11110001 iiiiiiii Pop and Store Literal Variable #iiiiiiii (+ Extend A * 256) 242 11110010 iiiiiiii Pop and Store Temporary Variable #iiiiiiii ** 243 (3) 11110011 iiiiiiii Store Receiver Variable #iiiiiii (+ Extend A * 256) ** 244 (3) 11110100 iiiiiiii Store Literal Variable #iiiiiiii (+ Extend A * 256) 245 11110110 iiiiiiii Store Temporary Variable #iiiiiiii 246-247 1111011 i xxxxxxxx UNASSIGNED 3 Byte Bytecodes 248 (2) 11111000 iiiiiiii mssjjjjj Call Primitive #iiiiiiii + (jjjjj * 256) m=1 means inlined primitive, no hard return after execution. ss defines the unsafe operation set used to encode the operations. (ss = 0 means sista unsafe operations, ss = 01 means lowcode operations, other numbers are as yet used) Lowcode inlined primitives may have extensions. * 249 11111001 xxxxxxxx siyyyyyy Push Closure Compiled block literal index xxxxxxxx (+ Extend A * 256) numCopied yyyyyy receiverOnStack: s = 1 ignoreOuterContext: i = 1 ** 250 11111010 eeiiikkk jjjjjjjj Push Closure Num Copied iii (+ExtA//16*8) Num Args kkk (+ ExtA\\16*8) BlockSize jjjjjjjj (+ExtB*256). ee = num extensions 251 11111011 kkkkkkkk sjjjjjjj Push Temp At kkkkkkkk In Temp Vector At: jjjjjjj, s = 1 implies remote inst var access instead of remote temp vector access * 252 (3) 11111100 kkkkkkkk sjjjjjjj Store Temp At kkkkkkkk In Temp Vector At: jjjjjjj s = 1 implies remote inst var access instead of remote temp vector access * 253 (3) 11111101 kkkkkkkk sjjjjjjj Pop and Store Temp At kkkkkkkk In Temp Vector At: jjjjjjj s = 1 implies remote inst var access instead of remote temp vector access ** 254 (5) 11111110 kkkkkkkk jjjjjjjj branch If Not Instance Of Behavior/Array Of Behavior literal kkkkkkkk (+ Extend A * 256, where Extend A >= 0) distance jjjjjjjj (+ Extend B * 256, where Extend B >= 0 and <= 127) ** 254 (5) 11111110 kkkkkkkk jjjjjjjj branch If Instance Of Behavior/Array Of Behavior literal kkkkkkkk (+ Extend A * 256, where Extend A >= 0) distance jjjjjjjj (+ (Extend B bitAnd: 127) * 256, where Extend B >= 128 and <= 255) * 255 11111111 xxxxxxxx jjjjjjjj UNASSIGNED (1) Bytecode 235 is a super send bytecode that starts the lookup in the superclass of some class. It has two forms, "normal" and "directed". In the normal form, the class is the value of the method's methodClassAssociation which must be the last literal. In the directed form the class is the class on top of stack. (2) The Call Primitive Bytecode (see below) specifies either a primitive in the primitive table (m=0) or an inlined primitive (m=1). Non-inlined primitives from the primitive table have index (jjjjjjj * 256) + iiiiiiii and return from the method if they succeed. This bytecode is only valid as the first bytecode of a method. Inline primitives have index (jjjjjjj * 256) + iiiiiiii, cannot fail, and do not return when they succeed, yielding a result (typically on top of stack after popping their arguments, but possibly in a byte data stack, for example for unboxed floating-point primitives). (3) ExtB lowest bit implies no store check is needed, ExtB second bit implies the object may be a context, ExtB third bit implies no immutability/read-only check is needed, other bits in the extension are unused. (4) ExtA = 1 implies no mustBeBoolean trampoline is needed, other bits in the extension are unused (5) these are Scorch/Sista bytecodes generated by an optimizing compiler and not used in normal Smalltalk code. The CallPrimitive bytecode is divided into two halves, those for normal primtiives, occurring at the beginning of a method, and those for inline primitives, anywhere within the body of a method. This is a three byte bytecode, the first byte being 248, and the second byte being a big-endian 16-bit primitive index. If the top bit of the first byte of the primitive index is 1 then this is a normal primitive invocation. If it is zero then the remaining 15 bits define 32k primitives, organized as four 8k "pages". The first page is used for and reserved by the Sista optimizing compiler. The second page is usd for and reserved by the Lowcode FFI marshalling primitive set. The other two sets are unspecified and unused. Here is the specification of the Sista unsafe instructions (unsafe operations, set 00). The lowcode set uses external specifications. We sort the inline primitive operations by arity. Nullary primitives occupy the 0-999 range. Unary primitives occupy the 1-1999 range, up until 8 args. 8191 instructions can be encoded in each unsafe operation set, instructions from 0 to 7 arguments can have 1000 different instructions each, while 8 args instructions can have 192 different instructions. Sista defines the following inlined primitives (CallPrimitive iiiiiiii 100jjjjj, n = jjjjjiiiiiiii) 1000 class 1001 pointer numSlots 1002 pointer basicSize 1003 byte8Type format numBytes (includes CompiledMethod) 1004 short16Type format numShorts 1005 word32Type format numWords 1006 doubleWord64Type format numDoubleWords 1010 ensure number of bytes available. 1011 fixed-sized new. (objects with 0 to n inst vars) 1020 identityHash (non-immediate, non-Behavior) 1021 identityHash (SmallInteger) 1022 identityHash (Character) 1023 identityHash (SmallFloat64) 1024 identityHash (Behavior, has hash?) 1030 immediateAsInteger (Character) 1031 immediateAsInteger (SmallFloat64) 1035 immediateAsFloat (Smallinteger) 2000 SmallInteger #+. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2001 SmallInteger #-. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2002 SmallInteger #*. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2003 SmallInteger #/. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2004 SmallInteger #//. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2005 SmallInteger #\\. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2006 SmallInteger #quo:. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2011 Variable-sized pointers new (new:). Array, etc. 2012 Variable-sized byte new (new:). ByteArray, ByteString, etc. 2013 Variable-sized 16-bit new (new:). DoubleByteArray, etc. 2014 Variable-sized 32-bit new (new:). Bitmap, FloatArray, etc. 2015 Variable-sized 64-bit new (new:). DoubleWordArray, etc. 2016 SmallInteger #bitAnd:. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2017 SmallInteger #bitOr:. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2018 SmallInteger #bitXor:. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2019 SmallInteger #bitShiftLeft:. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2020 SmallInteger #bitShiftRight:. Both arguments are SmallIntegers and the result fits in a SmallInteger (* depends on word size) 2032 SmallInteger #>. Both arguments are SmallIntegers 2033 SmallInteger #<. Both arguments are SmallIntegers 2034 SmallInteger #>=. Both arguments are SmallIntegers 2035 SmallInteger #<=. Both arguments are SmallIntegers 2036 SmallInteger #=. Both arguments are SmallIntegers 2037 SmallInteger #~=. Both arguments are SmallIntegers 2064 Pointer Object>>at:. The receiver is guaranteed to be a pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger 2065 Byte Object>>at:. The receiver is guaranteed to be a non-pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger. The result is a SmallInteger. 2066 16-bit Word Object>>at:. The receiver is guaranteed to be a non-pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger. The result is a SmallInteger. 2067 32-bit DoubleWord Object>>at:. The receiver is guaranteed to be a non-pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger. The result is a SmallInteger or a LargePositiveInteger. 2068 64-bit QuadWord Object>>at:. The receiver is guaranteed to be a non-pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger. The result is a SmallInteger or a LargePositiveInteger. The following instructions can have the ExtB check flag (See (3)). 3000 Pointer Object>>at:put:. The receiver is guaranteed to be a pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger 3001 Byte Object>>at:put:. The receiver is guaranteed to be a non-pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger. The argument is a SmallInteger. The primitive stores the least significant 8 bits. 3002 Word Object>>at:put:. The receiver is guaranteed to be a non-pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger. The argument is a SmallInteger. The primitive stores the least significant 16 bits. 3003 DoubleWord Object>>at:put:. The receiver is guaranteed to be a non-pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger. The argument is a SmallInteger. The primitive stores the least significant 32 bits. 3004 QuadWord Object>>at:put:. The receiver is guaranteed to be a non-pointer object. The 0-relative (1-relative?) index is an in-range SmallInteger. The argument is a SmallInteger. The primitive stores the least significant 64 bits. 3021 Byte Object >> equals:length: The receiver and the arguments are both byte objects and have both the same size (length). The length argument is a smallinteger. Answers true if all fields are equal, false if not. Comparison is bulked to word comparison. 4000 Pointer Object>> fillFrom:to:with: The receiver is a Pointer object. the middle two arguments are smallintegers. Last argument is any object. Fills the object in between the two indexes with last argument. Receiver is guaranteed to be mutable. The pointer accesses are raw (no inst var check). If ExtB is set to 1, no store check is present. Else a single store check is done for the bulk operation. Answers the receiver. 5000 Pointer Object>> replaceFrom:to:with:startingAt: Src and dest are pointer objects. ScrPos, scrLast and destLast are smallintegers. Receiver is guaranteed to be mutable. Both ranges are in-bounds. The pointer accesses are raw (no inst var check). As for the normal primitive, the copy is linear. Answers the receiver. Lowcode defines inlined primitives for the range CallPrimitive iiiiiiii 101jjjjj, n = jjjjjiiiiiiii. _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From leves at caesar.elte.hu Wed Jul 1 19:29:06 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed, 1 Jul 2020 21:29:06 +0200 (CEST) Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: Hi Chris, On Tue, 30 Jun 2020, Chris Muller wrote: > What do we need to do to make #class non-inlined and therefore overridable?  My impression is that this is on the table for 6.0, is it still? We have had this discussion a few times before. Last time[1] I asked you to evaluate the following in your image and report back if it does what you need: (ParseNode classPool at: #StdSelectors) removeKey: #class. Compiler recompileAll. Levente [1] http://forum.world.st/The-Inbox-Kernel-cmm-1198-mcz-td5089411.html#a5089510 > >  - Chris > > From ma.chris.m at gmail.com Wed Jul 1 20:50:44 2020 From: ma.chris.m at gmail.com (Chris Muller) Date: Wed, 1 Jul 2020 15:50:44 -0500 Subject: [squeak-dev] The Trunk: Monticello-cmm.726.mcz In-Reply-To: References: Message-ID: That nomenclature is tied to the use-case, which is about a prioritization of repositories (primary, mirror, local, etc.). I originally wanted to make it "promote" (instead of demote) but I thought it might be confusing with the package-cache always being first. The api nomenclature you suggest would shift the focus to the implementation innards being a "collection", without really being as revealing about *why* a user would want to "move up" a Repository in the list. It's really not a big deal to me if you want to change it, but I do think having this functionality is useful. It sounds like an alphabetize option would be useful for VMMaker.. - Chris On Wed, Jul 1, 2020 at 6:40 AM Levente Uzonyi wrote: > On Tue, 30 Jun 2020, Chris Muller wrote: > > > On Tue, Jun 30, 2020 at 7:59 PM Levente Uzonyi > wrote: > > On Tue, 30 Jun 2020, Chris Muller wrote: > > > > > Hi Eliot, > > > The order of repositories is part of the model, sorting them > conceptually breaks a couple of MC's use-cases. Would list-filtering help > you find the repository you seek amongst your list of 40 repositories? > > > > What model is it part of? > > > > > > Monticello's. MCWorkingCopyBrowser's. > > > > And if it is, how come the GUI doesn't let you change that order? > > > > > > It's "demote to bottom" on the menu. But it seemed to have gotten broke > due to the #repositories list always being sorted. > > That's a really poor way to make the list sortable. In my opinion there > should be the following options if that's the goal: alphabetize, move > down, move up, move to front, move to end (this is the one called demote > now which is not a good name IMO). > > > Levente > > > > > My hope is that Eliot's use-case is for only when there are no > WorkingCopy's selected, thus showing _all_ repositories -- because we can > sort that output. But sorting as far as when an individual WorkingCopy is > selected, it > > breaks one or two use cases. > > > > - Chris > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From karlramberg at gmail.com Thu Jul 2 08:19:21 2020 From: karlramberg at gmail.com (karl ramberg) Date: Thu, 2 Jul 2020 10:19:21 +0200 Subject: [squeak-dev] [ANN] My bag of tricks In-Reply-To: <108c8d18-109a-47ab-33d9-0c25dc34921e@zogotounga.net> References: <108c8d18-109a-47ab-33d9-0c25dc34921e@zogotounga.net> Message-ID: Thanks for posting this. I'll have plenty of stuff to study here :-D Best, Karl On Sun, Jun 28, 2020 at 7:12 PM Stéphane Rollandin wrote: > Hello all, > > After Karl manifested some interest for my L-system implementation, I > figured I should make some hidden stuff I have been doing for ages > available to all. > > So, from the following page: > > http://www.zogotounga.net/comp/squeak/rogue.htm > > you will be able to download a (32 bit) 5.3-based image with most of my > code in its current state, with a list of entry points to some notable > features. > > > Stef > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From karlramberg at gmail.com Thu Jul 2 08:22:26 2020 From: karlramberg at gmail.com (karl ramberg) Date: Thu, 2 Jul 2020 10:22:26 +0200 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <20200629030109.C472B54011A@proxy.email-ssl.com.br> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> Message-ID: On Mon, Jun 29, 2020 at 5:01 AM Jecel Assumpcao Jr wrote: > Tim Rowledge wrote on Sun, 28 Jun 2020 17:53:21 -0700 > > Seriously. We've been sitting around twiddling thumbs about better > graphics for decades now. > > > > We had Balloon2D & 3D. > > We had 'Pooh graphics' to do vector forms. > > We have some excellent stuff being done by the Cuis crew. > > We have some amazing ideas from Nile/Gezira. > > We have a number of potential 3rd party graphics libraries we might > adopt. > > We have an advanced JIT that could be used to make on-demand graphics > routines either on their own or working with pretty much any of the above. > > We probably have other options I've not even heard of. > > You didn't mention the original BitBlt and WarpBlit, which is > understandable if your focus is on vector graphics. > > > Maybe we should actually do something? Can we at least talk about it? > > Though the survey I did for the Board pointed to OpenGL ES as our best > option (at the time, things have changed since), it is not something I > personally like. I want something that is not a black box so I can > single step from the highest level to individual pixels when debugging > issues. I have the same thoughts on this. Faster, smoother graphics would be really good. At the same time I like access to everything within the image. Best, Karl > But I also want it to take advantage of all available resources > (including GPUs, extra processors) by translating debugged code into > something else. I just don't want to debug in that something else, which > would be the case for OpenGL ES shaders. > > Nile/Gezira + JIT would be my vote, but it has been planned for a long > time and, as far as I know, is not happening right now. > > -- Jecel > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From lecteur at zogotounga.net Thu Jul 2 10:01:57 2020 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Thu, 2 Jul 2020 12:01:57 +0200 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> Message-ID: <834bc331-6f72-9065-e11f-3bd109b0857f@zogotounga.net> > Though the survey I did for the Board pointed to OpenGL ES as our best > option (at the time, things have changed since), it is not something I > personally like. I want something that is not a black box so I can > single step from the highest level to individual pixels when debugging > issues. > > I have the same  thoughts on this. > Faster, smoother graphics would be really good. > At the same time I like access to everything within the image. +1 Stef From tim at rowledge.org Thu Jul 2 23:35:03 2020 From: tim at rowledge.org (tim Rowledge) Date: Thu, 2 Jul 2020 16:35:03 -0700 Subject: [squeak-dev] AllocationTest>>#testOutOfMemorySignal fails on 32bit system Message-ID: <487AA985-9050-4849-90D5-2B0E81BD9EB9@rowledge.org> On a Raspberry Pi OS 32bit this test fails because of an oversight - the parameter passed to vmParameterAt:put: cannot exceed SmallInteger maxVal. It makes the careful testing for 32/64bit image seem a bit silly. This means we can only ask for up to ~1GB space for free space on a 32bit image system and so I propose to clamp the requested value in AllocationTest>>#setFreeSpaceLimitOf:around: There don't appear to be any other places right now that need attention. If I don't hear any outraged screams soon I'll just commit it to trunk. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Strange OpCodes: IG: Insert Garbage From lewis at mail.msen.com Fri Jul 3 01:32:11 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Thu, 2 Jul 2020 21:32:11 -0400 Subject: [squeak-dev] AllocationTest>>#testOutOfMemorySignal fails on 32bit system In-Reply-To: <487AA985-9050-4849-90D5-2B0E81BD9EB9@rowledge.org> References: <487AA985-9050-4849-90D5-2B0E81BD9EB9@rowledge.org> Message-ID: <20200703013211.GA46239@shell.msen.com> On Thu, Jul 02, 2020 at 04:35:03PM -0700, tim Rowledge wrote: > On a Raspberry Pi OS 32bit this test fails because of an oversight - the parameter passed to vmParameterAt:put: cannot exceed SmallInteger maxVal. It makes the careful testing for 32/64bit image seem a bit silly. > > This means we can only ask for up to ~1GB space for free space on a 32bit image system and so I propose to clamp the requested value in AllocationTest>>#setFreeSpaceLimitOf:around: There don't appear to be any other places right now that need attention. > > If I don't hear any outraged screams soon I'll just commit it to trunk. > So rather than 1024 * 1024 * 1024 it should instead be 16r3FFFFFFF so that is it less than or equal to SmallInteger maxVal for either 32 or 64 bit images. Is that the change? No outraged screams from me. Dave From tim at rowledge.org Fri Jul 3 01:32:35 2020 From: tim at rowledge.org (tim Rowledge) Date: Thu, 2 Jul 2020 18:32:35 -0700 Subject: [squeak-dev] Buglet ins SIXX for Squeak 5.3 Message-ID: I just spotted a small bug in the code loaded up for SIXX. After loading it into a clean 5.3 image XMLDOMParser class>>#initialize & XMLDOMParser class>>#unload are reverted to old and out of date versions. Installer code used - Installer squeaksource project: 'MetacelloRepository'; install: 'ConfigurationOfSIXX'. (Smalltalk at: #ConfigurationOfSIXX) load. Looks like the ConfigurationOfSIXX>>#version051: method is causing the load of ` spec for: #squeak do:[ spec package: 'XML-Parser' with: [ spec file: 'XML-Parser-ul.44'; repository: 'http://source.squeak.org/squeak52' ` and that in turn re-loads old versions of XMLDOMParser class>>#initialize & XMLDOMParser class>>#unload - and they try to use the deprecated #registerFileReader: in FileList instead of FileServices. I *think* it looks like ConfigurationOfSIXX>>#baseline06: requires the above section removing - but I am most definitely not any sort of expert in the ConfigurationOfXXXXXX stuff. It appears that Masashi-san is still caring for this package since there was a commit in january of this year, so if you could please Do The Magic(™). And since SmalltalkHub is now deprecated it could be a good idea to move the repository perhaps to squeaksource.com tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Fractured Idiom:- MAZEL TON - Lots of luck From tim at rowledge.org Fri Jul 3 01:37:49 2020 From: tim at rowledge.org (tim Rowledge) Date: Thu, 2 Jul 2020 18:37:49 -0700 Subject: [squeak-dev] AllocationTest>>#testOutOfMemorySignal fails on 32bit system In-Reply-To: <20200703013211.GA46239@shell.msen.com> References: <487AA985-9050-4849-90D5-2B0E81BD9EB9@rowledge.org> <20200703013211.GA46239@shell.msen.com> Message-ID: <6E5D36CE-21E6-4FF2-9E86-E07A4E099EFF@rowledge.org> > On 2020-07-02, at 6:32 PM, David T. Lewis wrote: > > On Thu, Jul 02, 2020 at 04:35:03PM -0700, tim Rowledge wrote: >> On a Raspberry Pi OS 32bit this test fails because of an oversight - the parameter passed to vmParameterAt:put: cannot exceed SmallInteger maxVal. It makes the careful testing for 32/64bit image seem a bit silly. >> >> This means we can only ask for up to ~1GB space for free space on a 32bit image system and so I propose to clamp the requested value in AllocationTest>>#setFreeSpaceLimitOf:around: There don't appear to be any other places right now that need attention. >> >> If I don't hear any outraged screams soon I'll just commit it to trunk. >> > > So rather than > > 1024 * 1024 * 1024 > > it should instead be > > 16r3FFFFFFF > > so that is it less than or equal to SmallInteger maxVal for either 32 or > 64 bit images. Is that the change? It varies a bit for 32/64 bit (and strictly I guess it ought to check to see how much memory is actually available?) but must exceed SmallInteger MaxVal because of the VM code for primitiveVMParameter which fails if the input value is not a SmallInt. So, I claim we need to clamp the result of (Smalltalk vmParameterAt: 1) + bytes asInteger or the test cannot pass. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim To steal ideas from one person is plagiarism; to steal from many is research. From asqueaker at gmail.com Fri Jul 3 02:01:29 2020 From: asqueaker at gmail.com (Chris Muller) Date: Thu, 2 Jul 2020 21:01:29 -0500 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: Hi Nicolas, Yes, I understand. For general classes, it's impossible to tolerate non-symmetry. This is an outward-looking tool that didn't need that contract, and took advantage of legacy backward-compatibility via inheritance rather than composition. An encapsulating pointer object would be less efficient (a bunch of extra objects + GC), and face the very same equivalence problem due to Squeak not letting client code define symmetrical equivalence in their subclasses. The fault is not with MCVersionName, it's with our core library. Q: What does #= have in common with #+, #-, #*, #/ ? A: It wants to be able to interoperate with different classes for the *lvalue* and *rvalue*. That's why the latter four all double-dispatch. The same applies to #=, the only difference is its "calculation" result is a boolean type instead of some Number. So why can't we double-dispatch with #=, too? Or, maybe we can simply dispatch. To #sameTypeAs:? Object>>#sameTypeAs: anObject "Answer whether the receiver is regarded as the same type as anObject." ^ self class = anObject class (we may need a double-dispatch, but... that's just details) Interested in your thoughts on the hard type-checking. Observe how String>>#= got a pass that no one else got. Because it was convenient, and because we, the great developers, have full control, we softened it, let it rely on #isString rather than the hardass draconian type-test (via an inlined message even!). But that reveals the limitation, *users* don't have that luxury. They aren't able to make anything similar for *any* subclass and still maintain symmetric equivalence. IMO, all this hard type-checking is crippling Squeak's wish to be more dynamic. Magma, too. It could be so great if we would just *let* it. Would you be open to double-dispatching for #= as with the other binary operators? Regards, Chris On Wed, Jul 1, 2020 at 3:57 AM Nicolas Cellier < nicolas.cellier.aka.nice at gmail.com> wrote: > > > Le mer. 1 juil. 2020 à 06:01, Chris Muller a > écrit : > >> On Tue, Jun 30, 2020 at 7:55 PM Levente Uzonyi >> wrote: >> >>> On Tue, 30 Jun 2020, Chris Muller wrote: >>> >>> > Might be worth reopening this discussion. ANY dependencies on #class >>> seem like a bad thing to me, especially while it's still an in-lined >>> message. Below is the MC version that did it. Looks like the time to >>> change this >>> >>> Using #class by default sounds correct to me. If some instances of >>> classes want to be equal to each other, they should handle that >>> themselves by overriding #=. >>> >> >> Because it causes that same undesirable loss of symmetry you mentioned >> about MCVersionName and String, except much worse because it's in a more >> general sense instead of application-specific. It makes headaches for >> Magma applications because client code has to be aware of it. >> >> Smalltalk wants to be about messages, not types. What do we need to do >> to make #class non-inlined and therefore overridable? My impression is >> that this is on the table for 6.0, is it still? >> >> - Chris >> >> > Hi Chris, > wait a minute, the failure of symmetry of MCVersionName is ABSOLUTELY > UNRELATED to species or class. > > There are some wonderful hacks, there are some clever hacks, but at the > end, you very well know that you can cheat as long as you don't get caught. > MCVersionName is not a good hack. > > Here we are dressing the String with additional application specific > semantics. > The MCVersionName is a String which knows how to be interpreted in some > context. > There are lot's of contexts where we could dress strings like that, > imagine that we create a DateString, a NumberString... > Should we really do that? > When we do that, we confer more responsibilities to such subclasses. They > are a String, and also more than a String. > But here, the application specific behavior is in contradiction with > superclass, we redefined = with a different behavior. > At the end, we will always get caught with schemes like that, because we > complexify and entangle the concepts. > It seems to me that it's a simple inheritance vs composition anti-pattern. > > MCVersion name hash ~= MVVersion name asString hash is a good illustration. > It means that we're breaking a more general contract for implementing our > hack. > It's typical of what will happen by abuse of inheritance. > > Think of it, = is a relationship of equivalence. We don't want to loose > that. > So it has to be symmetric, but also transitive: > String new = StringSubclass1 & ( String new = StringSubclass2 new ) > ==> (StringSubclass1 new = StringSubclass2 new). > That means that we would have accidental equivalence of separate domains > if ever the string representation matches. > That's not what we want. > > Also, if StringSubclass1 is more than a String, then how something less > than a StringSubclass1 could be equivalent? > It's not equivalent, it does not behave the same, or we would not need to > subclass in the first place. > > Oh but we have String subclasses, ByteString and WideString, so what's the > difference? > The difference is that those are implementation details. They are > optimized internal representations of Strings. > We're not at all after conferring a different behavior, on the contrary. > We absolutely want to confer the same behavior to the outside whatever the > internal representation (class) and try to make them be really equivalent. > Yes, more than often, the implementation details leak out of encapsulation. > It's the problem of tradeoffs between efficiency and universality. We have > to trade some generality for some efficiency. > > That's what happens with Interval and Array. They are not equivalent. They > have slightly different behaviors and properties. > An Interval is more than an Array (it has numeric elements with arithmetic > progression). > And it is less than an Array (it cannot at:put: or embed arbitrary > objects). > We can casually have an Array carrying the same elements as an Interval, > which can be expressed by #hasEqualElements: > > species semantics was overloaded. It did also mean, in which recipient > class should I select:, collect:... > If we use the same recipient for collecting, then we are similar (of same > species)... And if similar, maybe equal? > It might be that Interval was originally seen as an implementation detail, > a (space) optimized version of Array afterall. > But doing so, introduced complexity. > It entangled things. > It broke contracts (hash), or imposed very inefficient implementation of > hash (enumerating all elements of an Interval). > In the end, we get caught, that is carrying more inconvenients than > advantages when trying to sustain the illusion of equivalence. > It's far better and simpler to just abandon the illusion, because it's > just that, a deceitful illusion. > > I understand what you mean by abuse of using the class message, we have > somehow lost a hook. > But IMO, this hook was not useful, except for one thing proxy. > We have more than one message in our palette, even if = is a very > convenient symbol (short binary), we cannot dress it with different context > specific meanings, the cheat is getting too apparent. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From ma.chris.m at gmail.com Fri Jul 3 02:30:08 2020 From: ma.chris.m at gmail.com (Chris Muller) Date: Thu, 2 Jul 2020 21:30:08 -0500 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: Thanks for that reminder, but I was asking about the next Squeak release image. Does anyone object to making this one of the goals for 6.0? - Chris On Wed, Jul 1, 2020 at 2:29 PM Levente Uzonyi wrote: > Hi Chris, > > On Tue, 30 Jun 2020, Chris Muller wrote: > > > What do we need to do to make #class non-inlined and therefore > overridable? My impression is that this is on the table for 6.0, is it > still? > > We have had this discussion a few times before. Last time[1] I asked you > to evaluate the following in your image and report back if it does what > you need: > > (ParseNode classPool at: #StdSelectors) removeKey: #class. > Compiler recompileAll. > > > Levente > > [1] > http://forum.world.st/The-Inbox-Kernel-cmm-1198-mcz-td5089411.html#a5089510 > > > > > - Chris > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From asqueaker at gmail.com Fri Jul 3 03:42:14 2020 From: asqueaker at gmail.com (Chris Muller) Date: Thu, 2 Jul 2020 22:42:14 -0500 Subject: [squeak-dev] Squeak on Ubuntu 18.04 desktop Message-ID: Has anyone figured out how to get Squeak's behavior to behave in 18.04 like it did in 16.04 and before? In Ubuntu, Alt+~ (tilde) switches between windows of the same application. But, in 18.04, it no longer works. It treats every running instance of Squeak as a separate "app". It also won't re-top an existing window when using with a .desktop file. Nor will it let me anchor the .desktop file to the bar. Sigh, so Linux.. It makes working with multiple images at once nearly impossible.. Has anyone else encountered this? Thanks, Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Fri Jul 3 05:24:38 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Fri, 3 Jul 2020 05:24:38 0000 Subject: [squeak-dev] The Trunk: KernelTests-tpr.383.mcz Message-ID: tim Rowledge uploaded a new version of KernelTests to project The Trunk: http://source.squeak.org/trunk/KernelTests-tpr.383.mcz ==================== Summary ==================== Name: KernelTests-tpr.383 Author: tpr Time: 2 July 2020, 10:24:36.600711 pm UUID: cb4cc7c5-a318-4424-93dd-1414a73dbc32 Ancestors: KernelTests-tonyg.382 Make the AllocationTest work by preventing the requested free space size (in #setFreeSpaceLimi....) from exceeding SmallInteger>maxVal and thereby failing the vmParameter primitive's limit. =============== Diff against KernelTests-tonyg.382 =============== Item was changed: ----- Method: AllocationTest>>setFreeSpaceLimitOf:around: (in category 'support') ----- setFreeSpaceLimitOf: bytes around: aBlock "Attempt to evaluate aBlock with a limit of the requested ammount of free old space, restoring the extant limit after the evaluation." | extantLimit | extantLimit := Smalltalk vmParameterAt: 67. + Smalltalk vmParameterAt: 67 put: ((Smalltalk vmParameterAt: 1) + bytes asInteger min: SmallInteger maxVal). - Smalltalk vmParameterAt: 67 put: (Smalltalk vmParameterAt: 1) + bytes asInteger. ^aBlock ensure: [Smalltalk vmParameterAt: 67 put: extantLimit]! From tim at rowledge.org Fri Jul 3 05:42:29 2020 From: tim at rowledge.org (tim Rowledge) Date: Thu, 2 Jul 2020 22:42:29 -0700 Subject: [squeak-dev] Squeak on Ubuntu 18.04 desktop In-Reply-To: References: Message-ID: <469351F1-7AC6-4852-B188-12F3992E30B3@rowledge.org> > On 2020-07-02, at 8:42 PM, Chris Muller wrote: > > Has anyone figured out how to get Squeak's behavior to behave in 18.04 like it did in 16.04 and before? This is with the stock window manager for ubuntu 18? I got away from that horror story as quickly as I could work out. Not that xfce4 is looking much less annoying TBH. What is it with the unix world wanting to make life as miserable as possible? It may just be from long experience but the least awful unix/gui pair I know is Raspbian - or more correctly since they recently changed the name - Raspberry Pi OS. It's Debian based, the UI is tolerably consistent and best of all the system is being cared for and developed by some people that seem to have a decent clue. It wouldn't be worth mentioning this if they didn't provide an X86 version but they do so it is. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim The less time planning, the more time programming. From kksubbu.ml at gmail.com Fri Jul 3 09:06:17 2020 From: kksubbu.ml at gmail.com (K K Subbu) Date: Fri, 3 Jul 2020 14:36:17 +0530 Subject: [squeak-dev] Squeak on Ubuntu 18.04 desktop In-Reply-To: References: Message-ID: <3ca47a10-9c1b-1009-dadd-3dc2396e9ab5@gmail.com> On 03/07/20 9:12 am, Chris Muller wrote: > Has anyone figured out how to get Squeak's behavior to behave in 18.04 > like it did in 16.04 and before? They use two different GUI shells. 16.04 uses Unity and 18.04 uses Gnome desktop manager v3 (GDM3). You may install Unity to restore old behavior. # apt-get install ubuntu-unity-desktop and choose lightdm as the desktop manager when prompted. If you wish to continue with GDM, the keyboard shortcuts are different. Use Win (aka Super) key with tilde to switch between windows of the same app. More keyboard shortcuts are at: https://help.gnome.org/users/gnome-help/stable/shell-keyboard-shortcuts.html.en Also, you may find the 20.04 GDM to be much better than that in 18.04. HTH .. Subbu From leves at caesar.elte.hu Fri Jul 3 11:07:08 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri, 3 Jul 2020 13:07:08 +0200 (CEST) Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: On Thu, 2 Jul 2020, Chris Muller wrote: > Thanks for that reminder, but I was asking about the next Squeak release image.  Does anyone object to making this one of the goals for 6.0? What is "this" you're referring to? Levente >  - Chris > > > On Wed, Jul 1, 2020 at 2:29 PM Levente Uzonyi wrote: > Hi Chris, > > On Tue, 30 Jun 2020, Chris Muller wrote: > > > What do we need to do to make #class non-inlined and therefore overridable?  My impression is that this is on the table for 6.0, is it still? > > We have had this discussion a few times before. Last time[1] I asked you > to evaluate the following in your image and report back if it does what > you need: > >    (ParseNode classPool at: #StdSelectors) removeKey: #class. >    Compiler recompileAll. > > > Levente > > [1] http://forum.world.st/The-Inbox-Kernel-cmm-1198-mcz-td5089411.html#a5089510 > > > > >  - Chris > > > > > > > From hmm at heeg.de Fri Jul 3 11:24:32 2020 From: hmm at heeg.de (Hans-Martin Mosner) Date: Fri, 3 Jul 2020 13:24:32 +0200 Subject: [squeak-dev] VW font setting In-Reply-To: <7D5249B4-061C-44FF-925A-2C07AAE208E2@rowledge.org> References: <7D5249B4-061C-44FF-925A-2C07AAE208E2@rowledge.org> Message-ID: <442158f3-5afa-98fb-d512-e7be16d1eae2@heeg.de> Am 26.06.20 um 02:10 schrieb tim Rowledge: > If there's anyone in the list that has recently used VW and knows how to get fonts set up to be actually readable in a VW8.3 system running on Ubuntu lite with the xfce4 window manager.... I'd appreciate any pointers to helpful info. > > So far googling and digging into the colossal pile of code that appears to be font related has secured no effects whatsoever in getting anything better than almost utterly unreadable fonts for menus, buttons etc. My eyes hurt! This is indeed a pretty unsightly part of VW. Linux just isn't the child of love there :-) Holger Kleinsorgen implemented an interface to the Xft libraries which give you proper anti-aliased fonts in VW and which is included (or should I say hidden) in the Contributed parcel list. From the parcel manager, go to Directories->Contributed->Xft and load the Xft-DesktopIntegration parcel. Save&quit and restart the image. Cheers, Hans-Martin From lewis at mail.msen.com Fri Jul 3 12:42:59 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 3 Jul 2020 08:42:59 -0400 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: <20200703124259.GA76636@shell.msen.com> On Mon, Jun 29, 2020 at 02:43:26AM +0200, Levente Uzonyi wrote: > Hi Nikolai, > > On Mon, 29 Jun 2020, Nikolay Suslov wrote: > > >Hello all, > >Figuring out, could we go back to the previous version of > >SequenceableCollection??#= method (as in Squeak 5.2), to check if the > >receiver is??equivalent to the otherCollection by using "self species == > >otherCollection species", > >instead of "self class = otherCollection class"? > > IIRC there was a good reason for that change though I can't recall > what it was. I'm sure the mailing list remembers. > The change has my initials on it, and it was introduced here: Name: Collections-dtl.821 Author: dtl Time: 16 February 2019, 6:18:27.925895 pm UUID: 9bfa29b3-5e9f-4c61-b19b-e0bb05403589 Ancestors: Collections-nice.820 Classes are expected to be unique in the system, but in some cases (e.g. Magma) it is also useful to expect a proxy for a class to test equivalent to the actual class. Therefore, in SequenceableCollection>>= use #= rather than #== for the class comparison. The discussion on the list was here: http://lists.squeakfoundation.org/pipermail/squeak-dev/2019-February/201600.html Dave From peter at ozzard.org Fri Jul 3 15:10:58 2020 From: peter at ozzard.org (Peter Crowther) Date: Fri, 3 Jul 2020 16:10:58 +0100 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> Message-ID: On Thu, 2 Jul 2020 at 09:22, karl ramberg wrote: > Faster, smoother graphics would be really good. > At the same time I like access to everything within the image. > > If you could only choose one of these, which would you choose? "Access to everything within the image" is a really large anchor to attach to a graphics subsystem these days. We have a single-threaded Smalltalk that has deep assumptions about a single memory space and a single rectangular display area of consistent properties wired in over forty years of development. Meanwhile, modern graphics subsystems are *very* heavily parallel, use custom hardware, and you try to offload everything you can to the coprocessor because you don't want it even in your memory space. If we want a teaching and learning system that can be understood and modified by a normal programmer, we keep everything in the image and accept limited facilities and slowness. If we want something that makes use of all of the varied and wonderful capabilities of modern graphics hardware then a) what's the smallest subset we'll accept (to make it easy to port Squeak to new platforms), b) what knowledge do we require of anyone who wishes to investigate the graphics subsystem? Cheers, - Peter -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.cellier.aka.nice at gmail.com Fri Jul 3 15:38:58 2020 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Fri, 3 Jul 2020 17:38:58 +0200 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: <20200703124259.GA76636@shell.msen.com> References: <20200703124259.GA76636@shell.msen.com> Message-ID: Le ven. 3 juil. 2020 à 14:43, David T. Lewis a écrit : > On Mon, Jun 29, 2020 at 02:43:26AM +0200, Levente Uzonyi wrote: > > Hi Nikolai, > > > > On Mon, 29 Jun 2020, Nikolay Suslov wrote: > > > > >Hello all, > > >Figuring out, could we go back to the previous version of > > >SequenceableCollection??#= method (as in Squeak 5.2), to check if the > > >receiver is??equivalent to the otherCollection by using "self species > == > > >otherCollection species", > > >instead of "self class = otherCollection class"? > > > > IIRC there was a good reason for that change though I can't recall > > what it was. I'm sure the mailing list remembers. > > > > The change has my initials on it, and it was introduced here: > > Name: Collections-dtl.821 > Author: dtl > Time: 16 February 2019, 6:18:27.925895 pm > UUID: 9bfa29b3-5e9f-4c61-b19b-e0bb05403589 > Ancestors: Collections-nice.820 > > Classes are expected to be unique in the system, but in some cases (e.g. > Magma) > it is also useful to expect a proxy for a class to test equivalent to the > actual class. Therefore, in SequenceableCollection>>= use #= rather than > #== > for the class comparison. > > > +1 for using = The discussion on the list was here: > > > http://lists.squeakfoundation.org/pipermail/squeak-dev/2019-February/201600.html > > Dave > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nsuslovi at gmail.com Fri Jul 3 15:43:04 2020 From: nsuslovi at gmail.com (Nikolay Suslov) Date: Fri, 3 Jul 2020 18:43:04 +0300 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: <20200703124259.GA76636@shell.msen.com> References: <20200703124259.GA76636@shell.msen.com> Message-ID: Hello David, On Fri, Jul 3, 2020 at 3:43 PM David T. Lewis wrote: > > On Mon, Jun 29, 2020 at 02:43:26AM +0200, Levente Uzonyi wrote: > > Hi Nikolai, > > > > On Mon, 29 Jun 2020, Nikolay Suslov wrote: > > > > >Hello all, > > >Figuring out, could we go back to the previous version of > > >SequenceableCollection??#= method (as in Squeak 5.2), to check if the > > >receiver is??equivalent to the otherCollection by using "self species == > > >otherCollection species", > > >instead of "self class = otherCollection class"? > > > > IIRC there was a good reason for that change though I can't recall > > what it was. I'm sure the mailing list remembers. > > > > The change has my initials on it, and it was introduced here: > > Name: Collections-dtl.821 > Author: dtl > Time: 16 February 2019, 6:18:27.925895 pm > UUID: 9bfa29b3-5e9f-4c61-b19b-e0bb05403589 > Ancestors: Collections-nice.820 > > Classes are expected to be unique in the system, but in some cases (e.g. Magma) > it is also useful to expect a proxy for a class to test equivalent to the > actual class. Therefore, in SequenceableCollection>>= use #= rather than #== > for the class comparison. > > > The discussion on the list was here: > > http://lists.squeakfoundation.org/pipermail/squeak-dev/2019-February/201600.html > > Dave > > Thanks for finding that. But, if you look at the previous version (sma 5/12/2000) of SequenceableCollection>>=, it checks the equivalents of "species" (the same 'kind' of thing in collection). So, replacing that with check equivalents of a "class" introduces a "silent application bug", especially in code, which expects "species" comparison in SequenceableCollection>>= (like RFB I mentioned). Anyway, it is ok to use and upgrade related code to #hasEqualElements: method instead. But someone still can find the difference, that in Set, Bitset, SortedCollection we could use #= for checking equivalents of "species", but in SequenceableCollection - not, starting from Squeak 5.3 Best regards, Nikolai From lecteur at zogotounga.net Fri Jul 3 15:58:58 2020 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Fri, 3 Jul 2020 17:58:58 +0200 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> Message-ID: <6891ffab-14d6-bda4-7afb-ccab8a25f081@zogotounga.net> > If you could only choose one of these, which would you choose? If new modern, faster, but opaque graphics system is implemented, then it does not have to replace the existing, fully accessible one, it can just complement it (being available via a specific Canvas subclass, and able to deliver a Form on demand). There is no need to have an opposition here. Just as we have Morphic *and* MVC, we can have BitBlt *and* a bridge to an opaque backend for people interested in that kind of performance. As for me, I am interested in both. Stef From hilaire at drgeo.eu Fri Jul 3 16:15:17 2020 From: hilaire at drgeo.eu (Hilaire) Date: Fri, 3 Jul 2020 18:15:17 +0200 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> Message-ID: Le 30/06/2020 à 08:26, Stéphane Rollandin a écrit : >> Is GPU& shader  support necessary/desirable: >> yes if real-time rendering for thighs like games/VR are important, >> but in that case there >> is a bigger problem jitter caused by GC, > In the image I just uploaded two days ago and that one can get from > http://www.zogotounga.net/comp/squeak/rogue.htm the main feature is a > 2D real-time top-down game. > > I found that the GC-caused jitter was indeed a problem, but also that > the main culprit was the time it takes to simply paint an image which > is a surprisingly (to me) slow operation. > > That, plus the alpha-blending issue that was discussed on the VM list > a little ago, where Juan proposed two new primitives. Juan proposed these primitives to speed up the rendering of VectorGraphics Widget Morph. Regarding graphics, Juan's work on Vector Graphics can be of interest for Squeak. Hilaire -- Dr. Geo http://drgeo.eu https://pouet.chapril.org/@hilaire -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Fri Jul 3 17:00:35 2020 From: tim at rowledge.org (tim Rowledge) Date: Fri, 3 Jul 2020 10:00:35 -0700 Subject: [squeak-dev] VW font setting In-Reply-To: <442158f3-5afa-98fb-d512-e7be16d1eae2@heeg.de> References: <7D5249B4-061C-44FF-925A-2C07AAE208E2@rowledge.org> <442158f3-5afa-98fb-d512-e7be16d1eae2@heeg.de> Message-ID: <5A587C39-3A51-41CD-B828-5EB7825DA550@rowledge.org> Thank you, thank you, thank you! This makes actual readable fonts. Excellent. If by any chance you have a suitable blog relating to VW matters, please consider mentioning this package on it; that way anybody else trying to google for visualworks/fonts/linux has a chance of finding and enjoying this most useful package. > On 2020-07-03, at 4:24 AM, Hans-Martin Mosner wrote: > > Am 26.06.20 um 02:10 schrieb tim Rowledge: >> If there's anyone in the list that has recently used VW and knows how to get fonts set up to be actually readable in a VW8.3 system running on Ubuntu lite with the xfce4 window manager.... I'd appreciate any pointers to helpful info. >> >> So far googling and digging into the colossal pile of code that appears to be font related has secured no effects whatsoever in getting anything better than almost utterly unreadable fonts for menus, buttons etc. My eyes hurt! > > This is indeed a pretty unsightly part of VW. Linux just isn't the child of love there :-) > > Holger Kleinsorgen implemented an interface to the Xft libraries which give you proper anti-aliased fonts in VW and > which is included (or should I say hidden) in the Contributed parcel list. > > From the parcel manager, go to Directories->Contributed->Xft and load the Xft-DesktopIntegration parcel. Save&quit and > restart the image. > > Cheers, > Hans-Martin > > > > tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Never write software that anthropomorphizes the machine. They hate that. From eliot.miranda at gmail.com Fri Jul 3 18:17:52 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri, 3 Jul 2020 11:17:52 -0700 Subject: [squeak-dev] AllocationTest>>#testOutOfMemorySignal fails on 32bit system In-Reply-To: <20200703013211.GA46239@shell.msen.com> References: <20200703013211.GA46239@shell.msen.com> Message-ID: > On Jul 2, 2020, at 6:32 PM, David T. Lewis wrote: > > On Thu, Jul 02, 2020 at 04:35:03PM -0700, tim Rowledge wrote: >> On a Raspberry Pi OS 32bit this test fails because of an oversight - the parameter passed to vmParameterAt:put: cannot exceed SmallInteger maxVal. It makes the careful testing for 32/64bit image seem a bit silly. >> >> This means we can only ask for up to ~1GB space for free space on a 32bit image system and so I propose to clamp the requested value in AllocationTest>>#setFreeSpaceLimitOf:around: There don't appear to be any other places right now that need attention. >> >> If I don't hear any outraged screams soon I'll just commit it to trunk. >> > > So rather than > > 1024 * 1024 * 1024 > > it should instead be > > 16r3FFFFFFF > > so that is it less than or equal to SmallInteger maxVal for either 32 or > 64 bit images. Is that the change? > > No outraged screams from me. Nor from me, but one weak bleat for it to read (1024 * 1024 * 1024 min: SmallInteger maxVal) And perhaps I should fix vmParameterAt:[put:] for very few cases including this one. > > Dave > > From karlramberg at gmail.com Fri Jul 3 19:12:06 2020 From: karlramberg at gmail.com (karl ramberg) Date: Fri, 3 Jul 2020 21:12:06 +0200 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> Message-ID: Hi, I have tried to use the OpenGL from Squeak and found it very opaque and hard to use. Both because the Squeak side is not very well documented and because OpenGL is hard itself. I have also looked briefly at Dolphin Smalltalk which have quite fast graphics on Windows but the way you get it to work is quite elaborate and convoluted. I agree with what Stephane Rollandin wrote; keep BitBlt for simplicity and work on better way to access whatever we choose to use as a fast backend. Best, Karl On Fri, Jul 3, 2020 at 5:11 PM Peter Crowther wrote: > On Thu, 2 Jul 2020 at 09:22, karl ramberg wrote: > >> Faster, smoother graphics would be really good. >> At the same time I like access to everything within the image. >> >> If you could only choose one of these, which would you choose? "Access to > everything within the image" is a really large anchor to attach to a > graphics subsystem these days. We have a single-threaded Smalltalk that > has deep assumptions about a single memory space and a single rectangular > display area of consistent properties wired in over forty years of > development. Meanwhile, modern graphics subsystems are *very* heavily > parallel, use custom hardware, and you try to offload everything you can to > the coprocessor because you don't want it even in your memory space. > > If we want a teaching and learning system that can be understood and > modified by a normal programmer, we keep everything in the image and accept > limited facilities and slowness. If we want something that makes use of > all of the varied and wonderful capabilities of modern graphics hardware > then a) what's the smallest subset we'll accept (to make it easy to port > Squeak to new platforms), b) what knowledge do we require of anyone who > wishes to investigate the graphics subsystem? > > Cheers, > > - Peter > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From lewis at mail.msen.com Fri Jul 3 19:55:21 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 3 Jul 2020 15:55:21 -0400 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: <20200703124259.GA76636@shell.msen.com> Message-ID: <20200703195521.GA48491@shell.msen.com> Hello Nikolay, On Fri, Jul 03, 2020 at 06:43:04PM +0300, Nikolay Suslov wrote: > Hello David, > > On Fri, Jul 3, 2020 at 3:43 PM David T. Lewis wrote: > > > > On Mon, Jun 29, 2020 at 02:43:26AM +0200, Levente Uzonyi wrote: > > > Hi Nikolai, > > > > > > On Mon, 29 Jun 2020, Nikolay Suslov wrote: > > > > > > >Hello all, > > > >Figuring out, could we go back to the previous version of > > > >SequenceableCollection??#= method (as in Squeak 5.2), to check if the > > > >receiver is??equivalent to the otherCollection by using "self species == > > > >otherCollection species", > > > >instead of "self class = otherCollection class"? > > > > > > IIRC there was a good reason for that change though I can't recall > > > what it was. I'm sure the mailing list remembers. > > > > > > > The change has my initials on it, and it was introduced here: > > > > Name: Collections-dtl.821 > > Author: dtl > > Time: 16 February 2019, 6:18:27.925895 pm > > UUID: 9bfa29b3-5e9f-4c61-b19b-e0bb05403589 > > Ancestors: Collections-nice.820 > > > > Classes are expected to be unique in the system, but in some cases (e.g. Magma) > > it is also useful to expect a proxy for a class to test equivalent to the > > actual class. Therefore, in SequenceableCollection>>= use #= rather than #== > > for the class comparison. > > > > > > The discussion on the list was here: > > > > http://lists.squeakfoundation.org/pipermail/squeak-dev/2019-February/201600.html > > > > Dave > > > > > > Thanks for finding that. > But, if you look at the previous version (sma 5/12/2000) of > SequenceableCollection>>=, it checks the equivalents of "species" (the > same 'kind' of thing in collection). So, replacing that with check > equivalents of a "class" introduces a "silent application bug", > especially in code, which expects "species" comparison in > SequenceableCollection>>= (like RFB I mentioned). > Anyway, it is ok to use and upgrade related code to #hasEqualElements: > method instead. > But someone still can find the difference, that in Set, Bitset, > SortedCollection we could use #= for checking equivalents of > "species", but in SequenceableCollection - not, starting from Squeak > 5.3 > > Best regards, > Nikolai Yes, I can see that your are right. The current version of the SequenceableCollection>>#= does this: self class = otherCollection class and the previous version (sma 5/12/2000) did this: self species == otherCollection species I have to say that I am not really qualified to say what is the best implementation, so I hope that you or others (Nicolas, Levente, Chris?) can suggest if there is a better way. For example, is it better to do this (I really do not know): self species = otherCollection species Thanks, Dave From lewis at mail.msen.com Fri Jul 3 20:06:09 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 3 Jul 2020 16:06:09 -0400 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <6891ffab-14d6-bda4-7afb-ccab8a25f081@zogotounga.net> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <6891ffab-14d6-bda4-7afb-ccab8a25f081@zogotounga.net> Message-ID: <20200703200609.GA52195@shell.msen.com> On Fri, Jul 03, 2020 at 05:58:58PM +0200, St??phane Rollandin wrote: > >If you could only choose one of these, which would you choose? > > If new modern, faster, but opaque graphics system is implemented, then > it does not have to replace the existing, fully accessible one, it can > just complement it (being available via a specific Canvas subclass, and > able to deliver a Form on demand). There is no need to have an > opposition here. Just as we have Morphic *and* MVC, we can have BitBlt > *and* a bridge to an opaque backend for people interested in that kind > of performance. > > As for me, I am interested in both. > +1 Dave From lewis at mail.msen.com Fri Jul 3 20:21:18 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 3 Jul 2020 16:21:18 -0400 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> Message-ID: <20200703202118.GB52195@shell.msen.com> On Fri, Jul 03, 2020 at 06:15:17PM +0200, Hilaire wrote: > > Le 30/06/2020 ?? 08:26, St??phane Rollandin a ??crit??: > >>Is GPU& shader ??support necessary/desirable: > >>yes if real-time rendering for thighs??like games/VR are important, > >>but in that case there > >>is a bigger problem jitter caused by GC, > >In the image I just uploaded two days ago and that one can get from > >http://www.zogotounga.net/comp/squeak/rogue.htm the main feature is a > >2D real-time top-down game. > > > >I found that the GC-caused jitter was indeed a problem, but also that > >the main culprit was the time it takes to simply paint an image which > >is a surprisingly (to me) slow operation. > > > >That, plus the alpha-blending issue that was discussed on the VM list > >a little ago, where Juan proposed two new primitives. > > Juan proposed these primitives to speed up the rendering of > VectorGraphics Widget Morph. I remember a discussion about that, though I don't have a link to it. It sounds like we need to follow up on this and make something happen. > > Regarding graphics, Juan's work on Vector Graphics can be of interest > for Squeak. > Definitely yes. Juan is working towards *both* high quality rendering *and* high performance. I think that there may be a perception that Morphic 3 and VectorGraphics might sacrifice performance for rendering quality, but I am not sure that is the case at all. This recent post by Juan would be of interest to any of us attempting to achieve graphics performance on modern hardware: https://lists.cuis.st/mailman/archives/cuis-dev/2020-June/001958.html I also have to add that the recent work that you (Hilaire) have been doing with DrGeo on Cuis really illustrates the potential. Your circular menu will be of interest to anyone who has been involved with Morphic, Etoys, and Scratch interfaces: https://mamot.fr/@drgeo/104310151994863180 Dave From hilaire at drgeo.eu Fri Jul 3 20:32:17 2020 From: hilaire at drgeo.eu (Hilaire) Date: Fri, 3 Jul 2020 22:32:17 +0200 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <20200703202118.GB52195@shell.msen.com> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> <20200703202118.GB52195@shell.msen.com> Message-ID: Le 03/07/2020 à 22:21, David T. Lewis a écrit : >> Juan proposed these primitives to speed up the rendering of >> VectorGraphics Widget Morph. > I remember a discussion about that, though I don't have a link to it. It > sounds like we need to follow up on this and make something happen. Here it is: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505 -- Dr. Geo http://drgeo.eu https://pouet.chapril.org/@hilaire -------------- next part -------------- An HTML attachment was scrubbed... URL: From asqueaker at gmail.com Fri Jul 3 21:04:29 2020 From: asqueaker at gmail.com (Chris Muller) Date: Fri, 3 Jul 2020 16:04:29 -0500 Subject: [squeak-dev] Squeak on Ubuntu 18.04 desktop In-Reply-To: <3ca47a10-9c1b-1009-dadd-3dc2396e9ab5@gmail.com> References: <3ca47a10-9c1b-1009-dadd-3dc2396e9ab5@gmail.com> Message-ID: But the problem is not actually Gnome's window manager -- it works beautifully with *every other app* *except* Squeak. At first I thought it was a chink in Fabio's fantastic *squeak.sh* script, but the same problem occurs even when I launch *bin/squeak* directly. I sense it's something to do with *how* it's being executed by Linux and/or Gnome... The way it's supposed to work is: when the full command-line (I think) is exactly the same, it knows to re-top the window for the existing instance invoked by that command, UNLESS the [Shift] key is pressed, in which case, it spawns a new process instance of the command again (and producing another window running instance). It works with everything except Squeak... - Chris On Fri, Jul 3, 2020 at 4:06 AM K K Subbu wrote: > On 03/07/20 9:12 am, Chris Muller wrote: > > Has anyone figured out how to get Squeak's behavior to behave in 18.04 > > like it did in 16.04 and before? > > They use two different GUI shells. 16.04 uses Unity and 18.04 uses Gnome > desktop manager v3 (GDM3). You may install Unity to restore old behavior. > > # apt-get install ubuntu-unity-desktop > > and choose lightdm as the desktop manager when prompted. > > If you wish to continue with GDM, the keyboard shortcuts are different. > Use Win (aka Super) key with tilde to switch between windows of the same > app. More keyboard shortcuts are at: > > > > https://help.gnome.org/users/gnome-help/stable/shell-keyboard-shortcuts.html.en > > Also, you may find the 20.04 GDM to be much better than that in 18.04. > > HTH .. Subbu > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From vanessa at codefrau.net Fri Jul 3 21:19:10 2020 From: vanessa at codefrau.net (Vanessa Freudenberg) Date: Fri, 3 Jul 2020 14:19:10 -0700 Subject: [squeak-dev] Squeak on Ubuntu 18.04 desktop In-Reply-To: References: <3ca47a10-9c1b-1009-dadd-3dc2396e9ab5@gmail.com> Message-ID: My guess is that Squeak is missing some property on its window that the X window manager uses to identify apps. The VM adds several properties to the window, but the standards keep evolving. See the latest wm-spec https://specifications.freedesktop.org It's also possible that the desktop entry needs additional properties. That entry is not provided by the vm itself (I think) but added by the debian/ubuntu maintainers. You may have to edit yours. That said, I myself have used linux only on servers recently (*), so I am somewhat out of the loop. Vanessa (*) as in, the last decade On Fri, Jul 3, 2020 at 2:05 PM Chris Muller wrote: > But the problem is not actually Gnome's window manager -- it works > beautifully with *every other app* *except* Squeak. > > At first I thought it was a chink in Fabio's fantastic *squeak.sh* script, > but the same problem occurs even when I launch *bin/squeak* directly. > > I sense it's something to do with *how* it's being executed by Linux > and/or Gnome... The way it's supposed to work is: when the full > command-line (I think) is exactly the same, it knows to re-top the window > for the existing instance invoked by that command, UNLESS the [Shift] key > is pressed, in which case, it spawns a new process instance of the command > again (and producing another window running instance). > > It works with everything except Squeak... > > - Chris > > > On Fri, Jul 3, 2020 at 4:06 AM K K Subbu wrote: > >> On 03/07/20 9:12 am, Chris Muller wrote: >> > Has anyone figured out how to get Squeak's behavior to behave in 18.04 >> > like it did in 16.04 and before? >> >> They use two different GUI shells. 16.04 uses Unity and 18.04 uses Gnome >> desktop manager v3 (GDM3). You may install Unity to restore old behavior. >> >> # apt-get install ubuntu-unity-desktop >> >> and choose lightdm as the desktop manager when prompted. >> >> If you wish to continue with GDM, the keyboard shortcuts are different. >> Use Win (aka Super) key with tilde to switch between windows of the same >> app. More keyboard shortcuts are at: >> >> >> >> https://help.gnome.org/users/gnome-help/stable/shell-keyboard-shortcuts.html.en >> >> Also, you may find the 20.04 GDM to be much better than that in 18.04. >> >> HTH .. Subbu >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From asqueaker at gmail.com Fri Jul 3 21:36:18 2020 From: asqueaker at gmail.com (Chris Muller) Date: Fri, 3 Jul 2020 16:36:18 -0500 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: <20200703195521.GA48491@shell.msen.com> References: <20200703124259.GA76636@shell.msen.com> <20200703195521.GA48491@shell.msen.com> Message-ID: > > For example, is it better to do this (I really do not know): > > self species = otherCollection species Nicolas' arguments for Collections-nice.820 are sound, the challenge is that some apps, that don't care about equivalence between Intervals and Array's, were affected in a negative way, and left no good way to fix their code. There's a tendency to want to dismiss them with "use hasEqualElements:" without understanding why hasEqualElements: can't fix the core issue -- the inability to define implementation-specific subclasses with symmetric equivalence (e.g., like ByteString and WideString did for String). IMO, this is the question we should address. I posed that we should factor out this common type-checking behavior, repeated throughout the class library, into its own method on Object. I think it could work.. - Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Fri Jul 3 22:08:28 2020 From: tim at rowledge.org (tim Rowledge) Date: Fri, 3 Jul 2020 15:08:28 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> <20200703202118.GB52195@shell.msen.com> Message-ID: <3E4824E0-D3B1-4A7D-B301-A73228785FC6@rowledge.org> > On 2020-07-03, at 1:32 PM, Hilaire wrote: > > Le 03/07/2020 à 22:21, David T. Lewis a écrit : >>> Juan proposed these primitives to speed up the rendering of >>> VectorGraphics Widget Morph. > https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505 I'm all for such improvements but I have no idea about updating the rather specialised ARM bitblt code that Ben Avison did for RPF a few years ago. That stuff is responsible for no small part of the really good UI performance we get on Pi. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim When all else fails, let a = 7. If that doesn't help, then read the manual. From lewis at mail.msen.com Fri Jul 3 22:26:07 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 3 Jul 2020 18:26:07 -0400 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <3E4824E0-D3B1-4A7D-B301-A73228785FC6@rowledge.org> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> <20200703202118.GB52195@shell.msen.com> <3E4824E0-D3B1-4A7D-B301-A73228785FC6@rowledge.org> Message-ID: <20200703222607.GA76689@shell.msen.com> On Fri, Jul 03, 2020 at 03:08:28PM -0700, tim Rowledge wrote: > > > > On 2020-07-03, at 1:32 PM, Hilaire wrote: > > > > Le 03/07/2020 ?? 22:21, David T. Lewis a ??crit : > >>> Juan proposed these primitives to speed up the rendering of > >>> VectorGraphics Widget Morph. > > > https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505 > > I'm all for such improvements but I have no idea about updating the rather specialised ARM bitblt code that Ben Avison did for RPF a few years ago. That stuff is responsible for no small part of the really good UI performance we get on Pi. > Marcel added this comment to the issue on github: > Would be nice to also have the Smalltalk fall-back code for those new rules. :-) which seems important if some of the VMs may not yet implement the new rules. Dave From lewis at mail.msen.com Fri Jul 3 22:57:56 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Fri, 3 Jul 2020 18:57:56 -0400 Subject: [squeak-dev] AllocationTest>>#testOutOfMemorySignal fails on 32bit system In-Reply-To: References: <20200703013211.GA46239@shell.msen.com> Message-ID: <20200703225756.GB76689@shell.msen.com> On Fri, Jul 03, 2020 at 11:17:52AM -0700, Eliot Miranda wrote: > > > > On Jul 2, 2020, at 6:32 PM, David T. Lewis wrote: > > > > ???On Thu, Jul 02, 2020 at 04:35:03PM -0700, tim Rowledge wrote: > >> On a Raspberry Pi OS 32bit this test fails because of an oversight - the parameter passed to vmParameterAt:put: cannot exceed SmallInteger maxVal. It makes the careful testing for 32/64bit image seem a bit silly. > >> > >> This means we can only ask for up to ~1GB space for free space on a 32bit image system and so I propose to clamp the requested value in AllocationTest>>#setFreeSpaceLimitOf:around: There don't appear to be any other places right now that need attention. > >> > >> If I don't hear any outraged screams soon I'll just commit it to trunk. > >> > > > > So rather than > > > > 1024 * 1024 * 1024 > > > > it should instead be > > > > 16r3FFFFFFF > > > > so that is it less than or equal to SmallInteger maxVal for either 32 or > > 64 bit images. Is that the change? > > > > No outraged screams from me. > > Nor from me, but one weak bleat for it to read > > (1024 * 1024 * 1024 min: SmallInteger maxVal) +1 Weakly bleating in the affermative (the intent is much clearer when written this way). Dave From trygver at ifi.uio.no Sat Jul 4 06:41:17 2020 From: trygver at ifi.uio.no (Trygve Reenskaug) Date: Sat, 4 Jul 2020 08:41:17 +0200 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: <014f4e3a-544c-d1e5-5041-5d1bba151c49@ifi.uio.no> There are two fundamental axioms in Smalltalk: 1. Everything is an object. 2. An object is an instance of a class. The class message is fundamental,  If you override it, it is no longer Smalltalk. Trygve On 2020-07-01 21:29, Levente Uzonyi wrote: > Hi Chris, > > On Tue, 30 Jun 2020, Chris Muller wrote: > >> What do we need to do to make #class non-inlined and therefore >> overridable?  My impression is that this is on the table for 6.0, is >> it still? > > We have had this discussion a few times before. Last time[1] I asked > you to evaluate the following in your image and report back if it does > what you need: > >   (ParseNode classPool at: #StdSelectors) removeKey: #class. >   Compiler recompileAll. > > > Levente > > [1] > http://forum.world.st/The-Inbox-Kernel-cmm-1198-mcz-td5089411.html#a5089510 > >> >>  - Chris >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From masashi.umezawa at gmail.com Sat Jul 4 16:50:12 2020 From: masashi.umezawa at gmail.com (Masashi UMEZAWA) Date: Sun, 5 Jul 2020 01:50:12 +0900 Subject: [squeak-dev] Buglet ins SIXX for Squeak 5.3 In-Reply-To: References: Message-ID: Hello Tim-san, Thank you for the feedback. I've just updated ConfigurationOfSIXX on SqueakSource.com. Now SIXX can be easily installable to Squeak 5.3. I will also update SqueakMap entry soon. Best regards, 2020年7月3日(金) 10:32 tim Rowledge : > > I just spotted a small bug in the code loaded up for SIXX. After loading it into a clean 5.3 image XMLDOMParser class>>#initialize & XMLDOMParser class>>#unload are reverted to old and out of date versions. > > Installer code used - > Installer squeaksource > project: 'MetacelloRepository'; > install: 'ConfigurationOfSIXX'. > (Smalltalk at: #ConfigurationOfSIXX) load. > > Looks like the ConfigurationOfSIXX>>#version051: method is causing the load of > ` > spec for: #squeak do:[ > spec > package: 'XML-Parser' with: [ > spec file: 'XML-Parser-ul.44'; > repository: 'http://source.squeak.org/squeak52' > ` > and that in turn re-loads old versions of XMLDOMParser class>>#initialize & XMLDOMParser class>>#unload - and they try to use the deprecated #registerFileReader: in FileList instead of FileServices. > > I *think* it looks like ConfigurationOfSIXX>>#baseline06: requires the above section removing - but I am most definitely not any sort of expert in the ConfigurationOfXXXXXX stuff. > > It appears that Masashi-san is still caring for this package since there was a commit in january of this year, so if you could please Do The Magic(™). > > And since SmalltalkHub is now deprecated it could be a good idea to move the repository perhaps to squeaksource.com > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Fractured Idiom:- MAZEL TON - Lots of luck > > > -- [:masashi | ^umezawa] From commits at source.squeak.org Sat Jul 4 18:51:48 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 4 Jul 2020 18:51:48 0000 Subject: [squeak-dev] The Trunk: ShoutCore-eem.84.mcz Message-ID: Eliot Miranda uploaded a new version of ShoutCore to project The Trunk: http://source.squeak.org/trunk/ShoutCore-eem.84.mcz ==================== Summary ==================== Name: ShoutCore-eem.84 Author: eem Time: 4 July 2020, 11:51:47.113679 am UUID: 56a7592a-90ef-4c61-8b03-51094781d61f Ancestors: ShoutCore-mt.83 Shout robustness. If anything goes wron with source file access (recursive errors in the debugger, etc) then method getSource may not answer sufficient text and a bounds violation can occur in Shout. This prevents that. =============== Diff against ShoutCore-mt.83 =============== Item was changed: ----- Method: SHParserST80>>initializeVariablesFromContext (in category 'parse support') ----- initializeVariablesFromContext + | contextSourcePcIndex contextSource contextSourceParser | - | contextSourcePcIndex contextSourceParser | contextSourcePcIndex := (context debuggerMap rangeForPC: (context isDead ifTrue: [context endPC] ifFalse: [context pc]) in: context method contextIsActiveContext: true "... to really use the context's pc.") start. + contextSource := context method getSource. contextSourceParser := self class new classOrMetaClass: context method methodClass; environment: self environment; + source: (contextSource first: (contextSourcePcIndex min: contextSource size)); - source: (context method getSource first: contextSourcePcIndex); yourself. contextSourceParser parse. arguments := contextSourceParser activeArguments. + temporaries := contextSourceParser activeTemporaries! - temporaries := contextSourceParser activeTemporaries.! From asqueaker at gmail.com Sat Jul 4 23:49:13 2020 From: asqueaker at gmail.com (Chris Muller) Date: Sat, 4 Jul 2020 18:49:13 -0500 Subject: [squeak-dev] Squeak on Ubuntu 18.04 desktop In-Reply-To: <33786aa2-7c7b-0a55-4ae4-7320778e9562@gmail.com> References: <3ca47a10-9c1b-1009-dadd-3dc2396e9ab5@gmail.com> <33786aa2-7c7b-0a55-4ae4-7320778e9562@gmail.com> Message-ID: OMG, thank you so much Subbu, that did it! :-D The xprop command did already return that exact output, but it wasn't until adding that line you said to my .desktop file that it worked. 99%, anyway. I'd hoped I'd be able to have a .desktop file for a specific image (so it can have its own icon, instead of the Squeak icon). # standard Squeak icon for launching any image Name=Squeak Exec=/usr/local/bin/spur %f Icon=/home/cmm/my/icons/Squeak-logo-white-background-68x51.png StartupWMClass=squeak ... the other, for MyApp, # for launching MyApp's image. Name=MyApp Exec=/path/for/apps/vm/squeak.sh /path/for/apps/image/app.image Icon=/home/cmm/my/icons/My-App-logo.png StartupWMClass=squeak ... I put both of the above into separate .desktop files at ~/.local/share/applications. After an afternoon of tinkering, what I found was a little strange -- for the icon, Ubuntu 18.04 seems to use whichever desktop file was launched first. However, even though it gets the icon wrong, it at least uses the right Exec= vm specification. I tried changing the StartupWMClass on one of them, but it didn't work. But, I can at least work again.. :) Thanks, Chris On Sat, Jul 4, 2020 at 2:37 AM K K Subbu wrote: > On 04/07/20 2:34 am, Chris Muller wrote: > > But the problem is not actually Gnome's window manager -- it works > > beautifully with _every other app_ *except* Squeak. > > Perhaps those apps come with properly configured .desktop file. Squeak > does not ship with one. > > Could you please report Squeak app window has the right class? > > $ xprop WM_CLASS > WM_CLASS(STRING) = "squeak", "Squeak" > > If this does not appear, then you will have to add one to your .desktop > launcher file: > > StartupWMClass=squeak > > HTH .. Subbu > -------------- next part -------------- An HTML attachment was scrubbed... URL: From kksubbu.ml at gmail.com Sun Jul 5 05:58:55 2020 From: kksubbu.ml at gmail.com (K K Subbu) Date: Sun, 5 Jul 2020 11:28:55 +0530 Subject: [squeak-dev] Squeak on Ubuntu 18.04 desktop In-Reply-To: References: <3ca47a10-9c1b-1009-dadd-3dc2396e9ab5@gmail.com> <33786aa2-7c7b-0a55-4ae4-7320778e9562@gmail.com> Message-ID: On 05/07/20 5:19 am, Chris Muller wrote: > I put both of the above into separate .desktop files at > ~/.local/share/applications.  After an afternoon of tinkering, what I > found was a little strange -- for the icon, Ubuntu 18.04 seems to use > whichever desktop file was launched first.  However, even though it gets > the icon wrong, it at least uses the right Exec= vm specification.   I > tried changing the StartupWMClass on one of them, but it didn't work. > But, I can at least work again..  :) Chris, XDG uses lazy binding for resource paths using many env variables, so it is best to use xdg-utils to get/set them and avoid hard-coded paths. An easily overlooked aspect is that env variables for GUI launched programs come via .xsessionrc and not .bashrc or its relatives. So if your app works from command line but not from GUI launch, you know where to look ;-). Getting everything right in 18.04 is a chore! If you are developing your own launcher for your app, it is easier to use the gnome-desktop-icon-edit utility to create the .desktop launcher file. For icons, it is better to create a theme with icons of different resolutions (start with one) and install them using xdg-icon-resource command (part of xdg-utils package). HTH .. Subbu From tim at rowledge.org Mon Jul 6 01:12:34 2020 From: tim at rowledge.org (tim Rowledge) Date: Sun, 5 Jul 2020 18:12:34 -0700 Subject: [squeak-dev] Buglet ins SIXX for Squeak 5.3 In-Reply-To: References: Message-ID: Thank you; I can confirm that it loads correctly on my Pi system. > On 2020-07-04, at 9:50 AM, Masashi UMEZAWA wrote: > > Hello Tim-san, > > Thank you for the feedback. > I've just updated ConfigurationOfSIXX on SqueakSource.com. Now SIXX > can be easily installable to Squeak 5.3. > I will also update SqueakMap entry soon. > > Best regards, > > 2020年7月3日(金) 10:32 tim Rowledge : >> >> I just spotted a small bug in the code loaded up for SIXX. After loading it into a clean 5.3 image XMLDOMParser class>>#initialize & XMLDOMParser class>>#unload are reverted to old and out of date versions. >> >> Installer code used - >> Installer squeaksource >> project: 'MetacelloRepository'; >> install: 'ConfigurationOfSIXX'. >> (Smalltalk at: #ConfigurationOfSIXX) load. >> >> Looks like the ConfigurationOfSIXX>>#version051: method is causing the load of >> ` >> spec for: #squeak do:[ >> spec >> package: 'XML-Parser' with: [ >> spec file: 'XML-Parser-ul.44'; >> repository: 'http://source.squeak.org/squeak52' >> ` >> and that in turn re-loads old versions of XMLDOMParser class>>#initialize & XMLDOMParser class>>#unload - and they try to use the deprecated #registerFileReader: in FileList instead of FileServices. >> >> I *think* it looks like ConfigurationOfSIXX>>#baseline06: requires the above section removing - but I am most definitely not any sort of expert in the ConfigurationOfXXXXXX stuff. >> >> It appears that Masashi-san is still caring for this package since there was a commit in january of this year, so if you could please Do The Magic(™). >> >> And since SmalltalkHub is now deprecated it could be a good idea to move the repository perhaps to squeaksource.com >> >> tim >> -- >> tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim >> Fractured Idiom:- MAZEL TON - Lots of luck >> >> >> > > > -- > [:masashi | ^umezawa] > > tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Strange OpCodes: MII: Mask all Interrupts and then Interrupt From Das.Linux at gmx.de Mon Jul 6 10:02:03 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon, 6 Jul 2020 12:02:03 +0200 Subject: [squeak-dev] SqueakSSL Error when updating my image In-Reply-To: <7e48aa65dc24437c9afddf947ba8396a@student.hpi.uni-potsdam.de> References: <7e48aa65dc24437c9afddf947ba8396a@student.hpi.uni-potsdam.de> Message-ID: > On 12.06.2020, at 15:35, Thiede, Christoph wrote: > > Hi all, > > maybe someone is interested in this error I received when updating my image this week in the debug console: > > LoadLibrary(SqueakSSL) (998: Unzuläÿssiger Zugriff auf einen Speicherbereich. > > ) > LoadLibrary(SqueakSSL.dll) (998: Unzuläÿssiger Zugriff auf einen Speicherbereich. > > ) > > Translated to English: SqueakSSL complains about an access violation twice. And by the way, at some point, there happens an interesting encoding error. > > Everything else seems to work, I just wanted to mention this warning. Is this an error in the plugin? Rather in the way libs are loaded. I don't know, This does not seem to be SqueakSSL specific, as it happens before the dll has been completely loaded (LoadLibrary): This is from the respective file: ************************************** lstrcpy(libName,prefix); lstrcat(libName,baseName); lstrcat(libName,postfix); h = LoadLibrary(libName); if (h == NULL #ifdef NDEBUG /* in production ignore errors for non-existent modules */ && GetLastError() != ERROR_MOD_NOT_FOUND #endif ) vprintLastError(TEXT("LoadLibrary(%s)"), libName); return h; ************************************** But maybe it is the dll itself that does strange things during DllMain or so. I don't see why tho… Best regards -Tobias From tim at rowledge.org Mon Jul 6 16:57:46 2020 From: tim at rowledge.org (tim Rowledge) Date: Mon, 6 Jul 2020 09:57:46 -0700 Subject: [squeak-dev] SqueakSSL Error when updating my image In-Reply-To: References: <7e48aa65dc24437c9afddf947ba8396a@student.hpi.uni-potsdam.de> Message-ID: <16C0CAB2-E2C0-4A91-91A3-56D946D72D48@rowledge.org> Any chance this relates to the failures (as in, complete failure, test broken) of the ssl socket stuff? Be nice to solve that one sometime. > On 2020-07-06, at 3:02 AM, Tobias Pape wrote: > > >> On 12.06.2020, at 15:35, Thiede, Christoph wrote: >> >> Hi all, >> >> maybe someone is interested in this error I received when updating my image this week in the debug console: >> >> LoadLibrary(SqueakSSL) (998: Unzuläÿssiger Zugriff auf einen Speicherbereich. >> >> ) >> LoadLibrary(SqueakSSL.dll) (998: Unzuläÿssiger Zugriff auf einen Speicherbereich. >> >> ) >> >> Translated to English: SqueakSSL complains about an access violation twice. And by the way, at some point, there happens an interesting encoding error. >> >> Everything else seems to work, I just wanted to mention this warning. Is this an error in the plugin? > > Rather in the way libs are loaded. > I don't know, This does not seem to be SqueakSSL specific, as it happens before the dll has been completely loaded (LoadLibrary): > > This is from the respective file: > > ************************************** > lstrcpy(libName,prefix); > lstrcat(libName,baseName); > lstrcat(libName,postfix); > h = LoadLibrary(libName); > if (h == NULL > #ifdef NDEBUG /* in production ignore errors for non-existent modules */ > && GetLastError() != ERROR_MOD_NOT_FOUND > #endif > ) > vprintLastError(TEXT("LoadLibrary(%s)"), libName); > return h; > ************************************** > > > But maybe it is the dll itself that does strange things during DllMain or so. I don't see why tho… > > Best regards > -Tobias > > tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Useful random insult:- "Body by Fisher -- brains by Mattel." From Das.Linux at gmx.de Mon Jul 6 17:05:07 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon, 6 Jul 2020 19:05:07 +0200 Subject: [squeak-dev] SqueakSSL Error when updating my image In-Reply-To: <16C0CAB2-E2C0-4A91-91A3-56D946D72D48@rowledge.org> References: <7e48aa65dc24437c9afddf947ba8396a@student.hpi.uni-potsdam.de> <16C0CAB2-E2C0-4A91-91A3-56D946D72D48@rowledge.org> Message-ID: <66180E62-5DDD-408C-8458-A76895C78AF2@gmx.de> > On 06.07.2020, at 18:57, tim Rowledge wrote: > > Any chance this relates to the failures (as in, complete failure, test broken) of the ssl socket stuff? Be nice to solve that one sometime. > i don't think so… >> On 2020-07-06, at 3:02 AM, Tobias Pape wrote: >> >> >>> On 12.06.2020, at 15:35, Thiede, Christoph wrote: >>> >>> Hi all, >>> >>> maybe someone is interested in this error I received when updating my image this week in the debug console: >>> >>> LoadLibrary(SqueakSSL) (998: Unzuläÿssiger Zugriff auf einen Speicherbereich. >>> >>> ) >>> LoadLibrary(SqueakSSL.dll) (998: Unzuläÿssiger Zugriff auf einen Speicherbereich. >>> >>> ) >>> >>> Translated to English: SqueakSSL complains about an access violation twice. And by the way, at some point, there happens an interesting encoding error. >>> >>> Everything else seems to work, I just wanted to mention this warning. Is this an error in the plugin? >> >> Rather in the way libs are loaded. >> I don't know, This does not seem to be SqueakSSL specific, as it happens before the dll has been completely loaded (LoadLibrary): >> >> This is from the respective file: >> >> ************************************** >> lstrcpy(libName,prefix); >> lstrcat(libName,baseName); >> lstrcat(libName,postfix); >> h = LoadLibrary(libName); >> if (h == NULL >> #ifdef NDEBUG /* in production ignore errors for non-existent modules */ >> && GetLastError() != ERROR_MOD_NOT_FOUND >> #endif >> ) >> vprintLastError(TEXT("LoadLibrary(%s)"), libName); >> return h; >> ************************************** >> >> >> But maybe it is the dll itself that does strange things during DllMain or so. I don't see why tho… >> >> Best regards >> -Tobias >> >> > > > tim From eliot.miranda at gmail.com Mon Jul 6 19:31:08 2020 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon, 6 Jul 2020 12:31:08 -0700 Subject: [squeak-dev] AllocationTest>>#testOutOfMemorySignal fails on 32bit system In-Reply-To: <487AA985-9050-4849-90D5-2B0E81BD9EB9@rowledge.org> References: <487AA985-9050-4849-90D5-2B0E81BD9EB9@rowledge.org> Message-ID: Hi Tim, On Thu, Jul 2, 2020 at 4:35 PM tim Rowledge wrote: > On a Raspberry Pi OS 32bit this test fails because of an oversight - the > parameter passed to vmParameterAt:put: cannot exceed SmallInteger maxVal. > It makes the careful testing for 32/64bit image seem a bit silly. > On looking at the VM codee it's clear that this is really a VM bug, and the vmParameter primitives really should accept/return full width integers for this parameter. I've fixed it and pushed. So feel free to revert the image fix at some stage. This means we can only ask for up to ~1GB space for free space on a 32bit > image system and so I propose to clamp the requested value in > AllocationTest>>#setFreeSpaceLimitOf:around: There don't appear to be any > other places right now that need attention. > > If I don't hear any outraged screams soon I'll just commit it to trunk. > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: IG: Insert Garbage > I have a whole architecture for this ;-) _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: From marianopeck at gmail.com Wed Jul 8 14:36:40 2020 From: marianopeck at gmail.com (Mariano Martinez Peck) Date: Wed, 8 Jul 2020 11:36:40 -0300 Subject: [squeak-dev] Webminar about VA Smalltalk new OS Process Framework In-Reply-To: References: Message-ID: Greetings all, This is a friendly reminder of the presentation we will host tomorrow for VAST's newest OSProcess framework. Best regards, On Tue, Jun 30, 2020 at 10:25 AM Mariano Martinez Peck < marianopeck at gmail.com> wrote: > Greetings all, > > Some time ago, I had the pleasure and privilege of being sponsored by the > Pharo Consortium to implement OSSubprocess. Because of that work, I quickly > realized that a new OS process framework created by Instantiations was > quite advanced and unlike anything I had seen before. If you are able, I > would highly recommend that you attend the technology preview of this > framework coming to VAST 2021: > > Seth Berman will be presenting, registration here: > https://attendee.gotowebinar.com/register/7491754880594201356 > > We hope the community can attend and we look forward to your feedback and > questions during the event's Q&A session. > > Best regards, > > -- > Mariano Martinez Peck > Email: marianopeck at gmail.com > Twitter: @MartinezPeck > LinkedIn: www.linkedin.com/in/mariano-martinez-peck > > Blog: https://marianopeck.wordpress.com/ > -- Mariano Martinez Peck Email: marianopeck at gmail.com Twitter: @MartinezPeck LinkedIn: www.linkedin.com/in/mariano-martinez-peck Blog: https://marianopeck.wordpress.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Thu Jul 9 13:54:04 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 9 Jul 2020 13:54:04 0000 Subject: [squeak-dev] The Trunk: CommandLine-TheresaHMartenK.17.mcz Message-ID: Patrick Rein uploaded a new version of CommandLine to project The Trunk: http://source.squeak.org/trunk/CommandLine-TheresaHMartenK.17.mcz ==================== Summary ==================== Name: CommandLine-TheresaHMartenK.17 Author: TheresaHMartenK Time: 20 June 2020, 4:33:21.503561 pm UUID: 1e990100-46c5-7b4a-966c-d1908837d2ca Ancestors: CommandLine-mt.16 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 CommandLine-mt.16 =============== Item was changed: ----- Method: DummyUIManager>>chooseFrom:values:lines:title: (in category 'ui requests') ----- chooseFrom: labelList values: valueList lines: linesArray title: aString 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]]]. ^ valueList first! From commits at source.squeak.org Thu Jul 9 13:54:15 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 9 Jul 2020 13:54:15 0000 Subject: [squeak-dev] The Trunk: ToolBuilder-MVC-TheresaHMartenK.60.mcz Message-ID: Patrick Rein 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]! From commits at source.squeak.org Thu Jul 9 13:54:25 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 9 Jul 2020 13:54:25 0000 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-TheresaHMartenK.261.mcz Message-ID: Patrick Rein 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 ]! From commits at source.squeak.org Thu Jul 9 13:54:59 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Thu, 9 Jul 2020 13:54:59 0000 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-pre.262.mcz Message-ID: Patrick Rein uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-pre.262.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-pre.262 Author: pre Time: 9 July 2020, 3:52:09.108909 pm UUID: 55e57017-8d67-424f-9a7b-2b64ed8af8af Ancestors: ToolBuilder-Morphic-tpr.261, ToolBuilder-Morphic-TheresaHMartenK.261 Merge of ToolBuilder-Morphic-TheresaHMartenK.261 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-tpr.261 =============== 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 ]! From ron at usmedrec.com Thu Jul 9 18:47:18 2020 From: ron at usmedrec.com (Ron Teitelbaum) Date: Thu, 9 Jul 2020 14:47:18 -0400 Subject: [squeak-dev] Mailing Lists Admin Message-ID: Hi All, I need to reset the elections list admin password. Who should I talk to about that? I'm not sure who manages the high level admin for lists. Thanks! Ron Teitelbaum -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Thu Jul 9 20:39:42 2020 From: tim at rowledge.org (tim Rowledge) Date: Thu, 9 Jul 2020 13:39:42 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <20200703222607.GA76689@shell.msen.com> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> <20200703202118.GB52195@shell.msen.com> <3E4824E0-D3B1-4A7D-B301-A73228785FC6@rowledge.org> <20200703222607.GA76689@shell.msen.com> Message-ID: <5DD6E594-6DC4-423B-ABED-AA2B7AAF9AC9@rowledge.org> What are we going to actually try to do here? Who has time/interest/skill? Yes, Juan's suggested bitblt improvements sound good. Indeed pretty much anything he's done would be. This all has the advantage of being 'in system' too, with maybe some VM work to get the best results. Connecting to outside libraries always has costs; after all they're not exactly likely to be set up just as we'd like. An advantage of a decent open source library is that we could at least consider hacking at it to make a version that talks nicely to our bitmaps instead of of messing around with copy/convert to get the results back. More work though... Another option *might* be to use the algorithms if we can't really use the code. Still more work. We have a framework for dynamic translation in the cog vms. We could use much of it to do dynamically translated bitblts. The ARM specialised bitblt code kinda-sorta does that but we could do much better I think. Maybe that would make borrowing algorithms more sensible than linking to an outside library? I'm not a huge fan of a direct connect to openGL because of the issues like Apple not supporting it any more, and which version can a Raspberry Pi run etc. That might make sometihng like Skia more sensible since it seems to be aimed at multiple back ends and so maybe we could benefit indirectly. Of course, it leaves us vulnerable to Error 33. The Nile/Gezira stuff obviously sounds great but there is the question of actually getting it working usefully, let alone finishing it. Will that ever happen? Is what exists good enough and complete enough to be of use? There is a downloadable 'Frank' image that seems to start up ok at http://tinlizzie.org/~ohshima/Frank-170908.zip It is a Squeak 4.4 image as far as I can tell so you need an older VM of roughly that vintage - pre-Spur anyway. The small examples mostly work ok (see things like GeziraCanvas class>example* & GZKernel class>example*) though one or two take a very long time. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim State-of-the-art: What we could do with enough money. From tim at rowledge.org Fri Jul 10 00:13:12 2020 From: tim at rowledge.org (tim Rowledge) Date: Thu, 9 Jul 2020 17:13:12 -0700 Subject: [squeak-dev] squeak logging package(s) Message-ID: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> I'm looking for some good message logging stuff - something a little more flexible that `Transcript show:` level - and so far the best I can see is a rather old package on squeaksource named 'Logging' originally by Keith Hodges but with quite a few updates by Mat Fulmer. I wonder if anyone is using it in a current image? It seems to rely on some process specific variable code that *looks* like has been incorporated into the trunk. I don't want to spend too much time peering at it is somebody else already knows whether it is unusable now or better yet still 'load and go' Or indeed, it somebody has a pointer to sometihng newer/better/shinier? tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Ubi dubium ibi libertas From tim at rowledge.org Fri Jul 10 00:24:09 2020 From: tim at rowledge.org (tim Rowledge) Date: Thu, 9 Jul 2020 17:24:09 -0700 Subject: [squeak-dev] Buglet ins SIXX for Squeak 5.3 In-Reply-To: References: Message-ID: Oops - another small SIXX issue. Preferences class>>#sixxStorePreferencesIn: refers to an Undeclared 'DictionaryOfPreferences' which I suspect might need to be changed to refer to 'preferencesDictionary'. Although possibly using 'self allPreferences' might do better since it rejects deprecated items. > On 2020-07-05, at 6:12 PM, tim Rowledge wrote: > > Thank you; I can confirm that it loads correctly on my Pi system. > >> On 2020-07-04, at 9:50 AM, Masashi UMEZAWA wrote: >> >> Hello Tim-san, >> >> Thank you for the feedback. >> I've just updated ConfigurationOfSIXX on SqueakSource.com. Now SIXX >> can be easily installable to Squeak 5.3. >> I will also update SqueakMap entry soon. >> >> Best regards, >> >> 2020年7月3日(金) 10:32 tim Rowledge : >>> >>> I just spotted a small bug in the code loaded up for SIXX. After loading it into a clean 5.3 image XMLDOMParser class>>#initialize & XMLDOMParser class>>#unload are reverted to old and out of date versions. >>> >>> Installer code used - >>> Installer squeaksource >>> project: 'MetacelloRepository'; >>> install: 'ConfigurationOfSIXX'. >>> (Smalltalk at: #ConfigurationOfSIXX) load. >>> >>> Looks like the ConfigurationOfSIXX>>#version051: method is causing the load of >>> ` >>> spec for: #squeak do:[ >>> spec >>> package: 'XML-Parser' with: [ >>> spec file: 'XML-Parser-ul.44'; >>> repository: 'http://source.squeak.org/squeak52' >>> ` >>> and that in turn re-loads old versions of XMLDOMParser class>>#initialize & XMLDOMParser class>>#unload - and they try to use the deprecated #registerFileReader: in FileList instead of FileServices. >>> >>> I *think* it looks like ConfigurationOfSIXX>>#baseline06: requires the above section removing - but I am most definitely not any sort of expert in the ConfigurationOfXXXXXX stuff. >>> >>> It appears that Masashi-san is still caring for this package since there was a commit in january of this year, so if you could please Do The Magic(™). >>> >>> And since SmalltalkHub is now deprecated it could be a good idea to move the repository perhaps to squeaksource.com >>> >>> tim >>> -- >>> tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim >>> Fractured Idiom:- MAZEL TON - Lots of luck >>> >>> >>> >> >> >> -- >> [:masashi | ^umezawa] >> >> > > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: MII: Mask all Interrupts and then Interrupt > > tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Inoculatte (v): To take coffee intravenously when you are running late From stephen at heaveneverywhere.com Fri Jul 10 06:12:07 2020 From: stephen at heaveneverywhere.com (stephen at heaveneverywhere.com) Date: Thu, 9 Jul 2020 23:12:07 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> Message-ID: <5593C678-5CD0-43D7-A72A-84B4C3D92A7B@heaveneverywhere.com> …on a related topic, I’ve started porting old-school MVC* to Cuis with the intention of replacing Morphic with a generic framework that can be back-ended by BitBLT, OpenGL or HTML5. Anybody want to help? Stephen * = starting with traditional MVC classes and system windows, and following that with some version of the “Wrapper” framework as still used in VisualWorks. -- Stephen Travis Pope Santa Barbara, California, USA http://HeavenEverywhere.com http://FASTLabInc.com https://vimeo.com/user19434036/videos http://heaveneverywhere.com/Reflections -- > On Jun 28, 2020, at 5:53 PM, tim Rowledge wrote: > > Seriously. We've been sitting around twiddling thumbs about better graphics for decades now. > > We had Balloon2D & 3D. > We had 'Pooh graphics' to do vector forms. > We have some excellent stuff being done by the Cuis crew. > We have some amazing ideas from Nile/Gezira. > We have a number of potential 3rd party graphics libraries we might adopt. > We have an advanced JIT that could be used to make on-demand graphics routines either on their own or working with pretty much any of the above. > We probably have other options I've not even heard of. > > Maybe we should actually do something? Can we at least talk about it? > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: SVE: Skip on Vernal Equinox > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: pastedGraphic.tiff Type: image/tiff Size: 2442 bytes Desc: not available URL: From craig at blackpagedigital.com Fri Jul 10 08:12:56 2020 From: craig at blackpagedigital.com (Craig Latta) Date: Fri, 10 Jul 2020 01:12:56 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> Message-ID: Hi Tim-- > Seriously. We've been sitting around twiddling thumbs about better > graphics for decades now. I'd like to see a concise description of the problem. You used the word "better", so I take it you find the current graphics deficient. How? I'm interested in the topic, and have some time. At the moment, all my graphics energy goes into leveraging in SqueakJS what others have done for web browsers, which is quite a lot. thanks! -C -- Craig Latta Black Page Digital Berkeley, California, USA craig at blackpagedigital.com +1 415 287 3547 From trygver at ifi.uio.no Fri Jul 10 09:43:28 2020 From: trygver at ifi.uio.no (Trygve Reenskaug) Date: Fri, 10 Jul 2020 11:43:28 +0200 Subject: [squeak-dev] squeak logging package(s) In-Reply-To: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> Message-ID: <80554514-75d6-1431-061e-73d80d281add@ifi.uio.no> I once did a VW program that logged the messages received by the instances of a class. It was easy to code; the challenge was filtering. I abandoned the program because its long logs didn't tell me anything new. (Logging even a few seconds of /all /messages is prohibitive, there are too many of them). My principle was simple. AFAICR, the code went something like this: 1. All messages handled by a class pass through its /methodDict/. Make a copy of this dict, say /methodDictCopy/ 2. Automatically create a new set of methods for the original /methodDict /according to their number of arguments: aClass>>perform: aSymbol /or /aClass>>perform: aSymbol with: firstObject etc. In this method,      Log message to a file, if wanted.      Look up the requested method in /methodDictCopy. /Execute it. As I said above, the scheme worked, but it was never used in practice because I didn't find it useful. Its weakness is that it only logs messages received by instances of one class. An advantage is that it does not require any changes to the VM. What's needed is a log of the messages flowing between selected instances of many classes. The above scheme could be extended to do that, but I thought the description belonged to the design stage. May be it could be a reverse engineering tool? I used the OORAM role modeling tool to move the description of the message flows from the execution to the design stage. This tool helped the programmer design the answer to three questions: What are the objects? How are they interconnected? What do they do? With these three answers, the implementation with classes was straight-forward. I later moved the description from the design stage to the coding stage with the /DCI programming paradigm/. Today, I code the flow of messages explicitly. I have also extended the Squeak universe of objects with all objects available through an IoT. Alan's object orientation is now literally realized in practice: “/…its semantics are a bit like having thousands and thousands of computers all hooked together by a very fast network./” But that is another story.  TRee On 2020-07-10 02:13, tim Rowledge wrote: > I'm looking for some good message logging stuff - something a little more flexible that `Transcript show:` level - and so far the best I can see is a rather old package on squeaksource named 'Logging' originally by Keith Hodges but with quite a few updates by Mat Fulmer. > > I wonder if anyone is using it in a current image? It seems to rely on some process specific variable code that *looks* like has been incorporated into the trunk. I don't want to spend too much time peering at it is somebody else already knows whether it is unusable now or better yet still 'load and go' > > Or indeed, it somebody has a pointer to sometihng newer/better/shinier? > > tim > -- > tim Rowledge;tim at rowledge.org;http://www.rowledge.org/tim > Ubi dubium ibi libertas > > -- /The essence of object orientation is that objects collaborateto achieve a goal. / Trygve Reenskaug mailto: trygver at ifi.uio.no Morgedalsvn. 5A http://folk.uio.no/trygver/ N-0378 Oslo http://fullOO.info Norway                     Tel: (+47) 468 58 625 -------------- next part -------------- An HTML attachment was scrubbed... URL: From davide.grandi at email.it Fri Jul 10 10:57:15 2020 From: davide.grandi at email.it (Davide Grandi) Date: Fri, 10 Jul 2020 12:57:15 +0200 Subject: [squeak-dev] squeak logging package(s) In-Reply-To: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> Message-ID: <25a68fdc-f2e3-14f4-cf54-7db66013dca9@email.it> slicing a small slice of log4* ? *doc => all classes : not too many classes. "they" stole sUnit ... so we can slice log4*. https://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html (sorry, just my 0,02€) Cheers,     Davide On 10/07/2020 02:13, tim Rowledge wrote: > I'm looking for some good message logging stuff - something a little more flexible that `Transcript show:` level - and so far the best I can see is a rather old package on squeaksource named 'Logging' originally by Keith Hodges but with quite a few updates by Mat Fulmer. > > I wonder if anyone is using it in a current image? It seems to rely on some process specific variable code that *looks* like has been incorporated into the trunk. I don't want to spend too much time peering at it is somebody else already knows whether it is unusable now or better yet still 'load and go' > > Or indeed, it somebody has a pointer to sometihng newer/better/shinier? > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Ubi dubium ibi libertas -- Ing. Davide Grandi email : davide.grandi at email.it mobile : +39 339 7468 778 linkedin : http://linkedin.com/in/davidegrandi From marianopeck at gmail.com Fri Jul 10 13:56:12 2020 From: marianopeck at gmail.com (Mariano Martinez Peck) Date: Fri, 10 Jul 2020 10:56:12 -0300 Subject: [squeak-dev] Webminar about VA Smalltalk new OS Process Framework In-Reply-To: References: Message-ID: Thank you everyone for attending. For those that missed it (or want to re-watch it hahahaha), below is the link to YouTube: https://youtu.be/uwEu_-tflKg Best regards, On Wed, Jul 8, 2020 at 11:36 AM Mariano Martinez Peck wrote: > Greetings all, This is a friendly reminder of the presentation we will > host tomorrow for VAST's newest OSProcess framework. Best regards, > > On Tue, Jun 30, 2020 at 10:25 AM Mariano Martinez Peck < > marianopeck at gmail.com> wrote: > >> Greetings all, >> >> Some time ago, I had the pleasure and privilege of being sponsored by the >> Pharo Consortium to implement OSSubprocess. Because of that work, I quickly >> realized that a new OS process framework created by Instantiations was >> quite advanced and unlike anything I had seen before. If you are able, I >> would highly recommend that you attend the technology preview of this >> framework coming to VAST 2021: >> >> Seth Berman will be presenting, registration here: >> https://attendee.gotowebinar.com/register/7491754880594201356 >> >> We hope the community can attend and we look forward to your feedback and >> questions during the event's Q&A session. >> >> Best regards, >> >> -- >> Mariano Martinez Peck >> Email: marianopeck at gmail.com >> Twitter: @MartinezPeck >> LinkedIn: www.linkedin.com/in/mariano-martinez-peck >> >> Blog: https://marianopeck.wordpress.com/ >> > > > -- > Mariano Martinez Peck > Email: marianopeck at gmail.com > Twitter: @MartinezPeck > LinkedIn: www.linkedin.com/in/mariano-martinez-peck > > Blog: https://marianopeck.wordpress.com/ > -- Mariano Martinez Peck Email: marianopeck at gmail.com Twitter: @MartinezPeck LinkedIn: www.linkedin.com/in/mariano-martinez-peck Blog: https://marianopeck.wordpress.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From forums.jakob at resfarm.de Fri Jul 10 19:08:52 2020 From: forums.jakob at resfarm.de (Jakob Reschke) Date: Fri, 10 Jul 2020 21:08:52 +0200 Subject: [squeak-dev] squeak logging package(s) In-Reply-To: <25a68fdc-f2e3-14f4-cf54-7db66013dca9@email.it> References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> <25a68fdc-f2e3-14f4-cf54-7db66013dca9@email.it> Message-ID: VA Smalltalk has log4s as a Smalltalk port of log4j. But I guess it is proprietary because you buy it with VA Smalltalk. Davide Grandi schrieb am Fr., 10. Juli 2020, 12:57: > slicing a small slice of log4* ? > *doc => all classes : not too many classes. > > "they" stole sUnit ... so we can slice log4*. > > https://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html > > (sorry, just my 0,02€) > > Cheers, > > Davide > > On 10/07/2020 02:13, tim Rowledge wrote: > > I'm looking for some good message logging stuff - something a little > more flexible that `Transcript show:` level - and so far the best I can see > is a rather old package on squeaksource named 'Logging' originally by Keith > Hodges but with quite a few updates by Mat Fulmer. > > > > I wonder if anyone is using it in a current image? It seems to rely on > some process specific variable code that *looks* like has been incorporated > into the trunk. I don't want to spend too much time peering at it is > somebody else already knows whether it is unusable now or better yet still > 'load and go' > > > > Or indeed, it somebody has a pointer to sometihng newer/better/shinier? > > > > tim > > -- > > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > > Ubi dubium ibi libertas > > -- > Ing. Davide Grandi > email : davide.grandi at email.it > mobile : +39 339 7468 778 > linkedin : http://linkedin.com/in/davidegrandi > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Fri Jul 10 19:44:04 2020 From: robert.withers at pm.me (Robert Withers) Date: Fri, 10 Jul 2020 19:44:04 +0000 Subject: [squeak-dev] squeak logging package(s) In-Reply-To: References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> <25a68fdc-f2e3-14f4-cf54-7db66013dca9@email.it> Message-ID: Hello, > I would take this opportunity to point out the TraceMonitor [1] package in Cryptography. > Installer ss project: "Cryptography'; install: 'TraceMonitor'. The use is very straightforward as shown in the test case. > TraceMonitorTestCase>>#testTraceMonitor >> | monitor | >> monitor := TraceMonitor newNick: 'TestingMonitor'. >> monitor monitor: self. >> self etrace: #info msg: '1'. >> self etrace: #warn msg: '1'. >> self etrace: #debug msg: '1'. >> self etrace: #error msg: '1'. There is additional API, such as TraceMonitor>>#traceToTranscript. The default enabled domains are set in > TraceMonitor>>#initializeDefaultMonitors >> self enableDomain: #info. >> self enableDomain: #warning. >> self enableDomain: #error. >> self enableDomain: #debug. You can always add new domains, such as #over_the_wire or #engine or #obj_references or what ever you need for your project. Then you can throw an event for that new domain with: >> self etrace: #over_the_wire msg: 'msg received'.self etrace: #engine msg: 'Engine state changed'. >> self etrace: #obj_references msg: 'new object registered'. Another aspect is that the monitoring of internal objects can be granted by an previously registered object. So let us say you are monitoring the engine and it wants to extend monitoring to the object tables. First, you would #monitor: the engine: > | engine monitor | > monitor := TraceMonitor newNick: 'TestingMonitor'. engine := SampleEngine new. > monitor monitor: engine. > engine init. Then in SampleEngine>>#init we register the Object Tables, called the Scope. > SampleEngine>>#init > objectTables := Scope new. > self monitor: objectTables. >> Thus, when inside a Scope method, calls #etrace:msg: the TraceMonitor will post it. > self etrace: #obj_references msg: 'new object registered'. I hope this helps you to understand its uses. I hope you find it useful! >> Kindly, rabbit [1] TraceMonitor - http://www.squeaksource.com/@fLap-whI8O1pUZtu/eNY6xSnW (this link may soon expire) On 7/10/20 3:08 PM, Jakob Reschke wrote: > VA Smalltalk has log4s as a Smalltalk port of log4j. But I guess it is proprietary because you buy it with VA Smalltalk. > > Davide Grandi schrieb am Fr., 10. Juli 2020, 12:57: > >> slicing a small slice of log4* ? >> *doc => all classes : not too many classes. >> >> "they" stole sUnit ... so we can slice log4*. >> >> https://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html >> >> (sorry, just my 0,02€) >> >> Cheers, >> >> Davide >> >> On 10/07/2020 02:13, tim Rowledge wrote: >>> I'm looking for some good message logging stuff - something a little more flexible that `Transcript show:` level - and so far the best I can see is a rather old package on squeaksource named 'Logging' originally by Keith Hodges but with quite a few updates by Mat Fulmer. >>> >>> I wonder if anyone is using it in a current image? It seems to rely on some process specific variable code that *looks* like has been incorporated into the trunk. I don't want to spend too much time peering at it is somebody else already knows whether it is unusable now or better yet still 'load and go' >>> >>> Or indeed, it somebody has a pointer to sometihng newer/better/shinier? >>> >>> tim >>> -- >>> tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim >>> Ubi dubium ibi libertas >> >> -- >> Ing. Davide Grandi >> email : davide.grandi at email.it >> mobile : +39 339 7468 778 >> linkedin : http://linkedin.com/in/davidegrandi -------------- next part -------------- An HTML attachment was scrubbed... URL: From tim at rowledge.org Fri Jul 10 20:11:23 2020 From: tim at rowledge.org (tim Rowledge) Date: Fri, 10 Jul 2020 13:11:23 -0700 Subject: [squeak-dev] squeak logging package(s) In-Reply-To: References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> Message-ID: <843BEF39-A2AD-4540-BE30-2075F3692E0B@rowledge.org> > On 2020-07-10, at 2:40 AM, Trygve Reenskaug wrote: > > I once did a VW program that logged the messages received by the instances of a class. That's an interesting attack on a slightly different problem than mine; but I like the idea. If I needed to log the entire message flow I'd probably use a subclass of the simulator these days. A fast machine can simulate with bearable interactive performance, which is amazing. > On 2020-07-10, at 12:44 PM, Robert Withers via Squeak-dev wrote: > > I would take this opportunity to point out the TraceMonitor [1] package in Cryptography. That looks interesting, and since I am already loading the cryptography package it will be easy to just include. I'll see how it goes! tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Re vera, potas bene = Say, you sure are drinking a lot. From pdebruic at gmail.com Fri Jul 10 22:04:48 2020 From: pdebruic at gmail.com (Paul DeBruicker) Date: Fri, 10 Jul 2020 17:04:48 -0500 (CDT) Subject: [squeak-dev] squeak logging package(s) In-Reply-To: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> Message-ID: <1594418688634-0.post@n4.nabble.com> Toothpick should load and work in 5.3 http://wiki.squeak.org/squeak/5890 Pharo has this announcements based one: https://github.com/pharo-project/pharo-beacon With a blog post here: http://www.humane-assessment.com/blog/beacon timrowledge wrote > I'm looking for some good message logging stuff - something a little more > flexible that `Transcript show:` level - and so far the best I can see is > a rather old package on squeaksource named 'Logging' originally by Keith > Hodges but with quite a few updates by Mat Fulmer. > > I wonder if anyone is using it in a current image? It seems to rely on > some process specific variable code that *looks* like has been > incorporated into the trunk. I don't want to spend too much time peering > at it is somebody else already knows whether it is unusable now or better > yet still 'load and go' > > Or indeed, it somebody has a pointer to sometihng newer/better/shinier? > > tim > -- > tim Rowledge; > tim@ > ; http://www.rowledge.org/tim > Ubi dubium ibi libertas -- Sent from: http://forum.world.st/Squeak-Dev-f45488.html From cunningham.cb at gmail.com Fri Jul 10 23:50:17 2020 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Fri, 10 Jul 2020 16:50:17 -0700 Subject: [squeak-dev] SequenceableCollection #= method in current trunk differs from Squeak 5.2 In-Reply-To: References: Message-ID: On Sun, Jun 28, 2020 at 5:43 PM Levente Uzonyi wrote: > Hi Nikolai, > > On Mon, 29 Jun 2020, Nikolay Suslov wrote: > > > Hello all, > > Figuring out, could we go back to the previous version of > SequenceableCollection #= method (as in Squeak 5.2), to check if the > receiver is equivalent to the otherCollection by using "self species == > otherCollection species", > > instead of "self class = otherCollection class"? > > IIRC there was a good reason for that change though I can't recall > what it was. I'm sure the mailing list remembers. > If you search for #= ==> #hash issues in the mailing list, I think that thread has the (or a) reason for this change (although the #= change was done by nice, not me). > > The current version of #= method breaks code in different places. For > example the RFB/VNC server gives wrong results starting from an > authentication process, where RFBMessage is the ByteArray subclass and > implements #species. > > If you're looking for a fix, try this: > http://leves.web.elte.hu/squeak/RFB-ul.18.mcz > > > Levente > > > > > Best regards, > > Nikolai > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From eric.gade at gmail.com Sat Jul 11 00:06:56 2020 From: eric.gade at gmail.com (Eric Gade) Date: Fri, 10 Jul 2020 20:06:56 -0400 Subject: [squeak-dev] Squot and Github Message-ID: Hi all, I have a project I've been working on using Squot and the new Git tools and pushing to a repository I have on Github. The repository is private but works with my username and password. I have been successfully pushing commits to it for a couple of weeks from the same image. This includes commits that I made yesterday. But today, suddenly, I am no longer able to push to my remote. Instead, I get the error in the attached image. Note that I have not changed any Github settings or anything like that. So I'm not sure what has changed or what's going on. Any ideas? Is anyone else having this issue? If I wish to find a way to "back out" of using Squot, is there some way to convert everything to Monticello (filetree) and just push it manually from my terminal? -- Eric -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Screen Shot 2020-07-10 at 8.03.25 PM.png Type: image/png Size: 37248 bytes Desc: not available URL: From davide.grandi at email.it Sat Jul 11 05:22:07 2020 From: davide.grandi at email.it (Davide Grandi) Date: Sat, 11 Jul 2020 07:22:07 +0200 Subject: [squeak-dev] squeak logging package(s) In-Reply-To: References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> <25a68fdc-f2e3-14f4-cf54-7db66013dca9@email.it> Message-ID: Thank-you, I'm digging on ".instantiations.com", and there are cues on programmer's manual, slides & documentation. Terms varying from "port" to "inspiration" to "log4s available as open source". Bye & thank-you again,     Davide On 10/07/2020 21:08, Jakob Reschke wrote: > VA Smalltalk has log4s as a Smalltalk port of log4j. But I guess it is > proprietary because you buy it with VA Smalltalk. > > Davide Grandi > > schrieb am Fr., 10. Juli 2020, 12:57: > > slicing a small slice of log4* ? > *doc => all classes : not too many classes. > > "they" stole sUnit ... so we can slice log4*. > > https://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html > > (sorry, just my 0,02€) > > Cheers, > >      Davide > > On 10/07/2020 02:13, tim Rowledge wrote: > > I'm looking for some good message logging stuff - something a > little more flexible that `Transcript show:` level - and so far > the best I can see is a rather old package on squeaksource named > 'Logging' originally by Keith Hodges but with quite a few updates > by Mat Fulmer. > > > > I wonder if anyone is using it in a current image? It seems to > rely on some process specific variable code that *looks* like has > been incorporated into the trunk. I don't want to spend too much > time peering at it is somebody else already knows whether it is > unusable now or better yet still 'load and go' > > > > Or indeed, it somebody has a pointer to sometihng > newer/better/shinier? > > > > tim > > -- > > tim Rowledge; tim at rowledge.org ; > http://www.rowledge.org/tim > > Ubi dubium ibi libertas > -- > Ing. Davide Grandi > email    : davide.grandi at email.it > -- Ing. Davide Grandi email : davide.grandi at email.it -------------- next part -------------- An HTML attachment was scrubbed... URL: From davide.grandi at email.it Sat Jul 11 05:42:58 2020 From: davide.grandi at email.it (Davide Grandi) Date: Sat, 11 Jul 2020 07:42:58 +0200 Subject: [squeak-dev] log4s : free on Pharo (Re: squeak logging package(s)) In-Reply-To: References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> <25a68fdc-f2e3-14f4-cf54-7db66013dca9@email.it> Message-ID: It appears on a Pharo catalog :     https://catalog.pharo.org/catalog/project/Log4s with a page on ... Gemstone ! http://ss3.gemstone.com/ss/Log4s.html/Wiki bye,     Davide (smalltalk strikes back ...) On 10/07/2020 21:08, Jakob Reschke wrote: > VA Smalltalk has log4s as a Smalltalk port of log4j. But I guess it is > proprietary because you buy it with VA Smalltalk. > > > Davide Grandi > > schrieb am Fr., 10. Juli 2020, 12:57: > > slicing a small slice of log4* ? > *doc => all classes : not too many classes. > > "they" stole sUnit ... so we can slice log4*. > > https://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html > > (sorry, just my 0,02€) > > Cheers, > >      Davide > > On 10/07/2020 02:13, tim Rowledge wrote: > > I'm looking for some good message logging stuff - something a > little more flexible that `Transcript show:` level - and so far > the best I can see is a rather old package on squeaksource named > 'Logging' originally by Keith Hodges but with quite a few updates > by Mat Fulmer. > > > > I wonder if anyone is using it in a current image? It seems to > rely on some process specific variable code that *looks* like has > been incorporated into the trunk. I don't want to spend too much > time peering at it is somebody else already knows whether it is > unusable now or better yet still 'load and go' > > > > Or indeed, it somebody has a pointer to sometihng > newer/better/shinier? > > > > tim > > -- > > tim Rowledge; tim at rowledge.org ; > http://www.rowledge.org/tim > > Ubi dubium ibi libertas > -- Ing. Davide Grandi email : davide.grandi at email.it -------------- next part -------------- An HTML attachment was scrubbed... URL: From lists at fniephaus.com Sat Jul 11 06:42:51 2020 From: lists at fniephaus.com (Fabio Niephaus) Date: Sat, 11 Jul 2020 08:42:51 +0200 Subject: [squeak-dev] Squot and Github In-Reply-To: References: Message-ID: Hi Eric: On Sat, Jul 11, 2020 at 2:07 AM Eric Gade wrote: > > Hi all, > > I have a project I've been working on using Squot and the new Git tools and pushing to a repository I have on Github. The repository is private but works with my username and password. I have been successfully pushing commits to it for a couple of weeks from the same image. This includes commits that I made yesterday. But today, suddenly, I am no longer able to push to my remote. Instead, I get the error in the attached image. > Sorry to hear you're having issues pushing to remote from your image. I have no idea what's going on, maybe renew your access token and try again? What OS/VM/image are you using? > Note that I have not changed any Github settings or anything like that. So I'm not sure what has changed or what's going on. Any ideas? Is anyone else having this issue? If I wish to find a way to "back out" of using Squot, is there some way to convert everything to Monticello (filetree) and just push it manually from my terminal? > No need to back out of using Squot just yet: when you added your project, the GitBrowser asked you for a local directory. Although Squot does not touch the working copy on the filesystem (the files that end up on GitHub), it does keep the repository metadata (everything in .git) in sync. So that means you can just push from your terminal from your filesystem repository. This use case is one of many reasons why Squot asks for a local directory. Hope this helps, Fabio > -- > Eric > From robert.withers at pm.me Sat Jul 11 07:38:24 2020 From: robert.withers at pm.me (Robert Withers) Date: Sat, 11 Jul 2020 07:38:24 +0000 Subject: [squeak-dev] squeak logging package(s) In-Reply-To: <843BEF39-A2AD-4540-BE30-2075F3692E0B@rowledge.org> References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> <843BEF39-A2AD-4540-BE30-2075F3692E0B@rowledge.org> Message-ID: <1d1ac2b7-7b26-cba1-be35-331ea843b879@pm.me> Hi tim, On 7/10/20 4:11 PM, tim Rowledge wrote: > On 2020-07-10, at 12:44 PM, Robert Withers via Squeak-dev > wrote: >> I would take this opportunity to point out the TraceMonitor [1] package in Cryptography. > That looks interesting, and since I am already loading the cryptography package it will be easy to just include. I'll see how it goes! Super! I realized it wasn't where it should be, functionally. So I published a new version 'TraceMonitor-rww.2.mcz'. I am now initializing with a Transcript stream, but able to add multiple steams; Internally the monitor writes to a CompositeStream, able to hold multiple streams. Here we have a Transcript stream, by default, and a file stream.     | monitor |     monitor := TraceMonitor newNick: 'TestingMonitor'.     monitor openTraceStreamNamed: 'traceMonitor.log'. Calling #etrace:msg: in an object who is being monitored by this monitor, will result in the event written to both the Transcript and the file named 'traceMonitor.log'. Unfortunately, I am not making any assertions in the TestCase, which is more of an ExampleCase. If you will define your own domains, a test example of etraceing with that domain could be built and output verified, visually or assertively. K, r From forums.jakob at resfarm.de Sat Jul 11 08:02:12 2020 From: forums.jakob at resfarm.de (Jakob Reschke) Date: Sat, 11 Jul 2020 10:02:12 +0200 Subject: [squeak-dev] Squot and Github In-Reply-To: References: Message-ID: Hi Eric, Sorry for the issue. Can you please press the Debug button in the dialog and tell me some more about the `response` variable you should see in the top context? For example what is the `response code` (401 or 403) or the `response content`? I would ask for the whole object, but it also contains the request and that should contain your credentials in the headers, which I don't want to see obviously. :-) Could you please inspect whether the `response request` actually contains authentication headers? I have seen in the past that sometimes the WebClient does not send them when it should. If you restart the context in the debugger (should be either GitSmartHTTPProtocol>>#discoverReferencesForService: or GitSmartHTTPProtocol>>#invokeReceivePackWithRefs:andPack:deleting:) to repeat the request, does the same error occur again or does it work on second try? If the WebClient shows further problems, you can also try to restart the topmost SquitBrowser context that you find on the stack. About backing out: like Fabio said, the Git history is all on your disk and you can still pull/push/... with the Git command line. To see the files, you just have to checkout a commit (or reset --hard to see the latest files on the branch). Then you will find everything in filetree format (or Tonel if you configured it so). A converter exists for Monticello->Squot (see https://github.com/hpi-swa/Squot/#converting-monticello-history), but not for the other way around, since Squot repositories are just metadata-less filetree repositories. If someone really wants to build a converter for the other direction, they could probably learn from the existing converter and turn the read/write logic around. However, I would rather like to find and fix your push issue. Kind regards, Jakob Am Sa., 11. Juli 2020 um 08:43 Uhr schrieb Fabio Niephaus : > > Hi Eric: > > On Sat, Jul 11, 2020 at 2:07 AM Eric Gade wrote: > > > > Hi all, > > > > I have a project I've been working on using Squot and the new Git tools and pushing to a repository I have on Github. The repository is private but works with my username and password. I have been successfully pushing commits to it for a couple of weeks from the same image. This includes commits that I made yesterday. But today, suddenly, I am no longer able to push to my remote. Instead, I get the error in the attached image. > > > > Sorry to hear you're having issues pushing to remote from your image. > I have no idea what's going on, maybe renew your access token and try > again? What OS/VM/image are you using? > > > Note that I have not changed any Github settings or anything like that. So I'm not sure what has changed or what's going on. Any ideas? Is anyone else having this issue? If I wish to find a way to "back out" of using Squot, is there some way to convert everything to Monticello (filetree) and just push it manually from my terminal? > > > > No need to back out of using Squot just yet: when you added your > project, the GitBrowser asked you for a local directory. Although > Squot does not touch the working copy on the filesystem (the files > that end up on GitHub), it does keep the repository metadata > (everything in .git) in sync. So that means you can just push from > your terminal from your filesystem repository. This use case is one of > many reasons why Squot asks for a local directory. > > Hope this helps, > Fabio > > > -- > > Eric > > > From commits at source.squeak.org Sat Jul 11 08:18:16 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 11 Jul 2020 08:18:16 0000 Subject: [squeak-dev] The Inbox: Graphics-kfr.434.mcz Message-ID: A new version of Graphics was added to project The Inbox: http://source.squeak.org/inbox/Graphics-kfr.434.mcz ==================== Summary ==================== Name: Graphics-kfr.434 Author: kfr Time: 11 July 2020, 10:18:06.272175 am UUID: 0e0125f6-3040-6247-9e5a-43bfd1896f84 Ancestors: Graphics-mt.433 I wanted to subclass Rectangle with a instance variable to carry some state, but these methodes indirected to Point>>corner: so it broke the override and returned a ordinary Rectangle instead of my fancy new subclass SuperRectangle =============== Diff against Graphics-mt.433 =============== Item was changed: ----- Method: Rectangle class>>encompassing: (in category 'instance creation') ----- encompassing: listOfPoints "A number of callers of encompass: should use this method." | topLeft bottomRight | topLeft := bottomRight := nil. listOfPoints do: [:p | topLeft == nil ifTrue: [topLeft := bottomRight := p] ifFalse: [topLeft := topLeft min: p. bottomRight := bottomRight max: p]]. + ^self origin: topLeft corner: bottomRight! - ^ topLeft corner: bottomRight! Item was changed: ----- Method: Rectangle class>>merging: (in category 'instance creation') ----- merging: listOfRects "A number of callers of merge: should use this method." | minX minY maxX maxY | listOfRects do: [:r | minX ifNil: [minX := r topLeft x. minY := r topLeft y. maxX := r bottomRight x. maxY := r bottomRight y] ifNotNil: [minX := minX min: r topLeft x. minY := minY min: r topLeft y. maxX := maxX max: r bottomRight x. maxY := maxY max: r bottomRight y]]. + ^ self origin:minX at minY corner: maxX at maxY! - ^ minX at minY corner: maxX at maxY! From eric.gade at gmail.com Sat Jul 11 11:53:13 2020 From: eric.gade at gmail.com (Eric Gade) Date: Sat, 11 Jul 2020 07:53:13 -0400 Subject: [squeak-dev] Squot and Github In-Reply-To: References: Message-ID: Hello Fabio and Jakob, thanks for responding. Sorry to hear you're having issues pushing to remote from your image. > I have no idea what's going on, maybe renew your access token and try > again? What OS/VM/image are you using? > I'm running macOS 10.15.1. Here's my about info: Squeak5.3 latest update: #19448 Current Change Set: HomeProject Image format 68021 (64 bit) Virtual Machine --------------- /Applications/Squeak5.3-19431-64bit.app/Contents/MacOS/Squeak Open Smalltalk Cog[Spur] VM [CoInterpreterPrimitives VMMaker.oscog-nice.2715] 64 bit Mac OS X built on Mar 3 2020 08:28:30 GMT Compiler: 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42) platform sources revision VM: 202003021730 https://github.com/OpenSmalltalk/opensmalltalk-vm.git Date: Mon Mar 2 18:30:55 2020 CommitHash: 6a0bc96 Plugins: 202003021730 https://github.com/OpenSmalltalk/opensmalltalk-vm.git CoInterpreter VMMaker.oscog-nice.2715 uuid: 78e2f556-9829-42fe-963d-e19dfc43c0e9 Mar 3 2020 StackToRegisterMappingCogit VMMaker.oscog-eem.2719 uuid: e40f3e94-3a54-411b-9613-5d19114ea131 Mar 3 2020 Sorry for the issue. Can you please press the Debug button in the > dialog and tell me some more about the `response` variable you should > see in the top context? For example what is the `response code` (401 > or 403) or the `response content`? The response code is `401 Authorization Required`. Could you please inspect whether the `response request` actually > contains authentication headers? I have seen in the past that > sometimes the WebClient does not send them when it should. > It looks to me like the WebClient's response request (the original request sent I assume) headers *don't* have any Auth information: ` 'an OrderedCollection(''Content-Type''->''application/x-git-receive-pack-request'' ''Content-Length''->5343 ''User-Agent''->''git/2.0.5'' ''Host''->'' github.com'')'` If you restart the context in the debugger (should be either > GitSmartHTTPProtocol>>#discoverReferencesForService: or > GitSmartHTTPProtocol>>#invokeReceivePackWithRefs:andPack:deleting:) to > repeat the request, does the same error occur again or does it work on > second try? > Ok, so this seems to have worked! Restarting #invokeReceivePackWithRefs:andPack:deleting: and proceeding seems to have done the trick! I have no idea why, of course. Any hints there? Either way, thanks for the tip. I've checked github and my latest changes are pushed. > when you added your > project, the GitBrowser asked you for a local directory. Although > Squot does not touch the working copy on the filesystem (the files > that end up on GitHub), it does keep the repository metadata > (everything in .git) in sync. So that means you can just push from > your terminal from your filesystem repository. > I was hoping a local file copy was there (as it has been when I manually pushed Monticello stuff in the past), but when I went snooping I didn't see anything. Also one thing I've noticed that might be of interest here is that when I first cloned my existing repo, and it asked for a folder to clone into, it seems to have put the .git file directly in that folder. This happens to be a folder that I keep all of my working images in, so that's not a good place. But the reason I did it that way is because I expected the normal git behavior: when you clone a repository on the command line in git, it *creates a new directory with the repo name* and puts the .git and other files inside of that directory. So when I selected ~/my_images/ or whatever as the clone directory with Squot, my git experience led me to believe I would find something at ~/my_images//.git but instead it's just at ~/my_images/.git One last semi offtopic thing: is the Squeak community aware that Github will be deprecating password based authentication come November? Anyway the debugging/solutions you've all provided here seem to have done the trick for now -- thanks! On Sat, Jul 11, 2020 at 4:02 AM Jakob Reschke wrote: > Hi Eric, > > Sorry for the issue. Can you please press the Debug button in the > dialog and tell me some more about the `response` variable you should > see in the top context? For example what is the `response code` (401 > or 403) or the `response content`? I would ask for the whole object, > but it also contains the request and that should contain your > credentials in the headers, which I don't want to see obviously. :-) > Could you please inspect whether the `response request` actually > contains authentication headers? I have seen in the past that > sometimes the WebClient does not send them when it should. > > If you restart the context in the debugger (should be either > GitSmartHTTPProtocol>>#discoverReferencesForService: or > GitSmartHTTPProtocol>>#invokeReceivePackWithRefs:andPack:deleting:) to > repeat the request, does the same error occur again or does it work on > second try? If the WebClient shows further problems, you can also try > to restart the topmost SquitBrowser context that you find on the > stack. > > About backing out: like Fabio said, the Git history is all on your > disk and you can still pull/push/... with the Git command line. To see > the files, you just have to checkout a commit (or reset --hard to see > the latest files on the branch). Then you will find everything in > filetree format (or Tonel if you configured it so). A converter exists > for Monticello->Squot (see > https://github.com/hpi-swa/Squot/#converting-monticello-history), but > not for the other way around, since Squot repositories are just > metadata-less filetree repositories. If someone really wants to build > a converter for the other direction, they could probably learn from > the existing converter and turn the read/write logic around. However, > I would rather like to find and fix your push issue. > > Kind regards, > Jakob > > Am Sa., 11. Juli 2020 um 08:43 Uhr schrieb Fabio Niephaus < > lists at fniephaus.com>: > > > > Hi Eric: > > > > On Sat, Jul 11, 2020 at 2:07 AM Eric Gade wrote: > > > > > > Hi all, > > > > > > I have a project I've been working on using Squot and the new Git > tools and pushing to a repository I have on Github. The repository is > private but works with my username and password. I have been successfully > pushing commits to it for a couple of weeks from the same image. This > includes commits that I made yesterday. But today, suddenly, I am no longer > able to push to my remote. Instead, I get the error in the attached image. > > > > > > > Sorry to hear you're having issues pushing to remote from your image. > > I have no idea what's going on, maybe renew your access token and try > > again? What OS/VM/image are you using? > > > > > Note that I have not changed any Github settings or anything like > that. So I'm not sure what has changed or what's going on. Any ideas? Is > anyone else having this issue? If I wish to find a way to "back out" of > using Squot, is there some way to convert everything to Monticello > (filetree) and just push it manually from my terminal? > > > > > > > No need to back out of using Squot just yet: when you added your > > project, the GitBrowser asked you for a local directory. Although > > Squot does not touch the working copy on the filesystem (the files > > that end up on GitHub), it does keep the repository metadata > > (everything in .git) in sync. So that means you can just push from > > your terminal from your filesystem repository. This use case is one of > > many reasons why Squot asks for a local directory. > > > > Hope this helps, > > Fabio > > > > > -- > > > Eric > > > > > > > -- Eric -------------- next part -------------- An HTML attachment was scrubbed... URL: From forums.jakob at resfarm.de Sat Jul 11 12:13:24 2020 From: forums.jakob at resfarm.de (Jakob Reschke) Date: Sat, 11 Jul 2020 14:13:24 +0200 Subject: [squeak-dev] Squot and Github In-Reply-To: References: Message-ID: Hi Eric, I'm glad that the workaround works. I see your point about the clone behavior. git clone also takes an optional directory argument [1] that specifies the target directory. If this is given, git does not create a new directory for the working copy. Since you have to choose a directory from Squeak anyway, I thought the clone from Squeak is more similar to the git clone with a directory specified, so it does not create another directory. How would you clone into a directory that has a different name than the repository? Anyway, would you like to open an issue for this on GitHub? [2] [1] https://git-scm.com/docs/git-clone#Documentation/git-clone.txt-ltdirectorygt [2] https://github.com/hpi-swa/Squot/issues Kind regards, Jakob Am Sa., 11. Juli 2020 um 13:53 Uhr schrieb Eric Gade : > > Hello Fabio and Jakob, thanks for responding. > >> Sorry to hear you're having issues pushing to remote from your image. >> I have no idea what's going on, maybe renew your access token and try >> again? What OS/VM/image are you using? > > > I'm running macOS 10.15.1. Here's my about info: > Squeak5.3 > latest update: #19448 > Current Change Set: HomeProject > Image format 68021 (64 bit) > > Virtual Machine > --------------- > /Applications/Squeak5.3-19431-64bit.app/Contents/MacOS/Squeak > Open Smalltalk Cog[Spur] VM [CoInterpreterPrimitives VMMaker.oscog-nice.2715] 64 bit > Mac OS X built on Mar 3 2020 08:28:30 GMT Compiler: 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42) > platform sources revision VM: 202003021730 https://github.com/OpenSmalltalk/opensmalltalk-vm.git Date: Mon Mar 2 18:30:55 2020 CommitHash: 6a0bc96 Plugins: 202003021730 https://github.com/OpenSmalltalk/opensmalltalk-vm.git > CoInterpreter VMMaker.oscog-nice.2715 uuid: 78e2f556-9829-42fe-963d-e19dfc43c0e9 Mar 3 2020 > StackToRegisterMappingCogit VMMaker.oscog-eem.2719 uuid: e40f3e94-3a54-411b-9613-5d19114ea131 Mar 3 2020 > >> Sorry for the issue. Can you please press the Debug button in the >> dialog and tell me some more about the `response` variable you should >> see in the top context? For example what is the `response code` (401 >> or 403) or the `response content`? > > > The response code is `401 Authorization Required`. > >> Could you please inspect whether the `response request` actually >> contains authentication headers? I have seen in the past that >> sometimes the WebClient does not send them when it should. > > > It looks to me like the WebClient's response request (the original request sent I assume) headers *don't* have any Auth information: ` 'an OrderedCollection(''Content-Type''->''application/x-git-receive-pack-request'' ''Content-Length''->5343 ''User-Agent''->''git/2.0.5'' ''Host''->''github.com'')'` > >> If you restart the context in the debugger (should be either >> GitSmartHTTPProtocol>>#discoverReferencesForService: or >> GitSmartHTTPProtocol>>#invokeReceivePackWithRefs:andPack:deleting:) to >> repeat the request, does the same error occur again or does it work on >> second try? > > > Ok, so this seems to have worked! Restarting #invokeReceivePackWithRefs:andPack:deleting: and proceeding seems to have done the trick! I have no idea why, of course. Any hints there? Either way, thanks for the tip. I've checked github and my latest changes are pushed. > >> >> when you added your >> project, the GitBrowser asked you for a local directory. Although >> Squot does not touch the working copy on the filesystem (the files >> that end up on GitHub), it does keep the repository metadata >> (everything in .git) in sync. So that means you can just push from >> your terminal from your filesystem repository. > > > I was hoping a local file copy was there (as it has been when I manually pushed Monticello stuff in the past), but when I went snooping I didn't see anything. Also one thing I've noticed that might be of interest here is that when I first cloned my existing repo, and it asked for a folder to clone into, it seems to have put the .git file directly in that folder. This happens to be a folder that I keep all of my working images in, so that's not a good place. But the reason I did it that way is because I expected the normal git behavior: when you clone a repository on the command line in git, it *creates a new directory with the repo name* and puts the .git and other files inside of that directory. So when I selected ~/my_images/ or whatever as the clone directory with Squot, my git experience led me to believe I would find something at ~/my_images//.git but instead it's just at ~/my_images/.git > > One last semi offtopic thing: is the Squeak community aware that Github will be deprecating password based authentication come November? > > Anyway the debugging/solutions you've all provided here seem to have done the trick for now -- thanks! > > > > On Sat, Jul 11, 2020 at 4:02 AM Jakob Reschke wrote: >> >> Hi Eric, >> >> Sorry for the issue. Can you please press the Debug button in the >> dialog and tell me some more about the `response` variable you should >> see in the top context? For example what is the `response code` (401 >> or 403) or the `response content`? I would ask for the whole object, >> but it also contains the request and that should contain your >> credentials in the headers, which I don't want to see obviously. :-) >> Could you please inspect whether the `response request` actually >> contains authentication headers? I have seen in the past that >> sometimes the WebClient does not send them when it should. >> >> If you restart the context in the debugger (should be either >> GitSmartHTTPProtocol>>#discoverReferencesForService: or >> GitSmartHTTPProtocol>>#invokeReceivePackWithRefs:andPack:deleting:) to >> repeat the request, does the same error occur again or does it work on >> second try? If the WebClient shows further problems, you can also try >> to restart the topmost SquitBrowser context that you find on the >> stack. >> >> About backing out: like Fabio said, the Git history is all on your >> disk and you can still pull/push/... with the Git command line. To see >> the files, you just have to checkout a commit (or reset --hard to see >> the latest files on the branch). Then you will find everything in >> filetree format (or Tonel if you configured it so). A converter exists >> for Monticello->Squot (see >> https://github.com/hpi-swa/Squot/#converting-monticello-history), but >> not for the other way around, since Squot repositories are just >> metadata-less filetree repositories. If someone really wants to build >> a converter for the other direction, they could probably learn from >> the existing converter and turn the read/write logic around. However, >> I would rather like to find and fix your push issue. >> >> Kind regards, >> Jakob >> >> Am Sa., 11. Juli 2020 um 08:43 Uhr schrieb Fabio Niephaus : >> > >> > Hi Eric: >> > >> > On Sat, Jul 11, 2020 at 2:07 AM Eric Gade wrote: >> > > >> > > Hi all, >> > > >> > > I have a project I've been working on using Squot and the new Git tools and pushing to a repository I have on Github. The repository is private but works with my username and password. I have been successfully pushing commits to it for a couple of weeks from the same image. This includes commits that I made yesterday. But today, suddenly, I am no longer able to push to my remote. Instead, I get the error in the attached image. >> > > >> > >> > Sorry to hear you're having issues pushing to remote from your image. >> > I have no idea what's going on, maybe renew your access token and try >> > again? What OS/VM/image are you using? >> > >> > > Note that I have not changed any Github settings or anything like that. So I'm not sure what has changed or what's going on. Any ideas? Is anyone else having this issue? If I wish to find a way to "back out" of using Squot, is there some way to convert everything to Monticello (filetree) and just push it manually from my terminal? >> > > >> > >> > No need to back out of using Squot just yet: when you added your >> > project, the GitBrowser asked you for a local directory. Although >> > Squot does not touch the working copy on the filesystem (the files >> > that end up on GitHub), it does keep the repository metadata >> > (everything in .git) in sync. So that means you can just push from >> > your terminal from your filesystem repository. This use case is one of >> > many reasons why Squot asks for a local directory. >> > >> > Hope this helps, >> > Fabio >> > >> > > -- >> > > Eric >> > > >> > >> > > > -- > Eric > From forums.jakob at resfarm.de Sat Jul 11 12:25:05 2020 From: forums.jakob at resfarm.de (Jakob Reschke) Date: Sat, 11 Jul 2020 14:25:05 +0200 Subject: [squeak-dev] Missing auth headers in WebClient request (was: Squot and Github) In-Reply-To: References: Message-ID: Hi all, Am Sa., 11. Juli 2020 um 13:53 Uhr schrieb Eric Gade : > >> Could you please inspect whether the `response request` actually >> contains authentication headers? I have seen in the past that >> sometimes the WebClient does not send them when it should. > > > It looks to me like the WebClient's response request (the original request sent I assume) headers *don't* have any Auth information: ` 'an OrderedCollection(''Content-Type''->''application/x-git-receive-pack-request'' ''Content-Length''->5343 ''User-Agent''->''git/2.0.5'' ''Host''->''github.com'')'` > To me these missing auth headers look like a WebClient bug because the GitSmartHTTPProtocol class (comes with the Git Browser) clearly supplies the credentials to the client (see discoverReferencesForService:, requestCredentials, applyCredentials) and uses the same WebClient instance for the whole push operation, which entails two requests (discover references is the first, invoke receive pack is the second). If the misbehavior triggers, the second request is usually the one that is missing the auth headers. I have already seen this sporadically myself, but not lately. Repeating the request (by restarting the method) usually resolves the problem. Does anyone have a hint? It is possible that I have wrong expectations about the WebClient interface and how it remembers the credentials... Kind regards, Jakob From trygver at ifi.uio.no Sat Jul 11 12:29:51 2020 From: trygver at ifi.uio.no (Trygve Reenskaug) Date: Sat, 11 Jul 2020 14:29:51 +0200 Subject: [squeak-dev] squeak logging package(s) In-Reply-To: <843BEF39-A2AD-4540-BE30-2075F3692E0B@rowledge.org> References: <316A3C4A-3EA3-4E38-AB11-0F8D40D025B9@rowledge.org> <843BEF39-A2AD-4540-BE30-2075F3692E0B@rowledge.org> Message-ID: <98f228a6-193d-8354-6014-4f9756093674@ifi.uio.no> Thank you for reminding me about the simulator. It sounds like a perfect foundation for dynamic reverse engineering, but it will take a lot of thought and work to make it into a usable tool. On 2020-07-10 22:11, tim Rowledge wrote: > >> On 2020-07-10, at 2:40 AM, Trygve Reenskaug wrote: >> >> I once did a VW program that logged the messages received by the instances of a class. > That's an interesting attack on a slightly different problem than mine; but I like the idea. If I needed to log the entire message flow I'd probably use a subclass of the simulator these days. A fast machine can simulate with bearable interactive performance, which is amazing. > > >> On 2020-07-10, at 12:44 PM, Robert Withers via Squeak-dev wrote: >> >> I would take this opportunity to point out the TraceMonitor [1] package in Cryptography. > That looks interesting, and since I am already loading the cryptography package it will be easy to just include. I'll see how it goes! > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Useful Latin Phrases:- Re vera, potas bene = Say, you sure are drinking a lot. > > > -- /The essence of object orientation is that objects collaborateto achieve a goal. / Trygve Reenskaug mailto: trygver at ifi.uio.no Morgedalsvn. 5A http://folk.uio.no/trygver/ N-0378 Oslo http://fullOO.info Norway                     Tel: (+47) 468 58 625 -------------- next part -------------- An HTML attachment was scrubbed... URL: From leves at caesar.elte.hu Sat Jul 11 13:32:12 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sat, 11 Jul 2020 15:32:12 +0200 (CEST) Subject: [squeak-dev] Missing auth headers in WebClient request (was: Squot and Github) In-Reply-To: References: Message-ID: On Sat, 11 Jul 2020, Jakob Reschke wrote: > Hi all, > > Am Sa., 11. Juli 2020 um 13:53 Uhr schrieb Eric Gade : >> >>> Could you please inspect whether the `response request` actually >>> contains authentication headers? I have seen in the past that >>> sometimes the WebClient does not send them when it should. >> >> >> It looks to me like the WebClient's response request (the original request sent I assume) headers *don't* have any Auth information: ` 'an OrderedCollection(''Content-Type''->''application/x-git-receive-pack-request'' ''Content-Length''->5343 ''User-Agent''->''git/2.0.5'' ''Host''->''github.com'')'` >> > > To me these missing auth headers look like a WebClient bug because the > GitSmartHTTPProtocol class (comes with the Git Browser) clearly > supplies the credentials to the client (see > discoverReferencesForService:, requestCredentials, applyCredentials) > and uses the same WebClient instance for the whole push operation, > which entails two requests (discover references is the first, invoke > receive pack is the second). > > If the misbehavior triggers, the second request is usually the one > that is missing the auth headers. I have already seen this > sporadically myself, but not lately. Repeating the request (by > restarting the method) usually resolves the problem. > > Does anyone have a hint? It is possible that I have wrong expectations > about the WebClient interface and how it remembers the credentials... Perhaps this part of WebClient >> #sendRequest:contentBlock: is responsible: "Flush previous authState. XXXX: Fixme. authState must be preserved for pre-authentication of requests." self flushAuthState. #flushAuthState removes the passed credentials. Also, any kind of redirect will remove the credentials. Levente > > Kind regards, > Jakob From leves at caesar.elte.hu Sat Jul 11 13:46:50 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sat, 11 Jul 2020 15:46:50 +0200 (CEST) Subject: [squeak-dev] The Inbox: Graphics-kfr.434.mcz In-Reply-To: References: Message-ID: Hi Karl, While both changes look right, they modify the behavior of those methods when their argument is an empty list. Instead of raising an error, they'll return a Rectangle with both fields set to nil. If the argument is really a list - aka SequenceableCollection, I suggest using more specific methods instead of #do: to process the list in order to trigger the error as soon as possible. For example, use #first to get the first element and #allButFirstDo: to iterate over the rest. That would simplify the method as well by making the nil checks unnecessary. Levente On Sat, 11 Jul 2020, commits at source.squeak.org wrote: > A new version of Graphics was added to project The Inbox: > http://source.squeak.org/inbox/Graphics-kfr.434.mcz > > ==================== Summary ==================== > > Name: Graphics-kfr.434 > Author: kfr > Time: 11 July 2020, 10:18:06.272175 am > UUID: 0e0125f6-3040-6247-9e5a-43bfd1896f84 > Ancestors: Graphics-mt.433 > > I wanted to subclass Rectangle with a instance variable to carry some state, but these methodes indirected to Point>>corner: so it broke the override and returned a ordinary Rectangle instead of my fancy new subclass SuperRectangle > > =============== Diff against Graphics-mt.433 =============== > > Item was changed: > ----- Method: Rectangle class>>encompassing: (in category 'instance creation') ----- > encompassing: listOfPoints > "A number of callers of encompass: should use this method." > | topLeft bottomRight | > topLeft := bottomRight := nil. > listOfPoints do: > [:p | topLeft == nil > ifTrue: [topLeft := bottomRight := p] > ifFalse: [topLeft := topLeft min: p. > bottomRight := bottomRight max: p]]. > + ^self origin: topLeft corner: bottomRight! > - ^ topLeft corner: bottomRight! > > Item was changed: > ----- Method: Rectangle class>>merging: (in category 'instance creation') ----- > merging: listOfRects > "A number of callers of merge: should use this method." > | minX minY maxX maxY | > listOfRects > do: [:r | minX > ifNil: [minX := r topLeft x. minY := r topLeft y. > maxX := r bottomRight x. maxY := r bottomRight y] > ifNotNil: [minX := minX min: r topLeft x. minY := minY min: r topLeft y. > maxX := maxX max: r bottomRight x. maxY := maxY max: r bottomRight y]]. > + ^ self origin:minX at minY corner: maxX at maxY! > - ^ minX at minY corner: maxX at maxY! From builds at travis-ci.org Sat Jul 11 14:27:38 2020 From: builds at travis-ci.org (Travis CI) Date: Sat, 11 Jul 2020 14:27:38 +0000 Subject: [squeak-dev] [CRON] Errored: squeak-smalltalk/squeak-app#1755 (squeak-trunk - 25ebaf1) In-Reply-To: Message-ID: <5f09cc55d52ab_13fbeda4b3114177642@travis-tasks-6bd9b7b459-kf77b.mail> Build Update for squeak-smalltalk/squeak-app ------------------------------------- Build: #1755 Status: Errored Duration: 17 mins and 45 secs Commit: 25ebaf1 (squeak-trunk) Author: Marcel Taeumel Message: Hi all! The project "squeak-app" is part of the continuous build infrastructure (short: CI) for Squeak's bundles, which you can download at https://files.squeak.org/, followed by the version tag you are looking for. All bundles are updated on a regular basis, which is daily for Trunk (i.e. the current alpha version) and monthly for release versions. Note that there won't be new bundles if Squeak's build number, which reflects in-image code updates, did not change between CI jobs. -- The Squeak Oversight Board [ci skip] View the changeset: https://github.com/squeak-smalltalk/squeak-app/compare/fb55517f583fe544f9225413a23fe82a680200c2...25ebaf18249322227da1f7c767384cb35082fab7 View the full build log and details: https://travis-ci.org/github/squeak-smalltalk/squeak-app/builds/707164943?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the squeak-smalltalk/squeak-app repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8901856&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Sat Jul 11 14:59:21 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sat, 11 Jul 2020 14:59:21 0000 Subject: [squeak-dev] The Inbox: Graphics-kfr.435.mcz Message-ID: A new version of Graphics was added to project The Inbox: http://source.squeak.org/inbox/Graphics-kfr.435.mcz ==================== Summary ==================== Name: Graphics-kfr.435 Author: kfr Time: 11 July 2020, 4:59:11.970242 pm UUID: 2ded852c-61bf-9c45-be09-6acb12a6b592 Ancestors: Graphics-kfr.434 I wanted to subclass Rectangle with a instance variable to carry some state, but these methodes indirected to Point>>corner: so it broke the override and returned a ordinary Rectangle instead of my fancy new subclass SuperRectangle Updated to use #first to get the first element and #allButFirstDo: to iterate over the rest. (Suggested by Levente Uzonyi) =============== Diff against Graphics-kfr.434 =============== Item was changed: ----- Method: Rectangle class>>encompassing: (in category 'instance creation') ----- encompassing: listOfPoints "A number of callers of encompass: should use this method." | topLeft bottomRight | + topLeft := bottomRight := listOfPoints first. + listOfPoints allButFirstDo: + [:p |topLeft := topLeft min: p. + bottomRight := bottomRight max: p]. - topLeft := bottomRight := nil. - listOfPoints do: - [:p | topLeft == nil - ifTrue: [topLeft := bottomRight := p] - ifFalse: [topLeft := topLeft min: p. - bottomRight := bottomRight max: p]]. ^self origin: topLeft corner: bottomRight! Item was changed: ----- Method: Rectangle class>>merging: (in category 'instance creation') ----- merging: listOfRects "A number of callers of merge: should use this method." + | bottomRight topLeft | + topLeft := listOfRects first topLeft. + bottomRight := listOfRects first bottomRight. - | minX minY maxX maxY | listOfRects + allButFirstDo: [:r | topLeft := topLeft min: r topLeft. + bottomRight := bottomRight max: r bottomRight]. + ^self origin: topLeft corner: bottomRight. + ! - do: [:r | minX - ifNil: [minX := r topLeft x. minY := r topLeft y. - maxX := r bottomRight x. maxY := r bottomRight y] - ifNotNil: [minX := minX min: r topLeft x. minY := minY min: r topLeft y. - maxX := maxX max: r bottomRight x. maxY := maxY max: r bottomRight y]]. - ^ self origin:minX at minY corner: maxX at maxY! From karlramberg at gmail.com Sat Jul 11 15:03:19 2020 From: karlramberg at gmail.com (karl ramberg) Date: Sat, 11 Jul 2020 17:03:19 +0200 Subject: [squeak-dev] The Inbox: Graphics-kfr.434.mcz In-Reply-To: References: Message-ID: Thanks for the suggestion. I uploaded a new version based on it. Best, Karl On Sat, Jul 11, 2020 at 3:49 PM Levente Uzonyi wrote: > Hi Karl, > > While both changes look right, they modify the behavior of those methods > when their argument is an empty list. > Instead of raising an error, they'll return a Rectangle with both fields > set to nil. > If the argument is really a list - aka SequenceableCollection, I suggest > using more specific methods instead of #do: to process the list in order > to trigger the error as soon as possible. > For example, use #first to get the first element and #allButFirstDo: to > iterate over the rest. That would simplify the method as well by making > the nil checks unnecessary. > > > Levente > > On Sat, 11 Jul 2020, commits at source.squeak.org wrote: > > > A new version of Graphics was added to project The Inbox: > > http://source.squeak.org/inbox/Graphics-kfr.434.mcz > > > > ==================== Summary ==================== > > > > Name: Graphics-kfr.434 > > Author: kfr > > Time: 11 July 2020, 10:18:06.272175 am > > UUID: 0e0125f6-3040-6247-9e5a-43bfd1896f84 > > Ancestors: Graphics-mt.433 > > > > I wanted to subclass Rectangle with a instance variable to carry some > state, but these methodes indirected to Point>>corner: so it broke the > override and returned a ordinary Rectangle instead of my fancy new subclass > SuperRectangle > > > > =============== Diff against Graphics-mt.433 =============== > > > > Item was changed: > > ----- Method: Rectangle class>>encompassing: (in category 'instance > creation') ----- > > encompassing: listOfPoints > > "A number of callers of encompass: should use this method." > > | topLeft bottomRight | > > topLeft := bottomRight := nil. > > listOfPoints do: > > [:p | topLeft == nil > > ifTrue: [topLeft := bottomRight := p] > > ifFalse: [topLeft := topLeft min: p. > > bottomRight := bottomRight max: > p]]. > > + ^self origin: topLeft corner: bottomRight! > > - ^ topLeft corner: bottomRight! > > > > Item was changed: > > ----- Method: Rectangle class>>merging: (in category 'instance > creation') ----- > > merging: listOfRects > > "A number of callers of merge: should use this method." > > | minX minY maxX maxY | > > listOfRects > > do: [:r | minX > > ifNil: [minX := r topLeft x. minY := r > topLeft y. > > maxX := r bottomRight x. maxY := r > bottomRight y] > > ifNotNil: [minX := minX min: r topLeft x. > minY := minY min: r topLeft y. > > maxX := maxX max: r bottomRight x. > maxY := maxY max: r bottomRight y]]. > > + ^ self origin:minX at minY corner: maxX at maxY! > > - ^ minX at minY corner: maxX at maxY! > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From stephen at heaveneverywhere.com Sat Jul 11 18:02:37 2020 From: stephen at heaveneverywhere.com (Stephen Pope) Date: Sat, 11 Jul 2020 11:02:37 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <5593C678-5CD0-43D7-A72A-84B4C3D92A7B@heaveneverywhere.com> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <5593C678-5CD0-43D7-A72A-84B4C3D92A7B@heaveneverywhere.com> Message-ID: <97F2A1A6-06AF-4DB2-A79D-816DCFFAAFF9@heaveneverywhere.com> To put it bluntly: I gave porting old-school MVC to Cuis. [flame on] Morphic is miserable and really needs to be replaced by MVC, though (IMHO). Why? 1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring. 2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern ) and should be applied to everything where one builds trees, such as view hierarchies. The root view object should not have subviews, the view-composite should. (I know that old-school MVC didn’t do it that way, but new implementations certainly should). 3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables. 4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds? I could go on… [flame off] It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5. stp -- Stephen Travis Pope Santa Barbara, California, USA http://HeavenEverywhere.com http://FASTLabInc.com https://vimeo.com/user19434036/videos http://heaveneverywhere.com/Reflections -- > On Jul 9, 2020, at 11:12 PM, stephen at heaveneverywhere.com wrote: > > > …on a related topic, I’ve started porting old-school MVC* to Cuis with the intention of replacing Morphic with a generic framework that can be back-ended by BitBLT, OpenGL or HTML5. > > Anybody want to help? > > Stephen > > * = starting with traditional MVC classes and system windows, and following that with some version of the “Wrapper” framework as still used in VisualWorks. > > > -- > > Stephen Travis Pope Santa Barbara, California, USA > http://HeavenEverywhere.com http://FASTLabInc.com > https://vimeo.com/user19434036/videos http://heaveneverywhere.com/Reflections > > -- > > > >> On Jun 28, 2020, at 5:53 PM, tim Rowledge > wrote: >> >> Seriously. We've been sitting around twiddling thumbs about better graphics for decades now. >> >> We had Balloon2D & 3D. >> We had 'Pooh graphics' to do vector forms. >> We have some excellent stuff being done by the Cuis crew. >> We have some amazing ideas from Nile/Gezira. >> We have a number of potential 3rd party graphics libraries we might adopt. >> We have an advanced JIT that could be used to make on-demand graphics routines either on their own or working with pretty much any of the above. >> We probably have other options I've not even heard of. >> >> Maybe we should actually do something? Can we at least talk about it? >> >> tim >> -- >> tim Rowledge; tim at rowledge.org ; http://www.rowledge.org/tim >> Strange OpCodes: SVE: Skip on Vernal Equinox >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: pastedGraphic.tiff Type: image/tiff Size: 2442 bytes Desc: not available URL: From lecteur at zogotounga.net Sat Jul 11 18:41:42 2020 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Sat, 11 Jul 2020 20:41:42 +0200 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <97F2A1A6-06AF-4DB2-A79D-816DCFFAAFF9@heaveneverywhere.com> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <5593C678-5CD0-43D7-A72A-84B4C3D92A7B@heaveneverywhere.com> <97F2A1A6-06AF-4DB2-A79D-816DCFFAAFF9@heaveneverywhere.com> Message-ID: > To put it bluntly: I gave porting old-school MVC to Cuis. > > [flame on] Morphic is miserable and really needs to be replaced by MVC, > though (IMHO). There is no need to replace it: we already have MVC projects alongside morphic projects, so you can choose the framework you want. In fact the top project in Squeak 5.3 is a MVC one. > It would be really nice to have a simple MVC (and display-list graphics) > framework that could be placed on top of several graphics back-ends > including BitBLT, OpenGL and HTML5. I guess now the question is: what features are missing in MVC that you need? Stef From Christoph.Thiede at student.hpi.uni-potsdam.de Sat Jul 11 18:44:42 2020 From: Christoph.Thiede at student.hpi.uni-potsdam.de (Thiede, Christoph) Date: Sat, 11 Jul 2020 18:44:42 +0000 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <97F2A1A6-06AF-4DB2-A79D-816DCFFAAFF9@heaveneverywhere.com> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <5593C678-5CD0-43D7-A72A-84B4C3D92A7B@heaveneverywhere.com>, <97F2A1A6-06AF-4DB2-A79D-816DCFFAAFF9@heaveneverywhere.com> Message-ID: <4c467091caac43059d676a0adf952f2b@student.hpi.uni-potsdam.de> Hi Stephen, > 1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring. Afaik a good equivalent for that separation in Morphic are morph + model. If you are going to develop a sophisticated UI, you can use the ToolBuilder framework, and your tool will be even decoupled from the UI framework. > 2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies. Morphic uses the composite pattern, too, doesn't it? All morphs are nested in each other, beginning at the root morph (the world), and form a big object tree, just like MVC does. Please correct me if I am wrong. > 3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables. And class View has 13 instance variables. :-) I agree with you that abstract class should not have any unnecessary state, but in fact, graphics aren't a completely abstract domain. A minimum of geometry information (bounds) is vital for graphic representation, and some node links (submorphs, owner) are vital, too, for navigating through the Morphic tree. Note that Morph even has a cleaned-up state by extracting all non-crucial fields into the extension object. > 4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds? I'm afraid I don't get your point here. My image does not even know the selector #morphBounds. But #extent, #width, and #height, for example, are derived attributes, which means that an implementor only needs to manipulate the single underlying representation, which is bounds, in order to adjust all specified attributes. Are you desiring something like an abstract morph interface that does not yet define core and derived attributes? It's true that Morph is not an abstract class (Morph new openInWorld works like a charm), but in which practical example would you need this? > It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5. That's an interesting thought! As said above, Morphic is a composite framework, too, so couldn't you start by implementing #printHtmlOn: on Morph, next to #drawOn:? But in practice, I guess your desire would be very hard to achieve because HTML5 is a high-level OO framework while OpenGL operates on a quite low level. HTML5 is kind of a competing object tree against Morphic, so you could either try to keep two trees in sync or rebuild one of the trees periodically, which would be performance-extensive. For OpenGL, couldn't something like an OpenGLCanvas be a starting point? Best, Christoph ________________________________ Von: Squeak-dev im Auftrag von Stephen Pope Gesendet: Samstag, 11. Juli 2020 20:02:37 An: The general-purpose Squeak developers list; Discussion of Cuis Smalltalk Betreff: Re: [squeak-dev] We need to talk about graphics To put it bluntly: I gave porting old-school MVC to Cuis. [flame on] Morphic is miserable and really needs to be replaced by MVC, though (IMHO). Why? 1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring. 2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies. The root view object should not have subviews, the view-composite should. (I know that old-school MVC didn’t do it that way, but new implementations certainly should). 3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables. 4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds? I could go on… [flame off] It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5. stp -- Stephen Travis Pope Santa Barbara, California, USA http://HeavenEverywhere.com http://FASTLabInc.com https://vimeo.com/user19434036/videos http://heaveneverywhere.com/Reflections -- On Jul 9, 2020, at 11:12 PM, stephen at heaveneverywhere.com wrote: …on a related topic, I’ve started porting old-school MVC* to Cuis with the intention of replacing Morphic with a generic framework that can be back-ended by BitBLT, OpenGL or HTML5. Anybody want to help? Stephen * = starting with traditional MVC classes and system windows, and following that with some version of the “Wrapper” framework as still used in VisualWorks. -- Stephen Travis Pope Santa Barbara, California, USA http://HeavenEverywhere.com http://FASTLabInc.com https://vimeo.com/user19434036/videos http://heaveneverywhere.com/Reflections -- On Jun 28, 2020, at 5:53 PM, tim Rowledge > wrote: Seriously. We've been sitting around twiddling thumbs about better graphics for decades now. We had Balloon2D & 3D. We had 'Pooh graphics' to do vector forms. We have some excellent stuff being done by the Cuis crew. We have some amazing ideas from Nile/Gezira. We have a number of potential 3rd party graphics libraries we might adopt. We have an advanced JIT that could be used to make on-demand graphics routines either on their own or working with pretty much any of the above. We probably have other options I've not even heard of. Maybe we should actually do something? Can we at least talk about it? tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Strange OpCodes: SVE: Skip on Vernal Equinox -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: pastedGraphic.tiff Type: image/tiff Size: 2442 bytes Desc: pastedGraphic.tiff URL: From tim at rowledge.org Sat Jul 11 21:05:24 2020 From: tim at rowledge.org (tim Rowledge) Date: Sat, 11 Jul 2020 14:05:24 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> Message-ID: > On 2020-07-10, at 1:12 AM, Craig Latta wrote: > > > Hi Tim-- > >> Seriously. We've been sitting around twiddling thumbs about better >> graphics for decades now. > > I'd like to see a concise description of the problem. You used the > word "better", so I take it you find the current graphics deficient. How? Well, at least in part the issue is that we collectively have been waffling on about 'making better graphics' for about as long as my email record has existed. So it's not solely about what I want, more as case of 'can we try to get something complete?'. For myself, I'd like to see better rendered text and non-orthogonal lines. Circles, for example. My example here is the little collection of gauges I have for my weather station display. The round gauges as originally done looked terrible. Bob A offered a better circle drawing algorithm and with some over sampling it is a lot better - but still ugly. Our typical fonts are ok but could be a lot better. Not to mention the slightly higher level issue of the font/style & tools. We made a few improvements in that area with the Sophie project, way back. Not many things *I* want to do are very performance limited, so that isn't something that exercises *me* but I'm sure others have very different perspectives. I have played a little with a Frank image to see if the Nile/Gezira system as-is does much better. For a circle, for example, it does do somewhat better *if* the stroke alpha is set to ~0.5. I'm way to out of the world of computer graphics to say more than that. I suspect that somewhat decoupling the graphics from explicit pixel considerations might help with handling super-resolution screens nicely. Vector graphics improvements to draw our tools would probably be nice. As I said, it's not so much about what I want as a plea to see if we can actually get *something* done. Lots of us have ideas about what 'something' is. Let's hear some of them. > > I'm interested in the topic, and have some time. At the moment, all > my graphics energy goes into leveraging in SqueakJS what others have > done for web browsers, which is quite a lot. Yeah, and your demos are amazing. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Useful random insult:- The wheel's spinning but the hamster's dead. From tim at rowledge.org Sun Jul 12 02:29:16 2020 From: tim at rowledge.org (tim Rowledge) Date: Sat, 11 Jul 2020 19:29:16 -0700 Subject: [squeak-dev] WatchMorph as an example of anti-aliasing going a bit odd (was Re: We need to talk about graphics) In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> Message-ID: <6A0144EE-EFD9-4D02-BD95-5FE7ECE6E914@rowledge.org> Playing with stuff; tried a WatchMorph to look at circles drawn by Balloon. Grabbing one via World->new morph->from alphabetical list produces a decently round clockface with a coloured centre section. However, using the debug menu to turn on the anti-aliasing results in a rather ugly lumpiness, as if it were a fruit that has been poked a bit too often to test for ripeness. Weird. The B2Dplugin appears to be active and I can make it do profiling etc that makes it pretty certain it is being used. Is this an ARM/Pi issue... nope, looks the same on a Mac system. tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Gotta run, the cat's caught in the printer. -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Screen Shot 2020-07-11 at 7.21.09 PM.png Type: image/png Size: 7356 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Screen Shot 2020-07-11 at 7.21.20 PM.png Type: image/png Size: 10848 bytes Desc: not available URL: From smalltalker2 at mac.com Sun Jul 12 06:54:03 2020 From: smalltalker2 at mac.com (John Pfersich) Date: Sat, 11 Jul 2020 23:54:03 -0700 Subject: [squeak-dev] Installer loading cryptography mcm files: used to work (I think) and doesn't now In-Reply-To: References: Message-ID: Don’t I wish that were possible... /—————————————————————/ For encrypted mail use jgpfersich at protonmail.com - Free account at ProtonMail.com Web: https://objectnets.net and https://objectnets.org https://datascilv.com https://datascilv.org > On Jun 16, 2020, at 22:10, Tobias Pape wrote: > >  >> On 17.06.2020, at 05:39, tim Rowledge wrote: >> >> It'll do for today. Dang, that random sigline generator is on point today, too ... >> >> tim >> -- >> tim Rowledge; tim at rowledge.org ; http://www.rowledge.org/tim >> USER ERROR: replace user and press any key to continue. > > Just fell of my chair laughing :) > -t > -------------- next part -------------- An HTML attachment was scrubbed... URL: From karlramberg at gmail.com Sun Jul 12 10:54:10 2020 From: karlramberg at gmail.com (karl ramberg) Date: Sun, 12 Jul 2020 12:54:10 +0200 Subject: [squeak-dev] The Inbox: Graphics-kfr.434.mcz In-Reply-To: References: Message-ID: Hi, In Rectangle>>merging: it is quite a bit slower to use points topLeft and bottomRight, than reading out the min and max of each side. Also looping with allButFirstDo: is slower than the original method. This seems to be fastest: Rectangle>>merging: listOfRects "A number of callers of merge: should use this method." | minX minY maxX maxY | minX := listOfRects first topLeft x. minY := listOfRects first topLeft y. maxX := listOfRects first bottomRight x. maxY := listOfRects first bottomRight y. listOfRects do: [:r | minX := minX min: r topLeft x. minY := minY min: r topLeft y. maxX := maxX max: r bottomRight x. maxY := maxY max: r bottomRight y]. ^self origin: minX at minY corner: maxX at maxY Best, Karl On Sat, Jul 11, 2020 at 3:49 PM Levente Uzonyi wrote: > Hi Karl, > > While both changes look right, they modify the behavior of those methods > when their argument is an empty list. > Instead of raising an error, they'll return a Rectangle with both fields > set to nil. > If the argument is really a list - aka SequenceableCollection, I suggest > using more specific methods instead of #do: to process the list in order > to trigger the error as soon as possible. > For example, use #first to get the first element and #allButFirstDo: to > iterate over the rest. That would simplify the method as well by making > the nil checks unnecessary. > > > Levente > > On Sat, 11 Jul 2020, commits at source.squeak.org wrote: > > > A new version of Graphics was added to project The Inbox: > > http://source.squeak.org/inbox/Graphics-kfr.434.mcz > > > > ==================== Summary ==================== > > > > Name: Graphics-kfr.434 > > Author: kfr > > Time: 11 July 2020, 10:18:06.272175 am > > UUID: 0e0125f6-3040-6247-9e5a-43bfd1896f84 > > Ancestors: Graphics-mt.433 > > > > I wanted to subclass Rectangle with a instance variable to carry some > state, but these methodes indirected to Point>>corner: so it broke the > override and returned a ordinary Rectangle instead of my fancy new subclass > SuperRectangle > > > > =============== Diff against Graphics-mt.433 =============== > > > > Item was changed: > > ----- Method: Rectangle class>>encompassing: (in category 'instance > creation') ----- > > encompassing: listOfPoints > > "A number of callers of encompass: should use this method." > > | topLeft bottomRight | > > topLeft := bottomRight := nil. > > listOfPoints do: > > [:p | topLeft == nil > > ifTrue: [topLeft := bottomRight := p] > > ifFalse: [topLeft := topLeft min: p. > > bottomRight := bottomRight max: > p]]. > > + ^self origin: topLeft corner: bottomRight! > > - ^ topLeft corner: bottomRight! > > > > Item was changed: > > ----- Method: Rectangle class>>merging: (in category 'instance > creation') ----- > > merging: listOfRects > > "A number of callers of merge: should use this method." > > | minX minY maxX maxY | > > listOfRects > > do: [:r | minX > > ifNil: [minX := r topLeft x. minY := r > topLeft y. > > maxX := r bottomRight x. maxY := r > bottomRight y] > > ifNotNil: [minX := minX min: r topLeft x. > minY := minY min: r topLeft y. > > maxX := maxX max: r bottomRight x. > maxY := maxY max: r bottomRight y]]. > > + ^ self origin:minX at minY corner: maxX at maxY! > > - ^ minX at minY corner: maxX at maxY! > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From leves at caesar.elte.hu Sun Jul 12 14:10:19 2020 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun, 12 Jul 2020 16:10:19 +0200 (CEST) Subject: [squeak-dev] The Inbox: Graphics-kfr.434.mcz In-Reply-To: References: Message-ID: Hi Karl, On Sun, 12 Jul 2020, karl ramberg wrote: > Hi, > > In Rectangle>>merging: it is quite a bit slower to use points topLeft and bottomRight, than reading out the min and max of each side. Indeed. Each iteration creates a new point if you use points. > Also looping with allButFirstDo: is slower than the original method. I suppose your list of rectangles was an OrderedCollection when you measured performance because for most SequenceableCollections #allButFirstDo: is slightly faster than #do: by definition. OrderedCollection overrides #do: for better performance but does not have such implementation for #allButFirstDo:/#allButLastDo:. Levente > > This seems to be fastest: > > Rectangle>>merging: listOfRects > "A number of callers of merge: should use this method." > | minX minY maxX maxY | > minX := listOfRects first topLeft x. > minY := listOfRects first topLeft y. > maxX := listOfRects first bottomRight x. > maxY := listOfRects first bottomRight y. > listOfRects do: [:r | minX := minX min: r topLeft x. >              minY := minY min: r topLeft y. >              maxX := maxX max: r bottomRight x. >              maxY := maxY max: r bottomRight y]. > ^self origin: minX at minY corner: maxX at maxY > > Best, > Karl > > On Sat, Jul 11, 2020 at 3:49 PM Levente Uzonyi wrote: > Hi Karl, > > While both changes look right, they modify the behavior of those methods > when their argument is an empty list. > Instead of raising an error, they'll return a Rectangle with both fields > set to nil. > If the argument is really a list - aka SequenceableCollection, I suggest > using more specific methods instead of #do: to process the list in order > to trigger the error as soon as possible. > For example, use #first to get the first element and #allButFirstDo: to > iterate over the rest. That would simplify the method as well by making > the nil checks unnecessary. > > > Levente > > On Sat, 11 Jul 2020, commits at source.squeak.org wrote: > > > A new version of Graphics was added to project The Inbox: > > http://source.squeak.org/inbox/Graphics-kfr.434.mcz > > > > ==================== Summary ==================== > > > > Name: Graphics-kfr.434 > > Author: kfr > > Time: 11 July 2020, 10:18:06.272175 am > > UUID: 0e0125f6-3040-6247-9e5a-43bfd1896f84 > > Ancestors: Graphics-mt.433 > > > > I wanted to subclass Rectangle with a instance variable to carry some state, but these methodes indirected to Point>>corner: so it broke the override and returned a ordinary Rectangle instead of my fancy new > subclass SuperRectangle > > > > =============== Diff against Graphics-mt.433 =============== > > > > Item was changed: > >  ----- Method: Rectangle class>>encompassing: (in category 'instance creation') ----- > >  encompassing: listOfPoints > >       "A number of callers of encompass: should use this method." > >       | topLeft bottomRight | > >       topLeft := bottomRight := nil. > >       listOfPoints do: > >               [:p | topLeft == nil > >                       ifTrue: [topLeft := bottomRight := p] > >                       ifFalse: [topLeft := topLeft min: p. > >                                       bottomRight := bottomRight max: p]]. > > +     ^self origin: topLeft corner: bottomRight! > > -     ^ topLeft corner: bottomRight! > > > > Item was changed: > >  ----- Method: Rectangle class>>merging: (in category 'instance creation') ----- > >  merging: listOfRects > >       "A number of callers of merge: should use this method." > >       | minX minY maxX maxY | > >       listOfRects > >               do: [:r | minX > >                               ifNil: [minX := r topLeft x. minY := r topLeft y. > >                                       maxX := r bottomRight x. maxY := r bottomRight y] > >                               ifNotNil: [minX := minX min: r topLeft x. minY := minY min: r topLeft y. > >                                       maxX := maxX max: r bottomRight x. maxY := maxY max: r bottomRight y]]. > > +     ^ self origin:minX at minY corner: maxX at maxY! > > -     ^ minX at minY corner: maxX at maxY! > > > From commits at source.squeak.org Sun Jul 12 14:14:05 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Sun, 12 Jul 2020 14:14:05 0000 Subject: [squeak-dev] The Trunk: Collections-ul.902.mcz Message-ID: Levente Uzonyi uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-ul.902.mcz ==================== Summary ==================== Name: Collections-ul.902 Author: ul Time: 12 July 2020, 4:13:31.850218 pm UUID: 75865200-256c-40b8-9303-ec9a473c16cf Ancestors: Collections-ul.901 OrderedCollection changes: - override #allButFirstDo: and #allButLastDo: the same way #do: is done to achive better performance - use #to:do: instead of #whileTrue: in all methods iterating over the internal indices =============== Diff against Collections-ul.901 =============== Item was added: + ----- Method: OrderedCollection>>allButFirstDo: (in category 'enumerating') ----- + allButFirstDo: aBlock + "Override the superclass for performance reasons." + + firstIndex + 1 to: lastIndex do: [ :index | + aBlock value: (array at: index) ]! Item was added: + ----- Method: OrderedCollection>>allButLastDo: (in category 'enumerating') ----- + allButLastDo: aBlock + "Override the superclass for performance reasons." + + firstIndex to: lastIndex - 1 do: [ :index | + aBlock value: (array at: index) ]! Item was changed: ----- Method: OrderedCollection>>do: (in category 'enumerating') ----- do: aBlock "Override the superclass for performance reasons." + + firstIndex to: lastIndex do: [ :index | + aBlock value: (array at: index) ]! - | index | - index := firstIndex. - [index <= lastIndex] - whileTrue: - [aBlock value: (array at: index). - index := index + 1]! Item was changed: ----- Method: OrderedCollection>>find: (in category 'private') ----- find: oldObject " This method answers an index in the range firstIndex .. lastIndex, which is meant for internal use only. Never use this method in your code, the methods for public use are: #indexOf: #indexOf:ifAbsent: " + firstIndex to: lastIndex do: [ :index | + (array at: index) = oldObject ifTrue: [ ^index ] ]. - | index | - index := firstIndex. - [index <= lastIndex] - whileTrue: - [(array at: index) = oldObject ifTrue: [^ index]. - index := index + 1]. self errorNotFound: oldObject! Item was changed: ----- Method: OrderedCollection>>remove:ifAbsent: (in category 'removing') ----- remove: oldObject ifAbsent: absentBlock + firstIndex to: lastIndex do: [ :index | + (array at: index) = oldObject ifTrue: [ + self removeIndex: index. + ^oldObject ] ]. + ^absentBlock value! - | index | - index := firstIndex. - [index <= lastIndex] - whileTrue: - [oldObject = (array at: index) - ifTrue: - [self removeIndex: index. - ^ oldObject] - ifFalse: [index := index + 1]]. - ^ absentBlock value! Item was changed: ----- Method: OrderedCollection>>reverseDo: (in category 'enumerating') ----- reverseDo: aBlock "Override the superclass for performance reasons." + + lastIndex to: firstIndex by: -1 do: [ :index | + aBlock value: (array at: index) ]! - | index | - index := lastIndex. - [index >= firstIndex] - whileTrue: - [aBlock value: (array at: index). - index := index - 1]! From builds at travis-ci.org Sun Jul 12 14:27:50 2020 From: builds at travis-ci.org (Travis CI) Date: Sun, 12 Jul 2020 14:27:50 +0000 Subject: [squeak-dev] [CRON] Errored: squeak-smalltalk/squeak-app#1756 (squeak-trunk - 25ebaf1) In-Reply-To: Message-ID: <5f0b1de5a34ba_13f8e9649ed7818022@travis-tasks-6c6547cfb5-kwd58.mail> Build Update for squeak-smalltalk/squeak-app ------------------------------------- Build: #1756 Status: Errored Duration: 17 mins and 25 secs Commit: 25ebaf1 (squeak-trunk) Author: Marcel Taeumel Message: Hi all! The project "squeak-app" is part of the continuous build infrastructure (short: CI) for Squeak's bundles, which you can download at https://files.squeak.org/, followed by the version tag you are looking for. All bundles are updated on a regular basis, which is daily for Trunk (i.e. the current alpha version) and monthly for release versions. Note that there won't be new bundles if Squeak's build number, which reflects in-image code updates, did not change between CI jobs. -- The Squeak Oversight Board [ci skip] View the changeset: https://github.com/squeak-smalltalk/squeak-app/compare/fb55517f583fe544f9225413a23fe82a680200c2...25ebaf18249322227da1f7c767384cb35082fab7 View the full build log and details: https://travis-ci.org/github/squeak-smalltalk/squeak-app/builds/707368465?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the squeak-smalltalk/squeak-app repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8901856&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From karlramberg at gmail.com Sun Jul 12 15:17:06 2020 From: karlramberg at gmail.com (karl ramberg) Date: Sun, 12 Jul 2020 17:17:06 +0200 Subject: [squeak-dev] The Inbox: Graphics-kfr.434.mcz In-Reply-To: References: Message-ID: Yes, I tested with OrderedCollection. Changed to Array and the speed was better. It seems most senders of the Rectangle>>merging: are with Array eg: subBnds := Rectangle merging: (submorphs collect: [:m | m fullBounds]). But DamageRecorder is an OrderedCollection for example. I'm not sure how big impact speed will have here though. I can't measure speed difference for small collections with up to 5000 elements (which will probably cover most use cases) Change set in attachment. Best, Karl On Sun, Jul 12, 2020 at 4:12 PM Levente Uzonyi wrote: > Hi Karl, > > On Sun, 12 Jul 2020, karl ramberg wrote: > > > Hi, > > > > In Rectangle>>merging: it is quite a bit slower to use points topLeft > and bottomRight, than reading out the min and max of each side. > > Indeed. Each iteration creates a new point if you use points. > > > Also looping with allButFirstDo: is slower than the original method. > > I suppose your list of rectangles was an OrderedCollection when you > measured performance because for most SequenceableCollections > #allButFirstDo: is slightly faster than #do: by definition. > OrderedCollection overrides #do: for better performance but does not > have such implementation for #allButFirstDo:/#allButLastDo:. > > > Levente > > > > > This seems to be fastest: > > > > Rectangle>>merging: listOfRects > > "A number of callers of merge: should use this method." > > | minX minY maxX maxY | > > minX := listOfRects first topLeft x. > > minY := listOfRects first topLeft y. > > maxX := listOfRects first bottomRight x. > > maxY := listOfRects first bottomRight y. > > listOfRects do: [:r | minX := minX min: r topLeft x. > > minY := minY min: r topLeft y. > > maxX := maxX max: r bottomRight x. > > maxY := maxY max: r bottomRight y]. > > ^self origin: minX at minY corner: maxX at maxY > > > > Best, > > Karl > > > > On Sat, Jul 11, 2020 at 3:49 PM Levente Uzonyi > wrote: > > Hi Karl, > > > > While both changes look right, they modify the behavior of those > methods > > when their argument is an empty list. > > Instead of raising an error, they'll return a Rectangle with both > fields > > set to nil. > > If the argument is really a list - aka SequenceableCollection, I > suggest > > using more specific methods instead of #do: to process the list in > order > > to trigger the error as soon as possible. > > For example, use #first to get the first element and > #allButFirstDo: to > > iterate over the rest. That would simplify the method as well by > making > > the nil checks unnecessary. > > > > > > Levente > > > > On Sat, 11 Jul 2020, commits at source.squeak.org wrote: > > > > > A new version of Graphics was added to project The Inbox: > > > http://source.squeak.org/inbox/Graphics-kfr.434.mcz > > > > > > ==================== Summary ==================== > > > > > > Name: Graphics-kfr.434 > > > Author: kfr > > > Time: 11 July 2020, 10:18:06.272175 am > > > UUID: 0e0125f6-3040-6247-9e5a-43bfd1896f84 > > > Ancestors: Graphics-mt.433 > > > > > > I wanted to subclass Rectangle with a instance variable to carry > some state, but these methodes indirected to Point>>corner: so it broke the > override and returned a ordinary Rectangle instead of my fancy new > > subclass SuperRectangle > > > > > > =============== Diff against Graphics-mt.433 =============== > > > > > > Item was changed: > > > ----- Method: Rectangle class>>encompassing: (in category > 'instance creation') ----- > > > encompassing: listOfPoints > > > "A number of callers of encompass: should use this method." > > > | topLeft bottomRight | > > > topLeft := bottomRight := nil. > > > listOfPoints do: > > > [:p | topLeft == nil > > > ifTrue: [topLeft := bottomRight := p] > > > ifFalse: [topLeft := topLeft min: p. > > > bottomRight := bottomRight > max: p]]. > > > + ^self origin: topLeft corner: bottomRight! > > > - ^ topLeft corner: bottomRight! > > > > > > Item was changed: > > > ----- Method: Rectangle class>>merging: (in category 'instance > creation') ----- > > > merging: listOfRects > > > "A number of callers of merge: should use this method." > > > | minX minY maxX maxY | > > > listOfRects > > > do: [:r | minX > > > ifNil: [minX := r topLeft x. minY > := r topLeft y. > > > maxX := r bottomRight x. > maxY := r bottomRight y] > > > ifNotNil: [minX := minX min: r > topLeft x. minY := minY min: r topLeft y. > > > maxX := maxX max: r > bottomRight x. maxY := maxY max: r bottomRight y]]. > > > + ^ self origin:minX at minY corner: maxX at maxY! > > > - ^ minX at minY corner: maxX at maxY! > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: RectangleMergeTesting.1.cs Type: application/octet-stream Size: 2688 bytes Desc: not available URL: From robert.withers at pm.me Sun Jul 12 17:33:09 2020 From: robert.withers at pm.me (Robert Withers) Date: Sun, 12 Jul 2020 17:33:09 +0000 Subject: [squeak-dev] On the rejection of Promises due to errors In-Reply-To: References: Message-ID: <4681739d-6353-e128-d06d-9853995f74fd@pm.me> Hi Jakob, I was wondering if you had any thoughts regarding PromisesLocal. Have you had a chance to look at this project? I suppose the promise protocol could be extended to capture the protocol specified in Promises/A+, but the same behavior is there (#whenResolved:). I added the ability to open a debugger when an exception gets thrown. Unfortunately, for now this exception blocks the event loop Process. I have another email on how to unblock the event loop Process, yet still open an appropriate Debugger Notifier. I would welcome any feedback you may have. I am working on the Remote version (PromisesRemote). You can load PromisesLocal and run the tests. > Installer ss project: 'Cryptography'; install: 'PromisesLocal'. Kindly, rabbit On 6/21/20 5:53 PM, Robert Withers wrote: > Hi Jakob, > > I also have a promises implementation for Squeak and Java, that was derived from ERights, which precedes the JavaScript impl, both by Mark Miller. They do NOT throw up exceptions but they do resolve the promise to a BrokenERef, encapsulating the exception. > > You can load the following and run the tests. > >> Installer ss project: 'Cryptography'; install: 'PromisesLocal'. > > Then I converted the first code you presented as the following. > >> promise := 1 eventual / 0. >> >> Number compile: 'methodWithTypo ^ self asstring'. >> promise := 1 eventual methodWithTypo. > > They both resolve to BrokenERefs. > > I got a little lost in capturing exceptions, within the Vat's event loop #processSends. I have tickled my implementation a little to try and get the Vat event thread to throw an exception, which presents a Debugger. I have been unable to pop up the Debugger on the error, but the promise does get smashed. > > These Promises also pipelines the failure to subsequent message sends, with subsequent broken promises. So this also breaks with ZeroDivide. > >> (1 eventual / 0) * 10. > > Here are the immediate promise return and the smashed promise to a BrokenERef. > > Kindly, > Robert > > On 6/21/20 4:57 PM, Jakob Reschke wrote: > >> Hi all, >> >> Tony has recently fixed our Promise implementation to make it more >> Promises/A+ compliant, thank you! >> >> In the discussion that lead to this fix [1], I already pointed out a >> difference between exceptions in Smalltalk and in JavaScript, where >> the Promises/A+ specification originates: Smalltalk exceptions can be >> resumed, while JavaScript exceptions cannot be resumed and always >> unroll the stack. >> >> The spec [2] says that if the onFulfilled or onRejected callback of a >> #then call on a promise throws an exception, then the promise returned >> by the #then call shall be rejected with the exception thrown. >> >> Our current Promise implementation matches this for the blocks >> supplied to #then:, #ifRejected: or #then:ifRejected, by catching all >> Errors in the blocks and rejecting the promise. But this does not >> allow a Squeak user to deal with exceptions in a debugger if they are >> signalled in the callbacks, because they are caught. The same also >> applies to #future promises. The latter are not really covered by the >> Promises/A+ spec (because it does not force the resolution or >> rejection of a promise that is not the result of a #then, and there is >> no #future in JavaScript), but futures exhibit the same problem of not >> being resumable in the debugger. Example: >> >> promise := 1 future / 0. "<= inspect it => promise is rejected, >> regardless of your actions in the debugger" >> Number compile: 'methodWithTypo ^ self asstring'. >> promise := 1 future methodWithTypo. "<= inspect it => promise is >> rejected, no chance to fix the misspelling of asString in the debugger >> and proceed" >> >> I could imagine instead letting all exceptions pass during the future >> or callback block evaluation, and only reject the promise if the >> evaluation is eventually curtailed due to the exception (be it an >> Error or not, think of Warning or ModificationForbidden). Example >> expectations: >> >> promise := 1 future / 0. "<= inspect it, press Proceed in the >> debugger, => promise is resolved" >> promise := 1 future / 0. "<= inspect it, press Abandon in the >> debugger, => promise is rejected" >> promise := 1 future methodWithTypo. "<= inspect it, fix the typo of >> asString in the debugger, proceed, => promise is resolved with '1'" >> >> It could be done by fulfilling a Promise about aBlock similar to this: >> >> [ self resolveWith: aBlock value ] >> on: Exception >> do: [ :ex | | resumed | >> resumed := false. >> [ | result | >> result := ex outer. >> resumed := true. >> ex resume: result] >> ifCurtailed: [resumed ifFalse: [self future rejectWith: ex]]] >> >> (Find the current implementations here: >> Promise>>#fulfillWith:passErrors: and Promise>>#then:ifRejected:) >> >> Note that the #outer send would only trigger handlers in the >> Project/World loop, or the defaultAction of the exception. The #future >> in front of #rejectWith: is there to avoid curtailing the unwind block >> context of ifCurtailed: itself if there are further errors in the >> rejection callbacks of the promise. The behavior of non-local exits >> from unwind contexts is undefined in the Smalltalk ANSI standard (just >> like resume: or return: in a defaultAction, or not sending resume: or >> return: in an on:do: exception handler at all -- VA Smalltalk >> interprets that as resume, while Squeak does return, for example). >> >> This implementation would also allow all deferred Notifications to >> pass and not reject the promise. That is because true notifications >> just resume silently if they are not handled. >> >> promise := [Notification signal: 'hi there'. 42] future value. "<= >> inspect it => Expected: resolved with 42. Actual (today): it is >> needlessly rejected with Notification 'hi there'" >> >> Pressing Proceed in the debugger on officially non-resumable errors >> (which is possible) would also not reject the promise. But further >> errors/debuggers are likely to appear, of which one may eventually be >> used to abort the execution. If the execution finishes after >> repeatedly pressing Proceed, then fine, resolve the promise with >> whatever the outcome was. >> >> promise := [self error: 'Fatal error'. 42] future value. "<= inspect >> it, proceed after the so-called fatal error, => Expected: resolved >> with 42. Actual: there is no debugger, the promise is immediately >> rejected." >> >> promise := [1 / 0 + 3] future value. "<= Cannot be resumed/proceeded >> because if ZeroDivide is resumed, it will return the exception, and >> ZeroDivide does not understand +, which cannot be resumed without >> changing the code. So you'd have to curtail the block execution => >> Expected: rejected with ZeroDivide or MessageNotUnderstood (depending >> on when you press Abandon or recompile the DoIt)." >> >> promise := [1 / 0 + 3] future value. "... or instead of changing the >> code or aborting, you could choose 'return entered value' in one of >> the debuggers, and thereby complete the evaluation of the block => >> Expected: resolved with whatever you entered to return in the >> debugger" >> >> Promises with whenRejected:/ifRejected: callbacks would no longer >> swallow errors, and would only be rejected when the user aborts in the >> debuggers, or if the future execution catches errors by itself and >> converts them to rejected promises, so the future promise will also be >> rejected. This could pose a compatibility problem for existing code. >> >> promise := (1 future / 0) then: [:result | result + 3] ifRejected: >> [:reason | #cancelled]. "<= inspect it => Actual: resolved with >> #cancelled immediately. Expected with my proposed changes: it would >> first show the ZeroDivide debugger, which you can abandon to resolve >> with #cancelled, or proceed to a MessageNotUnderstood +. If you >> abandon the MNU, the promise would be rejected with the MNU, not >> #cancelled, in accordance with the Promises/A+ spec." >> >> How to get back a catch-all->reject-immediately future under these >> circumstances: >> >> promise := [[1 / 0] on: Error do: [:e | e return: (Promise new >> rejectWith: e)]] future value. >> promise := [1 future + 1 then: [:n | [n / 0] on: Error do: [:e | e >> return: (Promise new rejectWith: e)]] future value. >> >> We could also introduce a convenience constructor for >> immediately-rejected promises like in JavaScript: Promise rejected: e. >> Or a convenience exception handler: [...] rejectOn: Error. Or [...] >> rejectIfCurtailed (the fullfill/then methods would probably use this >> as well). >> >> What do you think? >> >> As Tom Beckmann has already suggested in the last thread on the topic >> [1], I could also use a custom class of Promise to get just the >> behavior I want. But then I cannot solve it for the use of #future. At >> least not without patching something about the compiler in my package >> preamble... ;-) >> >> [1] >> http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-April/208546.html >> [2] >> https://promisesaplus.com/ >> Kind regards, >> Jakob -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: BrokenERef.jpeg Type: image/jpeg Size: 13669 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: PromiseERef.jpeg Type: image/jpeg Size: 14586 bytes Desc: not available URL: From robert.withers at pm.me Sun Jul 12 17:38:23 2020 From: robert.withers at pm.me (Robert Withers) Date: Sun, 12 Jul 2020 17:38:23 +0000 Subject: [squeak-dev] Short Stack exception presentation (was Re: Dual screen?) In-Reply-To: References: <5a557920-e941-2d62-5144-c6993550d90d@pm.me> <6BB60895-1A09-4F85-AFDD-0AD6E7C11E41@rowledge.org> <88caa1b0-25b4-2fb3-e53a-6144ae7e0077@pm.me> Message-ID: <6085c2c4-a33c-63c7-0a6d-a90b87ef7fdd@pm.me> On 6/26/20 2:37 PM, Robert Withers wrote: > On 6/26/20 1:55 PM, Robert Withers wrote: > >> Closer to my heart, at this point are my questions and request for help >> in splitting off a pruned stack for an exception, to unblock the event >> loop yet still allow introspection of an error, or a halt. Here is what >> I wrote. Tim, might you be able to advise me here? >> >> * >> >> lost >> >> * >> >> http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-June/210452.html The requirements for exceptions within an event loop are: - Copy stack - Restart eventLoop - Prune stack/Create Continuation - Open Debugger - When Proceeded, reschedule EventualMessageSend, on the Continuation, in the vat queue. Would someone please help me here? I am a little lost. I appreciate you! Kindly, rabbit > Not only do I want this, but the short stack, when Proceeded, should reschedule an eventual message on the event loop to reintroduce this short stack back into event loop land. As such, i was thinking perhaps a continuation could enable this. Liekwise, when a exception is thrown, do these steps: > >> - Modify the Vat to have a an active stack, a priority queue and a vat-aware continuation pool. >> - Copy the stack. Does this mean create a special continuation, that is event loop aware? >> - Resume the event loop by discarding the previous event handling exception. >> - Prune the stack (of the continuation). above and below. Site of signaled exception. >> - Open a Debugger >> - On Proceed, reschedule the eventual message in the Vat's queue. > > I have no idea what B looks like. Outside of my experience doing continuations and stack manipulation and pool scheduling. I need a VatSemaphore (please peruse the ResultSemaphore in PromisesRemote). I pray someone may swoop in with solutions! > > Kindly, > rabbit -------------- next part -------------- An HTML attachment was scrubbed... URL: From lewis at mail.msen.com Sun Jul 12 17:58:56 2020 From: lewis at mail.msen.com (David T. Lewis) Date: Sun, 12 Jul 2020 13:58:56 -0400 Subject: [squeak-dev] Proposal for new BitBlt rules (was: We need to talk about graphics) In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> <20200703202118.GB52195@shell.msen.com> Message-ID: <20200712175856.GA12960@shell.msen.com> Changing the subject line to focus on a specific proposal by Juan Vuletich for an enhancement to BitBlt rules. The idea originated from discussion on the Cuis list, and the proposal is documented in an opensmalltalk-vm issue here: https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505 While I am generally familiar with VM issues, I have no experience with BitBlt and I am not sure exactly what needs to be done to make this happen. There are VM (plugin) changes needed, and some image side support will needed as well (at least for fallback code in the image). So - who knows how to make this happen, and how do we make it so? Thanks, Dave On Fri, Jul 03, 2020 at 10:32:17PM +0200, Hilaire wrote: > Le 03/07/2020 ?? 22:21, David T. Lewis a ??crit??: > >>Juan proposed these primitives to speed up the rendering of > >>VectorGraphics Widget Morph. > >I remember a discussion about that, though I don't have a link to it. It > >sounds like we need to follow up on this and make something happen. > > Here it is: > > https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505 > > -- > Dr. Geo > http://drgeo.eu > https://pouet.chapril.org/@hilaire > > From tim at rowledge.org Sun Jul 12 18:01:47 2020 From: tim at rowledge.org (tim Rowledge) Date: Sun, 12 Jul 2020 11:01:47 -0700 Subject: [squeak-dev] A note for implementers of email programs (was Re: Installer loading cryptography mcm files: used to work (I think) and doesn't now) In-Reply-To: References: Message-ID: <3CF8E4D2-DC33-4967-87E0-AED45985F1E9@rowledge.org> In the event that any of you ever have a go at writing an email program, I do urge you to make sure that there is a way to hook up a random number generator and a user editable list of sigline entries. It's not a complex concept but it produces so many moments of "wuh? how on earth did it make such an apposite choice?" > On 2020-07-11, at 11:54 PM, John Pfersich via Squeak-dev wrote: > > Don’t I wish that were possible... > > /—————————————————————/ > For encrypted mail use jgpfersich at protonmail.com - Free account at ProtonMail.com > Web: https://objectnets.net and https://objectnets.org > https://datascilv.com https://datascilv.org > > >> On Jun 16, 2020, at 22:10, Tobias Pape wrote: >> >>  >>> On 17.06.2020, at 05:39, tim Rowledge wrote: >>> >>> It'll do for today. Dang, that random sigline generator is on point today, too ... >>> >>> tim >>> -- >>> tim Rowledge; tim at rowledge.org ; http://www.rowledge.org/tim >>> USER ERROR: replace user and press any key to continue. >> >> Just fell of my chair laughing :) >> -t >> > tim -- tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim Dukedom: aristocratic birth control From Yoshiki.Ohshima at acm.org Sun Jul 12 18:23:52 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sun, 12 Jul 2020 11:23:52 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> Message-ID: Hi Eric, On Mon, Jun 29, 2020 at 4:16 PM Eric Gade wrote: > Nile seems like a fascinating option and I've tried to read as much about > it as I can. Unfortunately aside from the various posted talks online and > the VPRI papers, there's not a lot of information about using it (unless I > am missing something -- you can track a github issue about its status here > ). My guess is that the Gezira > part, of which there is even less information, is very closely tied to the > specific Frank environment in which it was used -- is that correct? Using > plain Squeak how would one even incorporate Nile? > Nile and the graphics engine Gezira written in Nile was quite independent from Squeak. Vanessa made a VM plugin for the C-version of Gezira runtime, and the bindings code issues Gezira requests from Squeak. That part can is reusable. But going through the VM plugin had some overhead, and also Gezira does not on purpose provide optimization for common cases or special cases (such as filling an integer coordinate rectangle with a uniform color, etc.) so performance characteristics was not always a win. There was other comments about JITting. It is potentially a great idea but it'd be a quite effort to make sure the multi core execution (or even using GPU) sane and efficient. -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Sun Jul 12 18:28:14 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sun, 12 Jul 2020 11:28:14 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <5DD6E594-6DC4-423B-ABED-AA2B7AAF9AC9@rowledge.org> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <20200629030109.C472B54011A@proxy.email-ssl.com.br> <8466da4b-2ded-daaa-645b-573271857b67@zogotounga.net> <20200703202118.GB52195@shell.msen.com> <3E4824E0-D3B1-4A7D-B301-A73228785FC6@rowledge.org> <20200703222607.GA76689@shell.msen.com> <5DD6E594-6DC4-423B-ABED-AA2B7AAF9AC9@rowledge.org> Message-ID: On Thu, Jul 9, 2020 at 1:40 PM tim Rowledge wrote: > What are we going to actually try to do here? Who has time/interest/skill? > > The Nile/Gezira stuff obviously sounds great but there is the question of > actually getting it working usefully, let alone finishing it. Will that > ever happen? Is what exists good enough and complete enough to be of use? > The current implementation probably is not going to work. I think the C-runtime does not work on a 64-bit environment, IIRC. There is a downloadable 'Frank' image that seems to start up ok at > http://tinlizzie.org/~ohshima/Frank-170908.zip It is a Squeak 4.4 image > as far as I can tell so you need an older VM of roughly that vintage - > pre-Spur anyway. > As long as the VM plugin mechanism has not changed that much, it should be relatively easy to bring it up to date. > > The small examples mostly work ok (see things like GeziraCanvas > class>example* & GZKernel class>example*) though one or two take a very > long time. > Such an example is using the Squeak-runtime; that is all stream data was processed in the interpreter and each kernel does its job one by one to illustrate that you can have different Nile runtimes and the core idea is very simple. Performance was not a goal for the Squeak-runtime. -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From Yoshiki.Ohshima at acm.org Sun Jul 12 18:30:31 2020 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Sun, 12 Jul 2020 11:30:31 -0700 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> Message-ID: On Sat, Jul 11, 2020 at 2:05 PM tim Rowledge wrote: > > > Not many things *I* want to do are very performance limited, so that isn't > something that exercises *me* but I'm sure others have very different > perspectives. > > I have played a little with a Frank image to see if the Nile/Gezira system > as-is does much better. For a circle, for example, it does do somewhat > better *if* the stroke alpha is set to ~0.5. I'm way to out of the world of > computer graphics to say more than that. > Gezira itself is very consistent. If you see some artifact, it might be because the final step of putting bits generated by Gezira onto the screen has wrong alpha interpretation or such. > > tim > -- > tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim > Useful random insult:- The wheel's spinning but the hamster's dead. > > > > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: From eric.gade at gmail.com Sun Jul 12 19:30:36 2020 From: eric.gade at gmail.com (Eric Gade) Date: Sun, 12 Jul 2020 15:30:36 -0400 Subject: [squeak-dev] Squeak RISC-V ISA 32I Implementation Message-ID: Hi all, I've hit a small milestone on a personal project that I would like to share. It is a Squeak implementation of the RISC-V ISA, along with a (very basic for now) CPU and memory for simulation and testing. You can find the project here . So far I have only implemented the basic 32I instructions from the unprivileged ISA . My goal is to get the basic extension instructions implemented too, along with the 64I instructions. In terms of personal goals for the project, I'm thinking of doing something stupid like writing my own OS and Squeak seems like the kind of reduced-frustration environment that might curtail some of the inevitable hair-pulling. Disclaimer: my knowledge of the low-level systems stuff is quite limited, so writing this package has been a learning experience. That's a polite way of saying "I have no idea what I'm actually doing." So if you spot any design choices you think are offensive or downright insane, please do file an issue or send me a message. I'm hoping that somehow this will be useful to the community. If you'd like to give this a whirl, your best bet is to check out RVCPUBasic >> #bootstrap:, which takes an ordered collection of RVInstructions and loads them into the simulated memory starting at address 0. You can then send the #start message to the CPU and it will run through the instructions in memory one by one. For the moment there aren't any example "programs" to run here -- I'm open to suggestions! I've tried to write tests as comprehensively as possible, but I'm sure I'm missing some important cases and there are certainly going to be bugs. Shout out to the TwosComplement package , which really helped me figure things out when I was in a bind. The repo is called "Safe Bet" because it's a "small(talk) risc" -- Eric -------------- next part -------------- An HTML attachment was scrubbed... URL: From lecteur at zogotounga.net Sun Jul 12 20:56:07 2020 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Sun, 12 Jul 2020 22:56:07 +0200 Subject: [squeak-dev] Disappearing MVC code panes Message-ID: <9713d621-506d-024e-8545-09819159988d@zogotounga.net> Hello all, Playing a bit with MVC I found the following bug: If preference "optional buttons" in the "browsing" category is turned off, the code panes in all MVC browsers are not displayed. Stef From tonyg at leastfixedpoint.com Mon Jul 13 07:01:44 2020 From: tonyg at leastfixedpoint.com (Tony Garnock-Jones) Date: Mon, 13 Jul 2020 09:01:44 +0200 Subject: [squeak-dev] Squeak RISC-V ISA 32I Implementation In-Reply-To: References: Message-ID: <6c60fc99-8702-0a25-ac86-cc9260c351ee@leastfixedpoint.com> On 7/12/20 9:30 PM, Eric Gade wrote: > I've hit a small milestone on a personal project that I would like to > share. It is a Squeak implementation of the RISC-V ISA, along with a > (very basic for now) CPU and memory for simulation and testing. You can > find the project here . This looks like fun! What kinds of applications or experiments do you have in mind for it? > The repo is called "Safe Bet" because it's a "small(talk) risc" Also, this is an excellent name :-) Tony From robert.withers at pm.me Mon Jul 13 07:17:24 2020 From: robert.withers at pm.me (Robert Withers) Date: Mon, 13 Jul 2020 07:17:24 +0000 Subject: [squeak-dev] look what appeared in my news feed! Message-ID: <78616baa-99cd-1d03-b80f-e4e1745992ff@pm.me> Hey, what's up? Well, here was a news article that appeared in my google news feed. https://hackaday.com/2020/07/12/making-smalltalk-on-a-raspberry-pi/ Sadly, they do not mention Squeak, just GNU Smalltalk. K, r From Das.Linux at gmx.de Mon Jul 13 08:03:53 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon, 13 Jul 2020 10:03:53 +0200 Subject: [squeak-dev] Squeak RISC-V ISA 32I Implementation In-Reply-To: <6c60fc99-8702-0a25-ac86-cc9260c351ee@leastfixedpoint.com> References: <6c60fc99-8702-0a25-ac86-cc9260c351ee@leastfixedpoint.com> Message-ID: <0B11BD3F-57BB-4A28-8827-C4F0F80D6FAC@gmx.de> Hi! > On 13.07.2020, at 09:01, Tony Garnock-Jones wrote: > > On 7/12/20 9:30 PM, Eric Gade wrote: >> I've hit a small milestone on a personal project that I would like to >> share. It is a Squeak implementation of the RISC-V ISA, along with a >> (very basic for now) CPU and memory for simulation and testing. You can >> find the project here . > > This looks like fun! I'm very happy about that. > > What kinds of applications or experiments do you have in mind for it? > >> The repo is called "Safe Bet" because it's a "small(talk) risc" > > Also, this is an excellent name :-) very nice! Jecel should have a look at that! Best regards -Tobias From commits at source.squeak.org Mon Jul 13 09:48:34 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 13 Jul 2020 09:48:34 0000 Subject: [squeak-dev] The Trunk: ST80-mt.256.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.256.mcz ==================== Summary ==================== Name: ST80-mt.256 Author: mt Time: 13 July 2020, 11:48:31.957623 am UUID: 354bbbf1-f342-ca44-92c6-f5556433cecc Ancestors: ST80-mt.255 Makes MVC lists, window titles, menus, and "dialogs" aware of demo/hi-dpi mode. =============== Diff against ST80-mt.255 =============== Item was changed: Paragraph subclass: #ListParagraph instanceVariableNames: '' + classVariableNames: '' - classVariableNames: 'ListStyle' poolDictionaries: '' category: 'ST80-Support'! !ListParagraph commentStamp: '' prior: 0! I represent a special type of Paragraph that is used in the list panes of a browser. I avoid all the composition done by more general Paragraphs, because I know the structure of my Text.! Item was removed: - ----- Method: ListParagraph class>>initialize (in category 'initialization') ----- - initialize - "ListParagraph initialize" - | aFont | - "Allow different line spacing for lists" - aFont := Preferences standardListFont. - ListStyle := TextStyle fontArray: { aFont }. - ListStyle gridForFont: 1 withLead: 1! Item was changed: ----- Method: ListParagraph class>>standardListStyle (in category 'style') ----- standardListStyle + + ^ (TextStyle fontArray: { Preferences standardListFont }) + gridForFont: 1 withLead: 1; + yourself! - ^ ListStyle! Item was changed: ----- Method: ListParagraph class>>withArray:style: (in category 'instance creation') ----- withArray: anArray style: aTextStyleOrNil "Convert an array of strings into a ListParagraph using the given TextStyle." aTextStyleOrNil + ifNil: [^ (super withText: Text new style: self standardListStyle) withArray: anArray] - ifNil: [^ (super withText: Text new style: ListStyle) withArray: anArray] ifNotNil: [^ (super withText: Text new style: aTextStyleOrNil) withArray: anArray]. ! Item was changed: ----- Method: MVCProject>>jumpToProject (in category 'utilities') ----- jumpToProject "Present a list of potential projects and enter the one selected. We use mvcStartUpLeftFlush for possibly no longer valid historical reasons" "Project current jumpToProject" + self jumpToSelection: (self buildJumpToMenu: CustomMenu new) startUp! - self jumpToSelection: (self buildJumpToMenu: CustomMenu new) mvcStartUpLeftFlush! Item was changed: ----- Method: PopUpMenu>>computeLabelParagraph (in category '*ST80-Support') ----- computeLabelParagraph "Answer a Paragraph containing this menu's labels, one per line and centered." + ^ Paragraph withText: labelString asText style: self class standardMenuStyle! - ^ Paragraph withText: labelString asText style: MenuStyle! Item was removed: - ----- Method: PopUpMenu>>mvcStartUpLeftFlush (in category '*ST80-Menus') ----- - mvcStartUpLeftFlush - "Build and invoke this menu with no initial selection. By Jerry Archibald, 4/01. - If in MVC, align menus items with the left margin. - Answer the selection associated with the menu item chosen by the user or nil if none is chosen. - The mechanism for getting left-flush appearance in mvc leaves a tiny possibility for misadventure: if the user, in mvc, puts up the jump-to-project menu, then hits cmd period while it is up, then puts up a second jump-to-project menu before dismissing or proceeding through the debugger, it's possible for mvc popup-menus thereafter to appear left-aligned rather than centered; this very unlikely condition can be cleared by evaluating 'PopUpMenu alignment: 2'" - - | saveAlignment | - saveAlignment := PopUpMenu alignment. - PopUpMenu leftFlush. - ^[self startUp] ensure: - [PopUpMenu alignment: saveAlignment]! Item was changed: View subclass: #StandardSystemView instanceVariableNames: 'labelFrame labelText isLabelComplemented savedSubViews minimumSize maximumSize collapsedViewport expandedViewport labelBits windowBits bitsValid updatablePanes' + classVariableNames: 'CacheBits' - classVariableNames: 'CacheBits LabelStyle' poolDictionaries: '' category: 'ST80-Support'! !StandardSystemView commentStamp: '' prior: 0! I represent a view that has a label above its top left corner. The text in the label identifies the kind of view. In addition to a label, I add control over the maximum and minimum size of the display box of my instance. My default controller is StandardSystemController. The elements of ScheduledControllers, the sole instance of ControlManager, are usually controllers for instances of me.! Item was changed: ----- Method: StandardSystemView class>>initialize (in category 'class initialization') ----- initialize "StandardSystemView initialize" + self doCacheBits.! - self doCacheBits. - self setLabelStyle! Item was removed: - ----- Method: StandardSystemView class>>setLabelStyle (in category 'class initialization') ----- - setLabelStyle - | aFont | - "StandardSystemView setLabelStyle" - aFont := Preferences windowTitleFont. - LabelStyle := TextStyle fontArray: { aFont }. - LabelStyle gridForFont: 1 withLead: 0! Item was added: + ----- Method: StandardSystemView class>>standardLabelStyle (in category 'class initialization') ----- + standardLabelStyle + + ^ (TextStyle fontArray: { Preferences windowTitleFont }) + gridForFont: 1 withLead: 0; + yourself! Item was changed: ----- Method: StandardSystemView>>label: (in category 'label access') ----- label: aString "Set aString to be the receiver's label." labelText := Paragraph withText: (Text fromString: ((aString == nil or: [aString isEmpty]) ifTrue: ['Untitled' copy] ifFalse: [aString])) + style: self class standardLabelStyle. - style: LabelStyle. insetDisplayBox == nil ifTrue: [^ self]. "wait for further initialization" self setLabelRegion! Item was changed: ----- Method: StandardSystemView>>labelHeight (in category 'label access') ----- labelHeight + ^ ((self class standardLabelStyle fontAt: 1) height + 4) max: 20! - ^ ((LabelStyle fontAt: 1) height + 4) max: 20! From commits at source.squeak.org Mon Jul 13 09:49:24 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 13 Jul 2020 09:49:24 0000 Subject: [squeak-dev] The Trunk: Tools-mt.982.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.982.mcz ==================== Summary ==================== Name: Tools-mt.982 Author: mt Time: 13 July 2020, 11:49:22.018623 am UUID: 870fe86a-ad9d-c34d-9103-645414fb1259 Ancestors: Tools-mt.981 Complements ST80-mt.256 =============== Diff against Tools-mt.981 =============== Item was changed: ----- Method: Browser>>buildAndOpenFullBrowser (in category 'toolbuilder') ----- buildAndOpenFullBrowser "assemble the spec for a full system browser, build it and open it" + | builder window | - | builder windowSpec | builder := ToolBuilder default. "the build-but-don't-open phase is factored out to support the prototypicalToolWindow facility" + window := self buildDefaultBrowserWith: builder. + builder open: window.! - windowSpec := self buildDefaultBrowserWith: builder. - builder open: windowSpec. - - ^self - ! Item was changed: ----- Method: CustomMenu>>build (in category 'private') ----- build "Turn myself into an invokable ActionMenu." | stream | stream := WriteStream on: (String new). labels do: [:label | stream nextPutAll: label; cr]. (labels isEmpty) ifFalse: [stream skip: -1]. "remove final cr" super labels: stream contents + font: Preferences standardMenuFont - font: MenuStyle defaultFont lines: dividers! Item was changed: ----- Method: HierarchyBrowser>>buildAndOpenBrowserLabel: (in category 'toolbuilder') ----- buildAndOpenBrowserLabel: aLabelString "assemble the spec for a class list/hierarchy browser, build it and open it" + | builder window | - | builder windowSpec | builder := ToolBuilder default. + window := self buildDefaultBrowserWith: builder. + aLabelString ifNotNil: [:str | window label: str]. - windowSpec := self buildDefaultBrowserWith: builder. - aLabelString ifNotNil:[:str| windowSpec label: str]. + builder open: window.! - builder open: windowSpec. - - ^self - ! Item was changed: Object subclass: #PopUpMenu instanceVariableNames: 'labelString font lineArray frame form marker selection' + classVariableNames: 'CacheMenuForms' - classVariableNames: 'CacheMenuForms MenuStyle' poolDictionaries: '' category: 'Tools-Menus'! !PopUpMenu commentStamp: '' prior: 0! I represent a list of items. My instances are presented on the display screen in a rectangular area. The user points to an item, pressing a mouse button; the item is highlighted. When the button is released, the highlighted item indicates the selection.! Item was removed: - ----- Method: PopUpMenu class>>alignment (in category 'class initialization') ----- - alignment - - ^ MenuStyle alignment! Item was removed: - ----- Method: PopUpMenu class>>alignment: (in category 'class initialization') ----- - alignment: anAlignment - - ^ MenuStyle alignment: anAlignment! Item was removed: - ----- Method: PopUpMenu class>>initialize (in category 'class initialization') ----- - initialize "PopUpMenu initialize" - (MenuStyle := TextStyle default copy) - gridForFont: TextStyle default defaultFontIndex withLead: 0; - centered. - PopUpMenu allSubInstancesDo: [:m | m rescan]! Item was changed: ----- Method: PopUpMenu class>>labels:lines: (in category 'instance creation') ----- labels: aString lines: anArray "Answer an instance of me whose items are in aString, with lines drawn after each item indexed by anArray." ^ self new labels: aString + font: Preferences standardMenuFont - font: MenuStyle defaultFont lines: anArray! Item was removed: - ----- Method: PopUpMenu class>>leftFlush (in category 'class initialization') ----- - leftFlush - - MenuStyle leftFlush! Item was removed: - ----- Method: PopUpMenu class>>setMenuFontTo: (in category 'class initialization') ----- - setMenuFontTo: aFont - "Set the menu font as indicated" - - MenuStyle := TextStyle fontArray: { aFont }. - MenuStyle - gridForFont: 1 withLead: 0; - centered. - self allSubInstancesDo: [:m | m rescan]! Item was added: + ----- Method: PopUpMenu class>>standardMenuStyle (in category 'class initialization') ----- + standardMenuStyle + + ^ (TextStyle fontArray: { Preferences standardMenuFont }) + gridForFont: 1 withLead: 0; + centered; + yourself! Item was changed: ----- Method: PopUpMenu>>computeForm (in category 'private') ----- computeForm "Compute and answer a Form to be displayed for this menu." + | borderInset paraForm menuForm menuStyle inside | - | borderInset paraForm menuForm inside | borderInset := 4 at 4. + menuStyle := self class standardMenuStyle. + paraForm := ((DisplayText text: labelString asText textStyle: menuStyle) - paraForm := ((DisplayText text: labelString asText textStyle: MenuStyle) foregroundColor: (self userInterfaceTheme textColor ifNil: [Color black]) backgroundColor: (self userInterfaceTheme color ifNil: [Color white])) form. menuForm := Form extent: paraForm extent + (borderInset * 2) depth: paraForm depth. menuForm fill: (0 @ 0 extent: menuForm extent) rule: Form over fillColor: (self userInterfaceTheme color ifNil: [Color white]). menuForm border: menuForm boundingBox width: 2 fillColor: (self userInterfaceTheme borderColor ifNil: [Color black]). paraForm displayOn: menuForm at: borderInset. lineArray == nil ifFalse: [lineArray do: [ :line | menuForm fill: (4 @ ((line * font height) + borderInset y) extent: (menuForm width - 8 @ 1)) rule: Form over fillColor: (self userInterfaceTheme lineColor ifNil: [Color black])]]. frame := Quadrangle new. frame region: menuForm boundingBox. frame borderWidth: 4. inside := frame inside. + marker := inside topLeft extent: (inside width @ menuStyle lineGrid). - marker := inside topLeft extent: (inside width @ MenuStyle lineGrid). selection := 1. ^ form := menuForm ! Item was changed: ----- Method: PopUpMenu>>displayAt:withCaption:during: (in category 'displaying') ----- displayAt: aPoint withCaption: captionOrNil during: aBlock "Display the receiver just to the right of aPoint while aBlock is evaluated. If the receiver is forced off screen, display it just to the right." | delta savedArea captionForm captionSave outerFrame captionText tFrame frameSaveLoc captionBox | marker ifNil: [self computeForm]. frame := frame align: marker leftCenter with: aPoint + (2 at 0). outerFrame := frame. captionOrNil notNil ifTrue: [captionText := (DisplayText text: captionOrNil asText + textStyle: self class standardMenuStyle copy centered) - textStyle: MenuStyle copy centered) foregroundColor: (self userInterfaceTheme textColor ifNil: [Color black]) backgroundColor: (self userInterfaceTheme color ifNil: [Color white]). tFrame := captionText boundingBox insetBy: -2. outerFrame := frame merge: (tFrame align: tFrame bottomCenter with: frame topCenter + (0 at 2))]. delta := outerFrame amountToTranslateWithin: Display boundingBox. frame right > Display boundingBox right ifTrue: [delta := 0 - frame width @ delta y]. frame := frame translateBy: delta. captionOrNil notNil ifTrue: [captionForm := captionText form. captionBox := captionForm boundingBox expandBy: 4. captionBox := captionBox align: captionBox bottomCenter with: frame topCenter + (0 at 2). captionSave := Form fromDisplay: captionBox. Display border: captionBox width: 4 fillColor: (self userInterfaceTheme color ifNil: [Color white]). Display border: captionBox width: 2 fillColor: (self userInterfaceTheme textColor ifNil: [Color black]). captionForm displayAt: captionBox topLeft + 4]. marker := marker align: marker leftCenter with: aPoint + delta + (2 at 0). savedArea := Form fromDisplay: frame. self menuForm displayOn: Display at: (frameSaveLoc := frame topLeft). selection ~= 0 ifTrue: [Display reverse: marker]. Cursor normal showWhile: aBlock. savedArea displayOn: Display at: frameSaveLoc. captionOrNil notNil ifTrue: [captionSave displayOn: Display at: captionBox topLeft]! Item was changed: ----- Method: PopUpMenu>>frameHeight (in category 'accessing') ----- frameHeight "Designed to avoid the entire frame computation (includes MVC form), since the menu may well end up being displayed in Morphic anyway." | nItems | frame ifNotNil: [^ frame height]. nItems := 1 + (labelString occurrencesOf: Character cr). + ^ (nItems * self class standardMenuStyle lineGrid) + 4 "border width"! - ^ (nItems * MenuStyle lineGrid) + 4 "border width"! Item was changed: ----- Method: PopUpMenu>>rescan (in category 'private') ----- rescan "Cause my form to be recomputed after a font change." labelString == nil ifTrue: [labelString := 'NoText!!']. + self labels: labelString font: Preferences standardMenuFont lines: lineArray. - self labels: labelString font: (MenuStyle fontAt: 1) lines: lineArray. frame := marker := form := nil. "PopUpMenu allSubInstancesDo: [:m | m rescan]"! From commits at source.squeak.org Mon Jul 13 09:49:45 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 13 Jul 2020 09:49:45 0000 Subject: [squeak-dev] The Trunk: 60Deprecated-mt.79.mcz Message-ID: Marcel Taeumel uploaded a new version of 60Deprecated to project The Trunk: http://source.squeak.org/trunk/60Deprecated-mt.79.mcz ==================== Summary ==================== Name: 60Deprecated-mt.79 Author: mt Time: 13 July 2020, 11:49:44.479623 am UUID: 2481d272-5ff4-1f45-a526-3cfcf05bf11e Ancestors: 60Deprecated-mt.78 Complements ST80-mt.256 =============== Diff against 60Deprecated-mt.78 =============== Item was changed: ----- Method: StandardFileMenu>>makeFileMenuFor: (in category 'menu building') ----- makeFileMenuFor: aDirectory "Initialize an instance of me to operate on aDirectory" | theMenu | pattern ifNil: [pattern := {'*'}]. Cursor wait showWhile: [self labels: (self menuLabelsString: aDirectory) + font: Preferences standardMenuFont - font: (MenuStyle fontAt: 1) lines: (self menuLinesArray: aDirectory). theMenu := self selections: (self menuSelectionsArray: aDirectory)]. ^theMenu! From commits at source.squeak.org Mon Jul 13 10:13:40 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Mon, 13 Jul 2020 10:13:40 0000 Subject: [squeak-dev] The Inbox: TrueType-tobe.54.mcz Message-ID: A new version of TrueType was added to project The Inbox: http://source.squeak.org/inbox/TrueType-tobe.54.mcz ==================== Summary ==================== Name: TrueType-tobe.54 Author: tobe Time: 13 July 2020, 12:13:36.544882 pm UUID: 168679d8-a9fa-4d8b-9689-2d2e06dc29f9 Ancestors: TrueType-mt.53 when encountering an invalid font while scanning a file, skip that font =============== Diff against TrueType-mt.53 =============== Item was changed: ----- Method: TTFileDescription class>>readFontsFrom: (in category 'instance creation') ----- readFontsFrom: aFilename "Reads and returns all the fonts in the given file" " TTFileDescription readFontsFrom: 'batang.ttc'. " ^self openFontFile: aFilename do:[:file| (self fontOffsetsInFile: file) + collect:[:offset| [self new on: aFilename offset: offset] on: Error do: [nil]] - collect:[:offset| self new on: aFilename offset: offset] thenSelect:[:font| font notNil]]. ! From eric.gade at gmail.com Mon Jul 13 11:43:34 2020 From: eric.gade at gmail.com (Eric Gade) Date: Mon, 13 Jul 2020 07:43:34 -0400 Subject: [squeak-dev] Squeak RISC-V ISA 32I Implementation In-Reply-To: <0B11BD3F-57BB-4A28-8827-C4F0F80D6FAC@gmx.de> References: <6c60fc99-8702-0a25-ac86-cc9260c351ee@leastfixedpoint.com> <0B11BD3F-57BB-4A28-8827-C4F0F80D6FAC@gmx.de> Message-ID: > > On 13.07.2020, at 09:01, Tony Garnock-Jones > wrote: > > What kinds of applications or experiments do you have in mind for it? > > My own ideas are not that well developed. Lately I've been particularly inspired by the Act 1 papers and would like to take a stab at making an "actor-based" system at the lowest levels -- ie, have the parts in hardware behave "as if" they were actors and then build a system on top of that. I have some early notions about how it would all come together, and I'm part of a new research group that might take up the question at some point, but it's early days yet and not our top priority. I do think, however, that RISC-V could become the basis for new experiments that rethink a lot of computing truisms. One of the reasons I discovered Smalltalk in the first place is because I was asking myself why everything is Unix. Obviously I don't think it has to be. But really I was hoping that smarter / more experienced people would come up with something, and I could just handle the grunt work! Also, this is an excellent name :-) > Thanks! On Mon, Jul 13, 2020 at 4:03 AM Tobias Pape wrote: > > Jecel should have a look at that! > Jecel was kind enough to help me in the Squeak slack with some issues I was experiencing. -- Eric -------------- next part -------------- An HTML attachment was scrubbed... URL: From robert.withers at pm.me Mon Jul 13 13:45:52 2020 From: robert.withers at pm.me (Robert Withers) Date: Mon, 13 Jul 2020 13:45:52 +0000 Subject: [squeak-dev] I/O in latest Squeak Message-ID: Hello everyone! Does the current cog spur 64-it VM use polling I/O? Or is some other mechanism used? Kindly, rabbit From robert.withers at pm.me Mon Jul 13 14:02:01 2020 From: robert.withers at pm.me (Robert Withers) Date: Mon, 13 Jul 2020 14:02:01 +0000 Subject: [squeak-dev] I/O in latest Squeak In-Reply-To: References: Message-ID: Hey y'all, there is a discussion thread on this article [1] about Smalltalk on a Pi. I commented pointing to Squeak on a Pi. Another commenter made this statement and I wish to respond. > I used a Squeak variant to test hardware and prototype UI ideas. Ran like a champ on bare bones 68000, PPC & ARM boards. > > The only critique I have of using Squeak out of the box is it’s original VM used polling for I/O. I’m sure there are VMs by now that don’t have this problem. And message dispatch is a bit of a pig in terms of power usage. But again, a properly JITted Smalltalk VM should be fine. I would LOVE IT if Smalltalk or Self became popular for embedded work. K, r --- [1] Making Smalltalk On A Raspberry Pi - https://hackaday.com/2020/07/12/making-smalltalk-on-a-raspberry-pi/ On 7/13/20 9:45 AM, Robert Withers wrote: > Hello everyone! > > Does the current cog spur 64-it VM use polling I/O? Or is some other > mechanism used? > > Kindly, > rabbit -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Mon Jul 13 14:29:41 2020 From: builds at travis-ci.org (Travis CI) Date: Mon, 13 Jul 2020 14:29:41 +0000 Subject: [squeak-dev] [CRON] Errored: squeak-smalltalk/squeak-app#1757 (squeak-trunk - 25ebaf1) In-Reply-To: Message-ID: <5f0c6fd475f48_13ff356ba74741780ef@travis-tasks-6669f7974f-kxj7s.mail> Build Update for squeak-smalltalk/squeak-app ------------------------------------- Build: #1757 Status: Errored Duration: 17 mins and 58 secs Commit: 25ebaf1 (squeak-trunk) Author: Marcel Taeumel Message: Hi all! The project "squeak-app" is part of the continuous build infrastructure (short: CI) for Squeak's bundles, which you can download at https://files.squeak.org/, followed by the version tag you are looking for. All bundles are updated on a regular basis, which is daily for Trunk (i.e. the current alpha version) and monthly for release versions. Note that there won't be new bundles if Squeak's build number, which reflects in-image code updates, did not change between CI jobs. -- The Squeak Oversight Board [ci skip] View the changeset: https://github.com/squeak-smalltalk/squeak-app/compare/fb55517f583fe544f9225413a23fe82a680200c2...25ebaf18249322227da1f7c767384cb35082fab7 View the full build log and details: https://travis-ci.org/github/squeak-smalltalk/squeak-app/builds/707640777?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the squeak-smalltalk/squeak-app repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8901856&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From herbertkoenig at gmx.net Mon Jul 13 15:21:59 2020 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Mon, 13 Jul 2020 17:21:59 +0200 Subject: [squeak-dev] I/O in latest Squeak In-Reply-To: References: Message-ID: Hi Robert, I cannot directly reply but a datapoint: On a PiZeroW an idle Squeak 5.3 uses 15+ % CPU. Also if the Window is minimized. That does not look event driven but maybe tightvnc plays a role here too. Otherwise it runs fine over months at 60 % CPU 24/7 on an A+ since 2014. Outside between -20 and +40 ^C. That's 5.1 currently. I can really recommend using Squeak on a Pi. Unless that constant CPU load cannot be accepted. Cheers, Herbert Am 13.07.2020 um 16:02 schrieb Robert Withers via Squeak-dev: > > Hey y'all, there is a discussion thread on this article [1] about > Smalltalk on a Pi. I commented pointing to Squeak on a Pi. Another > commenter made this statement and I wish to respond. > > I used a Squeak variant to test hardware and prototype UI ideas. > Ran like a champ on bare bones 68000, PPC & ARM boards. > > The only critique I have of using Squeak out of the box is /it’s > original VM used polling for I/O/. I’m sure there are VMs by now > that don’t have this problem. And /message dispatch is a bit of a > pig/ in terms of power usage. But again, a properly JITted > Smalltalk VM should be fine. I would LOVE IT if Smalltalk or Self > became /popular for embedded work/. > > K, r > > --- > > [1] Making Smalltalk On A Raspberry Pi - > https://hackaday.com/2020/07/12/making-smalltalk-on-a-raspberry-pi/ > > > > On 7/13/20 9:45 AM, Robert Withers wrote: >> Hello everyone! >> >> Does the current cog spur 64-it VM use polling I/O? Or is some other >> mechanism used? >> >> Kindly, >> rabbit >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: ogpojichekdajmne.png Type: image/png Size: 32032 bytes Desc: not available URL: From robert.withers at pm.me Mon Jul 13 15:46:54 2020 From: robert.withers at pm.me (Robert) Date: Mon, 13 Jul 2020 15:46:54 +0000 Subject: [squeak-dev] I/O in latest Squeak In-Reply-To: References: Message-ID: Hi Herbert, That 15+% cpu load at idle seems to indicate polling I/O, yes? Kindly, Robert On Mon, Jul 13, 2020 at 11:21, Herbert König wrote: > Hi Robert, > > I cannot directly reply but a datapoint: > On a PiZeroW an idle Squeak 5.3 uses 15+ % CPU. Also if the Window is minimized. That does not look event driven but maybe tightvnc plays a role here too. > > Otherwise it runs fine over months at 60 % CPU 24/7 on an A+ since 2014. Outside between -20 and +40 ^C. That's 5.1 currently. I can really recommend using Squeak on a Pi. Unless that constant CPU load cannot be accepted. > > Cheers, > > Herbert > > Am 13.07.2020 um 16:02 schrieb Robert Withers via Squeak-dev: > >> Hey y'all, there is a discussion thread on this article [1] about Smalltalk on a Pi. I commented pointing to Squeak on a Pi. Another commenter made this statement and I wish to respond. >> >>> I used a Squeak variant to test hardware and prototype UI ideas. Ran like a champ on bare bones 68000, PPC & ARM boards. >>> >>> The only critique I have of using Squeak out of the box is it’s original VM used polling for I/O. I’m sure there are VMs by now that don’t have this problem. And message dispatch is a bit of a pig in terms of power usage. But again, a properly JITted Smalltalk VM should be fine. I would LOVE IT if Smalltalk or Self became popular for embedded work. >> >> K, r >> >> --- >> >> [1] Making Smalltalk On A Raspberry Pi - https://hackaday.com/2020/07/12/making-smalltalk-on-a-raspberry-pi/ >> >> On 7/13/20 9:45 AM, Robert Withers wrote: >> >>> Hello everyone! >>> >>> Does the current cog spur 64-it VM use polling I/O? Or is some other >>> mechanism used? >>> >>> Kindly, >>> rabbit -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: ogpojichekdajmne.png Type: image/png Size: 32032 bytes Desc: not available URL: From herbertkoenig at gmx.net Mon Jul 13 16:42:01 2020 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Mon, 13 Jul 2020 18:42:01 +0200 Subject: [squeak-dev] I/O in latest Squeak In-Reply-To: References: Message-ID: <55661e59-81bf-4081-ddc7-b1a790b9d9fd@gmx.net> Hi Robert, yes that is my guess but there also is this loop that steps all morphs (clock, browsers.. ) so I just don't know and I'm not deep into the innards of Squeak. Just a happy user. And I don't know how VNC handles the display updates. So let's wait for someone who knows. Cheers, Herbert Am 13.07.2020 um 17:46 schrieb Robert via Squeak-dev: > Hi Herbert, > > That 15+% cpu load at idle seems to indicate polling I/O, yes? > > Kindly, > Robert > > > On Mon, Jul 13, 2020 at 11:21, Herbert König > wrote: >> Hi Robert, >> >> I cannot directly reply but a datapoint: >> On a PiZeroW an idle Squeak 5.3 uses 15+ % CPU. Also if the Window is >> minimized. That does not look event driven but maybe tightvnc plays a >> role here too. >> >> Otherwise it runs fine over months at 60 % CPU 24/7 on an A+ since >> 2014. Outside between -20 and +40 ^C. That's 5.1 currently. I can >> really recommend using Squeak on a Pi. Unless that constant CPU load >> cannot be accepted. >> >> Cheers, >> >> Herbert >> >> >> >> Am 13.07.2020 um 16:02 schrieb Robert Withers via Squeak-dev: >>> >>> Hey y'all, there is a discussion thread on this article [1] about >>> Smalltalk on a Pi. I commented pointing to Squeak on a Pi. Another >>> commenter made this statement and I wish to respond. >>> >>> I used a Squeak variant to test hardware and prototype UI ideas. >>> Ran like a champ on bare bones 68000, PPC & ARM boards. >>> >>> The only critique I have of using Squeak out of the box is /it’s >>> original VM used polling for I/O/. I’m sure there are VMs by now >>> that don’t have this problem. And /message dispatch is a bit of >>> a pig/ in terms of power usage. But again, a properly JITted >>> Smalltalk VM should be fine. I would LOVE IT if Smalltalk or >>> Self became /popular for embedded work/. >>> >>> K, r >>> >>> --- >>> >>> [1] Making Smalltalk On A Raspberry Pi - >>> https://hackaday.com/2020/07/12/making-smalltalk-on-a-raspberry-pi/ >>> >>> >>> >>> On 7/13/20 9:45 AM, Robert Withers wrote: >>>> Hello everyone! >>>> >>>> Does the current cog spur 64-it VM use polling I/O? Or is some other >>>> mechanism used? >>>> >>>> Kindly, >>>> rabbit >>>> >>> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: ogpojichekdajmne.png Type: image/png Size: 32032 bytes Desc: not available URL: From forums.jakob at resfarm.de Mon Jul 13 17:22:30 2020 From: forums.jakob at resfarm.de (Jakob Reschke) Date: Mon, 13 Jul 2020 19:22:30 +0200 Subject: [squeak-dev] Metacello bootstrap fails due to download timeouts Message-ID: Hi all, My Travis CI builds for Squeak-Trunk 32 bits (and only these) started to fail due to timeouts. When I looked at it in a Linux VM and it fails to download Metacello-Base-dkh.109.mcz from SmalltalkHub. When I try to access this version with a web browser, I get an error HTTP 500 VoMongoConnectionError http://smalltalkhub.com/mc/dkh/metacello/main/Metacello-Base-dkh.109.mcz A fresh 64 bit Trunk image from squeak.org when run on Windows instead hangs when downloading Metacello-Core-dkh.494.mcz when I do `Metacello new`. Eventually it erred with "Error: retry with alternate repository failed: 'ConnectionTimedOut: Data receive timed out.'" ...after about half an hour or so. The error comes from ConfigurationOfMetacello>>ensureMetacello:. Though it does look as if it first tried with a repository at http://seaside.gemtalksystems.com/ss/metacello and not SmalltalkHub. I can download the version in a web browser without a problem: http://seaside.gemtalksystems.com/ss/metacello/Metacello-Core-dkh.494.mcz Yet a local 64 bit trunk smalltalkCI build succeeded and I don't know why yet. It also needs to go through the MetacelloStub, doesn't it? For a start, does anyone experience the same problem or is it my bad luck with the connections? To test, print `Metacello new` in a fresh image which does not have the Metacello class yet. Now SmalltalkHub is deprecated as you can read on its front page. http://smalltalkhub.com/ Tom, Tobias, Dale, you already started to discuss changing the bootstrap of current Metacello in Squeak when the Tonel changes were integrated, didn't you? Is there a path where we can live without any unmaintained repositories like the ones on SmalltalkHub? On a different level: shouldn't the bootstrapping of the MetacelloStub, or rather the downloading of version signal an error with a timeout sooner when it cannot retrieve a version, instead of waiting or retrying for a long time? Kind regards, Jakob From Das.Linux at gmx.de Mon Jul 13 17:23:21 2020 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon, 13 Jul 2020 19:23:21 +0200 Subject: [squeak-dev] Metacello bootstrap fails due to download timeouts In-Reply-To: References: Message-ID: <06BCBF78-A8FB-4FBF-B767-967DDF3DF328@gmx.de> > On 13.07.2020, at 19:22, Jakob Reschke wrote: > > Hi all, > > My Travis CI builds for Squeak-Trunk 32 bits (and only these) started to > fail due to timeouts. When I looked at it in a Linux VM and it fails > to download Metacello-Base-dkh.109.mcz from SmalltalkHub. When I try > to access this version with a web browser, I get an error HTTP 500 > VoMongoConnectionError > http://smalltalkhub.com/mc/dkh/metacello/main/Metacello-Base-dkh.109.mcz Github was down today. -t > > A fresh 64 bit Trunk image from squeak.org when run on Windows instead > hangs when > downloading Metacello-Core-dkh.494.mcz when I do `Metacello new`. > Eventually it erred with "Error: retry with alternate repository > failed: 'ConnectionTimedOut: Data receive timed out.'" ...after about > half an hour or so. The error comes from > ConfigurationOfMetacello>>ensureMetacello:. Though it does look as if > it first tried with a repository at > http://seaside.gemtalksystems.com/ss/metacello and not SmalltalkHub. I > can download the version in a web browser without a problem: > http://seaside.gemtalksystems.com/ss/metacello/Metacello-Core-dkh.494.mcz > > Yet a local 64 bit trunk smalltalkCI build succeeded and I don't know > why yet. It also needs to go through the MetacelloStub, doesn't it? > > For a start, does anyone experience the same problem or is it my bad > luck with the connections? To test, print `Metacello new` in a fresh image > which does not have the Metacello class yet. > > Now SmalltalkHub is deprecated as you can read on its > front page. http://smalltalkhub.com/ > > Tom, Tobias, Dale, you already started to discuss changing the > bootstrap of current Metacello in Squeak when the Tonel changes were > integrated, didn't you? Is there a path where we can live without any > unmaintained repositories like the ones on SmalltalkHub? > > On a different level: shouldn't the bootstrapping of the > MetacelloStub, or rather the downloading of version signal an error > with a timeout sooner when it cannot retrieve a > version, instead of waiting or retrying for a long time? > > Kind regards, > Jakob > From forums.jakob at resfarm.de Mon Jul 13 17:28:01 2020 From: forums.jakob at resfarm.de (Jakob Reschke) Date: Mon, 13 Jul 2020 19:28:01 +0200 Subject: [squeak-dev] Metacello bootstrap fails due to download timeouts In-Reply-To: <06BCBF78-A8FB-4FBF-B767-967DDF3DF328@gmx.de> References: <06BCBF78-A8FB-4FBF-B767-967DDF3DF328@gmx.de> Message-ID: Maybe, but it did not even get to the steps that involve GitHub as far as I can tell. Also the 32 bit trunk builds already failed before today. Am Mo., 13. Juli 2020 um 19:23 Uhr schrieb Tobias Pape : > > > > On 13.07.2020, at 19:22, Jakob Reschke wrote: > > > > Hi all, > > > > My Travis CI builds for Squeak-Trunk 32 bits (and only these) started to > > fail due to timeouts. When I looked at it in a Linux VM and it fails > > to download Metacello-Base-dkh.109.mcz from SmalltalkHub. When I try > > to access this version with a web browser, I get an error HTTP 500 > > VoMongoConnectionError > > http://smalltalkhub.com/mc/dkh/metacello/main/Metacello-Base-dkh.109.mcz > > > Github was down today. > -t > > > > > A fresh 64 bit Trunk image from squeak.org when run on Windows instead > > hangs when > > downloading Metacello-Core-dkh.494.mcz when I do `Metacello new`. > > Eventually it erred with "Error: retry with alternate repository > > failed: 'ConnectionTimedOut: Data receive timed out.'" ...after about > > half an hour or so. The error comes from > > ConfigurationOfMetacello>>ensureMetacello:. Though it does look as if > > it first tried with a repository at > > http://seaside.gemtalksystems.com/ss/metacello and not SmalltalkHub. I > > can download the version in a web browser without a problem: > > http://seaside.gemtalksystems.com/ss/metacello/Metacello-Core-dkh.494.mcz > > > > Yet a local 64 bit trunk smalltalkCI build succeeded and I don't know > > why yet. It also needs to go through the MetacelloStub, doesn't it? > > > > For a start, does anyone experience the same problem or is it my bad > > luck with the connections? To test, print `Metacello new` in a fresh image > > which does not have the Metacello class yet. > > > > Now SmalltalkHub is deprecated as you can read on its > > front page. http://smalltalkhub.com/ > > > > Tom, Tobias, Dale, you already started to discuss changing the > > bootstrap of current Metacello in Squeak when the Tonel changes were > > integrated, didn't you? Is there a path where we can live without any > > unmaintained repositories like the ones on SmalltalkHub? > > > > On a different level: shouldn't the bootstrapping of the > > MetacelloStub, or rather the downloading of version signal an error > > with a timeout sooner when it cannot retrieve a > > version, instead of waiting or retrying for a long time? > > > > Kind regards, > > Jakob > > > > From Tom.Beckmann at student.hpi.uni-potsdam.de Mon Jul 13 17:47:16 2020 From: Tom.Beckmann at student.hpi.uni-potsdam.de (Beckmann, Tom) Date: Mon, 13 Jul 2020 17:47:16 +0000 Subject: [squeak-dev] Metacello bootstrap fails due to download timeouts In-Reply-To: References: <06BCBF78-A8FB-4FBF-B767-967DDF3DF328@gmx.de>, Message-ID: Hi Jakob, smalltalkHub had also been offline for the past three days or so, see this thread on the Pharo mailing list: http://forum.world.st/smalltalkhub-down-td5119524.html My vision for the Squeak/Metacello installation process is as follows (note that I haven't discussed this with anyone else yet, so there may be some false assumptions): - The Metacello on Github gets a new CI task that, after a successful build for all Squeak platforms, produces a single MCZ that bundles the current Metacello from master - MetacelloStub downloads the most recent MCZ for Metacello master and installs it - A postInstall script configures the Github Metacello repository and registers it in the system, but does not download anything, since we already have the most up-to-date version of Metacello installed. This is just to provide the same impression as if we had gone out and downloaded it again. This would have several advantages: - no more bootstrapping in-image: the bootstrapping will essentially be moved to the CI to happen only once for everyone - through this, we get a massively improved installation time (I assume): downloading an MCZ and installing it should be considerably faster than the various installation steps that we currently have to go through to get the most recent Metacello version - only one source of truth: we no longer have different versions of Metacello on smalltalkHub/Gemsource, but only the one on Github. This would have prevented the short outage we had a couple weeks back where the bootstrap-Metacello version was not able to read some repositories as the format had changed since then Concerning Squeak-trunk 32bit builds, I just tried to run one locally headful, and a failure occurs in primitiveSSLCreate, leading to a notification about ensuring to have internet and then a quiet image (see Installer>>ensureRecentMetacello, `self inform: ...`). I suppose we could consider changing this to an error instead, such that the CI build would fail rather than happily wait for ever after for you to click on the Okay button of the info window. Or, even better, create an Exception subclass for it that smalltalkCI can catch and handle appropriately, while by default the user sees the same info window. Best, Tom ________________________________________ From: Jakob Reschke Sent: Monday, July 13, 2020 7:28:01 PM To: Tobias Pape Cc: The general-purpose Squeak developers list; Beckmann, Tom; Henrichs, Dale (Gemtalksystems); Niephaus, Fabio Subject: Re: Metacello bootstrap fails due to download timeouts Maybe, but it did not even get to the steps that involve GitHub as far as I can tell. Also the 32 bit trunk builds already failed before today. Am Mo., 13. Juli 2020 um 19:23 Uhr schrieb Tobias Pape : > > > > On 13.07.2020, at 19:22, Jakob Reschke wrote: > > > > Hi all, > > > > My Travis CI builds for Squeak-Trunk 32 bits (and only these) started to > > fail due to timeouts. When I looked at it in a Linux VM and it fails > > to download Metacello-Base-dkh.109.mcz from SmalltalkHub. When I try > > to access this version with a web browser, I get an error HTTP 500 > > VoMongoConnectionError > > http://smalltalkhub.com/mc/dkh/metacello/main/Metacello-Base-dkh.109.mcz > > > Github was down today. > -t > > > > > A fresh 64 bit Trunk image from squeak.org when run on Windows instead > > hangs when > > downloading Metacello-Core-dkh.494.mcz when I do `Metacello new`. > > Eventually it erred with "Error: retry with alternate repository > > failed: 'ConnectionTimedOut: Data receive timed out.'" ...after about > > half an hour or so. The error comes from > > ConfigurationOfMetacello>>ensureMetacello:. Though it does look as if > > it first tried with a repository at > > http://seaside.gemtalksystems.com/ss/metacello and not SmalltalkHub. I > > can download the version in a web browser without a problem: > > http://seaside.gemtalksystems.com/ss/metacello/Metacello-Core-dkh.494.mcz > > > > Yet a local 64 bit trunk smalltalkCI build succeeded and I don't know > > why yet. It also needs to go through the MetacelloStub, doesn't it? > > > > For a start, does anyone experience the same problem or is it my bad > > luck with the connections? To test, print `Metacello new` in a fresh image > > which does not have the Metacello class yet. > > > > Now SmalltalkHub is deprecated as you can read on its > > front page. http://smalltalkhub.com/ > > > > Tom, Tobias, Dale, you already started to discuss changing the > > bootstrap of current Metacello in Squeak when the Tonel changes were > > integrated, didn't you? Is there a path where we can live without any > > unmaintained repositories like the ones on SmalltalkHub? > > > > On a different level: shouldn't the bootstrapping of the > > MetacelloStub, or rather the downloading of version signal an error > > with a timeout sooner when it cannot retrieve a > > version, instead of waiting or retrying for a long time? > > > > Kind regards, > > Jakob > > > > From jecel at merlintec.com Mon Jul 13 19:36:17 2020 From: jecel at merlintec.com (Jecel Assumpcao Jr) Date: Mon, 13 Jul 2020 16:36:17 -0300 Subject: [squeak-dev] Squeak RISC-V ISA 32I Implementation In-Reply-To: References: <6c60fc99-8702-0a25-ac86-cc9260c351ee@leastfixedpoint.com> <0B11BD3F-57BB-4A28-8827-C4F0F80D6FAC@gmx.de> Message-ID: <20200713194342.55BCC1241579@proxy.email-ssl.com.br> Eric, congratulations on your project! An interesting direction to take this would be to make it compatible with the processor simulator interface in Cog. In the case of ARM and x86 this interface calls external programs but in the case of MIPS it is a simulator written in Squeak. You can find this in the VMMaker package. Something like this would be the first step in a port of OpenSmalltalk VM to RISC-V. -- Jecel From asqueaker at gmail.com Mon Jul 13 21:34:59 2020 From: asqueaker at gmail.com (Chris Muller) Date: Mon, 13 Jul 2020 16:34:59 -0500 Subject: [squeak-dev] look what appeared in my news feed! In-Reply-To: <78616baa-99cd-1d03-b80f-e4e1745992ff@pm.me> References: <78616baa-99cd-1d03-b80f-e4e1745992ff@pm.me> Message-ID: The original LinkedIn blog they quoted mentioned Squeak. Very cool, thanks for sharing. Did anyone get it going on a RPi? I tried on a RPi1 but failed the first time, I might try again. On Mon, Jul 13, 2020 at 2:17 AM Robert Withers via Squeak-dev wrote: > > Hey, what's up? Well, here was a news article that appeared in my google > news feed. > > https://hackaday.com/2020/07/12/making-smalltalk-on-a-raspberry-pi/ > > Sadly, they do not mention Squeak, just GNU Smalltalk. > > K, r > > > From forums.jakob at resfarm.de Mon Jul 13 21:37:51 2020 From: forums.jakob at resfarm.de (Jakob Reschke) Date: Mon, 13 Jul 2020 23:37:51 +0200 Subject: [squeak-dev] Metacello bootstrap fails due to download timeouts In-Reply-To: References: <06BCBF78-A8FB-4FBF-B767-967DDF3DF328@gmx.de> Message-ID: Beckmann, Tom schrieb am Mo., 13. Juli 2020, 19:47: > > Concerning Squeak-trunk 32bit builds, I just tried to run one locally > headful, and a failure occurs in primitiveSSLCreate, leading to a > notification about ensuring to have internet and then a quiet image (see > Installer>>ensureRecentMetacello, `self inform: ...`). I suppose we could > consider changing this to an error instead, such that the CI build would > fail rather than happily wait for ever after for you to click on the Okay > button of the info window. Or, even better, create an Exception subclass > for it that smalltalkCI can catch and handle appropriately, while by > default the user sees the same info window. > > Since that is not what I observed, we seem to have multiple such points of non-failures... -------------- next part -------------- An HTML attachment was scrubbed... URL: From Tom.Beckmann at student.hpi.uni-potsdam.de Tue Jul 14 06:28:27 2020 From: Tom.Beckmann at student.hpi.uni-potsdam.de (Beckmann, Tom) Date: Tue, 14 Jul 2020 06:28:27 +0000 Subject: [squeak-dev] Metacello bootstrap fails due to download timeouts In-Reply-To: References: <06BCBF78-A8FB-4FBF-B767-967DDF3DF328@gmx.de> , Message-ID: Ah sorry, I got confused with the various 32- vs 64-bit mentions. Also, the SqueakSSL issue turned out to be just me forgetting that I did not have a well-configured 32bit environment. I just tried running the Squot tests locally with squeak32-trunk on smalltalkCI, which turned out all green. For a couple hours now, smalltalkHub is also online again, so maybe the issues you were observing were all related to this part of the infrastructure failing and errors bubbling up to unexpected places? Or are the builds still failing on Travis? ________________________________________ From: Jakob Reschke Sent: Monday, July 13, 2020 11:37:51 PM To: Beckmann, Tom Cc: Tobias Pape; The general-purpose Squeak developers list; Henrichs, Dale (Gemtalksystems); Niephaus, Fabio Subject: Re: Metacello bootstrap fails due to download timeouts Beckmann, Tom > schrieb am Mo., 13. Juli 2020, 19:47: Concerning Squeak-trunk 32bit builds, I just tried to run one locally headful, and a failure occurs in primitiveSSLCreate, leading to a notification about ensuring to have internet and then a quiet image (see Installer>>ensureRecentMetacello, `self inform: ...`). I suppose we could consider changing this to an error instead, such that the CI build would fail rather than happily wait for ever after for you to click on the Okay button of the info window. Or, even better, create an Exception subclass for it that smalltalkCI can catch and handle appropriately, while by default the user sees the same info window. Since that is not what I observed, we seem to have multiple such points of non-failures... From marcel.taeumel at hpi.de Tue Jul 14 08:40:41 2020 From: marcel.taeumel at hpi.de (Marcel Taeumel) Date: Tue, 14 Jul 2020 10:40:41 +0200 Subject: [squeak-dev] We need to talk about graphics In-Reply-To: <97F2A1A6-06AF-4DB2-A79D-816DCFFAAFF9@heaveneverywhere.com> References: <90C7742C-9E88-4DB3-81A5-1CA18B83FB2F@rowledge.org> <5593C678-5CD0-43D7-A72A-84B4C3D92A7B@heaveneverywhere.com> <97F2A1A6-06AF-4DB2-A79D-816DCFFAAFF9@heaveneverywhere.com> Message-ID: Hi Stephen. Separation of model, view, and maybe controller-like objects is a choice you can still make in your application designed for and written in Morphic. Try exploring and working with the direct-manipulation concepts Morphic has to offer. Those concepts can speed up the feedback cycle, which can then lead to a better architectural design in your application. Many of your thoughts on a "good OO framework" omits the fact that software rather grows -- refactoring being a vital part in its lifecycle. Happy programming! =) Best, Marcel Am 11.07.2020 20:02:55 schrieb Stephen Pope : To put it bluntly: I gave porting old-school MVC to Cuis. [flame on] Morphic is miserable and really needs to be replaced by MVC, though (IMHO). Why? 1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring. 2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern [https://en.wikipedia.org/wiki/Composite_pattern]) and should be applied to everything where one builds trees, such as view hierarchies. The root view object should not have subviews, the view-composite should. (I know that old-school MVC didn’t do it that way, but new implementations certainly should). 3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables. 4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds? I could go on… [flame off]  It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5. stp --                     Stephen Travis Pope   Santa Barbara, California, USA               http://HeavenEverywhere.com [http://HeavenEverywhere.com]        http://FASTLabInc.com [http://FASTLabInc.com]                        https://vimeo.com/user19434036/videos [https://vimeo.com/user19434036/videos]      http://heaveneverywhere.com/Reflections [http://heaveneverywhere.com/Reflections] -- On Jul 9, 2020, at 11:12 PM, stephen at heaveneverywhere.com [mailto:stephen at heaveneverywhere.com] wrote: …on a related topic, I’ve started porting old-school MVC* to Cuis with the intention of replacing Morphic with a generic framework that can be back-ended by BitBLT, OpenGL or HTML5. Anybody want to help? Stephen * = starting with traditional MVC classes and system windows, and following that with some version of the “Wrapper” framework as still used in VisualWorks. --                     Stephen Travis Pope   Santa Barbara, California, USA               http://HeavenEverywhere.com [http://heaveneverywhere.com/]        http://FASTLabInc.com [http://fastlabinc.com/]                        https://vimeo.com/user19434036/videos [https://vimeo.com/user19434036/videos]      http://heaveneverywhere.com/Reflections [http://heaveneverywhere.com/Reflections] -- On Jun 28, 2020, at 5:53 PM, tim Rowledge wrote: Seriously. We've been sitting around twiddling thumbs about better graphics for decades now. We had Balloon2D & 3D. We had 'Pooh graphics' to do vector forms. We have some excellent stuff being done by the Cuis crew. We have some amazing ideas from Nile/Gezira. We have a number of potential 3rd party graphics libraries we might adopt. We have an advanced JIT that could be used to make on-demand graphics routines either on their own or working with pretty much any of the above. We probably have other options I've not even heard of. Maybe we should actually do something? Can we at least talk about it? tim -- tim Rowledge; tim at rowledge.org [mailto:tim at rowledge.org]; http://www.rowledge.org/tim [http://www.rowledge.org/tim] Strange OpCodes: SVE: Skip on Vernal Equinox -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: pastedGraphic.tiff Type: image/tiff Size: 2442 bytes Desc: not available URL: From commits at source.squeak.org Tue Jul 14 13:10:12 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Tue, 14 Jul 2020 13:10:12 0000 Subject: [squeak-dev] The Trunk: ToolBuilder-MVC-mt.61.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-MVC to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-MVC-mt.61.mcz ==================== Summary ==================== Name: ToolBuilder-MVC-mt.61 Author: mt Time: 14 July 2020, 3:10:12.065552 pm UUID: 39b7e9cc-2da0-48b8-abc4-da349a22f903 Ancestors: ToolBuilder-MVC-TheresaHMartenK.60 Fixes layout bug in MVC windows. =============== Diff against ToolBuilder-MVC-TheresaHMartenK.60 =============== Item was added: + ----- Method: MVCToolBuilder>>buildAll:in: (in category 'building') ----- + buildAll: aList in: newParent + "Overridden to propagate reduced topSize to widgets." + + | priorTopSize | + priorTopSize := topSize. + topSize := newParent window. + super buildAll: aList in: newParent. + topSize := priorTopSize.! Item was removed: - ----- Method: MVCToolBuilder>>positionSubviewsWithin: (in category 'private') ----- - positionSubviewsWithin: widget - "Translate subviews to position the viewport of each subView relative to - the widget window origin. If subviews are repositioned, as in a row of button - views arranged within a view, then the transformations will later be rescaled - to fit the subviews within the widget window." - - widget subViews ifNotNil: [:subViews | - subViews isEmpty ifFalse: [ | translation | - translation := widget window origin - subViews first window origin. - subViews do: [:v | - v setTransformation: (v transformation translateBy: translation)]]]. - ! Item was changed: ----- Method: MVCToolBuilder>>setFrame:in: (in category 'private') ----- setFrame: fractionsRectangleOrLayoutFrame in: widget + | win | + fractionsRectangleOrLayoutFrame ifNil: [ + "Translate subviews to position the viewport of each subView relative to + the widget window origin. If subviews are repositioned, as in a row of button + views arranged within a view, then the transformations will later be rescaled + to fit the subviews within the widget window." + self flag: #nonProportionalLayout. "See #setLayout:in:." + widget setTransformation: (widget transformation translateBy: parent window origin - widget window origin). + ^ self]. + - fractionsRectangleOrLayoutFrame ifNil: [^nil]. win := fractionsRectangleOrLayoutFrame isRectangle ifTrue: [self asWindow: fractionsRectangleOrLayoutFrame] ifFalse: [fractionsRectangleOrLayoutFrame layout: nil in: topSize]. "assume LayoutFrame" widget window: win.! Item was changed: ----- Method: MVCToolBuilder>>setLayout:in: (in category 'private') ----- setLayout: layout in: widget "Arrange subview horizontally or vertically according to layout directive. If the subview dimensions were specified with layout frames rather than explicit rectangle sizes, then their window horizontal or vertical dimensions will be resized as needed to fit within the widget extent." - self positionSubviewsWithin: widget. layout == #proportional ifTrue:[^self]. layout == #horizontal ifTrue:[ | prev subViewWidth widgetWidth xScale | subViewWidth := (widget subViews collect: [:e | e window extent x]) sum. widgetWidth := widget window extent x. xScale := widgetWidth / subViewWidth. "to adjust corner of prev prior to align:" prev := nil. widget subViews do:[:next| | newWindowWidth newCorner | prev ifNotNil:[ "resize prev window prior to aligning next" xScale < 1 ifTrue: [ "proportional placement spec requires resizing" newWindowWidth := (prev window extent x * xScale) truncated. newCorner := (prev window origin x + newWindowWidth)@(prev window corner y). prev setWindow: (prev window origin corner: newCorner)]. next align: next viewport topLeft with: prev viewport topRight. ]. prev := next. ]. ^self]. layout == #vertical ifTrue:[ | prev subViewHeight widgetHeight yScale | subViewHeight := (widget subViews collect: [:e | e window extent y]) sum. widgetHeight := widget window extent y. yScale := widgetHeight / subViewHeight. "to adjust corner of prev prior to align:" prev := nil. widget subViews do:[:next| | newWindowHeight newCorner | prev ifNotNil:[ "resize prev window prior to aligning next" yScale < 1 ifTrue: [ "proportional placement spec requires resizing" newWindowHeight := (prev window extent y * yScale) truncated. newCorner := (prev window corner x)@(prev window origin y + newWindowHeight). prev setWindow: (prev window origin corner: newCorner)]. next align: next viewport topLeft with: prev viewport bottomLeft. ]. prev := next. ]. ^self]. ^self error: 'Unknown layout: ', layout.! From marcel.taeumel at hpi.de Tue Jul 14 13:10:45 2020 From: marcel.taeumel at hpi.de (Marcel Taeumel) Date: Tue, 14 Jul 2020 15:10:45 +0200 Subject: [squeak-dev] Disappearing MVC code panes In-Reply-To: <9713d621-506d-024e-8545-09819159988d@zogotounga.net> References: <9713d621-506d-024e-8545-09819159988d@zogotounga.net> Message-ID: Hi Stef, try ToolBuilder-MVC-mt.61. :-) Best, Marcel Am 12.07.2020 22:56:10 schrieb Stéphane Rollandin : Hello all, Playing a bit with MVC I found the following bug: If preference "optional buttons" in the "browsing" category is turned off, the code panes in all MVC browsers are not displayed. Stef -------------- next part -------------- An HTML attachment was scrubbed... URL: From builds at travis-ci.org Tue Jul 14 14:34:44 2020 From: builds at travis-ci.org (Travis CI) Date: Tue, 14 Jul 2020 14:34:44 +0000 Subject: [squeak-dev] [CRON] Passed: squeak-smalltalk/squeak-app#1759 (squeak-trunk - 25ebaf1) In-Reply-To: Message-ID: <5f0dc283efc5e_13ffa5ac4074015017@travis-tasks-79c476dcc5-6sbw6.mail> Build Update for squeak-smalltalk/squeak-app ------------------------------------- Build: #1759 Status: Passed Duration: 22 mins and 34 secs Commit: 25ebaf1 (squeak-trunk) Author: Marcel Taeumel Message: Hi all! The project "squeak-app" is part of the continuous build infrastructure (short: CI) for Squeak's bundles, which you can download at https://files.squeak.org/, followed by the version tag you are looking for. All bundles are updated on a regular basis, which is daily for Trunk (i.e. the current alpha version) and monthly for release versions. Note that there won't be new bundles if Squeak's build number, which reflects in-image code updates, did not change between CI jobs. -- The Squeak Oversight Board [ci skip] View the changeset: https://github.com/squeak-smalltalk/squeak-app/compare/fb55517f583fe544f9225413a23fe82a680200c2...25ebaf18249322227da1f7c767384cb35082fab7 View the full build log and details: https://travis-ci.org/github/squeak-smalltalk/squeak-app/builds/707994097?utm_medium=notification&utm_source=email -- You can unsubscribe from build emails from the squeak-smalltalk/squeak-app repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8901856&utm_medium=notification&utm_source=email. Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notification&utm_source=email. Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications. -------------- next part -------------- An HTML attachment was scrubbed... URL: From commits at source.squeak.org Wed Jul 15 07:04:35 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 15 Jul 2020 07:04:35 0000 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.105.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.105.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.105 Author: mt Time: 15 July 2020, 9:04:35.150352 am UUID: 6f3e4cc4-0188-4748-abd0-b8f6e3bec8f6 Ancestors: PreferenceBrowser-mt.104 Minor tweaks of visuals in preference browser to match other tools' appearance. =============== Diff against PreferenceBrowser-mt.104 =============== Item was changed: ----- Method: PreferenceBrowserMorph>>basicButton (in category 'submorphs - buttons') ----- basicButton ^ PluggableButtonMorph new model: self model; offColor: self paneColor; hResizing: #spaceFill; + vResizing: #spaceFill; layoutInset: 4; yourself! Item was changed: ----- Method: PreferenceBrowserMorph>>buttonRowLayoutFrame (in category 'submorphs - buttons') ----- buttonRowLayoutFrame + ^LayoutFrame fractions: (0 at 0 corner: 1 at 0) offsets: (0 at 0 corner: 0@ (Preferences standardButtonFont height * 2))! - ^LayoutFrame fractions: (0 at 0 corner: 1 at 0) offsets: (0 at 0 corner: 0@ (TextStyle defaultFont height * 2.5))! Item was changed: ----- Method: PreferenceBrowserMorph>>mainPanel (in category 'submorphs - main panel') ----- mainPanel ^mainPanel ifNil: [mainPanel := BorderedMorph new color: Color transparent; borderWidth: 0; hResizing: #spaceFill; vResizing: #spaceFill; cellGap: 5; changeProportionalLayout; on: #mouseEnter send: #paneTransition: to: self; addMorphBack: self newCategoryList; addMorphBack: self preferenceList; + layoutFrame: (LayoutFrame fractions: (0 at 0 corner: 1 at 1) offsets: (0@ self searchTextFieldLayoutFrame bottomOffset corner: 0 at 0)); - layoutFrame: (LayoutFrame fractions: (0 at 0 corner: 1 at 1) offsets: (0@ 30 corner: 0 at 0)); addPaneSplitters; yourself].! Item was changed: ----- Method: PreferenceBrowserMorph>>newButtonRow (in category 'submorphs - buttons') ----- newButtonRow ^BorderedMorph new color: Color transparent; borderWidth: 0; cellGap: 2; - layoutInset: 2; layoutPolicy: TableLayout new; listDirection: #leftToRight; listCentering: #topLeft; cellPositioning: #topLeft; on: #mouseEnter send: #paneTransition: to: self; on: #mouseLeave send: #paneTransition: to: self; addMorphBack: self defaultButton; addMorphBack: self newSeparator; addMorphBack: self saveButton; addMorphBack: self loadButton; addMorphBack: self newSeparator; addMorphBack: self saveToDiskButton; addMorphBack: self loadFromDiskButton; addMorphBack: self newSeparator; addMorphBack: self themeButton; addMorphBack: self newTransparentFiller; addMorphBack: self helpButton; yourself.! Item was removed: - ----- Method: PreferenceBrowserMorph>>newSearchButton (in category 'submorphs - search panel') ----- - newSearchButton - ^self basicButton - label: 'search' translated; - actionSelector: #searchSelected; - setBalloonText: - 'Type what you want to search for here, then hit ', - 'the "Search" button, or else hit RETURN or ENTER' translated.! Item was removed: - ----- Method: PreferenceBrowserMorph>>newSearchPanel (in category 'submorphs - search panel') ----- - newSearchPanel - | bottom | - bottom := Morph new - color: Color transparent; - cellGap: 5; - layoutPolicy: TableLayout new; - listDirection: #leftToRight; - listCentering: #topLeft; - cellPositioning: #topLeft; - hResizing: #spaceFill; - vResizing: #shrinkWrap; - addMorphBack: self newSearchTextField - yourself. - ^Morph new - color: Color transparent; - layoutPolicy: TableLayout new; - listDirection: #topToBottom; - listCentering: #topLeft; - cellPositioning: #topLeft; - hResizing: #spaceFill; - vResizing: #shrinkWrap; - cellGap: 3; - addMorphBack: (StringMorph contents: 'Search preferences for: '); - addMorphBack: bottom; - yourself.! Item was changed: ----- Method: PreferenceBrowserMorph>>newSearchTextField (in category 'submorphs - search panel') ----- newSearchTextField | ptm | ptm := PluggableTextMorphPlus on: self model text: #searchPatternNeverTriggered accept: #searchPattern:. ptm minimumHeight: 0; balloonText: 'Search preferences ...'; hideScrollBarsIndefinitely; + layoutFrame: self searchTextFieldLayoutFrame; - layoutFrame: (LayoutFrame fractions: (0 at 0 corner: 1 at 0) offsets: (0 at 0 corner: 0@ (TextStyle default lineGrid * 2))); borderInset; vResizing: #spaceFill; hResizing: #spaceFill; acceptOnCR: true; onKeyStrokeSend: #value to: [ ptm hasUnacceptedEdits ifTrue: [ ptm accept ] ]. ^ptm.! Item was added: + ----- Method: PreferenceBrowserMorph>>searchTextFieldLayoutFrame (in category 'submorphs - search panel') ----- + searchTextFieldLayoutFrame + + ^ LayoutFrame + fractions: (0 at 0 corner: 1 at 0) + offsets: (0 at 0 corner: 0@ (Preferences standardDefaultTextFont height * 3/2) rounded)! From commits at source.squeak.org Wed Jul 15 07:10:22 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 15 Jul 2020 07:10:22 0000 Subject: [squeak-dev] The Trunk: Morphic-mt.1669.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1669.mcz ==================== Summary ==================== Name: Morphic-mt.1669 Author: mt Time: 15 July 2020, 9:10:16.659352 am UUID: 13e754ac-84e8-403c-8bf8-be99b1586fbb Ancestors: Morphic-cbc.1668 Fixes icon scaling in tree widgets. =============== Diff against Morphic-cbc.1668 =============== Item was changed: ----- Method: IndentingListItemMorph>>initWithContents:prior:forList:indentLevel: (in category 'initialization') ----- initWithContents: anObject prior: priorMorph forList: hostList indentLevel: newLevel container := hostList. complexContents := anObject. anObject addDependent: self. self initWithContents: self getLabel font: Preferences standardListFont emphasis: nil. indentLevel := 0. isExpanded := false. nextSibling := firstChild := nil. priorMorph ifNotNil: [ priorMorph nextSibling: self. ]. indentLevel := newLevel. + icon := self getIcon scaleIconToDisplay. - icon := self getIcon. self extent: self minWidth @ self minHeight! Item was changed: ----- Method: IndentingListItemMorph>>refresh (in category 'initialization') ----- refresh self contents: self getLabel. + icon := self getIcon scaleIconToDisplay. - icon := self getIcon. (self valueOfProperty: #wasRefreshed ifAbsent: [false]) ifFalse: [ self setProperty: #wasRefreshed toValue: true].! From commits at source.squeak.org Wed Jul 15 09:22:36 2020 From: commits at source.squeak.org (commits at source.squeak.org) Date: Wed, 15 Jul 2020 09:22:36 0000 Subject: [squeak-dev] The Trunk: Kernel-mt.1333.mcz Message-ID: Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.1333.mcz ==================== Summary ==================== Name: Kernel-mt.1333 Author: mt Time: 15 July 2020, 11:22:34.685718 am UUID: 4e50519a-d1e3-4a74-85cc-3c02660d650f Ancestors: Kernel-nice.1332 Clean up code for non-event-based input processing, primarily used in ST80. Moves some methods to ST80 package. Needs more work to remove all sends from Morphic such as #shiftPressed etc. Also rely on in-image interrupt-key handling only. Recent VMs do not fire the old-style interrupt semaphore anymore. See #userInterruptWatcher. =============== Diff against Kernel-nice.1332 =============== Item was changed: Object subclass: #EventSensor instanceVariableNames: 'mouseButtons mousePosition mouseWheelDelta keyboardBuffer interruptKey interruptSemaphore eventQueue inputSemaphore lastEventPoll hasInputSemaphore' + classVariableNames: 'ButtonDecodeTable EventPollPeriod EventTicklerProcess InterruptWatcherProcess KeyDecodeTable' - classVariableNames: 'ButtonDecodeTable EventPollPeriod EventTicklerProcess InterruptSemaphore InterruptWatcherProcess KeyDecodeTable' poolDictionaries: 'EventSensorConstants' category: 'Kernel-Processes'! !EventSensor commentStamp: 'mt 12/13/2019 14:38' prior: 0! An EventSensor is an interface to the user input devices. There is at least one instance of EventSensor named Sensor in the system. EventSensor is a replacement for the earlier InputSensor implementation based on a set of (optional) event primitives. An EventSensor updates its state when events are received so that all state based users of Sensor (e.g., Sensor keyboard, Sensor leftShiftDown, Sensor mouseButtons) will work exactly as before, by moving the current VM mechanisms into EventSensor itself. An optional input semaphore is part of the new design. For platforms that support true asynchronous event notification, the semaphore will be signaled to indicate pending events. On platforms that do not support asynchronous notifications about events, the UI will have to poll EventSensor periodically to read events from the VM. Instance variables: mouseButtons - mouse button state as replacement for primMouseButtons mousePosition - mouse position as replacement for primMousePt keyboardBuffer - keyboard input buffer interruptKey - currently defined interrupt key interruptSemaphore - the semaphore signaled when the interruptKey is detected eventQueue - an optional event queue for event driven applications inputSemaphore - the semaphore signaled by the VM if asynchronous event notification is supported lastEventPoll - the last millisecondClockValue at which we called fetchMoreEvents hasInputSemaphore - true if my inputSemaphore has actually been signaled at least once. Class variables: ButtonDecodeTable - maps mouse buttons as reported by the VM to ones reported in the events. KeyDecodeTable SmallInteger>> - maps some keys and their modifiers to other keys (used for instance to map Ctrl-X to Alt-X) InterruptSemaphore - signalled by the the VM and/or the event loop upon receiving an interrupt keystroke. InterruptWatcherProcess - waits on the InterruptSemaphore and then responds as appropriate. EventPollPeriod - the number of milliseconds to wait between polling for more events in the userInterruptHandler. EventTicklerProcess - the process that makes sure that events are polled for often enough (at least every EventPollPeriod milliseconds). Event format: The current event format is very simple. Each event is recorded into an 8 element array. All events must provide some SmallInteger ID (the first field in the event buffer) and a time stamp (the second field in the event buffer), so that the difference between the time stamp of an event and the current time can be reported. Currently, the following events are defined: Null event ============= The Null event is returned when the ST side asks for more events but no more events are available. Structure: [1] - event type 0 [2-8] - unused Mouse event structure ========================== Mouse events are generated when mouse input is detected. [1] - event type 1 [2] - time stamp [3] - mouse x position [4] - mouse y position [5] - button state; bitfield with the following entries: 1 - 2r001 yellow (e.g., right) button 2 - 2r010 blue (e.g., middle) button 4 - 2r100 red (e.g., left) button [all other bits are currently undefined] [6] - modifier keys; bitfield with the following entries: 1 - shift key 2 - ctrl key 4 - (Mac specific) option key 8 - Cmd/Alt key [all other bits are currently undefined] [7] - reserved. [8] - host window id. Keyboard events ==================== Keyboard events are generated when keyboard input is detected. [1] - event type 2 [2] - time stamp [3] - character code (Ascii) For now the character code is in Mac Roman encoding. See #macToSqueak. For key press/release (see [4]), character codes are normalized. [4] - press state; integer with the following meaning 0 - character (aka. key stroke or key still pressed) 1 - key press (aka. key down) 2 - key release (aka. key up) [5] - modifier keys (same as in mouse events) For key press/release (see [4]), modifier keys are still accessible. [6] - character code (Unicode UTF32) Manual decoding via KeyboardInputInterpreter possible. For key press/release (see [4]), character codes are normalized. [7] - reserved. [8] - host window id. Mouse-wheel event structure ========================== Mouse-wheel events are generated when mouse-wheel input is detected. [1] - event type 7 [2] - time stamp [3] - horizontal scroll delta [4] - vertical scroll delta [5] - button state (same as in mouse events) [6] - modifier keys (same as in mouse events) [7] - reserved. [8] - host window id. ! Item was removed: - ----- Method: EventSensor>>characterForKeycode: (in category 'keyboard') ----- - characterForKeycode: keycode - "Map the given keycode to a Smalltalk character object. Encoding: - A keycode is 12 bits: <4 modifer bits><8 bit ISO character> - Modifier bits are: