From asqueaker at gmail.com Fri Apr 1 00:00:29 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Apr 1 00:01:11 2016 Subject: [squeak-dev] Monticello working copy list got really slow.. Message-ID: Open MC browser. Focus on package list. Press and hold down arrow. It cannot keep up with even a moderate keyboard repeat. But in Squeak5.0, it can, easily. Something broke or degraded? From lewis at mail.msen.com Fri Apr 1 03:34:05 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Apr 1 03:34:08 2016 Subject: [squeak-dev] Monticello working copy list got really slow.. In-Reply-To: References: Message-ID: <20160401033405.GA28707@shell.msen.com> On Thu, Mar 31, 2016 at 07:00:29PM -0500, Chris Muller wrote: > Open MC browser. Focus on package list. Press and hold down arrow. > > It cannot keep up with even a moderate keyboard repeat. > > But in Squeak5.0, it can, easily. > > Something broke or degraded? I cannot reproduce in trunk. In what image do you see this problem? Dave From leves at caesar.elte.hu Fri Apr 1 04:18:26 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri Apr 1 04:18:31 2016 Subject: [squeak-dev] Monticello working copy list got really slow.. In-Reply-To: References: Message-ID: It's probably #directorySize, which is sent indirectly from MCDirectoryRepository >> #description, being recalculated for your package cache every time the selection changes. Levente On Thu, 31 Mar 2016, Chris Muller wrote: > Open MC browser. Focus on package list. Press and hold down arrow. > > It cannot keep up with even a moderate keyboard repeat. > > But in Squeak5.0, it can, easily. > > Something broke or degraded? > > From ma.chris.m at gmail.com Fri Apr 1 04:35:01 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Fri Apr 1 04:35:44 2016 Subject: [squeak-dev] Monticello working copy list got really slow.. In-Reply-To: References: Message-ID: Yip, that's it. On Thu, Mar 31, 2016 at 11:18 PM, Levente Uzonyi wrote: > It's probably #directorySize, which is sent indirectly from > MCDirectoryRepository >> #description, being recalculated for your package > cache every time the selection changes. > > Levente > > > On Thu, 31 Mar 2016, Chris Muller wrote: > >> Open MC browser. Focus on package list. Press and hold down arrow. >> >> It cannot keep up with even a moderate keyboard repeat. >> >> But in Squeak5.0, it can, easily. >> >> Something broke or degraded? >> >> > From commits at source.squeak.org Fri Apr 1 08:10:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 1 08:10:19 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.629.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.629.mcz ==================== Summary ==================== Name: Monticello-mt.629 Author: mt Time: 1 April 2016, 10:10:09.351613 am UUID: 6f4d1dcf-d34a-4022-81b1-4d3db3559fdf Ancestors: Monticello-mt.628 Due to popular request, roll-back of latest change about showing the disk utilization of directory repositories in the working copy browser. =============== Diff against Monticello-mt.628 =============== Item was changed: ----- Method: MCDirectoryRepository>>description (in category 'accessing') ----- description + ^ directory pathName! - ^ '{1} ({2})' format: {directory pathName. directory directoryEntry directorySizeString}! From Marcel.Taeumel at hpi.de Fri Apr 1 07:43:48 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 1 08:14:22 2016 Subject: [squeak-dev] Re: The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> Message-ID: <1459496628623-4887736.post@n4.nabble.com> We should use real morphs as halo handles, not only forms. Then we can define/adjust that deep-copy operation there. Nevertheless, Chris is right that the override of #veryDeepCopyWith: in Form outside any Morphic extension category is quite smelly. Deep copying is not Morphic-specific. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Graphics-cmm-329-mcz-tp4887677p4887736.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Apr 1 07:44:57 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 1 08:15:31 2016 Subject: [squeak-dev] Re: Monticello working copy list got really slow.. In-Reply-To: References: Message-ID: <1459496697128-4887737.post@n4.nabble.com> *hmpf* Stoopid model update. Filtering should not re-fetch data from the model. Anyway, I reverted it. Best, Marcel -- View this message in context: http://forum.world.st/Monticello-working-copy-list-got-really-slow-tp4887703p4887737.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Apr 1 09:02:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 1 09:02:13 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1096.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1096.mcz ==================== Summary ==================== Name: Morphic-mt.1096 Author: mt Time: 1 April 2016, 11:01:41.051613 am UUID: f09dd27a-9b91-4732-b565-022ab8bb86a8 Ancestors: Morphic-mt.1095 Only show a shadow for the new-style balloon morphs if the balloon color is not translucent (due to simplified drawing code for shadow). You can change the color of balloon morphs via BalloonMorph >> #balloonColor:. Note that #menuAppearance3d still controls shadows in many places such as windows, menus, and user dialog morphs. =============== Diff against Morphic-mt.1095 =============== Item was changed: ----- Method: NewBalloonMorph>>initialize (in category 'initialization') ----- initialize super initialize. self borderWidth: self defaultBorderWidth; borderColor: self defaultBorderColor; + color: self defaultColor; + hasDropShadow: (Preferences menuAppearance3d and: [self defaultColor isTranslucent not]); - color: (Preferences menuAppearance3d - ifTrue: [self defaultColor alpha: 1.0] - ifFalse: [self defaultColor]); - hasDropShadow: Preferences menuAppearance3d; shadowOffset: 1@1; shadowColor: (self color muchDarker muchDarker alpha: 0.333); orientation: #bottomLeft. MenuMorph roundedMenuCorners ifTrue: [self cornerStyle: #rounded]. textMorph := TextMorph new wrapFlag: false; lock; yourself. self addMorph: textMorph.! From commits at source.squeak.org Fri Apr 1 09:07:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 1 09:07:12 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1097.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1097.mcz ==================== Summary ==================== Name: Morphic-mt.1097 Author: mt Time: 1 April 2016, 11:06:38.274613 am UUID: 22624019-6120-4c7e-aaad-447959a929dc Ancestors: Morphic-mt.1096 Restores the possiblitiy for each morph to have its own balloon color in new-style balloon morphs. =============== Diff against Morphic-mt.1096 =============== Item was changed: ----- Method: NewBalloonMorph class>>string:for:corner: (in category 'instance creation') ----- string: message for: morph corner: symbol ^ self new + color: morph balloonColor; balloonOwner: morph; setText: message; orientation: symbol; yourself! From commits at source.squeak.org Fri Apr 1 09:29:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 1 09:29:06 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1098.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1098.mcz ==================== Summary ==================== Name: Morphic-mt.1098 Author: mt Time: 1 April 2016, 11:28:33.972613 am UUID: 96501329-3432-4823-af23-a7a2f2ea330b Ancestors: Morphic-mt.1097 Adds possibility to specify pop-up position hint for balloon morphs. Use it to show some help programmatically like this: someWidget showBalloon: 'Now click here.' at: someWidget topCenter. =============== Diff against Morphic-mt.1097 =============== Item was added: + ----- Method: BalloonMorph>>popUpAt: (in category 'initialization') ----- + popUpAt: point + + self position: point. + self popUp.! Item was added: + ----- Method: Morph>>showBalloon:at: (in category 'halos and balloon help') ----- + showBalloon: msgString at: point + "Pop up a balloon containing the given string." + + self isInWorld ifFalse: [^ self]. + (msgString isNil or: [msgString isEmpty]) ifTrue: [^ self]. + + (self balloonMorphClass + string: msgString + for: self balloonHelpAligner) + popUpAt: point.! Item was added: + ----- Method: NewBalloonMorph>>popUpAt: (in category 'initialization') ----- + popUpAt: point + "Do not remove other balloon helps." + + | w h | + self balloonOwner ifNil: [^ self]. + self balloonOwner isInWorld ifFalse: [^ self]. + + w := self balloonOwner world. + h := w activeHand. + + #(bottomLeft topLeft bottomRight topRight) detect: [:nextOrientation | + | pointWithOffset | + self orientation: nextOrientation. + pointWithOffset := point + self tailOffset. + self move: pointWithOffset. + self bounds: (self bounds translatedToBeWithin: w bounds). + (self bounds perform: self orientation) = pointWithOffset] ifNone: ["Keep last try."]. + + w activeHand addBalloonHelp: self. + self openInWorld.! From karlramberg at gmail.com Fri Apr 1 12:33:34 2016 From: karlramberg at gmail.com (karl ramberg) Date: Fri Apr 1 12:33:38 2016 Subject: [squeak-dev] Re: The Inbox: Graphics-cmm.329.mcz In-Reply-To: <1459496628623-4887736.post@n4.nabble.com> References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <1459496628623-4887736.post@n4.nabble.com> Message-ID: You can hold shift while dragging the green handle to change it's copying behavior. One makes a sibling, so they share the same form. One makes a copy of the morph and form. Best, Karl On Fri, Apr 1, 2016 at 9:43 AM, marcel.taeumel wrote: > We should use real morphs as halo handles, not only forms. Then we can > define/adjust that deep-copy operation there. > > Nevertheless, Chris is right that the override of #veryDeepCopyWith: in > Form > outside any Morphic extension category is quite smelly. Deep copying is not > Morphic-specific. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Inbox-Graphics-cmm-329-mcz-tp4887677p4887736.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160401/ef42b03c/attachment.htm From bert at freudenbergs.de Fri Apr 1 13:29:43 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Fri Apr 1 13:29:47 2016 Subject: [squeak-dev] Re: The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <1459496628623-4887736.post@n4.nabble.com> Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160401/ce2665a5/smime.bin From bert at freudenbergs.de Fri Apr 1 13:45:18 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Fri Apr 1 13:45:22 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> Message-ID: <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> On 01.04.2016, at 01:41, Chris Muller wrote: > > Okay, that's why this is in the Inbox. I started to formulate my > question in long words in email, but decided this was the quickest and > easiest way to ask it. :) > > Okay, so this is definitely not the place to fix my problem. So I > will instead try putting something into SketchMorph's veryDeepFixup: > which will ensure its underlying form gets copied when I green-halo a > SketchMorph. SketchMorph is an exception because he's a dumb data > object, not a "player" who wants to share a costume. SketchMorph is the single most-used user object in Etoys :) > -- I was working on an icon, writing scripts to change colors > pixel-by-pixel, goofed up my "backup" SketchMorph I had torn off the > green halo, only to find I corrupted my original, as well. Some work > lost. I?m sorry you lost time. Nevertheless, the originalForm in SketchMorph is designed to be shared. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160401/44eb0968/smime.bin From asqueaker at gmail.com Fri Apr 1 14:53:21 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Apr 1 14:54:04 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> Message-ID: Really? That's really surprising; SketchMorph is just a dumb data object, a painting, making a copy of it via the UI is a valid use-case. For every other kind of Morph, the green halo makes a deep copy, SketchMorph is inconsistent, shouldn't Etoys simply override that halo to call its own #semiDeepCopy to suit its own purposes? Is Etoys running in trunk? It is not targeted for trunk though, is it? I want to be able to make easy copies of SketchMorph's. Surely we can come up with some solution; what about Karl's suggestion? I think Shift should be the sharing, because the "modifer" keys are used to "modify" the standard behavior, which is a true veryDeepCopy.. On Fri, Apr 1, 2016 at 8:45 AM, Bert Freudenberg wrote: > On 01.04.2016, at 01:41, Chris Muller wrote: >> >> Okay, that's why this is in the Inbox. I started to formulate my >> question in long words in email, but decided this was the quickest and >> easiest way to ask it. :) >> >> Okay, so this is definitely not the place to fix my problem. So I >> will instead try putting something into SketchMorph's veryDeepFixup: >> which will ensure its underlying form gets copied when I green-halo a >> SketchMorph. SketchMorph is an exception because he's a dumb data >> object, not a "player" who wants to share a costume. > > SketchMorph is the single most-used user object in Etoys :) > >> -- I was working on an icon, writing scripts to change colors >> pixel-by-pixel, goofed up my "backup" SketchMorph I had torn off the >> green halo, only to find I corrupted my original, as well. Some work >> lost. > > I?m sorry you lost time. Nevertheless, the originalForm in SketchMorph is designed to be shared. > > - Bert - > > > > From lewis at mail.msen.com Fri Apr 1 15:18:04 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Apr 1 15:18:08 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> Message-ID: <43177.136.1.1.113.1459523884.squirrel@webmail.msen.com> Yes of course Etoys should work in trunk! It would be really good if some members of the squeak-dev community could take an interest in this, and maybe make a project out of doing whatever updates may be needed to clean up trunk in this regard. The Etoys image itself provides a clear reference of how things should work, and I'm sure that Bert and others would be happy to offer some guidance and oversight to anyone who might want to contribute. Personally I think it would be very cool if you could open a new trunk image, start a new project, and be able to select Morphic, MVC, or Etoys as types of project. Then entering a new Etoys project could take you directly into an environment just like that of the reference Etoys image. Dave > Really? That's really surprising; SketchMorph is just a dumb data > object, a painting, making a copy of it via the UI is a valid > use-case. For every other kind of Morph, the green halo makes a deep > copy, SketchMorph is inconsistent, shouldn't Etoys simply override > that halo to call its own #semiDeepCopy to suit its own purposes? > > Is Etoys running in trunk? It is not targeted for trunk though, is it? > > I want to be able to make easy copies of SketchMorph's. Surely we can > come up with some solution; what about Karl's suggestion? I think > Shift should be the sharing, because the "modifer" keys are used to > "modify" the standard behavior, which is a true veryDeepCopy.. > > > On Fri, Apr 1, 2016 at 8:45 AM, Bert Freudenberg > wrote: >> On 01.04.2016, at 01:41, Chris Muller wrote: >>> >>> Okay, that's why this is in the Inbox. I started to formulate my >>> question in long words in email, but decided this was the quickest and >>> easiest way to ask it. :) >>> >>> Okay, so this is definitely not the place to fix my problem. So I >>> will instead try putting something into SketchMorph's veryDeepFixup: >>> which will ensure its underlying form gets copied when I green-halo a >>> SketchMorph. SketchMorph is an exception because he's a dumb data >>> object, not a "player" who wants to share a costume. >> >> SketchMorph is the single most-used user object in Etoys :) >> >>> -- I was working on an icon, writing scripts to change colors >>> pixel-by-pixel, goofed up my "backup" SketchMorph I had torn off the >>> green halo, only to find I corrupted my original, as well. Some work >>> lost. >> >> I???m sorry you lost time. Nevertheless, the originalForm in SketchMorph >> is designed to be shared. >> >> - Bert - >> >> >> >> > From asqueaker at gmail.com Fri Apr 1 15:39:00 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Apr 1 15:39:42 2016 Subject: [squeak-dev] Re: Monticello working copy list got really slow.. In-Reply-To: <1459496697128-4887737.post@n4.nabble.com> References: <1459496697128-4887737.post@n4.nabble.com> Message-ID: Its not even just about performance -- this attribute is not something that concerns usage of Monticello at all, certainly not on the UI in that particular place (the repository list). Maybe if you wanted to put it somewhere on the Repository viewer; that might be more appropriate because there you're actually looking at a repository.. On Fri, Apr 1, 2016 at 2:44 AM, marcel.taeumel wrote: > *hmpf* Stoopid model update. Filtering should not re-fetch data from the > model. Anyway, I reverted it. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Monticello-working-copy-list-got-really-slow-tp4887703p4887737.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Das.Linux at gmx.de Fri Apr 1 16:19:55 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Fri Apr 1 16:19:54 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: <43177.136.1.1.113.1459523884.squirrel@webmail.msen.com> References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> <43177.136.1.1.113.1459523884.squirrel@webmail.msen.com> Message-ID: <0BBE6796-8C0A-41DF-A0C9-8B10F32DB20D@gmx.de> On 01.04.2016, at 17:18, David T. Lewis wrote: > Yes of course Etoys should work in trunk! > > It would be really good if some members of the squeak-dev community could > take an interest in this, and maybe make a project out of doing whatever > updates may be needed to clean up trunk in this regard. The Etoys image > itself provides a clear reference of how things should work, and I'm sure > that Bert and others would be happy to offer some guidance and oversight > to anyone who might want to contribute. > > Personally I think it would be very cool if you could open a new trunk > image, start a new project, and be able to select Morphic, MVC, or Etoys > as types of project. Then entering a new Etoys project could take you > directly into an environment just like that of the reference Etoys image. > Noted. > Dave > >> Really? That's really surprising; SketchMorph is just a dumb data >> object, a painting, making a copy of it via the UI is a valid >> use-case. For every other kind of Morph, the green halo makes a deep >> copy, SketchMorph is inconsistent, shouldn't Etoys simply override >> that halo to call its own #semiDeepCopy to suit its own purposes? >> >> Is Etoys running in trunk? It is not targeted for trunk though, is it? >> >> I want to be able to make easy copies of SketchMorph's. Surely we can >> come up with some solution; what about Karl's suggestion? I think >> Shift should be the sharing, because the "modifer" keys are used to >> "modify" the standard behavior, which is a true veryDeepCopy.. >> >> >> On Fri, Apr 1, 2016 at 8:45 AM, Bert Freudenberg >> wrote: >>> On 01.04.2016, at 01:41, Chris Muller wrote: >>>> >>>> Okay, that's why this is in the Inbox. I started to formulate my >>>> question in long words in email, but decided this was the quickest and >>>> easiest way to ask it. :) >>>> >>>> Okay, so this is definitely not the place to fix my problem. So I >>>> will instead try putting something into SketchMorph's veryDeepFixup: >>>> which will ensure its underlying form gets copied when I green-halo a >>>> SketchMorph. SketchMorph is an exception because he's a dumb data >>>> object, not a "player" who wants to share a costume. >>> >>> SketchMorph is the single most-used user object in Etoys :) >>> >>>> -- I was working on an icon, writing scripts to change colors >>>> pixel-by-pixel, goofed up my "backup" SketchMorph I had torn off the >>>> green halo, only to find I corrupted my original, as well. Some work >>>> lost. >>> >>> I???m sorry you lost time. Nevertheless, the originalForm in SketchMorph >>> is designed to be shared. >>> >>> - Bert - From bert at freudenbergs.de Fri Apr 1 16:45:19 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Fri Apr 1 16:45:23 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> Message-ID: <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> On 01.04.2016, at 16:53, Chris Muller wrote: > > Really? That's really surprising; SketchMorph is just a dumb data > object, a painting, making a copy of it via the UI is a valid > use-case. For every other kind of Morph, the green halo makes a deep > copy. Every other morph is cheap to copy, compared to deep-copying bitmaps. > SketchMorph is inconsistent, shouldn't Etoys simply override > that halo to call its own #semiDeepCopy to suit its own purposes? > > Is Etoys running in trunk? Yes it is. There are even a few people using it (e.g. https://realm.io/news/altconf-daniel-steinberg-swift-playgrounds-education/ ). > It is not targeted for trunk though, is it? It?s still desirable to retire the Etoys fork of Squeak. Having a unified codebase (and faster VM) would be very nice. We may finally have found students to work on that, but even if it does not happen soon it?s still the plan. > I want to be able to make easy copies of SketchMorph's. Surely we can > come up with some solution; what about Karl's suggestion? I think > Shift should be the sharing, because the "modifer" keys are used to > "modify" the standard behavior, which is a true veryDeepCopy.. Why not adhere to the copy-on-write scheme for forms in Morphic? That?s how it was designed. E.g. when you make a green-handle copy of a SystemWindow, why would you want to deep-copy all the icons? Instead, before you modify a form (which is an extremely rare operation compared to all uses of forms), make a copy of it. That is how all the Sketch editing functions work (e.g. in the halo?s ?painting?? submenu). Btw you may consider using an ImageMorph if you don?t actually need all the specialized SketchMorph functionality. It does share the form when deep-copying too, though. - Bert - > > > On Fri, Apr 1, 2016 at 8:45 AM, Bert Freudenberg wrote: >> On 01.04.2016, at 01:41, Chris Muller wrote: >>> >>> Okay, that's why this is in the Inbox. I started to formulate my >>> question in long words in email, but decided this was the quickest and >>> easiest way to ask it. :) >>> >>> Okay, so this is definitely not the place to fix my problem. So I >>> will instead try putting something into SketchMorph's veryDeepFixup: >>> which will ensure its underlying form gets copied when I green-halo a >>> SketchMorph. SketchMorph is an exception because he's a dumb data >>> object, not a "player" who wants to share a costume. >> >> SketchMorph is the single most-used user object in Etoys :) >> >>> -- I was working on an icon, writing scripts to change colors >>> pixel-by-pixel, goofed up my "backup" SketchMorph I had torn off the >>> green halo, only to find I corrupted my original, as well. Some work >>> lost. >> >> I?m sorry you lost time. Nevertheless, the originalForm in SketchMorph is designed to be shared. >> >> - Bert - >> >> >> >> -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160401/c1acea2d/smime-0001.bin From karlramberg at gmail.com Fri Apr 1 20:28:47 2016 From: karlramberg at gmail.com (karl ramberg) Date: Fri Apr 1 20:28:50 2016 Subject: [squeak-dev] Re: The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <1459496628623-4887736.post@n4.nabble.com> Message-ID: Ok, I miss understood the difference Best, Karl On Fri, Apr 1, 2016 at 3:29 PM, Bert Freudenberg wrote: > On 01.04.2016, at 14:33, karl ramberg wrote: > > > You can hold shift while dragging the green handle to change it's copying > behavior. One makes a sibling, so they share the same form. One makes a > copy of the morph and form. > > > Not true. Both make a copy of the morph, both do *not* copy the form. > > The only difference is that the morph?s player?s class is the same for > siblings, but unique for copies. Hence, scripts (methods) are shared > between siblings, but independent for copies. > > - Bert - > > On Fri, Apr 1, 2016 at 9:43 AM, marcel.taeumel > wrote: > >> We should use real morphs as halo handles, not only forms. Then we can >> define/adjust that deep-copy operation there. >> >> Nevertheless, Chris is right that the override of #veryDeepCopyWith: in >> Form >> outside any Morphic extension category is quite smelly. Deep copying is >> not >> Morphic-specific. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/The-Inbox-Graphics-cmm-329-mcz-tp4887677p4887736.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com >> . >> >> > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160401/41452b64/attachment.htm From commits at source.squeak.org Fri Apr 1 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 1 21:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160401215502.32646.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009520.html Name: Monticello-mt.629 Ancestors: Monticello-mt.628 Due to popular request, roll-back of latest change about showing the disk utilization of directory repositories in the working copy browser. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009521.html Name: Morphic-mt.1096 Ancestors: Morphic-mt.1095 Only show a shadow for the new-style balloon morphs if the balloon color is not translucent (due to simplified drawing code for shadow). You can change the color of balloon morphs via BalloonMorph >> #balloonColor:. Note that #menuAppearance3d still controls shadows in many places such as windows, menus, and user dialog morphs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009522.html Name: Morphic-mt.1097 Ancestors: Morphic-mt.1096 Restores the possiblitiy for each morph to have its own balloon color in new-style balloon morphs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009523.html Name: Morphic-mt.1098 Ancestors: Morphic-mt.1097 Adds possibility to specify pop-up position hint for balloon morphs. Use it to show some help programmatically like this: someWidget showBalloon: 'Now click here.' at: someWidget topCenter. ============================================= From Marcel.Taeumel at hpi.de Sat Apr 2 08:21:57 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Apr 2 08:52:38 2016 Subject: [squeak-dev] Re: Monticello working copy list got really slow.. In-Reply-To: References: <1459496697128-4887737.post@n4.nabble.com> Message-ID: <1459585317022-4887883.post@n4.nabble.com> Hey Chris, sure. For me, it made perfect sense there. :-P So many different users out there. We must never forget that! ;-) Best, Marcel -- View this message in context: http://forum.world.st/Monticello-working-copy-list-got-really-slow-tp4887703p4887883.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lecteur at zogotounga.net Sat Apr 2 09:05:58 2016 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Sat Apr 2 09:06:10 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> Message-ID: <56FF8B76.6040403@zogotounga.net> > It?s still desirable to retire the Etoys fork of Squeak. Having a unified codebase (and faster VM) would be very nice. We may finally have found students to work on that, but even if it does not happen soon it?s still the plan. +1 Stef From commits at source.squeak.org Sat Apr 2 10:23:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 2 10:23:41 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1009.mcz Message-ID: Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.1009.mcz ==================== Summary ==================== Name: Kernel-mt.1009 Author: mt Time: 2 April 2016, 12:23:20.21041 pm UUID: bd1b45d5-cb4d-41b0-890b-c8f70de70b1c Ancestors: Kernel-ul.1008 Recent CogVMs do not yield preempted processes. Fixes the behavior where "[ [] repeat] fork" could not be interrupted anymore via CMD+. and hence locked the image. =============== Diff against Kernel-ul.1008 =============== Item was changed: ----- Method: ProcessorScheduler>>preemptedProcess (in category 'accessing') ----- preemptedProcess "Return the process that the currently active process just preempted." + + self activeProcess priority to: 1 by: -1 do: [:priority | + (quiescentProcessLists at: priority) ifNotEmpty: [:list | + ^ Smalltalk processPreemptionYields + ifTrue: [list last] + ifFalse: [list first]]]. + ^ nil + - | list | - activeProcess priority to: 1 by: -1 do:[:priority| - list := quiescentProcessLists at: priority. - list isEmpty ifFalse:[^list last]. - ]. - ^nil - "Processor preemptedProcess"! From eliot.miranda at gmail.com Sat Apr 2 16:10:11 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Apr 2 16:10:15 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> Message-ID: <6A3F1FDE-EA59-4B37-83D2-D73E116B41D4@gmail.com> Hi All, > On Apr 1, 2016, at 9:45 AM, Bert Freudenberg wrote: > >> On 01.04.2016, at 16:53, Chris Muller wrote: >> >> Really? That's really surprising; SketchMorph is just a dumb data >> object, a painting, making a copy of it via the UI is a valid >> use-case. For every other kind of Morph, the green halo makes a deep >> copy. > > Every other morph is cheap to copy, compared to deep-copying bitmaps. That makes sense. >> SketchMorph is inconsistent, shouldn't Etoys simply override >> that halo to call its own #semiDeepCopy to suit its own purposes? >> >> Is Etoys running in trunk? > > Yes it is. There are even a few people using it (e.g. https://realm.io/news/altconf-daniel-steinberg-swift-playgrounds-education/ ). > >> It is not targeted for trunk though, is it? > > It?s still desirable to retire the Etoys fork of Squeak. Having a unified codebase (and faster VM) would be very nice. We may finally have found students to work on that, but even if it does not happen soon it?s still the plan. +1 >> I want to be able to make easy copies of SketchMorph's. Surely we can >> come up with some solution; what about Karl's suggestion? I think >> Shift should be the sharing, because the "modifer" keys are used to >> "modify" the standard behavior, which is a true veryDeepCopy.. > > Why not adhere to the copy-on-write scheme for forms in Morphic? That?s how it was designed. > > E.g. when you make a green-handle copy of a SystemWindow, why would you want to deep-copy all the icons? > > Instead, before you modify a form (which is an extremely rare operation compared to all uses of forms), make a copy of it. That is how all the Sketch editing functions work (e.g. in the halo?s ?painting?? submenu). +1. But it needs to be documented in all the relevant Morph veryDeepCopy methods, not just SketchMorph but Morph too (& possibly in the class comments?). I suspect that too often we write simple schemes like this that over time get obscured by layers of new code (I see uniclass support in morph VDC methods) and even if the original intent was clear in the first version, in these later versions it is difficult to see. Conventions like this /must/ be well-documented to thrive. > Btw you may consider using an ImageMorph if you don?t actually need all the specialized SketchMorph functionality. It does share the form when deep-copying too, though. > > - Bert - > >> >> >>> On Fri, Apr 1, 2016 at 8:45 AM, Bert Freudenberg wrote: >>>> On 01.04.2016, at 01:41, Chris Muller wrote: >>>> >>>> Okay, that's why this is in the Inbox. I started to formulate my >>>> question in long words in email, but decided this was the quickest and >>>> easiest way to ask it. :) >>>> >>>> Okay, so this is definitely not the place to fix my problem. So I >>>> will instead try putting something into SketchMorph's veryDeepFixup: >>>> which will ensure its underlying form gets copied when I green-halo a >>>> SketchMorph. SketchMorph is an exception because he's a dumb data >>>> object, not a "player" who wants to share a costume. >>> >>> SketchMorph is the single most-used user object in Etoys :) >>> >>>> -- I was working on an icon, writing scripts to change colors >>>> pixel-by-pixel, goofed up my "backup" SketchMorph I had torn off the >>>> green halo, only to find I corrupted my original, as well. Some work >>>> lost. >>> >>> I?m sorry you lost time. Nevertheless, the originalForm in SketchMorph is designed to be shared. >>> >>> - Bert - > > > > From eliot.miranda at gmail.com Sat Apr 2 16:16:05 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Apr 2 16:16:10 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1009.mcz In-Reply-To: <56ff9db1.31168c0a.9bf74.ffffb6a8SMTPIN_ADDED_MISSING@mx.google.com> References: <56ff9db1.31168c0a.9bf74.ffffb6a8SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> Hi Marcel, > On Apr 2, 2016, at 8:50 AM, commits@source.squeak.org wrote: > > Marcel Taeumel uploaded a new version of Kernel to project The Trunk: > http://source.squeak.org/trunk/Kernel-mt.1009.mcz > > ==================== Summary ==================== > > Name: Kernel-mt.1009 > Author: mt > Time: 2 April 2016, 12:23:20.21041 pm > UUID: bd1b45d5-cb4d-41b0-890b-c8f70de70b1c > Ancestors: Kernel-ul.1008 > > Recent CogVMs do not yield preempted processes. Fixes the behavior where "[ [] repeat] fork" could not be interrupted anymore via CMD+. and hence locked the image. Just to be clear, this is not a VM change. The VM supports either yielding on preemption (the original behaviour) or preemption not yielding (the new, IMO correct, behaviour), based on a flag stored in the image header. So your comment should have read Squeak 5, as of Kernel-eem.??? does not yield preempted processes. Fixes the behavior where "[ [] repeat] fork" could not be interrupted anymore via CMD+. and hence locked the image. I'll figure out which version when "away from my phone" ;-) > =============== Diff against Kernel-ul.1008 =============== > > Item was changed: > ----- Method: ProcessorScheduler>>preemptedProcess (in category 'accessing') ----- > preemptedProcess > "Return the process that the currently active process just preempted." > + > + self activeProcess priority to: 1 by: -1 do: [:priority | > + (quiescentProcessLists at: priority) ifNotEmpty: [:list | > + ^ Smalltalk processPreemptionYields > + ifTrue: [list last] > + ifFalse: [list first]]]. > + ^ nil > + > - | list | > - activeProcess priority to: 1 by: -1 do:[:priority| > - list := quiescentProcessLists at: priority. > - list isEmpty ifFalse:[^list last]. > - ]. > - ^nil > - > "Processor preemptedProcess"! > > From Marcel.Taeumel at hpi.de Sat Apr 2 16:15:24 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Apr 2 16:46:12 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> Message-ID: <1459613724765-4887941.post@n4.nabble.com> Hi Eliot, thanks for clarification. Unfortunately, I cannot update the commit message -- can I? Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1009-mcz-tp4887889p4887941.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Sat Apr 2 16:54:52 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Apr 2 16:54:57 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <1459613724765-4887941.post@n4.nabble.com> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> Message-ID: <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> Hi Marcel, > On Apr 2, 2016, at 9:15 AM, marcel.taeumel wrote: > > Hi Eliot, > > thanks for clarification. Unfortunately, I cannot update the commit message > -- can I? Not easily. But it's not important. I only wanted to point out that it's not a VM change, but a system setting/mode change. > Best, > Marcel _,,,^..^,,,_ (phone) > > -- > View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1009-mcz-tp4887889p4887941.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Sat Apr 2 18:58:16 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sat Apr 2 18:58:58 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <1459613724765-4887941.post@n4.nabble.com> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> Message-ID: > thanks for clarification. Unfortunately, I cannot update the commit message > -- can I? Yes, you can load the prior version, file-in your change, re-save it as +1 higher with the correct comment. From asqueaker at gmail.com Sat Apr 2 18:39:57 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sat Apr 2 19:11:27 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: <6A3F1FDE-EA59-4B37-83D2-D73E116B41D4@gmail.com> References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> <6A3F1FDE-EA59-4B37-83D2-D73E116B41D4@gmail.com> Message-ID: > Why not adhere to the copy-on-write scheme for forms in Morphic? That?s how it was designed. > > E.g. when you make a green-handle copy of a SystemWindow, why would you want to deep-copy all the icons? I don't. I want to deepCopy the form bits when I invoke the green-halo it on a SketchMorph, not a SystemWindow. That's what Morph-cmm.1096 does, without affecting it when copying SystemWindows or anything else besides a SketchMorph. But you said the problem with that is that Etoys students are putting their behaviors directly on SketchMorphs instead of something more abstract like a PlayerMorph. With a PlayerMorph they could set his #fillStyle to some Form which would still share on veryDeepCopy, and yet with my #veryDeepFixup: in SketchMorph, the green-halo would ALSO work properly when invoked directly on a SketchMorph -- the best of both worlds. But we have to break this common use-case so that this design choice to use SketchMorphs everywhere, will be more memory-efficient.. Sigh.. >> Instead, before you modify a form (which is an extremely rare operation compared to all uses of forms), make a copy of it. As I said, that's exactly what I did -- or thought I was doing. I just did it via the green halo because I expected it to behave as it does on all other Morphs -- to make a meaningfully separate copy. From commits at source.squeak.org Sat Apr 2 19:31:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 2 19:31:51 2016 Subject: [squeak-dev] The Trunk: KernelTests-ul.309.mcz Message-ID: Levente Uzonyi uploaded a new version of KernelTests to project The Trunk: http://source.squeak.org/trunk/KernelTests-ul.309.mcz ==================== Summary ==================== Name: KernelTests-ul.309 Author: ul Time: 2 April 2016, 9:23:24.449569 pm UUID: c82a8276-ad4f-4219-9205-826357bcf0b7 Ancestors: KernelTests-cmm.308 Extracted #testDecimalDigitLength from SmallIntegerTest >> #testPrintString, and added a few extra cases to it. =============== Diff against KernelTests-cmm.308 =============== Item was added: + ----- Method: SmallIntegerTest>>testDecimalDigitLength (in category 'testing - printing') ----- + testDecimalDigitLength + + | x length random | + "Test edge cases" + x := 1. + length := 1. + [ x <= SmallInteger maxVal ] whileTrue: [ + self + assert: length equals: x decimalDigitLength; + assert: (length - 1 max: 1) equals: (x - 1) decimalDigitLength. + x := x * 10. + length := length + 1 ]. + "A few values by hand" + #( + 0 1 + 4 1 + 12 2 + 123 3 + 1234 4 + 56789 5 + 657483 6 + 6571483 7 + 65174383 8 + 625744831 9 + 1000001111 10 + ), { + SmallInteger maxVal. Smalltalk wordSize = 8 ifTrue: [ 19 ] ifFalse: [ 10 ] + } groupsDo: [ :input :expectedOutput | + self assert: expectedOutput equals: input decimalDigitLength ]. + "Pseudorandom tests." + random := Random seed: 36rSqueak. + 10000 timesRepeat: [ + x := SmallInteger maxVal atRandom: random. + self assert: x asString size equals: x decimalDigitLength ]! Item was changed: ----- Method: SmallIntegerTest>>testPrintString (in category 'testing - printing') ----- testPrintString + self assert: 1 printString = '1'. self assert: -1 printString = '-1'. self assert: SmallInteger minVal printString = (Smalltalk wordSize = 8 ifTrue: [ '-1152921504606846976'] ifFalse: ['-1073741824']). self assert: SmallInteger maxVal printString = (Smalltalk wordSize = 8 ifTrue: [ '1152921504606846975'] ifFalse: ['1073741823']). self assert: 12345 printString = '12345'. + self assert: -54321 printString = '-54321'! - self assert: -54321 printString = '-54321'. - - self assert: 0 decimalDigitLength = 1. - self assert: 4 decimalDigitLength = 1. - self assert: 12 decimalDigitLength = 2. - self assert: 123 decimalDigitLength = 3. - self assert: 1234 decimalDigitLength = 4. - self assert: 56789 decimalDigitLength = 5. - self assert: 657483 decimalDigitLength = 6. - self assert: 6571483 decimalDigitLength = 7. - self assert: 65174383 decimalDigitLength = 8. - self assert: 625744831 decimalDigitLength = 9. - self assert: 1000001111 decimalDigitLength = 10. - self assert: SmallInteger maxVal decimalDigitLength = (Smalltalk wordSize = 8 ifTrue: [19] ifFalse: [10]).! From commits at source.squeak.org Sat Apr 2 19:32:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 2 19:32:37 2016 Subject: [squeak-dev] The Trunk: Kernel-ul.1010.mcz Message-ID: Levente Uzonyi uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-ul.1010.mcz ==================== Summary ==================== Name: Kernel-ul.1010 Author: ul Time: 2 April 2016, 8:59:33.195843 pm UUID: b583a3a1-3df9-468c-8c26-2388bd519d52 Ancestors: Kernel-mt.1009 Behavior changes: - when #flushCache is sent to a selector, then there's no need to send it to the corresponding method too. SmallInteger changes: - #decimalDigitLength shouldn't perform LargeInteger comparisons on 32-bit VMs - do fewer computations in #printOn:base:length:padded: - removed #destinationBuffer: which has no sender =============== Diff against Kernel-mt.1009 =============== Item was changed: ----- Method: Behavior>>basicAddSelector:withMethod: (in category 'adding/removing methods') ----- basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" - | oldMethodOrNil | - oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. + compiledMethod + methodClass: self; + selector: selector. - compiledMethod methodClass: self. - compiledMethod selector: selector. + "Now flush Squeak's method cache for this selector" + selector flushCache! - "Now flush Squeak's method cache, either by selector or by method" - oldMethodOrNil == nil ifFalse: [oldMethodOrNil flushCache]. - selector flushCache.! Item was changed: ----- Method: Behavior>>basicRemoveSelector: (in category 'adding/removing methods') ----- basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. Returns the old method if found, nil otherwise." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ nil]. self methodDict removeKey: selector. + "Now flush Squeak's method cache for this selector" - "Now flush Squeak's method cache, either by selector or by method" - oldMethod flushCache. selector flushCache. ^oldMethod! Item was changed: ----- Method: SmallInteger>>decimalDigitLength (in category 'printing') ----- decimalDigitLength "Answer the number of digits printed out in base 10. + Note that this only works for positive SmallIntegers up to 63-bits." - Note that this only works for positive SmallIntegers up to 64-bits." + self <= 99999999 "8" ifTrue: [ + self <= 9999 "4" ifTrue: [ + self <= 99 "2" ifTrue: [ + self <= 9 "1" ifTrue: [ ^1]. + ^2 ]. + self <= 999 "3" ifTrue: [ ^3]. + ^4 ]. + self <= 999999 "6" ifTrue: [ + self <= 99999 "5" ifTrue: [ ^5 ]. - self < 10000 ifTrue: [ - self < 100 ifTrue: [ - self < 10 ifTrue: [ ^1]. - ^2 ]. - self < 1000 ifTrue: [ ^3 ]. - ^4 ]. - self < 100000000 ifTrue: [ - self < 1000000 ifTrue: [ - self < 100000 ifTrue: [ ^5]. ^6 ]. + self <= 9999999 "7" ifTrue: [ ^7 ]. - self < 10000000 ifTrue: [ ^7 ]. ^8 ]. + self <= 1073741823 "10" ifTrue: [ "This is here only to avoid LargeInteger comparisons in 32-bit VMs" + self <= 999999999 "9" ifTrue: [ ^9 ]. + ^10 ]. + self <= 999999999999999 "15" ifTrue: [ + self <= 9999999999999 "13" ifTrue: [ + self <= 99999999999 "11" ifTrue: [ + self <= 9999999999 "10" ifTrue: [ ^10 ]. + ^11 ]. + self <= 999999999999 "12" ifTrue: [ ^12 ]. + ^13 ]. + self <= 99999999999999 "14" ifTrue: [ ^14 ]. + ^15 ]. + self <= 99999999999999999 "17" ifTrue: [ + self <= 9999999999999999 "16" ifTrue: [ ^16 ]. + ^17 ]. + self <= 999999999999999999 "18" ifTrue: [ ^18 ]. + ^19 "(1 << 60 - 1) asString size"! - self < 1000000000000 ifTrue: [ - self < 10000000000 ifTrue: [ - self < 1000000000 ifTrue: [ ^9 ]. - ^10 ]. - self < 100000000000 ifTrue: [ ^11 ]. - ^12 ]. - self < 10000000000000000 ifTrue: [ - self < 100000000000000 ifTrue: [ - self < 10000000000000 ifTrue: [ ^13 ]. - ^14 ]. - self < 1000000000000000 ifTrue: [ ^15 ]. - ^16 ]. - self < 1000000000000000000 ifTrue: [ - self < 100000000000000000 ifTrue: [ ^17 ]. - ^18 ]. - self < 10000000000000000000 ifTrue: [ ^19 ]. - ^20! Item was removed: - ----- Method: SmallInteger>>destinationBuffer: (in category 'printing') ----- - destinationBuffer:digitLength - ^ LargePositiveInteger new: digitLength.! Item was changed: ----- Method: SmallInteger>>printOn:base:length:padded: (in category 'printing') ----- printOn: stream base: base length: minimumLength padded: padWithZeroes | n numberOfDigits totalLength divisor | self < 0 ifTrue: [ n := self negated. totalLength := 1 ] ifFalse: [ n := self. totalLength := 0 ]. numberOfDigits := n numberOfDigitsInBase: base. totalLength := totalLength + numberOfDigits. padWithZeroes ifFalse: [ [ totalLength < minimumLength ] whileTrue: [ stream space. totalLength := totalLength + 1 ] ]. self < 0 ifTrue: [ stream nextPut: $- ]. padWithZeroes ifTrue: [ [ totalLength < minimumLength ] whileTrue: [ stream nextPut: $0. totalLength := totalLength + 1 ] ]. + numberOfDigits > 1 ifTrue: [ + divisor := base = 10 + ifTrue: [ #(1 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 10000000000 100000000000 1000000000000 10000000000000 100000000000000 1000000000000000 10000000000000000 100000000000000000 1000000000000000000) at: numberOfDigits ] + ifFalse: [ base raisedToInteger: numberOfDigits - 1 ]. + [ divisor > 1 ] whileTrue: [ + | digit | + digit := n // divisor. + stream nextPut: ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' at: digit + 1). + n := n - (digit * divisor). + divisor := divisor // base ] ]. + ^stream nextPut: ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' at: n + 1)! - divisor := base = 10 - ifTrue: [ #(1 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 10000000000 100000000000 1000000000000 10000000000000 100000000000000 1000000000000000 10000000000000000 100000000000000000 1000000000000000000) at: numberOfDigits ] - ifFalse: [ base raisedToInteger: numberOfDigits - 1 ]. - [ divisor > 0 ] whileTrue: [ - | digit | - digit := n // divisor. - stream nextPut: ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' at: digit + 1). - n := n - (digit * divisor). - divisor := divisor // base ]! From commits at source.squeak.org Sat Apr 2 19:33:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 2 19:33:06 2016 Subject: [squeak-dev] The Trunk: Network-ul.176.mcz Message-ID: Levente Uzonyi uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-ul.176.mcz ==================== Summary ==================== Name: Network-ul.176 Author: ul Time: 2 April 2016, 9:06:31.957661 pm UUID: 1b580a49-2663-4d5d-a659-606ba1c698de Ancestors: Network-ul.175 Use primitiveMakeUUID when it's available in UUID >> #makeUUID. This should keep things snappier when UUIDPlugin works, and it should decrease the possibility of a UUID collision due to our poor seed generation in Random. =============== Diff against Network-ul.175 =============== Item was changed: ----- Method: UUID>>makeUUID (in category 'as yet unclassified') ----- makeUUID + + self primMakeUUID ifNil: [ + UUIDGenerator default generateBytes: self forVersion: 4 ]! - UUIDGenerator default generateBytes: self forVersion: 4.! From commits at source.squeak.org Sat Apr 2 19:33:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 2 19:33:09 2016 Subject: [squeak-dev] The Trunk: Kernel-ul.1011.mcz Message-ID: Levente Uzonyi uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-ul.1011.mcz ==================== Summary ==================== Name: Kernel-ul.1011 Author: ul Time: 2 April 2016, 9:22:40.391347 pm UUID: 924b2c29-5e11-4abb-aeb5-355380a4e56a Ancestors: Kernel-ul.1010 Normalize the created LargePositiveInteger in Random >> #nextLargeInt:. =============== Diff against Kernel-ul.1010 =============== Item was changed: ----- Method: Random>>nextLargeInt: (in category 'accessing') ----- nextLargeInt: anInteger "Answer a random integer value from the interval [1, anInteger]. This method works for arbitrarily large integers." | byteCount bigRandom result firstDigit | byteCount := anInteger digitLength + 4. "Extend the space with at least 32 bits for a fairer distribution." bigRandom := LargePositiveInteger new: byteCount. self nextBytes: byteCount into: bigRandom startingAt: 1. + bigRandom := bigRandom normalize. "Make sure that there are no leading zero bytes." result := anInteger * bigRandom bitShift: -8 * byteCount. "Avoid using LargeInteger arithmetic for +1 in most cases." result isLarge ifFalse: [ ^result + 1 ]. (firstDigit := result digitAt: 1) = 255 ifTrue: [ ^result + 1 ]. result digitAt: 1 put: firstDigit + 1. ^result ! From Das.Linux at gmx.de Sat Apr 2 20:55:23 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Sat Apr 2 20:55:36 2016 Subject: [squeak-dev] The Trunk: Network-ul.176.mcz Message-ID: On 02.04.2016, at 19:32, commits@source.squeak.org wrote: > Levente Uzonyi uploaded a new version of Network to project The Trunk: > http://source.squeak.org/trunk/Network-ul.176.mcz > > ==================== Summary ==================== > > Name: Network-ul.176 > Author: ul > Time: 2 April 2016, 9:06:31.957661 pm > UUID: 1b580a49-2663-4d5d-a659-606ba1c698de > Ancestors: Network-ul.175 > > Use primitiveMakeUUID when it's available in UUID >> #makeUUID. This should keep things snappier when UUIDPlugin works, and it should decrease the possibility of a UUID collision due to our poor seed generation in Random. > I thought the non-primitive version was snappy enough already? libuuid has been a constant nag for me when doing CI stuff... Best -Tobias > =============== Diff against Network-ul.175 =============== > > Item was changed: From leves at caesar.elte.hu Sat Apr 2 21:29:32 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sat Apr 2 21:29:37 2016 Subject: [squeak-dev] The Trunk: Network-ul.176.mcz In-Reply-To: References: Message-ID: Hi Tobias, It is snappy enough, but it's not such a good idea to rely on UUIDGenerator while the seeding problem exists in Random[1]. I have a solution for that in progress, which works without VM support, but it still has a few question marks. When I asked for a primitive to solve that issue, the thread[1] got totally derailed. Btw, this change should have no effect when UUIDPlugin doesn't work. Levente [1] http://forum.world.st/Seeding-instances-of-Random-tt4859041.html On Sat, 2 Apr 2016, Tobias Pape wrote: > > On 02.04.2016, at 19:32, commits@source.squeak.org wrote: > >> Levente Uzonyi uploaded a new version of Network to project The Trunk: >> http://source.squeak.org/trunk/Network-ul.176.mcz >> >> ==================== Summary ==================== >> >> Name: Network-ul.176 >> Author: ul >> Time: 2 April 2016, 9:06:31.957661 pm >> UUID: 1b580a49-2663-4d5d-a659-606ba1c698de >> Ancestors: Network-ul.175 >> >> Use primitiveMakeUUID when it's available in UUID >> #makeUUID. This should keep things snappier when UUIDPlugin works, and it should decrease the possibility of a UUID collision due to our poor seed generation in Random. >> > > I thought the non-primitive version was snappy enough already? > libuuid has been a constant nag for me when doing CI stuff... > > Best > -Tobias > >> =============== Diff against Network-ul.175 =============== >> >> Item was changed: > > > > > From commits at source.squeak.org Sat Apr 2 21:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 2 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160402215501.27889.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009524.html Name: Kernel-mt.1009 Ancestors: Kernel-ul.1008 Recent CogVMs do not yield preempted processes. Fixes the behavior where "[ [] repeat] fork" could not be interrupted anymore via CMD+. and hence locked the image. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009525.html Name: KernelTests-ul.309 Ancestors: KernelTests-cmm.308 Extracted #testDecimalDigitLength from SmallIntegerTest >> #testPrintString, and added a few extra cases to it. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009526.html Name: Kernel-ul.1010 Ancestors: Kernel-mt.1009 Behavior changes: - when #flushCache is sent to a selector, then there's no need to send it to the corresponding method too. SmallInteger changes: - #decimalDigitLength shouldn't perform LargeInteger comparisons on 32-bit VMs - do fewer computations in #printOn:base:length:padded: - removed #destinationBuffer: which has no sender ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009527.html Name: Network-ul.176 Ancestors: Network-ul.175 Use primitiveMakeUUID when it's available in UUID >> #makeUUID. This should keep things snappier when UUIDPlugin works, and it should decrease the possibility of a UUID collision due to our poor seed generation in Random. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009528.html Name: Kernel-ul.1011 Ancestors: Kernel-ul.1010 Normalize the created LargePositiveInteger in Random >> #nextLargeInt:. ============================================= From commits at source.squeak.org Sun Apr 3 02:31:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 3 02:31:35 2016 Subject: [squeak-dev] The Trunk: Tools-ul.682.mcz Message-ID: Levente Uzonyi uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-ul.682.mcz ==================== Summary ==================== Name: Tools-ul.682 Author: ul Time: 3 April 2016, 4:16:13.327179 am UUID: 8fe2129c-026c-4af5-a470-0c8aeeb5e9e7 Ancestors: Tools-mt.681 - removed hard dependency on ShoutCore =============== Diff against Tools-mt.681 =============== Item was changed: ----- Method: Browser>>messageHelpFor: (in category 'message list') ----- messageHelpFor: aSelector "Show the first n lines of the sources code of the message behind aSelector." | source formatted iconHelp | Preferences balloonHelpInMessageLists ifFalse: [^ nil]. source := (self selectedClassOrMetaClass compiledMethodAt: aSelector ifAbsent: [^ nil]) getSource. source lineCount > 5 ifTrue: [ | sourceLines | sourceLines := (source asString lines copyFrom: 1 to: 5) asOrderedCollection. sourceLines add: ' [...]'. source := sourceLines joinSeparatedBy: Character cr]. + + formatted := (Smalltalk classNamed: #SHTextStylerST80) + ifNil: [ source asText ] + ifNotNil: [ :SHTextStylerST80 | + SHTextStylerST80 new + classOrMetaClass: self selectedClassOrMetaClass; + styledTextFor: source asText ]. - formatted := SHTextStylerST80 new - classOrMetaClass: self selectedClassOrMetaClass; - styledTextFor: source asText. iconHelp := (self messageIconHelpFor: aSelector) ifNotEmpty: [:t | t , Character cr, Character cr]. ^ iconHelp asText append: formatted; yourself! Item was changed: ----- Method: Debugger>>messageHelpAt: (in category 'context stack (message list)') ----- messageHelpAt: anIndex "Show the first n lines of the sources code of the selected message." | method source formatted lineCount | Preferences balloonHelpInMessageLists ifFalse: [^ nil]. contextStack size < anIndex ifTrue: [^ nil]. method := (contextStack at: anIndex) method. source := method getSource. + formatted := (Smalltalk classNamed: #SHTextStylerST80) + ifNil: [ source asText ] + ifNotNil: [ :SHTextStylerST80 | + SHTextStylerST80 new + classOrMetaClass: method methodClass; + styledTextFor: source asText ]. - formatted := SHTextStylerST80 new - classOrMetaClass: method methodClass; - styledTextFor: source asText. lineCount := 0. source doWithIndex: [:char :index | char = Character cr ifTrue: [lineCount := lineCount + 1]. lineCount > 10 ifTrue: [ formatted := formatted copyFrom: 1 to: index-1. formatted append: ' [...]'. ^ formatted]]. ^ formatted! Item was changed: ----- Method: MessageSet>>messageHelpAt: (in category 'message list') ----- messageHelpAt: anIndex "Show the first n lines of the sources code of the selected message." | reference source formatted lineCount | Preferences balloonHelpInMessageLists ifFalse: [^ nil]. self messageList size < anIndex ifTrue: [^ nil]. reference := self messageList at: anIndex. reference isValid ifFalse: [^ nil]. source := reference compiledMethod getSource. + formatted := (Smalltalk classNamed: #SHTextStylerST80) + ifNil: [ source asText ] + ifNotNil: [ :SHTextStylerST80 | + SHTextStylerST80 new + classOrMetaClass: reference actualClass; + styledTextFor: source asText ]. - formatted := SHTextStylerST80 new - classOrMetaClass: reference actualClass; - styledTextFor: source asText. lineCount := 0. source doWithIndex: [:char :index | char = Character cr ifTrue: [lineCount := lineCount + 1]. lineCount > 10 ifTrue: [ formatted := formatted copyFrom: 1 to: index-1. formatted append: ' [...]'. ^ formatted]]. ^ formatted! From commits at source.squeak.org Sun Apr 3 02:31:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 3 02:31:51 2016 Subject: [squeak-dev] The Trunk: Tests-ul.338.mcz Message-ID: Levente Uzonyi uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-ul.338.mcz ==================== Summary ==================== Name: Tests-ul.338 Author: ul Time: 3 April 2016, 4:18:16.318046 am UUID: 512a1174-e020-4178-8a84-f0e3403d9794 Ancestors: Tests-ul.337 PackageDependencyTest changes: - added Chronology-Core - use symbols for package names =============== Diff against Tests-ul.337 =============== Item was changed: ----- Method: PackageDependencyTest>>testBalloon (in category 'tests') ----- testBalloon self testPackage: 'Balloon' dependsExactlyOn: #( + Collections + Graphics + Kernel + )! - Kernel Collections Graphics - ).! Item was added: + ----- Method: PackageDependencyTest>>testChronologyCore (in category 'tests') ----- + testChronologyCore + self testPackage: #'Chronology-Core' dependsExactlyOn: #( + Collections + Kernel + )! Item was changed: ----- Method: PackageDependencyTest>>testCollections (in category 'tests') ----- testCollections + self testPackage: #Collections dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Collections' dependsExactlyOn: #( Compiler Kernel Files Graphics Multilingual + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testCompiler (in category 'tests') ----- testCompiler + self testPackage: #Compiler dependsExactlyOn: #( - self testPackage: 'Compiler' dependsExactlyOn: #( Collections Graphics Kernel System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testCompression (in category 'tests') ----- testCompression + self testPackage: #Compression dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Compression' dependsExactlyOn: #( Collections Files Graphics Kernel Multilingual System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testEtoys (in category 'tests') ----- testEtoys + self testPackage: #EToys dependsExactlyOn: #( - self testPackage: 'EToys' dependsExactlyOn: #( Balloon + #'Chronology-Core' Collections Compiler Compression Files Graphics Kernel Morphic MorphicExtras Multilingual Network - PreferenceBrowser Protocols SUnit System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testFiles (in category 'tests') ----- testFiles + self testPackage: #Files dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Files' dependsExactlyOn: #( Collections Kernel Multilingual System ).! Item was changed: ----- Method: PackageDependencyTest>>testGraphics (in category 'tests') ----- testGraphics + self testPackage: #Graphics dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Graphics' dependsExactlyOn: #( Collections Compression Files Kernel Multilingual System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testInstaller (in category 'tests') ----- testInstaller + self testPackage: #Installer dependsExactlyOn: #( - self testPackage: 'Installer' dependsExactlyOn: #( Collections Compression Exceptions Files Kernel Monticello MonticelloConfigurations Multilingual Network System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testKernel (in category 'tests') ----- testKernel + self testPackage: #Kernel dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Kernel' dependsExactlyOn: #( Collections Compiler Environments Files Multilingual System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testMonticello (in category 'tests') ----- testMonticello + self testPackage: #Monticello dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Monticello' dependsExactlyOn: #( Collections Compiler Compression Environments Files Graphics Kernel Morphic Multilingual Network + #'PackageInfo-Base' + #'Services-Base' - 'PackageInfo-Base' - 'Services-Base' System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testMorphic (in category 'tests') ----- testMorphic + self testPackage: #Morphic dependsExactlyOn: #( - self testPackage: 'Morphic' dependsExactlyOn: #( Balloon + #'Chronology-Core' Collections Compiler EToys Files Graphics Kernel Monticello MonticelloConfigurations MorphicExtras Multilingual Network Sound System SystemReporter + #'ToolBuilder-Kernel' + #'ToolBuilder-Morphic' - 'ToolBuilder-Kernel' - 'ToolBuilder-Morphic' Tools TrueType ).! Item was changed: ----- Method: PackageDependencyTest>>testMorphicExtras (in category 'tests') ----- testMorphicExtras + self testPackage: #MorphicExtras dependsExactlyOn: #( - self testPackage: 'MorphicExtras' dependsExactlyOn: #( Balloon + #'Chronology-Core' Collections Compiler Files Graphics Kernel MonticelloConfigurations Morphic Multilingual Network Protocols Sound System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testMultilingual (in category 'tests') ----- testMultilingual + self testPackage: #Multilingual dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Multilingual' dependsExactlyOn: #( Collections Files Graphics Kernel Network System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testNetwork (in category 'tests') ----- testNetwork + self testPackage: #Network dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Network' dependsExactlyOn: #( Collections Compiler Compression Files Graphics Kernel Morphic System + #'ToolBuilder-Kernel' + #'WebClient-Core' - 'ToolBuilder-Kernel' - 'WebClient-Core' ).! Item was changed: ----- Method: PackageDependencyTest>>testPackageInfo (in category 'tests') ----- testPackageInfo + self testPackage: #PackageInfo dependsExactlyOn: #( - self testPackage: 'PackageInfo' dependsExactlyOn: #( Collections Compiler Graphics Kernel Morphic System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testPreferenceBrowser (in category 'tests') ----- testPreferenceBrowser + self testPackage: #PreferenceBrowser dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'PreferenceBrowser' dependsExactlyOn: #( Collections Graphics Kernel Morphic MorphicExtras System Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testProtocols (in category 'tests') ----- testProtocols + self testPackage: #Protocols dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Protocols' dependsExactlyOn: #( Collections Graphics Kernel Morphic MorphicExtras System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testSUnit (in category 'tests') ----- testSUnit + self testPackage: #SUnit dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'SUnit' dependsExactlyOn: #( Collections Kernel System ).! Item was changed: ----- Method: PackageDependencyTest>>testSUnitGUI (in category 'tests') ----- testSUnitGUI + self testPackage: #SUnitGUI dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'SUnitGUI' dependsExactlyOn: #( Collections Graphics Kernel + #'PackageInfo-Base' - 'PackageInfo-Base' SUnit System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testServices (in category 'tests') ----- testServices + self testPackage: #'Services-Base' dependsExactlyOn: #( - self testPackage: 'Services-Base' dependsExactlyOn: #( Collections Compiler Graphics Kernel Morphic + #'PackageInfo-Base' - 'PackageInfo-Base' PreferenceBrowser System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testShoutCore (in category 'tests') ----- testShoutCore + self testPackage: #ShoutCore dependsExactlyOn: #( - self testPackage: 'ShoutCore' dependsExactlyOn: #( Collections Environments Graphics Kernel Monticello System Compiler Tools ).! Item was changed: ----- Method: PackageDependencyTest>>testSound (in category 'tests') ----- testSound + self testPackage: #Sound dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Sound' dependsExactlyOn: #( Collections Balloon Files Graphics Kernel Network System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testSystem (in category 'tests') ----- testSystem + self testPackage: #System dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'System' dependsExactlyOn: #( Collections Compiler Compression Environments Files Graphics + #'Installer-Core' - 'Installer-Core' Kernel MonticelloConfigurations Morphic MorphicExtras Multilingual Network + #'PackageInfo-Base' - 'PackageInfo-Base' Sound + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' TrueType ).! Item was changed: ----- Method: PackageDependencyTest>>testToolBuilder (in category 'tests') ----- testToolBuilder + self testPackage: #'ToolBuilder-Kernel' dependsExactlyOn: #( - self testPackage: 'ToolBuilder-Kernel' dependsExactlyOn: #( Collections Files Kernel System ).! Item was changed: ----- Method: PackageDependencyTest>>testTools (in category 'tests') ----- testTools + self testPackage: #Tools dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'Tools' dependsExactlyOn: #( Collections Compiler Compression Files Graphics Kernel Morphic MorphicExtras Multilingual Network + #'PackageInfo-Base' - 'PackageInfo-Base' System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testTraits (in category 'tests') ----- testTraits + self testPackage: #Traits dependsExactlyOn: #( - self testPackage: 'Traits' dependsExactlyOn: #( Collections Compiler Files Kernel Monticello System ).! Item was changed: ----- Method: PackageDependencyTest>>testTrueType (in category 'tests') ----- testTrueType + self testPackage: #TrueType dependsExactlyOn: #( - self testPackage: 'TrueType' dependsExactlyOn: #( Collections Balloon Files Graphics Kernel Multilingual System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' ).! Item was changed: ----- Method: PackageDependencyTest>>testVersionNumber (in category 'tests') ----- testVersionNumber + self testPackage: #VersionNumber dependsExactlyOn: #( - self testPackage: 'VersionNumber' dependsExactlyOn: #( Collections Kernel ).! Item was changed: ----- Method: PackageDependencyTest>>testXML (in category 'tests') ----- testXML + self testPackage: #XML dependsExactlyOn: #( - self testPackage: 'XML' dependsExactlyOn: #( Collections Exceptions Files Kernel Multilingual System Tests ).! From commits at source.squeak.org Sun Apr 3 02:32:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 3 02:32:02 2016 Subject: [squeak-dev] The Trunk: Regex-Core-ul.50.mcz Message-ID: Levente Uzonyi uploaded a new version of Regex-Core to project The Trunk: http://source.squeak.org/trunk/Regex-Core-ul.50.mcz ==================== Summary ==================== Name: Regex-Core-ul.50 Author: ul Time: 3 April 2016, 3:34:24.097121 am UUID: dd38bd8a-38ae-47d0-aef4-8b02926d9d9c Ancestors: Regex-Core-ul.49 - few more Spur-related character comparison optimizations - RxMatcher >> #atBeginningOfLine will consider lf as an end-of-line character =============== Diff against Regex-Core-ul.49 =============== Item was changed: ----- Method: RxMatchOptimizer>>nonPrefixTester (in category 'private') ----- nonPrefixTester nonPrefixes ifNil: [ ^nil ]. nonPrefixes size = 1 ifTrue: [ | nonPrefixChar | nonPrefixChar := nonPrefixes anyOne. + ^[ :char :matcher | (char == nonPrefixChar) not ] ]. - ^[ :char :matcher | char ~~ nonPrefixChar ] ]. ^[ :char : matcher | (nonPrefixes includes: char) not ]! Item was changed: Object subclass: #RxMatcher instanceVariableNames: 'matcher ignoreCase startOptimizer stream markerPositions previousMarkerPositions markerCount lastResult firstTryMatch' + classVariableNames: 'Cr Lf NullCharacter' - classVariableNames: 'Cr Lf' poolDictionaries: '' category: 'Regex-Core'! !RxMatcher commentStamp: 'ul 8/28/2015 14:18' prior: 0! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- This is a recursive regex matcher. Not strikingly efficient, but simple. Also, keeps track of matched subexpressions. The life cycle goes as follows: 1. Initialization. Accepts a syntax tree (presumably produced by RxParser) and compiles it into a matcher built of other classes in this category. 2. Matching. Accepts a stream or a string and returns a boolean indicating whether the whole stream or its prefix -- depending on the message sent -- matches the regex. 3. Subexpression query. After a successful match, and before any other match, the matcher may be queried about the range of specific stream (string) positions that matched to certain parenthesized subexpressions of the original expression. Any number of queries may follow a successful match, and any number or matches may follow a successful initialization. Note that `matcher' is actually a sort of a misnomer. The actual matcher is a web of Rxm* instances built by RxMatcher during initialization. RxMatcher is just the interface facade of this network. It is also a builder of it, and also provides a stream-like protocol to easily access the stream being matched. Instance variables: matcher The entry point into the actual matcher. igoreCase Whether the matching algorithm should be case sensitive or not. startOptimizer An object which can quickly decide whether the next character can be the prefix of a match or not. stream The stream currently being matched against. markerPositions Positions of markers' matches. previousMarkerPositions Positions of markers from the previous #tryMatch send. markerCount Number of markers. lastResult Whether the latest match attempt succeeded or not. firtTryMatch True if there hasn't been any send of #tryMatch during the current matching.! Item was changed: ----- Method: RxMatcher class>>initialize (in category 'class initialization') ----- initialize + "RxMatcher initialize" Cr := Character cr. + Lf := Character lf. + NullCharacter := Character value: 0! - Lf := Character lf.! Item was changed: ----- Method: RxMatcher>>atBeginningOfLine (in category 'testing') ----- atBeginningOfLine + | lastCharacter | + stream position = 0 ifTrue: [ ^true ]. + (lastCharacter := stream last) == Cr ifTrue: [ ^true ]. + ^lastCharacter == Lf! - ^self position = 0 or: [self lastChar = Cr]! Item was changed: ----- Method: RxMatcher>>lastChar (in category 'accessing') ----- lastChar + + ^stream position = 0 ifFalse: [ stream last ]! - ^ stream position = 0 - ifFalse: [ stream skip: -1; next ]! Item was changed: ----- Method: RxMatcher>>matchingRangesIn: (in category 'match enumeration') ----- matchingRangesIn: aString "Search aString repeatedly for the matches of the receiver. Answer an OrderedCollection of ranges of each match (index of first character to: index of last character)." | result | result := OrderedCollection new. self matchesIn: aString + do: [ :match | + | streamPosition | + result add: ((streamPosition := stream position) - match size + 1 to: streamPosition)]. - do: [:match | result add: (self position - match size + 1 to: self position)]. ^result! Item was removed: - ----- Method: RxMatcher>>position (in category 'streaming') ----- - position - - ^stream position! Item was changed: ----- Method: RxMatcher>>syntaxAny (in category 'double dispatch') ----- syntaxAny "Double dispatch from the syntax tree. Create a matcher for any non-null character." ^RxmPredicate new + predicate: [:char | (char == NullCharacter) not ]! - predicate: [:char | char asInteger ~= 0]! Item was changed: ----- Method: RxmTerminator>>terminateWith: (in category 'building') ----- terminateWith: aTerminator "Branch terminators are never supposed to change. Make sure this is the case." + aTerminator == self ifFalse: [ + RxParser signalCompilationException: 'internal matcher build error - wrong terminator' ]! - aTerminator ~~ self - ifTrue: [RxParser signalCompilationException: - 'internal matcher build error - wrong terminator']! Item was changed: ----- Method: RxsCharSet>>enumerablePartPredicateIgnoringCase: (in category 'privileged') ----- enumerablePartPredicateIgnoringCase: ignoreCase | set p | set := (self enumerableSetIgnoringCase: ignoreCase) ifNil: [ ^nil ]. set size = 1 ifTrue: [ | char | char := set anyOne. ignoreCase ifTrue: [ | lowercaseChar | lowercaseChar := char asLowercase. char := char asUppercase. char == lowercaseChar ifFalse: [ negated ifTrue: [ ^[ :character | (character == char or: [ character == lowercaseChar ]) not ] ]. ^[ :character | character == char or: [ character == lowercaseChar ] ] ] ]. + negated ifTrue: [ ^[ :character | (character == char) not ] ]. - negated ifTrue: [ ^[ :character | character ~~ char ] ]. ^[ :character | character == char ] ]. ignoreCase ifTrue: [ set copy do: [ :each | | char | (char := each asUppercase) == each ifFalse: [ set add: char ] ifTrue: [ (char := each asLowercase) == each ifFalse: [ set add: char ] ] ] ]. set size < 10 ifTrue: [ "10 is an empirical value" p := set asArray. negated ifTrue: [ ^[ :character | (p instVarsInclude: character) not ] ]. ^[ :character | p instVarsInclude: character ] ]. negated ifTrue: [ ^[ :character | (set includes: character) not ] ]. ^[ :character | set includes: character ]! Item was changed: ----- Method: RxsContextCondition>>isNullable (in category 'testing') ----- isNullable + ^(#syntaxAny == kind) not! - ^#syntaxAny ~~ kind! Item was changed: ----- Method: RxsPredicate>>beCharacter: (in category 'initialize-release') ----- beCharacter: aCharacter predicate := [ :char | char == aCharacter ]. + negation := [ :char | (char == aCharacter) not ]! - negation := [ :char | char ~~ aCharacter ]! Item was changed: ----- Method: RxsPredicate>>beWordConstituent (in category 'initialize-release') ----- beWordConstituent + predicate := [ :char | char == $_ or: [ char isAlphaNumeric ] ]. + negation := [ :char | (char == $_ or: [ char isAlphaNumeric ]) not ]! - predicate := [:char | char isAlphaNumeric or: [char == $_]]. - negation := [:char | char isAlphaNumeric not and: [char ~~ $_]]! From commits at source.squeak.org Sun Apr 3 02:32:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 3 02:32:28 2016 Subject: [squeak-dev] The Trunk: Monticello-ul.630.mcz Message-ID: Levente Uzonyi uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-ul.630.mcz ==================== Summary ==================== Name: Monticello-ul.630 Author: ul Time: 3 April 2016, 4:19:20.511794 am UUID: 97dea0c7-b1ca-4436-8d32-3706c1efa628 Ancestors: Monticello-mt.629 - removed hard dependency on ShoutCore =============== Diff against Monticello-mt.629 =============== Item was changed: ----- Method: MCSnapshotBrowser>>aboutToStyle: (in category 'styling') ----- aboutToStyle: aStyler | classDefinition shouldStyle | classSelection ifNil: [ ^false ]. self switchIsComment ifTrue: [ ^false ]. methodSelection ifNotNil: [ classDefinition := items detect: [:ea | ea isClassDefinition and: [ ea className = classSelection ] ] ifNone: [ (Smalltalk at: classSelection ifAbsent: [ Object ]) asClassDefinition ]. shouldStyle := true ] ifNil: [ classDefinition := nil. shouldStyle := categorySelection ~= self extensionsCategory ]. + (self environment classNamed: #SHMCClassDefinition) + ifNil: [ ^false ] + ifNotNil: [ :SHMCClassDefinition | + aStyler + environment: self; + classOrMetaClass: (classDefinition ifNotNil: [ + SHMCClassDefinition + classDefinition: classDefinition + items: items + meta: switch = #class ]) ]. - aStyler - environment: self; - classOrMetaClass: (classDefinition ifNotNil: [ - SHMCClassDefinition - classDefinition: classDefinition - items: items - meta: switch = #class ]). ^shouldStyle! From commits at source.squeak.org Sun Apr 3 02:32:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 3 02:32:49 2016 Subject: [squeak-dev] The Trunk: Monticello-ul.631.mcz Message-ID: Levente Uzonyi uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-ul.631.mcz ==================== Summary ==================== Name: Monticello-ul.631 Author: ul Time: 3 April 2016, 4:21:14.951568 am UUID: 7e079ac8-236b-48c3-b494-ed87e2d94ab2 Ancestors: Monticello-ul.630 - fixed slip in the last change =============== Diff against Monticello-ul.630 =============== Item was changed: ----- Method: MCSnapshotBrowser>>aboutToStyle: (in category 'styling') ----- aboutToStyle: aStyler | classDefinition shouldStyle | classSelection ifNil: [ ^false ]. self switchIsComment ifTrue: [ ^false ]. methodSelection ifNotNil: [ classDefinition := items detect: [:ea | ea isClassDefinition and: [ ea className = classSelection ] ] ifNone: [ (Smalltalk at: classSelection ifAbsent: [ Object ]) asClassDefinition ]. shouldStyle := true ] ifNil: [ classDefinition := nil. shouldStyle := categorySelection ~= self extensionsCategory ]. + (Smalltalk classNamed: #SHMCClassDefinition) - (self environment classNamed: #SHMCClassDefinition) ifNil: [ ^false ] ifNotNil: [ :SHMCClassDefinition | aStyler environment: self; classOrMetaClass: (classDefinition ifNotNil: [ SHMCClassDefinition classDefinition: classDefinition items: items meta: switch = #class ]) ]. ^shouldStyle! From commits at source.squeak.org Sun Apr 3 02:33:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 3 02:33:20 2016 Subject: [squeak-dev] The Trunk: Collections-ul.685.mcz Message-ID: Levente Uzonyi uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-ul.685.mcz ==================== Summary ==================== Name: Collections-ul.685 Author: ul Time: 3 April 2016, 3:21:51.035808 am UUID: db8fd391-2306-4ccc-87d5-b5dee96a78ab Ancestors: Collections-eem.684 Use Spur's new character comparison abilities in some String methods. =============== Diff against Collections-eem.684 =============== Item was changed: ----- Method: ByteString>>findSubstring:in:startingAt:matchTable: (in category 'comparing') ----- findSubstring: key in: body startingAt: start matchTable: matchTable "Answer the index in the string body at which the substring key first occurs, at or beyond start. The match is determined using matchTable, which can be used to effect, eg, case-insensitive matches. If no match is found, zero will be returned. The algorithm below is not optimum -- it is intended to be translated to C which will go so fast that it wont matter." | index | key size = 0 ifTrue: [^ 0]. + matchTable ifNil: [ + start to: body size - key size + 1 do: [ :startIndex | + index := 0. + [ (body at: startIndex + index) == (key at: (index := index + 1)) ] whileTrue: [ + index = key size ifTrue: [ ^startIndex ] ] ]. + ^0 ]. (start max: 1) to: body size - key size + 1 do: [:startIndex | index := 1. [(matchTable at: (body at: startIndex+index-1) asciiValue + 1) = (matchTable at: (key at: index) asciiValue + 1)] whileTrue: [index = key size ifTrue: [^ startIndex]. index := index+1]]. ^ 0 " ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 1 matchTable: CaseSensitiveOrder 1 ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 2 matchTable: CaseSensitiveOrder 7 ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 8 matchTable: CaseSensitiveOrder 0 ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseSensitiveOrder 0 ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseInsensitiveOrder 7 "! Item was changed: ----- Method: String>>beginsWith: (in category 'testing') ----- beginsWith: sequence "Answer true if the receiver starts with the argument collection. The comparison is case-sensitive. Overridden for better performance." + | index sequenceSize | - | sequenceSize | sequence isString ifFalse: [ ^super beginsWith: sequence ]. + ((sequenceSize := sequence size) = 0 or: [ self size < sequenceSize ]) ifTrue: [ ^false ]. + index := 0. + [ (index := index + 1) <= sequenceSize ] whileTrue: [ + (sequence at: index) == (self at: index) ifFalse: [ ^false ] ]. - ((sequenceSize := sequence size) = 0 or: [ self size < sequence size ]) ifTrue: [ ^false ]. - 1 to: sequenceSize do: [ :index | - (sequence basicAt: index) = (self basicAt: index) ifFalse: [ ^false ] ]. ^true! Item was changed: ----- Method: String>>endsWith: (in category 'testing') ----- endsWith: sequence "Answer true if the receiver ends with the argument collection. The comparison is case-sensitive." + | index sequenceSize offset | - | sequenceSize offset | sequence isString ifFalse: [ ^ super endsWith: sequence ]. + ((sequenceSize := sequence size) = 0 or: [ (offset := self size - sequenceSize) < 0 ]) ifTrue: [ ^false ]. + index := 0. + [ (index := index + 1) <= sequenceSize ] whileTrue: [ + (sequence at: index) == (self at: index + offset) ifFalse: [ ^false ] ]. - ((sequenceSize := sequence size) = 0 or: [ (offset := self size - sequence size) < 0 ]) ifTrue: [ ^false ]. - 1 to: sequenceSize do: [ :index | - (sequence basicAt: index) = (self basicAt: index + offset) ifFalse: [ ^false ] ]. ^true! Item was changed: ----- Method: String>>findSubstring:in:startingAt:matchTable: (in category 'accessing') ----- findSubstring: key in: body startingAt: start matchTable: matchTable "Answer the index in the string body at which the substring key first occurs, at or beyond start. The match is determined using matchTable, which can be used to effect, eg, case-insensitive matches. If no match is found, zero will be returned." - | index c1 c2 | - matchTable == nil ifTrue: [ - key size = 0 ifTrue: [^ 0]. - start to: body size - key size + 1 do: - [:startIndex | - index := 1. - [(body at: startIndex+index-1) - = (key at: index)] - whileTrue: - [index = key size ifTrue: [^ startIndex]. - index := index+1]]. - ^ 0 - ]. + | index c1 c2 keySize matchTableSize | + (keySize := key size) = 0 ifTrue: [ ^0 ]. + matchTable ifNil: [ + start to: body size - key size + 1 do: [ :startIndex | + index := 0. + [ (body at: startIndex + index) == (key at: (index := index + 1)) ] whileTrue: [ + index = keySize ifTrue: [ ^startIndex ] ] ]. + ^0 ]. + matchTableSize := matchTable size. + start to: body size - key size + 1 do: [ :startIndex | + index := 0. + [ + (c1 := (body at: startIndex + index) asInteger + 1) <= matchTableSize ifTrue: [ + c1 := matchTable at: c1 ]. + (c2 := (key at: (index := index + 1)) asInteger + 1) <= matchTableSize ifTrue: [ + c2 := matchTable at: c2 ]. + c1 = c2 ] + whileTrue: [ + index = keySize ifTrue: [ ^startIndex ] ] ]. + ^0! - key size = 0 ifTrue: [^ 0]. - start to: body size - key size + 1 do: - [:startIndex | - index := 1. - [c1 := body at: startIndex+index-1. - c2 := key at: index. - ((c1 leadingChar = 0 and: [ c1 asciiValue < matchTable size ]) - ifTrue: [ matchTable at: c1 asciiValue + 1 ] - ifFalse: [ c1 asciiValue + 1 ]) = - ((c2 leadingChar = 0 and: [ c2 asciiValue < matchTable size ]) - ifTrue: [ matchTable at: c2 asciiValue + 1 ] - ifFalse: [c2 asciiValue + 1 ]) ] - whileTrue: - [index = key size ifTrue: [^ startIndex]. - index := index+1]]. - ^ 0! From bert at freudenbergs.de Sun Apr 3 13:46:04 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Sun Apr 3 13:46:10 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> <6A3F1FDE-EA59-4B37-83D2-D73E116B41D4@gmail.com> Message-ID: > On 02.04.2016, at 20:39, Chris Muller wrote: > >> Why not adhere to the copy-on-write scheme for forms in Morphic? That?s how it was designed. >> >> E.g. when you make a green-handle copy of a SystemWindow, why would you want to deep-copy all the icons? > > I don't. I want to deepCopy the form bits when I invoke the > green-halo it on a SketchMorph, not a SystemWindow. That's what > Morph-cmm.1096 does, without affecting it when copying SystemWindows > or anything else besides a SketchMorph. > > But you said the problem with that is that Etoys students are putting > their behaviors directly on SketchMorphs instead of something more > abstract like a PlayerMorph. With a PlayerMorph they could set his > #fillStyle to some Form which would still share on veryDeepCopy, and > yet with my #veryDeepFixup: in SketchMorph, the green-halo would ALSO > work properly when invoked directly on a SketchMorph -- the best of > both worlds. That?s not at all how Etoys works. Yes it?s a prototype-based fat-object OO system on top of Smalltalk, but that?s not how students think about it. Students do not deal with morphs or fill styles at all. As in many prototype-based systems, copying is a fundamental operation, and it needs to be efficient. Duplicating the bits of a form is not efficient, especially not when they get stored in projects. > But we have to break this common use-case so that this design choice > to use SketchMorphs everywhere, will be more memory-efficient.. > Sigh.. I?d say that modifying the bits of a SketchMorph using low-level methods while expecting a copy to not be affected is very far from a common use case. It?s not at all unreasonable, but it is not what it?s designed for, or commonly used for. >>> Instead, before you modify a form (which is an extremely rare operation compared to all uses of forms), make a copy of it. > > As I said, that's exactly what I did -- or thought I was doing. I > just did it via the green halo because I expected it to behave as it > does on all other Morphs -- to make a meaningfully separate copy. I can see what you?re getting at, but we can?t put the burden on the students. But let?s think about what it would take to have our cake and eat it, too. What if we could automate the copy-on-write behavior? If the form used in a SketchMorph could be ?locked down? so that any attempt at modifying it could be caught. Then it could either just warn the user, or it could be duplicated automatically. I can?t easily think of a solution, but maybe it?s possible. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160403/18c3350e/smime.bin From bert at freudenbergs.de Sun Apr 3 13:49:50 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Sun Apr 3 13:49:52 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> Message-ID: <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> On 02.04.2016, at 18:54, Eliot Miranda wrote: > > Hi Marcel, > [...] > I only wanted to point out that it's not a VM change, but a system setting/mode change. Can it be queried and changed at runtime? - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160403/c2ef70c3/smime.bin From bert at freudenbergs.de Sun Apr 3 13:52:26 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Sun Apr 3 13:52:30 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> Message-ID: > On 03.04.2016, at 15:49, Bert Freudenberg wrote: > > On 02.04.2016, at 18:54, Eliot Miranda wrote: >> >> Hi Marcel, >> [...] >> I only wanted to point out that it's not a VM change, but a system setting/mode change. > > Can it be queried and changed at runtime? Ah, it can. Just found processPreemptionYields. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160403/09c8f9fd/smime.bin From asqueaker at gmail.com Sun Apr 3 15:22:38 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Apr 3 15:23:21 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> <6A3F1FDE-EA59-4B37-83D2-D73E116B41D4@gmail.com> Message-ID: > What if we could automate the copy-on-write behavior? If the form used in a SketchMorph could be ?locked down? so that any attempt at modifying it could be caught. Then it could either just warn the user, or it could be duplicated automatically. I do like the sound of such an idea.. > I can?t easily think of a solution, but maybe it?s possible. Okay, lets let it simmer, I'm satisfied we at least explored this idea for now, thanks. I could also consider extending SketchMorph>>#veryDeepFixup: into my own package.. From tim at rowledge.org Sun Apr 3 17:31:28 2016 From: tim at rowledge.org (tim Rowledge) Date: Sun Apr 3 17:31:34 2016 Subject: [squeak-dev] The Inbox: Graphics-cmm.329.mcz In-Reply-To: References: <9B5A13C0-9E4F-4B48-8DC3-8C591E6676B5@freudenbergs.de> <0AE5F486-D18E-469A-A891-2BE9AF3DD045@freudenbergs.de> <95C20D83-BC87-4F03-ADFD-1232434F63FF@freudenbergs.de> <6A3F1FDE-EA59-4B37-83D2-D73E116B41D4@gmail.com> Message-ID: > On 03-04-2016, at 8:22 AM, Chris Muller wrote: > >> What if we could automate the copy-on-write behavior? If the form used in a SketchMorph could be ?locked down? so that any attempt at modifying it could be caught. Then it could either just warn the user, or it could be duplicated automatically. > > I do like the sound of such an idea.. > >> I can?t easily think of a solution, but maybe it?s possible. Isn?t that what the immutable thingy is for? You try to write, get a trap, work out what happened, make a mutable copy, retry the write... tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- S p a c e d o u t . From leves at caesar.elte.hu Sun Apr 3 17:45:13 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Apr 3 17:45:19 2016 Subject: Slang question (was: Re: [squeak-dev] The Trunk: Collections-ul.685.mcz) In-Reply-To: References: Message-ID: On Sun, 3 Apr 2016, commits@source.squeak.org wrote: > Levente Uzonyi uploaded a new version of Collections to project The Trunk: > http://source.squeak.org/trunk/Collections-ul.685.mcz > > ==================== Summary ==================== > > Name: Collections-ul.685 > Author: ul > Time: 3 April 2016, 3:21:51.035808 am > UUID: db8fd391-2306-4ccc-87d5-b5dee96a78ab > Ancestors: Collections-eem.684 > > Use Spur's new character comparison abilities in some String methods. > > =============== Diff against Collections-eem.684 =============== > > Item was changed: > ----- Method: ByteString>>findSubstring:in:startingAt:matchTable: (in category 'comparing') ----- > findSubstring: key in: body startingAt: start matchTable: matchTable > "Answer the index in the string body at which the substring key first occurs, at or beyond start. The match is determined using matchTable, which can be used to effect, eg, case-insensitive matches. If no match is found, zero will be returned. > > The algorithm below is not optimum -- it is intended to be translated to C which will go so fast that it wont matter." > | index | > > > > > > key size = 0 ifTrue: [^ 0]. > + matchTable ifNil: [ > + start to: body size - key size + 1 do: [ :startIndex | > + index := 0. > + [ (body at: startIndex + index) == (key at: (index := index + 1)) ] whileTrue: [ > + index = key size ifTrue: [ ^startIndex ] ] ]. > + ^0 ]. I wonder if the #ifNil: check is correct in Slang. The generated code is ... unsigned char *matchTable; ... matchTable = arrayValueOf(stackValue(0)); matchTable -= 1; ... if (!(matchTable)) { ... So, will the value of matchTable actually be NULL or not, when nil is passed to the primitive. That -= 1 makes me think that it won't be NULL. Another thing is that the loop condition, while it's order of evaluation is well defined in Smalltalk, will compile to C code containing undefined behavior: while ((body[startIndex + index]) == (key[index += 1])) { Since in C the evaluation of the left and right side of == can happen in any order, the generated machine code may or may not be correct. Is this is a difference between Smalltalk and Slang, or is it just a slip in the code generator? Levente > (start max: 1) to: body size - key size + 1 do: > [:startIndex | > index := 1. > [(matchTable at: (body at: startIndex+index-1) asciiValue + 1) > = (matchTable at: (key at: index) asciiValue + 1)] > whileTrue: > [index = key size ifTrue: [^ startIndex]. > index := index+1]]. > ^ 0 > " > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 1 matchTable: CaseSensitiveOrder 1 > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 2 matchTable: CaseSensitiveOrder 7 > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 8 matchTable: CaseSensitiveOrder 0 > ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseSensitiveOrder 0 > ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseInsensitiveOrder 7 > "! From commits at source.squeak.org Sun Apr 3 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 3 21:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160403215502.392.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009529.html Name: Tools-ul.682 Ancestors: Tools-mt.681 - removed hard dependency on ShoutCore ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009530.html Name: Tests-ul.338 Ancestors: Tests-ul.337 PackageDependencyTest changes: - added Chronology-Core - use symbols for package names ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009531.html Name: Regex-Core-ul.50 Ancestors: Regex-Core-ul.49 - few more Spur-related character comparison optimizations - RxMatcher >> #atBeginningOfLine will consider lf as an end-of-line character ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009532.html Name: Monticello-ul.630 Ancestors: Monticello-mt.629 - removed hard dependency on ShoutCore ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009533.html Name: Monticello-ul.631 Ancestors: Monticello-ul.630 - fixed slip in the last change ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009534.html Name: Collections-ul.685 Ancestors: Collections-eem.684 Use Spur's new character comparison abilities in some String methods. ============================================= From lewis at mail.msen.com Sun Apr 3 22:00:13 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Apr 3 22:00:16 2016 Subject: Slang question (was: Re: [squeak-dev] The Trunk: Collections-ul.685.mcz) In-Reply-To: References: Message-ID: <20160403220013.GA65953@shell.msen.com> Many people will not be familiar with this optimization, so a few words of explanation are in order for background: There is a mechanism for translating certain methods in the image directly into primitives for performance. This is normally not noticed, but you will find occasional refernces such at this one in the image: findSubstring: key in: body startingAt: start matchTable: matchTable This is a method that first tries to call a version of itself that has been translated to C. If the primitive fails, the normal Smalltalk method is executed. The hidden tricky bit is that MiscPrimitivePlugin, which lives in the VMMaker package, arranges for the #findSubstring:in:startingAt:matchTable: method in the image to be translated to C and installed as a primitive. This means that the generated VM is actually governed partly my methods in the main image (not in the VMMaker package). It also means that if one of these methods is changed in the image, it might accidentally result in unexpected (and possibly wrong) code being generated for the plugin in the VM. That is the reason that Levente is asking about the slang code generation in this case. Dave On Sun, Apr 03, 2016 at 07:45:13PM +0200, Levente Uzonyi wrote: > On Sun, 3 Apr 2016, commits@source.squeak.org wrote: > > >Levente Uzonyi uploaded a new version of Collections to project The Trunk: > >http://source.squeak.org/trunk/Collections-ul.685.mcz > > > >==================== Summary ==================== > > > >Name: Collections-ul.685 > >Author: ul > >Time: 3 April 2016, 3:21:51.035808 am > >UUID: db8fd391-2306-4ccc-87d5-b5dee96a78ab > >Ancestors: Collections-eem.684 > > > >Use Spur's new character comparison abilities in some String methods. > > > >=============== Diff against Collections-eem.684 =============== > > > >Item was changed: > > ----- Method: ByteString>>findSubstring:in:startingAt:matchTable: (in > > category 'comparing') ----- > > findSubstring: key in: body startingAt: start matchTable: matchTable > > "Answer the index in the string body at which the substring key > > first occurs, at or beyond start. The match is determined using > > matchTable, which can be used to effect, eg, case-insensitive > > matches. If no match is found, zero will be returned. > > > > The algorithm below is not optimum -- it is intended to be > > translated to C which will go so fast that it wont matter." > > | index | > > > > > > > > > > > > key size = 0 ifTrue: [^ 0]. > >+ matchTable ifNil: [ > >+ start to: body size - key size + 1 do: [ :startIndex | > >+ index := 0. > >+ [ (body at: startIndex + index) == (key at: (index > >:= index + 1)) ] whileTrue: [ > >+ index = key size ifTrue: [ ^startIndex ] ] ]. > >+ ^0 ]. > > I wonder if the #ifNil: check is correct in Slang. The generated code is > > ... > unsigned char *matchTable; > ... > matchTable = arrayValueOf(stackValue(0)); > matchTable -= 1; > ... > if (!(matchTable)) { > ... > > So, will the value of matchTable actually be NULL or not, when nil is > passed to the primitive. That -= 1 makes me think that it won't be NULL. > > Another thing is that the loop condition, while it's order of evaluation > is well defined in Smalltalk, will compile to C code containing undefined > behavior: > > while ((body[startIndex + index]) == (key[index += > 1])) { > > Since in C the evaluation of the left and right side of == can happen in > any order, the generated machine code may or may not be correct. > Is this is a difference between Smalltalk and Slang, or is it just a slip > in the code generator? > > Levente > > > (start max: 1) to: body size - key size + 1 do: > > [:startIndex | > > index := 1. > > [(matchTable at: (body at: startIndex+index-1) > > asciiValue + 1) > > = (matchTable at: (key at: index) asciiValue > > + 1)] > > whileTrue: > > [index = key size ifTrue: [^ startIndex]. > > index := index+1]]. > > ^ 0 > > " > > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 1 matchTable: > > CaseSensitiveOrder 1 > > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 2 matchTable: > > CaseSensitiveOrder 7 > > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 8 matchTable: > > CaseSensitiveOrder 0 > > ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: > > CaseSensitiveOrder 0 > > ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: > > CaseInsensitiveOrder 7 > > "! From commits at source.squeak.org Sun Apr 3 22:26:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 3 22:26:43 2016 Subject: [squeak-dev] The Trunk: ST80Tests-ul.3.mcz Message-ID: Levente Uzonyi uploaded a new version of ST80Tests to project The Trunk: http://source.squeak.org/trunk/ST80Tests-ul.3.mcz ==================== Summary ==================== Name: ST80Tests-ul.3 Author: ul Time: 4 April 2016, 12:26:28.947219 am UUID: b6c621d7-736d-4e65-9c1e-4f857991d1d2 Ancestors: ST80Tests-nice.2 - noted the dependency on Chronology-Core =============== Diff against ST80Tests-nice.2 =============== Item was changed: ----- Method: ST80PackageDependencyTest>>testST80 (in category 'as yet unclassified') ----- testST80 + self testPackage: #ST80 dependsExactlyOn: #( + #'Chronology-Core' - self testPackage: 'ST80' dependsExactlyOn: #( Collections Compiler Files Graphics Kernel Morphic Multilingual Network SUnit System + #'ToolBuilder-Kernel' - 'ToolBuilder-Kernel' Tools ).! From eliot.miranda at gmail.com Sun Apr 3 23:47:52 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Apr 3 23:47:58 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> Message-ID: Hi Bert, > On Apr 3, 2016, at 6:49 AM, Bert Freudenberg wrote: > >> On 02.04.2016, at 18:54, Eliot Miranda wrote: >> >> Hi Marcel, >> [...] >> I only wanted to point out that it's not a VM change, but a system setting/mode change. > > Can it be queried and changed at runtime? Yes. There are even a setter and a getter in trunk. See SmalltalkImage>>#processPreemptionYields[:]. > > - Bert - From Marcel.Taeumel at hpi.de Mon Apr 4 06:33:57 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 4 07:04:54 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> Message-ID: <1459751637955-4888130.post@n4.nabble.com> We might expose this as a preference? Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1009-mcz-tp4887889p4888130.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Apr 4 14:16:55 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 4 14:47:59 2016 Subject: [squeak-dev] Discard the event tickler process? Message-ID: <1459779415540-4888251.post@n4.nabble.com> Hi, there! There used to be a time, where it was userful (on some platforms) to regularly fetch events from the VM in a separate (non-UI) process. This process is called "The Event Tickler". However, the current implementation of EventSensor fetches new events in every necessary occasion. See all senders of #fetchMoreEvents. The event tickler process does nothing but automate that call to "EventSensor default fetchMoreEvents", which is not necessary. Neither for current MVC nor for Morphic. Can we get rid of that event tickler process? To try out, file-in this and save-restart the image: EventSensor-startUp.st *** Or may there be some other reason? :-O The comment in EventSensor >> #eventTickler is not supportive and also wrong at the moment: "Poll infrequently to make sure that the UI process is not been stuck. If it has been stuck, then spin the event loop so that I can detect the interrupt key." There is no relation to the interrupt key at the moment. CMD+. works via a distinct semaphore. And there is no code that frequently tests for CMD+. in the image either. Best, Marcel -- View this message in context: http://forum.world.st/Discard-the-event-tickler-process-tp4888251.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Apr 4 14:34:50 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 4 15:05:50 2016 Subject: [squeak-dev] Re: Discard the event tickler process? In-Reply-To: <1459779415540-4888251.post@n4.nabble.com> References: <1459779415540-4888251.post@n4.nabble.com> Message-ID: <1459780490509-4888267.post@n4.nabble.com> Hi, again. Okay. Actually, you do need the event tickler for CMD+. if no other process fetches events. Seems to be some VM-specific behavior you cannot trace at Smalltalk level. The CMD+. will not be recognized by the VM if there was no recent EventSensor >> #fetchMoreEvents. Seems to be a side-effect. So, no. We cannot get rid of the event tickler. However, why is there an InterruptSemaphore if the event tickler could easily check for CMD+. itself? Why involve the VM at all? Best, Marcel -- View this message in context: http://forum.world.st/Discard-the-event-tickler-process-tp4888251p4888267.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Apr 4 14:44:28 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 4 15:15:31 2016 Subject: [squeak-dev] Re: Discard the event tickler process? In-Reply-To: <1459780490509-4888267.post@n4.nabble.com> References: <1459779415540-4888251.post@n4.nabble.com> <1459780490509-4888267.post@n4.nabble.com> Message-ID: <1459781068467-4888271.post@n4.nabble.com> Hi, again. The priority 50 is called "user interrupt priority." Clearly, one can interrupt all processes below the priorites of the event tickler and user interrupt watcher, which is low I/O (60). Meaning, I can safely interrupt these do-its: [ [] repeat ] fork. [ [] repeat ] forkAt: Processor userInterruptPriority. [ [] repeat ] forkAt: Processor userInterruptPriority + 9. Best, Marcel -- View this message in context: http://forum.world.st/Discard-the-event-tickler-process-tp4888251p4888271.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Mon Apr 4 17:40:46 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Apr 4 17:40:50 2016 Subject: [squeak-dev] Discard the event tickler process? In-Reply-To: <1459779415540-4888251.post@n4.nabble.com> References: <1459779415540-4888251.post@n4.nabble.com> Message-ID: > On 04-04-2016, at 7:16 AM, marcel.taeumel wrote: > There used to be a time, where it was userful (on some platforms) to > regularly fetch events from the VM in a separate (non-UI) process. This > process is called "The Event Tickler?. IIRC this is something Andreas & I developed to make sure that polling UI systems such as RISC OS could reliably work. It?s so old it might even have been true for some then-still-used Windows systems. By making sure that at least every half-second the events got checked we could keep things in nice order. The interrupt key thing was (again, so far as I can recall, may be wrong, your smilage may fairy, etc etc) supposed to tickle the relevant semaphore directly and not even pass in a key event. The last time I looked at code in that area made me think that something had been horribly broken but I just didn?t have energy to dig into it. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: IIB: Ignore Inquiry and Branch anyway From commits at source.squeak.org Mon Apr 4 21:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Apr 4 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160404215501.32016.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009535.html Name: ST80Tests-ul.3 Ancestors: ST80Tests-nice.2 - noted the dependency on Chronology-Core ============================================= From eliot.miranda at gmail.com Mon Apr 4 23:15:17 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 4 23:15:22 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <1459751637955-4888130.post@n4.nabble.com> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> <1459751637955-4888130.post@n4.nabble.com> Message-ID: Hi Marcel, > On Apr 3, 2016, at 11:33 PM, marcel.taeumel wrote: > > We might expose this as a preference? I think it has too deep and pervasive effects to be a preference. Basically we're still fixing the system after making this change (but the change is important for concurrency). Making it a preference would cause a lot of uncertainty in debugging. Please let's keep it the way it is. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1009-mcz-tp4887889p4888130.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From commits at source.squeak.org Tue Apr 5 08:33:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 5 08:34:01 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.95.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.95.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.95 Author: mt Time: 5 April 2016, 10:33:54.497517 am UUID: cfb10ebe-4bc5-1a4e-a829-1060547b5541 Ancestors: ToolBuilder-Kernel-mt.94 Adds way to specify help (selector) per item in a list. Use regular #help for the widgets overall help text also in lists. =============== Diff against ToolBuilder-Kernel-mt.94 =============== Item was changed: PluggableWidgetSpec subclass: #PluggableListSpec + instanceVariableNames: 'list getIndex setIndex getSelected setSelected menu keyPress autoDeselect dragItem dropItem dropAccept doubleClick listSize listItem keystrokePreview icon vScrollBarPolicy hScrollBarPolicy dragStarted helpItem' - instanceVariableNames: 'list getIndex setIndex getSelected setSelected menu keyPress autoDeselect dragItem dropItem dropAccept doubleClick listSize listItem keystrokePreview icon vScrollBarPolicy hScrollBarPolicy dragStarted' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableListSpec commentStamp: 'ar 7/15/2005 11:54' prior: 0! A single selection list element. Instance variables: list The selector to retrieve the list elements. getIndex The selector to retrieve the list selection index. setIndex The selector to set the list selection index. getSelected The selector to retrieve the list selection. setSelected The selector to set the list selection. menu The selector to offer (to retrieve?) the context menu. keyPress The selector to invoke for handling keyboard shortcuts. autoDeselect Whether the list should allow automatic deselection or not. dragItem Selector to initiate a drag action on an item dropItem Selector to initiate a drop action of an item dropAccept Selector to determine whether a drop would be accepted! Item was added: + ----- Method: PluggableListSpec>>helpItem (in category 'accessing') ----- + helpItem + + ^ helpItem! Item was added: + ----- Method: PluggableListSpec>>helpItem: (in category 'accessing') ----- + helpItem: selector + + helpItem := selector.! From commits at source.squeak.org Tue Apr 5 08:35:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 5 08:35:51 2016 Subject: [squeak-dev] The Trunk: Tools-mt.683.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.683.mcz ==================== Summary ==================== Name: Tools-mt.683 Author: mt Time: 5 April 2016, 10:35:30.367517 am UUID: 933f05b4-6fdf-bc45-a831-18ea95e6bbb7 Ancestors: Tools-ul.682 Use item-specific help text. Do not overwrite widget help, which should be like 'Messages' or so. =============== Diff against Tools-ul.682 =============== Item was changed: ----- Method: Browser>>buildMessageListWith: (in category 'toolbuilder') ----- buildMessageListWith: builder | listSpec | listSpec := builder pluggableListSpec new. listSpec model: self; list: #messageList; getIndex: #messageListIndex; setIndex: #messageListIndex:; icon: #messageIconAt:; + helpItem: #messageHelpAt:; - help: #messageHelpAt:; menu: #messageListMenu:shifted:; keyPress: #messageListKey:from:. SystemBrowser browseWithDragNDrop ifTrue:[listSpec dragItem: #dragFromMessageList:]. ^listSpec ! From commits at source.squeak.org Tue Apr 5 08:37:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 5 08:37:19 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.161.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.161.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.161 Author: mt Time: 5 April 2016, 10:37:14.038517 am UUID: 43803efe-1ca3-ad42-b319-88df297b1ae6 Ancestors: ToolBuilder-Morphic-mt.160 Use helpItem to get help per item. Use help to get help for the whole widget. =============== Diff against ToolBuilder-Morphic-mt.160 =============== Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableAlternateMultiSelectionList: (in category 'widgets optional') ----- buildPluggableAlternateMultiSelectionList: aSpec | listMorph listClass | aSpec getSelected ifNotNil: [ ^ self error: 'There is no PluggableAlternateListMorphOfManyByItem' ]. listClass := self alternateMultiSelectListClass. listMorph := listClass on: aSpec model list: aSpec list primarySelection: aSpec getIndex changePrimarySelection: aSpec setIndex listSelection: aSpec getSelectionList changeListSelection: aSpec setSelectionList menu: aSpec menu. listMorph setProperty: #highlightSelector toValue: #highlightMessageList:with: ; setProperty: #itemConversionMethod toValue: #asStringOrText ; setProperty: #balloonTextSelectorForSubMorphs toValue: #balloonTextForClassAndMethodString ; enableDragNDrop: SystemBrowser browseWithDragNDrop ; menuTitleSelector: #messageListSelectorTitle. self register: listMorph id: aSpec name. listMorph keystrokeActionSelector: aSpec keyPress ; getListElementSelector: aSpec listItem ; getListSizeSelector: aSpec listSize; getIconSelector: aSpec icon; + getHelpSelector: aSpec helpItem. + + self buildHelpFor: listMorph spec: aSpec. + - getHelpSelector: aSpec help. self setFrame: aSpec frame in: listMorph. self setLayoutHintsFor: listMorph spec: aSpec. parent ifNotNil: [ self add: listMorph to: parent ]. panes ifNotNil: [ aSpec list ifNotNil:[panes add: aSpec list ] ]. ^ listMorph! Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableList: (in category 'widgets required') ----- buildPluggableList: aSpec | widget listClass getIndex setIndex | aSpec getSelected ifNil:[ listClass := self listClass. getIndex := aSpec getIndex. setIndex := aSpec setIndex. ] ifNotNil:[ listClass := self listByItemClass. getIndex := aSpec getSelected. setIndex := aSpec setSelected. ]. widget := listClass on: aSpec model list: aSpec list selected: getIndex changeSelected: setIndex menu: aSpec menu keystroke: aSpec keyPress. self register: widget id: aSpec name. "Override default scroll bar policies if needed. Widget will use preference values otherwise." aSpec hScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowHScrollBar]. [#never] -> [widget hideHScrollBarIndefinitely]. [#whenNeeded] -> [widget showHScrollBarOnlyWhenNeeded]. } ]. aSpec vScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowVScrollBar]. [#never] -> [widget hideVScrollBarIndefinitely]. [#whenNeeded] -> [widget showVScrollBarOnlyWhenNeeded]. } ]. widget getListElementSelector: aSpec listItem. widget getListSizeSelector: aSpec listSize. widget getIconSelector: aSpec icon. + widget getHelpSelector: aSpec helpItem. - widget getHelpSelector: aSpec help. widget doubleClickSelector: aSpec doubleClick. widget dragItemSelector: aSpec dragItem. widget dropItemSelector: aSpec dropItem. widget wantsDropSelector: aSpec dropAccept. widget dragStartedSelector: aSpec dragStarted. widget autoDeselect: aSpec autoDeselect. widget keystrokePreviewSelector: aSpec keystrokePreview. widget borderWidth: 1; borderColor: Color lightGray; color: (aSpec color ifNil: [Color white] ifNotNil: [aSpec color]). + + self buildHelpFor: widget spec: aSpec. self setFrame: aSpec frame in: widget. self setLayoutHintsFor: widget spec: aSpec. parent ifNotNil:[self add: widget to: parent]. panes ifNotNil:[ aSpec list ifNotNil:[panes add: aSpec list]. ]. ^widget! From commits at source.squeak.org Tue Apr 5 08:42:56 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 5 08:42:57 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1012.mcz Message-ID: Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.1012.mcz ==================== Summary ==================== Name: Kernel-mt.1012 Author: mt Time: 5 April 2016, 10:42:29.505517 am UUID: 83d8a4a7-a80d-1848-90d0-d10abf9728f7 Ancestors: Kernel-ul.1011 Restore clean-up code, which got lost with the introduction of object events long time ago (around Squeak 3.7 or so). Break dependency to #releaseActionMap implemented in the System package. =============== Diff against Kernel-ul.1011 =============== Item was changed: ----- Method: Object>>release (in category 'dependents access') ----- release "Remove references to objects that may refer to the receiver. This message should be overridden by subclasses with any cycles, in which case the subclass should also include the expression super release." + self breakDependents. + (self respondsTo: #releaseActionMap) ifTrue: [self releaseActionMap].! - self releaseActionMap! From commits at source.squeak.org Tue Apr 5 08:57:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 5 08:57:30 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1099.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1099.mcz ==================== Summary ==================== Name: Morphic-mt.1099 Author: mt Time: 5 April 2016, 10:56:56.397517 am UUID: 2f7d9d39-6462-2042-aef7-a4377869e67d Ancestors: Morphic-mt.1098 Small fixes in text editor undo history. =============== Diff against Morphic-mt.1098 =============== Item was changed: ----- Method: TextEditor>>insertAndSelect:at: (in category 'new selection') ----- insertAndSelect: aString at: anInteger self closeTypeIn. self selectInvisiblyFrom: anInteger to: anInteger - 1. self openTypeIn. self replace: self selectionInterval with: (Text string: (' ', aString) attributes: emphasisHere) + and: []. - and: [self]. self closeTypeIn.! Item was changed: ----- Method: TextEditorCommandHistory>>do: (in category 'enumeration') ----- do: block + "Goes backward in history." + - ((currentIndex min: commands size) to: 1 by: -1) do: [:i | block value: (commands at: i)].! From commits at source.squeak.org Tue Apr 5 09:27:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 5 09:27:31 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1100.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1100.mcz ==================== Summary ==================== Name: Morphic-mt.1100 Author: mt Time: 5 April 2016, 11:26:47.171517 am UUID: f30b0a1b-b688-c949-af1a-ed437564ae72 Ancestors: Morphic-mt.1099 If adding multiple balloon helps, avoid spawning others if triggered already to not remove them. Keeps GUI more stable. =============== Diff against Morphic-mt.1099 =============== Item was changed: ----- Method: HandMorph>>addBalloonHelp: (in category 'balloon help') ----- addBalloonHelp: aBalloonMorph "Associate a new balloon morph with this hand." + self removeAlarm: #spawnBalloonFor:. aBalloonMorph ifNotNil: [:m | self balloonHelpList add: m].! From Marcel.Taeumel at hpi.de Tue Apr 5 09:06:00 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 5 09:37:04 2016 Subject: [squeak-dev] New Help Feature for System Windows Message-ID: <1459847160289-4888349.post@n4.nabble.com> Hi, there! Try it out: system-window-help.cs What do you think? Is it helpful? Do we want to clean-up some balloon helps in our tools and use it? Best, Marcel -- View this message in context: http://forum.world.st/New-Help-Feature-for-System-Windows-tp4888349.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Apr 5 09:09:13 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 5 09:40:15 2016 Subject: [squeak-dev] Re: New Help Feature for System Windows In-Reply-To: <1459847160289-4888349.post@n4.nabble.com> References: <1459847160289-4888349.post@n4.nabble.com> Message-ID: <1459847353220-4888350.post@n4.nabble.com> Here a more eye-friendly overlay: Best, Marcel -- View this message in context: http://forum.world.st/New-Help-Feature-for-System-Windows-tp4888349p4888350.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lists at fniephaus.com Tue Apr 5 10:20:48 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Tue Apr 5 10:20:59 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down Message-ID: http://www.downforeveryoneorjustme.com/seaside.gemstone.com I've already informed Dale... -- Fabio Niephaus IT-Systems Engineering Student Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam Prof.-Dr.-Helmert-Str. 2-3 D-14482 Potsdam www.hpi.de Amtsgericht Potsdam, HRB 12184 Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160405/95feeaee/attachment.htm From commits at source.squeak.org Tue Apr 5 12:21:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 5 12:21:30 2016 Subject: [squeak-dev] The Trunk: Tools-mt.684.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.684.mcz ==================== Summary ==================== Name: Tools-mt.684 Author: mt Time: 5 April 2016, 2:21:11.091036 pm UUID: 48760808-764d-f54e-a576-f58fcd06546c Ancestors: Tools-mt.683 Fixes item-specific help in Debugger stack list. =============== Diff against Tools-mt.683 =============== Item was changed: ----- Method: Debugger>>buildFullWith: (in category 'toolbuilder') ----- buildFullWith: builder | windowSpec listSpec textSpec | windowSpec := builder pluggableWindowSpec new model: self; label: 'Debugger'; children: OrderedCollection new. listSpec := builder pluggableListSpec new. listSpec model: self; list: #contextStackList; getIndex: #contextStackIndex; setIndex: #toggleContextStackIndex:; menu: #contextStackMenu:shifted:; icon: #messageIconAt:; + helpItem: #messageHelpAt:; - help: #messageHelpAt:; keyPress: #contextStackKey:from:; frame: (0@0 corner: 1@0.22). windowSpec children add: listSpec. textSpec := self buildCodePaneWith: builder. textSpec frame: (0@0.22corner: 1@0.8). windowSpec children add: textSpec. listSpec := builder pluggableListSpec new. listSpec model: self receiverInspector; list: #fieldList; getIndex: #selectionIndex; setIndex: #toggleIndex:; menu: #fieldListMenu:; keyPress: #inspectorKey:from:; + frame: (0@0.8 corner: 0.2@1); + help: 'Receiver''s\Instance\Variables' withCRs. - frame: (0@0.8 corner: 0.2@1). windowSpec children add: listSpec. textSpec := builder pluggableTextSpec new. textSpec model: self receiverInspector; getText: #contents; setText: #accept:; help: '<- Select receiver''s field' translated; selection: #contentsSelection; menu: #codePaneMenu:shifted:; frame: (0.2@0.8 corner: 0.5@1). windowSpec children add: textSpec. listSpec := builder pluggableListSpec new. listSpec model: self contextVariablesInspector; list: #fieldList; getIndex: #selectionIndex; setIndex: #toggleIndex:; menu: #fieldListMenu:; keyPress: #inspectorKey:from:; + frame: (0.5@0.8 corner: 0.7@1); + help: 'Other\Context\Bindings' withCRs. - frame: (0.5@0.8 corner: 0.7@1). windowSpec children add: listSpec. textSpec := builder pluggableTextSpec new. textSpec model: self contextVariablesInspector; getText: #contents; setText: #accept:; help: '<- Select context''s field' translated; selection: #contentsSelection; menu: #codePaneMenu:shifted:; frame: (0.7@0.8 corner: 1@1). windowSpec children add: textSpec. ^builder build: windowSpec! From Marcel.Taeumel at hpi.de Tue Apr 5 12:11:27 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 5 12:42:30 2016 Subject: [squeak-dev] Is TranscriptStream thread-safe? Message-ID: <1459858287124-4888382.post@n4.nabble.com> Hi, there! TranscriptStream >> #endEntry uses a semaphore and critical section. TranscriptStream >> #nextPutAll: does not. :-/ But TranscriptStream >> #nextPut: is a primitive. So, is Transcript thread-safe? Best, Marcel -- View this message in context: http://forum.world.st/Is-TranscriptStream-thread-safe-tp4888382.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From dale.henrichs at gemtalksystems.com Tue Apr 5 13:34:37 2016 From: dale.henrichs at gemtalksystems.com (Dale Henrichs) Date: Tue Apr 5 13:34:43 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down In-Reply-To: References: Message-ID: <5703BEED.1020308@gemtalksystems.com> Fabio, You should be using http://seaside.gemtalksystems.com, http://seaside.gemtalksystems.com/ss, http://seaside.gemtalksystems.com/ss, and http://ss3.gemtalksystems.com. VMWare retained control of the gemstone.com domain[1] and has been forwarding the traffic to the above urls since then. There are no guarantees that VMWare will forward the traffic forever, so you should change any references for gemstone.com to gemtalksystems.com. A year or two ago the forwarding stopped, but it was restored after a day or two[2], we'll see if it is restored this time :) Dale [1] https://gemstonesoup.wordpress.com/2013/05/02/gemtalk-systems-acquires-gemstones/ [2] http://forum.world.st/Glass-seaside-gemstone-com-has-vanished-from-the-internet-td4788439.html#a4788619 On 4/5/16 3:20 AM, Fabio Niephaus wrote: > http://www.downforeveryoneorjustme.com/seaside.gemstone.com > > I've already informed Dale... > > -- > Fabio Niephaus > IT-Systems Engineering Student > > Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam > Prof.-Dr.-Helmert-Str. 2-3 > D-14482 Potsdam > www.hpi.de > > Amtsgericht Potsdam, HRB 12184 > Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160405/44f53530/attachment.htm From leves at caesar.elte.hu Tue Apr 5 13:40:49 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Apr 5 13:40:57 2016 Subject: [squeak-dev] Is TranscriptStream thread-safe? In-Reply-To: <1459858287124-4888382.post@n4.nabble.com> References: <1459858287124-4888382.post@n4.nabble.com> Message-ID: Hi Marcel, No, it's not. Its sole thread safe method is #endEntry (and #flush of course, which simply sends #endEntry). Without #endEntry being thread safe, race conditions would be a lot more common. (Part of) Its API could be made thread safe, and it could also be enhanced in many ways. The main problem here is that it is a subclass of WriteStream, so it inherits way too many (unnecessary) methods. Making individual methods thread safe wouldn't be enough IMO. It would be better to provide thread safe methods which generate complete messages before writing them to the stream in a thread safe way. E.g.: #stream: Transcript stream: [ :stream | stream nextPutAll: 'Hello'; space; nextPutAll: 'World!' ] or #nextPutAll:format: Transcript nextPutAll: 'Hello {1}!' format: { 'World' }. These would be better than making individual writer methods thread safe, because the latter couldn't prevent mixing messages from different processes. These variants would also perform better because of fewer synchronization points. I usually use the following workaround to achieve thread safety: | message | message := 'Hello {1}!' format: { 'World' }. Project current addDeferredUIMessage: [ Transcript show: message ] This works because Transcript instances process the stream from the UI process. Levente On Tue, 5 Apr 2016, marcel.taeumel wrote: > Hi, there! > > TranscriptStream >> #endEntry uses a semaphore and critical section. > > TranscriptStream >> #nextPutAll: does not. :-/ > > But TranscriptStream >> #nextPut: is a primitive. > > So, is Transcript thread-safe? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Is-TranscriptStream-thread-safe-tp4888382.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From leves at caesar.elte.hu Tue Apr 5 13:44:29 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Apr 5 13:44:33 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1012.mcz In-Reply-To: References: Message-ID: On Tue, 5 Apr 2016, commits@source.squeak.org wrote: > Marcel Taeumel uploaded a new version of Kernel to project The Trunk: > http://source.squeak.org/trunk/Kernel-mt.1012.mcz > > ==================== Summary ==================== > > Name: Kernel-mt.1012 > Author: mt > Time: 5 April 2016, 10:42:29.505517 am > UUID: 83d8a4a7-a80d-1848-90d0-d10abf9728f7 > Ancestors: Kernel-ul.1011 > > Restore clean-up code, which got lost with the introduction of object events long time ago (around Squeak 3.7 or so). > > Break dependency to #releaseActionMap implemented in the System package. > > =============== Diff against Kernel-ul.1011 =============== > > Item was changed: > ----- Method: Object>>release (in category 'dependents access') ----- > release > "Remove references to objects that may refer to the receiver. This message > should be overridden by subclasses with any cycles, in which case the > subclass should also include the expression super release." > > + self breakDependents. > + (self respondsTo: #releaseActionMap) ifTrue: [self releaseActionMap].! Is #respondsTo: necessary? Object seems to implement #releaseActionMap. Levente > - self releaseActionMap! > > > From lists at fniephaus.com Tue Apr 5 14:29:36 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Tue Apr 5 14:29:47 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down In-Reply-To: <5703BEED.1020308@gemtalksystems.com> References: <5703BEED.1020308@gemtalksystems.com> Message-ID: Thanks, Dale. I was actually just trying to load metacello-work into a clean Squeak image via: https://github.com/dalehenrich/metacello-work#squeak -- On Tue, Apr 5, 2016 at 3:34 PM Dale Henrichs < dale.henrichs@gemtalksystems.com> wrote: > Fabio, > > You should be using http://seaside.gemtalksystems.com, > http://seaside.gemtalksystems.com/ss, http://seaside.gemtalksystems.com/ss, > and http://ss3.gemtalksystems.com. > > VMWare retained control of the gemstone.com domain[1] and has been > forwarding the traffic to the above urls since then. There are no > guarantees that VMWare will forward the traffic forever, so you should > change any references for gemstone.com to gemtalksystems.com. > > A year or two ago the forwarding stopped, but it was restored after a day > or two[2], we'll see if it is restored this time :) > > Dale > > [1] > https://gemstonesoup.wordpress.com/2013/05/02/gemtalk-systems-acquires-gemstones/ > [2] > http://forum.world.st/Glass-seaside-gemstone-com-has-vanished-from-the-internet-td4788439.html#a4788619 > > On 4/5/16 3:20 AM, Fabio Niephaus wrote: > > http://www.downforeveryoneorjustme.com/seaside.gemstone.com > > I've already informed Dale... > > -- > Fabio Niephaus > IT-Systems Engineering Student > > Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam > Prof.-Dr.-Helmert-Str. 2-3 > D-14482 Potsdam > www.hpi.de > > Amtsgericht Potsdam, HRB 12184 > Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160405/0f31f484/attachment.htm From asqueaker at gmail.com Tue Apr 5 15:09:08 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Apr 5 15:09:53 2016 Subject: [squeak-dev] Re: New Help Feature for System Windows In-Reply-To: <1459847353220-4888350.post@n4.nabble.com> References: <1459847160289-4888349.post@n4.nabble.com> <1459847353220-4888350.post@n4.nabble.com> Message-ID: I like the help box because it can let newbies learn what's in each pane quickly and easily. However, its quite distracting for those balloons to keep popping up after I've already learned them. On Tue, Apr 5, 2016 at 4:09 AM, marcel.taeumel wrote: > Here a more eye-friendly overlay: > > > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/New-Help-Feature-for-System-Windows-tp4888349p4888350.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Marcel.Taeumel at hpi.de Tue Apr 5 15:23:50 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 5 15:55:04 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1012.mcz In-Reply-To: References: Message-ID: <1459869830552-4888425.post@n4.nabble.com> Hi Levente, #releaseActionMap is part of the System package, not Kernel package, where Object belongs to. Unless we decide to tightly couple both packages, we either require "self respondsTo:" or an override extension from System to Kernel. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1012-mcz-tp4888339p4888425.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Apr 5 15:28:41 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 5 15:59:49 2016 Subject: [squeak-dev] Re: New Help Feature for System Windows In-Reply-To: References: <1459847160289-4888349.post@n4.nabble.com> <1459847353220-4888350.post@n4.nabble.com> Message-ID: <1459870121154-4888426.post@n4.nabble.com> Hi Chris, how can we approach the learning problem, which is shared by the current balloon help system? Best, Marcel -- View this message in context: http://forum.world.st/New-Help-Feature-for-System-Windows-tp4888349p4888426.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From dale.henrichs at gemtalksystems.com Tue Apr 5 16:19:24 2016 From: dale.henrichs at gemtalksystems.com (Dale Henrichs) Date: Tue Apr 5 16:19:29 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down In-Reply-To: References: <5703BEED.1020308@gemtalksystems.com> Message-ID: <5703E58C.50702@gemtalksystems.com> I'd guess that `Installer gemsource` is using an old url ... Dale On 04/05/2016 07:29 AM, Fabio Niephaus wrote: > Thanks, Dale. I was actually just trying to load metacello-work into a > clean Squeak image via: > https://github.com/dalehenrich/metacello-work#squeak > > -- > > On Tue, Apr 5, 2016 at 3:34 PM Dale Henrichs > > wrote: > > Fabio, > > You should be using http://seaside.gemtalksystems.com, > http://seaside.gemtalksystems.com/ss, > http://seaside.gemtalksystems.com/ss, and > http://ss3.gemtalksystems.com. > > VMWare retained control of the gemstone.com > domain[1] and has been forwarding the traffic to the above urls > since then. There are no guarantees that VMWare will forward the > traffic forever, so you should change any references for > gemstone.com to gemtalksystems.com > . > > A year or two ago the forwarding stopped, but it was restored > after a day or two[2], we'll see if it is restored this time :) > > Dale > > [1] > https://gemstonesoup.wordpress.com/2013/05/02/gemtalk-systems-acquires-gemstones/ > [2] > http://forum.world.st/Glass-seaside-gemstone-com-has-vanished-from-the-internet-td4788439.html#a4788619 > > > On 4/5/16 3:20 AM, Fabio Niephaus wrote: >> http://www.downforeveryoneorjustme.com/seaside.gemstone.com >> >> I've already informed Dale... >> >> -- >> Fabio Niephaus >> IT-Systems Engineering Student >> >> Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam >> Prof.-Dr.-Helmert-Str. 2-3 >> D-14482 Potsdam >> www.hpi.de >> >> Amtsgericht Potsdam, HRB 12184 >> Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel >> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160405/2bda1cf0/attachment.htm From bert at freudenbergs.de Tue Apr 5 16:24:11 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Apr 5 16:24:14 2016 Subject: [squeak-dev] [Bug] user interrupt does not stop sound anymore Message-ID: It used to be the case that cmd-dot would stop sounds playing in the background. It doesn?t anymore. Try AbstractSound stereoBachFugue play This appears to be due to the SoundService refactoring in userInterruptWatcher but I?m not familiar with that design. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160405/b1671720/smime.bin From Marcel.Taeumel at hpi.de Tue Apr 5 16:27:28 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 5 16:58:54 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> <1459751637955-4888130.post@n4.nabble.com> Message-ID: <1459873648991-4888435.post@n4.nabble.com> Hi Eliot, with "Smalltalk processPreemptionYields == false", is there a Smalltalk way to implement ProcessorScheduler >> #yield? At the moment, it looks like this: | semaphore | semaphore := Semaphore new. [semaphore signal] fork. semaphore wait. And another question: How to "yield" a process (i.e. put back in line) that is not currently running but runnable? Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1009-mcz-tp4887889p4888435.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Apr 5 16:35:15 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 5 17:06:21 2016 Subject: [squeak-dev] Re: [Bug] user interrupt does not stop sound anymore In-Reply-To: References: Message-ID: <1459874115278-4888436.post@n4.nabble.com> Hi Bert, the expression "SoundService defaultOrNil" returns the DummySoundSystem in my system although your Bach Fugue is playing and I can hear it. This seems to be wrong. If I can hear sound, the BaseSoundSystem should be in charge, right? If the following code snippet mutes this example, CMD+. will do, too: SoundService defaultOrNil ifNotNil: [ : soundSystem | soundSystem shutDown ]. But it does not. Bug! Bug! Bug! :-) Best, Marcel -- View this message in context: http://forum.world.st/Bug-user-interrupt-does-not-stop-sound-anymore-tp4888430p4888436.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Das.Linux at gmx.de Tue Apr 5 17:14:34 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Apr 5 17:15:21 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down In-Reply-To: <5703E58C.50702@gemtalksystems.com> References: <5703BEED.1020308@gemtalksystems.com> <5703E58C.50702@gemtalksystems.com> Message-ID: <9B8CCC3E-BCC6-4ED4-B351-38CE629E3162@gmx.de> Hi Dale, On 05.04.2016, at 18:19, Dale Henrichs wrote: > I'd guess that `Installer gemsource` is using an old url ... It is Installer class>>gemsource ^ self monticello http: 'http://seaside.gemtalksystems.com/ss' since 8/27/2015 ;) Best -Tobias > > Dale > > On 04/05/2016 07:29 AM, Fabio Niephaus wrote: >> Thanks, Dale. I was actually just trying to load metacello-work into a clean Squeak image via: >> https://github.com/dalehenrich/metacello-work#squeak >> >> -- >> >> On Tue, Apr 5, 2016 at 3:34 PM Dale Henrichs wrote: >> Fabio, >> >> You should be using http://seaside.gemtalksystems.com, http://seaside.gemtalksystems.com/ss, http://seaside.gemtalksystems.com/ss, and http://ss3.gemtalksystems.com. >> >> VMWare retained control of the gemstone.com domain[1] and has been forwarding the traffic to the above urls since then. There are no guarantees that VMWare will forward the traffic forever, so you should change any references for gemstone.com to gemtalksystems.com. >> >> A year or two ago the forwarding stopped, but it was restored after a day or two[2], we'll see if it is restored this time :) >> >> Dale >> >> [1] https://gemstonesoup.wordpress.com/2013/05/02/gemtalk-systems-acquires-gemstones/ >> [2] http://forum.world.st/Glass-seaside-gemstone-com-has-vanished-from-the-internet-td4788439.html#a4788619 >> >> On 4/5/16 3:20 AM, Fabio Niephaus wrote: >>> http://www.downforeveryoneorjustme.com/seaside.gemstone.com >>> >>> I've already informed Dale... >>> >>> -- >>> Fabio Niephaus >>> IT-Systems Engineering Student >>> >>> Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam >>> Prof.-Dr.-Helmert-Str. 2-3 >>> D-14482 Potsdam >>> www.hpi.de >>> >>> Amtsgericht Potsdam, HRB 12184 >>> Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel From asqueaker at gmail.com Tue Apr 5 17:22:20 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Apr 5 17:23:02 2016 Subject: [squeak-dev] Re: New Help Feature for System Windows In-Reply-To: <1459870121154-4888426.post@n4.nabble.com> References: <1459847160289-4888349.post@n4.nabble.com> <1459847353220-4888350.post@n4.nabble.com> <1459870121154-4888426.post@n4.nabble.com> Message-ID: I like Google's approach. They present instruction to the user for as long as until they indicate they "Got it", and not a moment more. One of the best ways to get users to "ignore" balloons, alerts, messages, etc., is to repeatedly put them up in the users face. After the 3rd or 4th read, it has become a detracting element, because users must actually exert effort just to ignore it. For me, the very best UI's are the ones that are able to exercise sufficient restraint. Presenting too much information or help is just as damaging to a UX as too little. In some ways, more-so. On Tue, Apr 5, 2016 at 10:28 AM, marcel.taeumel wrote: > Hi Chris, > > how can we approach the learning problem, which is shared by the current > balloon help system? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/New-Help-Feature-for-System-Windows-tp4888349p4888426.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From tim at rowledge.org Tue Apr 5 17:28:04 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Apr 5 17:28:08 2016 Subject: [squeak-dev] Re: [Bug] user interrupt does not stop sound anymore In-Reply-To: <1459874115278-4888436.post@n4.nabble.com> References: <1459874115278-4888436.post@n4.nabble.com> Message-ID: > On 05-04-2016, at 9:35 AM, marcel.taeumel wrote: > > Hi Bert, > > the expression "SoundService defaultOrNil" returns the DummySoundSystem in > my system although your Bach Fugue is playing and I can hear it. This seems > to be wrong. If I can hear sound, the BaseSoundSystem should be in charge, > right? > > If the following code snippet mutes this example, CMD+. will do, too: > > SoundService defaultOrNil ifNotNil: [ : soundSystem | soundSystem shutDown > ]. > > But it does not. Bug! Bug! Bug! :-) Ooh, if you?re digging into the sound system process etc do try to work out why short samples do not appear to get played when the stop-on-silence preference is true. I kinda suspect that the sample being checked for all-0 is not the one that needs to be played next but perhaps the one after it; if you only have a single-buffers worth of sound (like a Pop!) then maybe that could explain why it never gets to experience its brief moment of glory? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim How was Thomas J. Watson buried? 9 edge down. From leves at caesar.elte.hu Tue Apr 5 17:44:07 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Apr 5 17:44:11 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <1459873648991-4888435.post@n4.nabble.com> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> <1459751637955-4888130.post@n4.nabble.com> <1459873648991-4888435.post@n4.nabble.com> Message-ID: The line [] forkAt: Processor activePriority + 1 should interrupt the current process without any Semaphores involved. Except for the case when the process has the highest possible priority, but yielding from that process, assuming there's only one, wouldn't make any sense anyway. Levente On Tue, 5 Apr 2016, marcel.taeumel wrote: > Hi Eliot, > > with "Smalltalk processPreemptionYields == false", is there a Smalltalk way > to implement ProcessorScheduler >> #yield? > > At the moment, it looks like this: > > | semaphore | > > semaphore := Semaphore new. > [semaphore signal] fork. > semaphore wait. > > And another question: How to "yield" a process (i.e. put back in line) that > is not currently running but runnable? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1009-mcz-tp4887889p4888435.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From leves at caesar.elte.hu Tue Apr 5 17:44:26 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Apr 5 17:44:31 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1012.mcz In-Reply-To: <1459869830552-4888425.post@n4.nabble.com> References: <1459869830552-4888425.post@n4.nabble.com> Message-ID: Right. That kinda worth a comment. :) Levente On Tue, 5 Apr 2016, marcel.taeumel wrote: > Hi Levente, > > #releaseActionMap is part of the System package, not Kernel package, where > Object belongs to. > > Unless we decide to tightly couple both packages, we either require "self > respondsTo:" or an override extension from System to Kernel. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1012-mcz-tp4888339p4888425.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From tim at rowledge.org Tue Apr 5 18:04:53 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Apr 5 18:04:57 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1012.mcz In-Reply-To: <1459869830552-4888425.post@n4.nabble.com> References: <1459869830552-4888425.post@n4.nabble.com> Message-ID: > On 05-04-2016, at 8:23 AM, marcel.taeumel wrote: > #releaseActionMap is part of the System package, not Kernel package, where > Object belongs to. > > Unless we decide to tightly couple both packages, we either require "self > respondsTo:" or an override extension from System to Kernel. Or we do a proper job of working out an effective way of doing this. I really hate to see (ab)use of #respondsTo: like this. Surely it must be slower than simply sending the message - allowing the VM to do its normal fast lookups and caching - and occasionally having to catch a dNU: ? If that is a practical path, then we need to imagine some simple and comprehensible ways to a) catch the dNU and do.. whatever b) discover that the catching is needed, which seems like some sneaky package analysis stuff well suited to a PhD student c) find a way to use a & b without pissing off the general user/coder tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Rules for Optimization: 1. Don't; 2. (for experts only) Don't Yet From eliot.miranda at gmail.com Tue Apr 5 18:06:21 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Apr 5 18:06:25 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: <1459873648991-4888435.post@n4.nabble.com> References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> <1459751637955-4888130.post@n4.nabble.com> <1459873648991-4888435.post@n4.nabble.com> Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- [ | run priority list process1 process2 | run := true. "find an empty priority level at a priority lower than the active process" priority := Processor activePriority - 1. [(list := Processor waitingProcessesAt: priority) isEmpty] whileFalse: [priority := priority - 1]. "Create two processes at that priority" process1 := [[run] whileTrue] forkAt: priority. process2 := [[run] whileTrue] forkAt: priority. "Check that their order in the list is the same as the order in which they were created" self assert: list first == process1. self assert: list last == process2. "set the flag to zero and block on a delay, allowing the processes to run to termination" run := false. (Delay forMilliseconds: 50) wait. "Check that they have indeed terminated" self assert: list isEmpty]. [ | run priority list process1 process2 | run := true. "find an empty priority level at a priority lower than the active process" priority := Processor activePriority - 1. [(list := Processor waitingProcessesAt: priority) isEmpty] whileFalse: [priority := priority - 1]. "Create two processes at that priority" process1 := [[run] whileTrue] forkAt: priority. process2 := [[run] whileTrue] forkAt: priority. "Check that their order in the list is the same as the order in which they were created" self assert: list first == process1. self assert: list last == process2. "Now block on a delay, allowing the first one to run, spinning in its loop. When the delay ends the current process will preempt process1, because process1 is at a lower priority." (Delay forMilliseconds: 50) wait. Smalltalk processPreemptionYields ifTrue: "If process preemption yields, process1 will get sent to the back of the run queue (which is wrong; no process explicitly yielded)" [self assert: list first == process2. self assert: list last == process1] ifFalse: "If process preemption doesn't yield, the processes retain their order (yay! we indeed have cooperative scheduling within a priority)." [self assert: list first == process1. self assert: list last == process2]. "set the flag to zero and block on a delay, allowing the processes to run to termination" run := false. (Delay forMilliseconds: 50) wait. "Check that they have indeed terminated" self assert: list isEmpty]. From eliot.miranda at gmail.com Tue Apr 5 18:17:04 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Apr 5 18:17:06 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> <1459751637955-4888130.post@n4.nabble.com> <1459873648991-4888435.post@n4.nabble.com> Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- [ | run priority list process1 process2 | run := true. "find an empty priority level at a priority lower than the active process" priority := Processor activePriority - 1. [(list := Processor waitingProcessesAt: priority) isEmpty] whileFalse: [priority := priority - 1]. "Create two processes at that priority" process1 := [[run] whileTrue] forkAt: priority. process2 := [[run] whileTrue] forkAt: priority. "Check that their order in the list is the same as the order in which they were created" self assert: list first == process1. self assert: list last == process2. "set the flag to zero and block on a delay, allowing the processes to run to termination" run := false. (Delay forMilliseconds: 50) wait. "Check that they have indeed terminated" self assert: list isEmpty]. [ | run priority list process1 process2 | run := true. "find an empty priority level at a priority lower than the active process" priority := Processor activePriority - 1. [(list := Processor waitingProcessesAt: priority) isEmpty] whileFalse: [priority := priority - 1]. "Create two processes at that priority" process1 := [[run] whileTrue] forkAt: priority. process2 := [[run] whileTrue] forkAt: priority. "Check that their order in the list is the same as the order in which they were created" self assert: list first == process1. self assert: list last == process2. "Now block on a delay, allowing the first one to run, spinning in its loop. When the delay ends the current process will preempt process1, because process1 is at a lower priority." (Delay forMilliseconds: 50) wait. Smalltalk processPreemptionYields ifTrue: "If process preemption yields, process1 will get sent to the back of the run queue (which is wrong; no process explicitly yielded)" [self assert: list first == process2. self assert: list last == process1] ifFalse: "If process preemption doesn't yield, the processes retain their order (yay! we indeed have cooperative scheduling within a priority)." [self assert: list first == process1. self assert: list last == process2]. "set the flag to zero and block on a delay, allowing the processes to run to termination" run := false. (Delay forMilliseconds: 50) wait. "Check that they have indeed terminated" self assert: list isEmpty]. [| yielded | yielded := false. [yielded := true] fork. yielded]. [| yielded | yielded := false. [yielded := true] fork. Processor yield. yielded]. [| yielded | yielded := false. [yielded := true] fork. [] forkAt: Processor activePriority + 1. yielded]. [| yielded | yielded := false. [yielded := true] fork. [] forkAt: Processor activePriority + 1. self assert: yielded = Smalltalk processPreemptionYields]. [Smalltalk processPreemptionYields: true]. [Smalltalk processPreemptionYields: false] From bert at freudenbergs.de Tue Apr 5 19:56:41 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Apr 5 19:56:43 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1012.mcz In-Reply-To: References: <1459869830552-4888425.post@n4.nabble.com> Message-ID: <589AFB59-9F96-4009-9FF8-942560DF7B41@freudenbergs.de> > On 05.04.2016, at 20:04, tim Rowledge wrote: > > >> On 05-04-2016, at 8:23 AM, marcel.taeumel wrote: >> #releaseActionMap is part of the System package, not Kernel package, where >> Object belongs to. >> >> Unless we decide to tightly couple both packages, we either require "self >> respondsTo:" or an override extension from System to Kernel. > > Or we do a proper job of working out an effective way of doing this. I really hate to see (ab)use of #respondsTo: like this. Surely it must be slower than simply sending the message - allowing the VM to do its normal fast lookups and caching - and occasionally having to catch a dNU: ? > > If that is a practical path, then we need to imagine some simple and comprehensible ways to > a) catch the dNU and do.. whatever > b) discover that the catching is needed, which seems like some sneaky package analysis stuff well suited to a PhD student > c) find a way to use a & b without pissing off the general user/coder Or move #release to System? I see no good reason to litter the code with unnecessary checks. It?s ugly, and if we ever untangled Kernel and System then I bet dependents stuff should not end up in Kernel, right? - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160405/f88dbdad/smime.bin From lists at fniephaus.com Tue Apr 5 20:29:44 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Tue Apr 5 20:29:55 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down In-Reply-To: <9B8CCC3E-BCC6-4ED4-B351-38CE629E3162@gmx.de> References: <5703BEED.1020308@gemtalksystems.com> <5703E58C.50702@gemtalksystems.com> <9B8CCC3E-BCC6-4ED4-B351-38CE629E3162@gmx.de> Message-ID: seaside.gemstone.com is back online. And too bad Squeak 5.0 was release before 8/27/2015 :( Let's hope this never happens again Fabio -- On Tue, Apr 5, 2016 at 7:15 PM Tobias Pape wrote: > Hi Dale, > > On 05.04.2016, at 18:19, Dale Henrichs > wrote: > > > I'd guess that `Installer gemsource` is using an old url ... > > It is > > Installer class>>gemsource > > ^ self monticello http: 'http://seaside.gemtalksystems.com/ss' > > since 8/27/2015 ;) > > Best > -Tobias > > > > Dale > > > > On 04/05/2016 07:29 AM, Fabio Niephaus wrote: > >> Thanks, Dale. I was actually just trying to load metacello-work into a > clean Squeak image via: > >> https://github.com/dalehenrich/metacello-work#squeak > >> > >> -- > >> > >> On Tue, Apr 5, 2016 at 3:34 PM Dale Henrichs < > dale.henrichs@gemtalksystems.com> wrote: > >> Fabio, > >> > >> You should be using http://seaside.gemtalksystems.com, > http://seaside.gemtalksystems.com/ss, http://seaside.gemtalksystems.com/ss, > and http://ss3.gemtalksystems.com. > >> > >> VMWare retained control of the gemstone.com domain[1] and has been > forwarding the traffic to the above urls since then. There are no > guarantees that VMWare will forward the traffic forever, so you should > change any references for gemstone.com to gemtalksystems.com. > >> > >> A year or two ago the forwarding stopped, but it was restored after a > day or two[2], we'll see if it is restored this time :) > >> > >> Dale > >> > >> [1] > https://gemstonesoup.wordpress.com/2013/05/02/gemtalk-systems-acquires-gemstones/ > >> [2] > http://forum.world.st/Glass-seaside-gemstone-com-has-vanished-from-the-internet-td4788439.html#a4788619 > >> > >> On 4/5/16 3:20 AM, Fabio Niephaus wrote: > >>> http://www.downforeveryoneorjustme.com/seaside.gemstone.com > >>> > >>> I've already informed Dale... > >>> > >>> -- > >>> Fabio Niephaus > >>> IT-Systems Engineering Student > >>> > >>> Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam > >>> Prof.-Dr.-Helmert-Str. 2-3 > >>> D-14482 Potsdam > >>> www.hpi.de > >>> > >>> Amtsgericht Potsdam, HRB 12184 > >>> Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160405/3a000357/attachment.htm From leves at caesar.elte.hu Tue Apr 5 20:39:25 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Apr 5 20:39:29 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down In-Reply-To: References: <5703BEED.1020308@gemtalksystems.com> <5703E58C.50702@gemtalksystems.com> <9B8CCC3E-BCC6-4ED4-B351-38CE629E3162@gmx.de> Message-ID: We can always push a new version of Installer into the 5.0 branch if it's important. Levente On Tue, 5 Apr 2016, Fabio Niephaus wrote: > seaside.gemstone.com?is back online. > And too bad Squeak 5.0 was release before 8/27/2015 :( > Let's hope this never happens again > > Fabio > > -- > > On Tue, Apr 5, 2016 at 7:15 PM Tobias Pape wrote: > Hi Dale, > > On 05.04.2016, at 18:19, Dale Henrichs wrote: > > > I'd guess that `Installer gemsource` is using an old url ... > > It is > > Installer class>>gemsource > > ? ? ? ? ^ self monticello http: 'http://seaside.gemtalksystems.com/ss' > > since 8/27/2015 ;) > > Best > ? ? ? ? -Tobias > > > > Dale > > > > On 04/05/2016 07:29 AM, Fabio Niephaus wrote: > >> Thanks, Dale. I was actually just trying to load metacello-work into a clean Squeak image via: > >> https://github.com/dalehenrich/metacello-work#squeak > >> > >> -- > >> > >> On Tue, Apr 5, 2016 at 3:34 PM Dale Henrichs wrote: > >> Fabio, > >> > >> You should be using http://seaside.gemtalksystems.com, http://seaside.gemtalksystems.com/ss, http://seaside.gemtalksystems.com/ss, and http://ss3.gemtalksystems.com. > >> > >> VMWare retained? control of the gemstone.com domain[1] and has been forwarding the traffic to the above urls since then. There are no guarantees that VMWare will forward the traffic forever, so > you should change any references for gemstone.com to gemtalksystems.com. > >> > >> A year or two ago the forwarding stopped, but it was restored after a day or two[2], we'll see if it is restored this time :) > >> > >> Dale > >> > >> [1] https://gemstonesoup.wordpress.com/2013/05/02/gemtalk-systems-acquires-gemstones/ > >> [2] http://forum.world.st/Glass-seaside-gemstone-com-has-vanished-from-the-internet-td4788439.html#a4788619 > >> > >> On 4/5/16 3:20 AM, Fabio Niephaus wrote: > >>> http://www.downforeveryoneorjustme.com/seaside.gemstone.com > >>> > >>> I've already informed Dale... > >>> > >>> -- > >>> Fabio Niephaus > >>> IT-Systems Engineering Student > >>> > >>> Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam > >>> Prof.-Dr.-Helmert-Str. 2-3 > >>> D-14482 Potsdam > >>> www.hpi.de > >>> > >>> Amtsgericht Potsdam, HRB 12184 > >>> Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel > > > > > From eliot.miranda at gmail.com Tue Apr 5 20:46:09 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Apr 5 20:46:14 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1012.mcz In-Reply-To: <589AFB59-9F96-4009-9FF8-942560DF7B41@freudenbergs.de> References: <1459869830552-4888425.post@n4.nabble.com> <589AFB59-9F96-4009-9FF8-942560DF7B41@freudenbergs.de> Message-ID: > On Apr 5, 2016, at 12:56 PM, Bert Freudenberg wrote: > > >> On 05.04.2016, at 20:04, tim Rowledge wrote: >> >> >>> On 05-04-2016, at 8:23 AM, marcel.taeumel wrote: >>> #releaseActionMap is part of the System package, not Kernel package, where >>> Object belongs to. >>> >>> Unless we decide to tightly couple both packages, we either require "self >>> respondsTo:" or an override extension from System to Kernel. >> >> Or we do a proper job of working out an effective way of doing this. I really hate to see (ab)use of #respondsTo: like this. Surely it must be slower than simply sending the message - allowing the VM to do its normal fast lookups and caching - and occasionally having to catch a dNU: ? >> >> If that is a practical path, then we need to imagine some simple and comprehensible ways to >> a) catch the dNU and do.. whatever >> b) discover that the catching is needed, which seems like some sneaky package analysis stuff well suited to a PhD student >> c) find a way to use a & b without pissing off the general user/coder > > > Or move #release to System? > > I see no good reason to litter the code with unnecessary checks. It?s ugly, and if we ever untangled Kernel and System then I bet dependents stuff should not end up in Kernel, right? +1 and then there's overrides... > > - Bert - > > > > From eliot.miranda at gmail.com Tue Apr 5 20:50:13 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Apr 5 20:50:17 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1012.mcz In-Reply-To: References: <1459869830552-4888425.post@n4.nabble.com> Message-ID: Hi Tim, > On Apr 5, 2016, at 11:04 AM, tim Rowledge wrote: > > >> On 05-04-2016, at 8:23 AM, marcel.taeumel wrote: >> #releaseActionMap is part of the System package, not Kernel package, where >> Object belongs to. >> >> Unless we decide to tightly couple both packages, we either require "self >> respondsTo:" or an override extension from System to Kernel. > > Or we do a proper job of working out an effective way of doing this. I really hate to see (ab)use of #respondsTo: like this. Surely it must be slower than simply sending the message - allowing the VM to do its normal fast lookups and caching - and occasionally having to catch a dNU: ? Sure. The main overhead is in allocating the blocks (& hence contexts) for the on:do: handler for the MNU. But having an empty method on Object in Kernel and overriding it in System would be ideal if Monticello had robust support for overrides. > > If that is a practical path, then we need to imagine some simple and comprehensible ways to > a) catch the dNU and do.. whatever > b) discover that the catching is needed, which seems like some sneaky package analysis stuff well suited to a PhD student > c) find a way to use a & b without pissing off the general user/coder IMO we should do d) a simple override manager scheme ;-) > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Rules for Optimization: 1. Don't; 2. (for experts only) Don't Yet > > > > > From eliot.miranda at gmail.com Tue Apr 5 20:52:42 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Apr 5 20:52:45 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1012.mcz In-Reply-To: <1459869830552-4888425.post@n4.nabble.com> References: <1459869830552-4888425.post@n4.nabble.com> Message-ID: <18FCE045-B901-4231-B31D-B4918C014C99@gmail.com> Hi Marcel, > On Apr 5, 2016, at 8:23 AM, marcel.taeumel wrote: > > Hi Levente, > > #releaseActionMap is part of the System package, not Kernel package, where > Object belongs to. > > Unless we decide to tightly couple both packages, we either require "self > respondsTo:" or an override extension from System to Kernel. Let's do an override extension from System to Kernel. Bert, does Monticello do the right thing, and publish Kernel with the overridden method and System with the overriding method, or does it all break, eg if someone condenses changes? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1012-mcz-tp4888339p4888425.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Das.Linux at gmx.de Tue Apr 5 21:44:21 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Apr 5 21:44:34 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down In-Reply-To: References: <5703BEED.1020308@gemtalksystems.com> <5703E58C.50702@gemtalksystems.com> <9B8CCC3E-BCC6-4ED4-B351-38CE629E3162@gmx.de> Message-ID: <71F98852-D64C-4A04-A3D5-9F5CA3468F2C@gmx.de> On 05.04.2016, at 22:39, Levente Uzonyi wrote: > We can always push a new version of Installer into the 5.0 branch if it's important. Yes, we really should do that. 5.0 is our current release and it should not point to long outdated sources Best -Tobias > > Levente > > On Tue, 5 Apr 2016, Fabio Niephaus wrote: > >> seaside.gemstone.com is back online. >> And too bad Squeak 5.0 was release before 8/27/2015 :( >> Let's hope this never happens again >> Fabio >> -- >> On Tue, Apr 5, 2016 at 7:15 PM Tobias Pape wrote: >> Hi Dale, >> >> On 05.04.2016, at 18:19, Dale Henrichs wrote: >> >> > I'd guess that `Installer gemsource` is using an old url ... >> >> It is >> >> Installer class>>gemsource >> >> ^ self monticello http: 'http://seaside.gemtalksystems.com/ss' >> >> since 8/27/2015 ;) >> >> Best >> -Tobias >> > >> > Dale >> > >> > On 04/05/2016 07:29 AM, Fabio Niephaus wrote: >> >> Thanks, Dale. I was actually just trying to load metacello-work into a clean Squeak image via: >> >> https://github.com/dalehenrich/metacello-work#squeak >> >> >> >> -- >> >> >> >> On Tue, Apr 5, 2016 at 3:34 PM Dale Henrichs wrote: >> >> Fabio, >> >> >> >> You should be using http://seaside.gemtalksystems.com, http://seaside.gemtalksystems.com/ss, http://seaside.gemtalksystems.com/ss, and http://ss3.gemtalksystems.com. >> >> >> >> VMWare retained control of the gemstone.com domain[1] and has been forwarding the traffic to the above urls since then. There are no guarantees that VMWare will forward the traffic forever, so >> you should change any references for gemstone.com to gemtalksystems.com. >> >> >> >> A year or two ago the forwarding stopped, but it was restored after a day or two[2], we'll see if it is restored this time :) >> >> >> >> Dale >> >> >> >> [1] https://gemstonesoup.wordpress.com/2013/05/02/gemtalk-systems-acquires-gemstones/ >> >> [2] http://forum.world.st/Glass-seaside-gemstone-com-has-vanished-from-the-internet-td4788439.html#a4788619 >> >> >> >> On 4/5/16 3:20 AM, Fabio Niephaus wrote: >> >>> http://www.downforeveryoneorjustme.com/seaside.gemstone.com >> >>> >> >>> I've already informed Dale... >> >>> >> >>> -- >> >>> Fabio Niephaus >> >>> IT-Systems Engineering Student >> >>> >> >>> Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam >> >>> Prof.-Dr.-Helmert-Str. 2-3 >> >>> D-14482 Potsdam >> >>> www.hpi.de >> >>> >> >>> Amtsgericht Potsdam, HRB 12184 >> >>> Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel From lists at fniephaus.com Tue Apr 5 21:47:30 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Tue Apr 5 21:47:43 2016 Subject: [squeak-dev] seaside.gemstone.com seems to be down In-Reply-To: <71F98852-D64C-4A04-A3D5-9F5CA3468F2C@gmx.de> References: <5703BEED.1020308@gemtalksystems.com> <5703E58C.50702@gemtalksystems.com> <9B8CCC3E-BCC6-4ED4-B351-38CE629E3162@gmx.de> <71F98852-D64C-4A04-A3D5-9F5CA3468F2C@gmx.de> Message-ID: Could you take care of that, Tobias? I don't have the permissions to do it. Thanks -- On Tue, Apr 5, 2016 at 11:44 PM Tobias Pape wrote: > > On 05.04.2016, at 22:39, Levente Uzonyi wrote: > > > We can always push a new version of Installer into the 5.0 branch if > it's important. > > Yes, we really should do that. > 5.0 is our current release and it should not point to long outdated sources > > Best > -Tobias > > > > > Levente > > > > On Tue, 5 Apr 2016, Fabio Niephaus wrote: > > > >> seaside.gemstone.com is back online. > >> And too bad Squeak 5.0 was release before 8/27/2015 :( > >> Let's hope this never happens again > >> Fabio > >> -- > >> On Tue, Apr 5, 2016 at 7:15 PM Tobias Pape wrote: > >> Hi Dale, > >> > >> On 05.04.2016, at 18:19, Dale Henrichs < > dale.henrichs@gemtalksystems.com> wrote: > >> > >> > I'd guess that `Installer gemsource` is using an old url ... > >> > >> It is > >> > >> Installer class>>gemsource > >> > >> ^ self monticello http: ' > http://seaside.gemtalksystems.com/ss' > >> > >> since 8/27/2015 ;) > >> > >> Best > >> -Tobias > >> > > >> > Dale > >> > > >> > On 04/05/2016 07:29 AM, Fabio Niephaus wrote: > >> >> Thanks, Dale. I was actually just trying to load metacello-work > into a clean Squeak image via: > >> >> https://github.com/dalehenrich/metacello-work#squeak > >> >> > >> >> -- > >> >> > >> >> On Tue, Apr 5, 2016 at 3:34 PM Dale Henrichs < > dale.henrichs@gemtalksystems.com> wrote: > >> >> Fabio, > >> >> > >> >> You should be using http://seaside.gemtalksystems.com, > http://seaside.gemtalksystems.com/ss, http://seaside.gemtalksystems.com/ss, > and http://ss3.gemtalksystems.com. > >> >> > >> >> VMWare retained control of the gemstone.com domain[1] and has > been forwarding the traffic to the above urls since then. There are no > guarantees that VMWare will forward the traffic forever, so > >> you should change any references for gemstone.com to > gemtalksystems.com. > >> >> > >> >> A year or two ago the forwarding stopped, but it was restored > after a day or two[2], we'll see if it is restored this time :) > >> >> > >> >> Dale > >> >> > >> >> [1] > https://gemstonesoup.wordpress.com/2013/05/02/gemtalk-systems-acquires-gemstones/ > >> >> [2] > http://forum.world.st/Glass-seaside-gemstone-com-has-vanished-from-the-internet-td4788439.html#a4788619 > >> >> > >> >> On 4/5/16 3:20 AM, Fabio Niephaus wrote: > >> >>> http://www.downforeveryoneorjustme.com/seaside.gemstone.com > >> >>> > >> >>> I've already informed Dale... > >> >>> > >> >>> -- > >> >>> Fabio Niephaus > >> >>> IT-Systems Engineering Student > >> >>> > >> >>> Hasso-Plattner-Institut f?r Softwaresystemtechnik GmbH, Potsdam > >> >>> Prof.-Dr.-Helmert-Str. 2-3 > >> >>> D-14482 Potsdam > >> >>> www.hpi.de > >> >>> > >> >>> Amtsgericht Potsdam, HRB 12184 > >> >>> Gesch?ftsf?hrung: Prof. Dr. Christoph Meinel > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160405/fcf4a2a9/attachment-0001.htm From Das.Linux at gmx.de Tue Apr 5 21:48:43 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Apr 5 21:48:52 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1012.mcz In-Reply-To: <18FCE045-B901-4231-B31D-B4918C014C99@gmail.com> References: <1459869830552-4888425.post@n4.nabble.com> <18FCE045-B901-4231-B31D-B4918C014C99@gmail.com> Message-ID: <499F1BBD-D63C-4334-80AB-C141197809CE@gmx.de> Hi all, On 05.04.2016, at 22:52, Eliot Miranda wrote: > Hi Marcel, > > >> On Apr 5, 2016, at 8:23 AM, marcel.taeumel wrote: >> >> Hi Levente, >> >> #releaseActionMap is part of the System package, not Kernel package, where >> Object belongs to. >> >> Unless we decide to tightly couple both packages, we either require "self >> respondsTo:" or an override extension from System to Kernel. > > Let's do an override extension from System to Kernel. Bert, does Monticello do the right thing, and publish Kernel with the overridden method and System with the overriding method, or does it all break, eg if someone condenses changes? Overrides always have a strange taste for me. I would rather not have overrides in our most basic packages like Kernel/System; the override mechanism depends on things like package info (maybe even monticello)) which are not this basic, I think. What about an empty #release in ProtoObject and an extension in System? Best -Tobias PS: I also thought about an analogy to #future like that: self maybe releaseMap. From commits at source.squeak.org Tue Apr 5 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 5 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160405215502.22329.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009536.html Name: ToolBuilder-Kernel-mt.95 Ancestors: ToolBuilder-Kernel-mt.94 Adds way to specify help (selector) per item in a list. Use regular #help for the widgets overall help text also in lists. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009537.html Name: Tools-mt.683 Ancestors: Tools-ul.682 Use item-specific help text. Do not overwrite widget help, which should be like 'Messages' or so. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009538.html Name: ToolBuilder-Morphic-mt.161 Ancestors: ToolBuilder-Morphic-mt.160 Use helpItem to get help per item. Use help to get help for the whole widget. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009539.html Name: Kernel-mt.1012 Ancestors: Kernel-ul.1011 Restore clean-up code, which got lost with the introduction of object events long time ago (around Squeak 3.7 or so). Break dependency to #releaseActionMap implemented in the System package. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009540.html Name: Morphic-mt.1099 Ancestors: Morphic-mt.1098 Small fixes in text editor undo history. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009541.html Name: Morphic-mt.1100 Ancestors: Morphic-mt.1099 If adding multiple balloon helps, avoid spawning others if triggered already to not remove them. Keeps GUI more stable. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009542.html Name: Tools-mt.684 Ancestors: Tools-mt.683 Fixes item-specific help in Debugger stack list. ============================================= From asqueaker at gmail.com Tue Apr 5 22:49:53 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Apr 5 22:50:36 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1012.mcz In-Reply-To: References: <1459869830552-4888425.post@n4.nabble.com> Message-ID: >> Unless we decide to tightly couple both packages, we either require "self >> respondsTo:" or an override extension from System to Kernel. > > Or we do a proper job of working out an effective way of doing this. I really hate to see (ab)use of #respondsTo: like this. Surely it must be slower than simply sending the message Probably not a discernable performance issue for releasing resources. I do agree that respondsTo: is nothing to be used liberally, but it does exist, and there are cases where Smalltalk's ability to "optionally send a message" is a perfectly simple and appropriate solution. It creates no mysteries. > - allowing the VM to do its normal fast lookups and caching - and occasionally having to catch a dNU: ? > > If that is a practical path, then we need to imagine some simple and comprehensible ways to > a) catch the dNU and do.. whatever > b) discover that the catching is needed, which seems like some sneaky package analysis stuff well suited to a PhD student > c) find a way to use a & b without pissing off the general user/coder IMO, the above and the other "cures" proposed such as introducing a MC override are much worse than the "illness" -- this single use of #respondsTo:. Squeak 5.0 release was delayed for 2 months because of a crazy package tangle due to an MC override. Do we _really_ want to cross that line from having an override-free system to one with overrides because of one little optional message in the code? Forgive me: ;) https://en.wikipedia.org/wiki/Cutting_off_the_nose_to_spite_the_face From jelena at misticnabica.hr Tue Apr 5 22:50:43 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Tue Apr 5 22:50:47 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1012.mcz Message-ID: From asqueaker at gmail.com Tue Apr 5 23:08:25 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Apr 5 23:09:07 2016 Subject: [squeak-dev] Re: New Help Feature for System Windows In-Reply-To: <1459847353220-4888350.post@n4.nabble.com> References: <1459847160289-4888349.post@n4.nabble.com> <1459847353220-4888350.post@n4.nabble.com> Message-ID: One idea; what if the new "?" button toggles these balloons on/off so that, when they're "on" they just stay there, centered in the lists.. Who cares if they obscure one line in the middle, just scroll around it..(although it may not work for the annotation pane, because its short). Unorthodox, I know. On Tue, Apr 5, 2016 at 4:09 AM, marcel.taeumel wrote: > Here a more eye-friendly overlay: > > > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/New-Help-Feature-for-System-Windows-tp4888349p4888350.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From lewis at mail.msen.com Tue Apr 5 23:14:29 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Apr 5 23:14:31 2016 Subject: Slang question (was: Re: [squeak-dev] The Trunk: Collections-ul.685.mcz) In-Reply-To: <20160403220013.GA65953@shell.msen.com> References: <20160403220013.GA65953@shell.msen.com> Message-ID: <20160405231429.GA96161@shell.msen.com> I just got around to checking this for code generation for the interpreter VM (VMMaker, not VMMaker.oscog). The #ifNil: is not translated at all, so I replaced it with this: matchTable = nil ifTrue: This produces the expected result, and can be compiled. There are other issues in the resulting VM, but they do not seem to be related to Collections-ul.685 (I reverted to Collections-ul.684 with the same results). I don't know the cause of those issues, but I will follow up in a separate thread as needed. With respect to Collections-ul.685, replacing the ifNil: test as above seems like the right thing to do. Dave On Sun, Apr 03, 2016 at 06:00:13PM -0400, David T. Lewis wrote: > Many people will not be familiar with this optimization, so a few words of > explanation are in order for background: > > There is a mechanism for translating certain methods in the image directly > into primitives for performance. This is normally not noticed, but you will > find occasional refernces such at this one in the image: > > findSubstring: key in: body startingAt: start matchTable: matchTable > > > This is a method that first tries to call a version of itself that has > been translated to C. If the primitive fails, the normal Smalltalk method > is executed. The hidden tricky bit is that MiscPrimitivePlugin, which > lives in the VMMaker package, arranges for the #findSubstring:in:startingAt:matchTable: > method in the image to be translated to C and installed as a primitive. > This means that the generated VM is actually governed partly my methods > in the main image (not in the VMMaker package). > > It also means that if one of these methods is changed in the image, it > might accidentally result in unexpected (and possibly wrong) code being > generated for the plugin in the VM. That is the reason that Levente is > asking about the slang code generation in this case. > > Dave > > > On Sun, Apr 03, 2016 at 07:45:13PM +0200, Levente Uzonyi wrote: > > On Sun, 3 Apr 2016, commits@source.squeak.org wrote: > > > > >Levente Uzonyi uploaded a new version of Collections to project The Trunk: > > >http://source.squeak.org/trunk/Collections-ul.685.mcz > > > > > >==================== Summary ==================== > > > > > >Name: Collections-ul.685 > > >Author: ul > > >Time: 3 April 2016, 3:21:51.035808 am > > >UUID: db8fd391-2306-4ccc-87d5-b5dee96a78ab > > >Ancestors: Collections-eem.684 > > > > > >Use Spur's new character comparison abilities in some String methods. > > > > > >=============== Diff against Collections-eem.684 =============== > > > > > >Item was changed: > > > ----- Method: ByteString>>findSubstring:in:startingAt:matchTable: (in > > > category 'comparing') ----- > > > findSubstring: key in: body startingAt: start matchTable: matchTable > > > "Answer the index in the string body at which the substring key > > > first occurs, at or beyond start. The match is determined using > > > matchTable, which can be used to effect, eg, case-insensitive > > > matches. If no match is found, zero will be returned. > > > > > > The algorithm below is not optimum -- it is intended to be > > > translated to C which will go so fast that it wont matter." > > > | index | > > > > > > > > > > > > > > > > > > key size = 0 ifTrue: [^ 0]. > > >+ matchTable ifNil: [ > > >+ start to: body size - key size + 1 do: [ :startIndex | > > >+ index := 0. > > >+ [ (body at: startIndex + index) == (key at: (index > > >:= index + 1)) ] whileTrue: [ > > >+ index = key size ifTrue: [ ^startIndex ] ] ]. > > >+ ^0 ]. > > > > I wonder if the #ifNil: check is correct in Slang. The generated code is > > > > ... > > unsigned char *matchTable; > > ... > > matchTable = arrayValueOf(stackValue(0)); > > matchTable -= 1; > > ... > > if (!(matchTable)) { > > ... > > > > So, will the value of matchTable actually be NULL or not, when nil is > > passed to the primitive. That -= 1 makes me think that it won't be NULL. > > > > Another thing is that the loop condition, while it's order of evaluation > > is well defined in Smalltalk, will compile to C code containing undefined > > behavior: > > > > while ((body[startIndex + index]) == (key[index += > > 1])) { > > > > Since in C the evaluation of the left and right side of == can happen in > > any order, the generated machine code may or may not be correct. > > Is this is a difference between Smalltalk and Slang, or is it just a slip > > in the code generator? > > > > Levente > > > > > (start max: 1) to: body size - key size + 1 do: > > > [:startIndex | > > > index := 1. > > > [(matchTable at: (body at: startIndex+index-1) > > > asciiValue + 1) > > > = (matchTable at: (key at: index) asciiValue > > > + 1)] > > > whileTrue: > > > [index = key size ifTrue: [^ startIndex]. > > > index := index+1]]. > > > ^ 0 > > > " > > > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 1 matchTable: > > > CaseSensitiveOrder 1 > > > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 2 matchTable: > > > CaseSensitiveOrder 7 > > > ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 8 matchTable: > > > CaseSensitiveOrder 0 > > > ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: > > > CaseSensitiveOrder 0 > > > ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: > > > CaseInsensitiveOrder 7 > > > "! From Marcel.Taeumel at hpi.de Wed Apr 6 06:58:30 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 6 07:29:46 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-mt.1009.mcz In-Reply-To: References: <87A3A729-DA96-4035-81CE-A3D4935B5366@gmail.com> <1459613724765-4887941.post@n4.nabble.com> <871DC093-B418-4C4B-9896-328C3B6C962B@gmail.com> <0CDB8998-3A65-40E1-9C08-AC747DD175AD@freudenbergs.de> <1459751637955-4888130.post@n4.nabble.com> <1459873648991-4888435.post@n4.nabble.com> Message-ID: <1459925910590-4888531.post@n4.nabble.com> Thank you, Eliot. I was mistaken that "[ ] fork" (resp. Process >> #resume) adds it to the front, when it actually adds it to the back of the queue. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Kernel-mt-1009-mcz-tp4887889p4888531.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Apr 6 08:23:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 08:23:52 2016 Subject: [squeak-dev] The Trunk: System-mt.807.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.807.mcz ==================== Summary ==================== Name: System-mt.807 Author: mt Time: 6 April 2016, 10:23:29.549834 am UUID: c31c80b3-f1ff-3d4e-887c-dcdc490c2412 Ancestors: System-bf.806 Make SoundService usable in code just like ToolSet is. =============== Diff against System-bf.806 =============== Item was added: + ----- Method: AbstractSoundSystem>>playSound: (in category 'playing') ----- + playSound: sound + + self subclassResponsibility.! Item was added: + ----- Method: DummySoundSystem>>playSound: (in category 'playing') ----- + playSound: sound + "Do nothing."! Item was added: + ----- Method: SoundService class>>beep (in category 'playing') ----- + beep + + self soundEnabled ifFalse: [^ self]. + + self defaultOrNil ifNotNil: [:soundSystem | soundSystem beep].! Item was added: + ----- Method: SoundService class>>play: (in category 'playing') ----- + play: sound + + self soundEnabled ifFalse: [^ self]. + + self defaultOrNil ifNotNil: [:soundSystem | + soundSystem playSound: sound].! Item was added: + ----- Method: SoundService class>>stop (in category 'playing') ----- + stop + + self defaultOrNil ifNotNil: [:soundSystem | + soundSystem shutDown].! From commits at source.squeak.org Wed Apr 6 08:26:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 08:26:12 2016 Subject: [squeak-dev] The Trunk: Sound-mt.48.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.48.mcz ==================== Summary ==================== Name: Sound-mt.48 Author: mt Time: 6 April 2016, 10:26:04.738834 am UUID: 9b0c8653-4931-ae42-a0ef-e0ca761dc54e Ancestors: Sound-tpr.47 Fixes sound playing in the way that it goes through the sound service to ensure sound preferences. =============== Diff against Sound-tpr.47 =============== Item was changed: ----- Method: AbstractSound>>play (in category 'playing') ----- play + "Play this sound to the sound output port in real time. Use the sound service to check for sound preferences." - "Play this sound to the sound output port in real time." + SoundService play: self.! - SoundPlayer playSound: self.! Item was changed: ----- Method: AbstractSound>>playAndWaitUntilDone (in category 'playing') ----- playAndWaitUntilDone "Play this sound to the sound ouput port and wait until it has finished playing before returning." + self play. - SoundPlayer playSound: self. [self samplesRemaining > 0] whileTrue. (Delay forMilliseconds: 2 * SoundPlayer bufferMSecs) wait. "ensure last buffer has been output" ! Item was changed: ----- Method: BaseSoundSystem>>beep (in category 'playing') ----- beep "There is sound support, so we use the default sampled sound for a beep." + ^ SampledSound beep! - SoundService soundEnabled ifTrue: [ - SampledSound beep]! Item was changed: ----- Method: BaseSoundSystem>>playSampledSound:rate: (in category 'playing') ----- playSampledSound: samples rate: rate + ^ (SampledSound samples: samples samplingRate: rate) play! - SoundService soundEnabled ifTrue: [ - (SampledSound samples: samples samplingRate: rate) play]! Item was added: + ----- Method: BaseSoundSystem>>playSound: (in category 'playing') ----- + playSound: sound + + SoundPlayer playSound: sound. + ^ sound! Item was changed: ----- Method: BaseSoundSystem>>playSoundNamed: (in category 'playing') ----- playSoundNamed: soundName "There is sound support, so we play the given sound." + ^ SampledSound playSoundNamed: soundName asString! - SoundService soundEnabled ifTrue: [ - SampledSound playSoundNamed: soundName asString]! Item was changed: ----- Method: BaseSoundSystem>>playSoundNamed:ifAbsentReadFrom: (in category 'playing') ----- playSoundNamed: soundName ifAbsentReadFrom: aifFileName + (SampledSound soundNames includes: soundName) ifFalse: [ + (FileDirectory default fileExists: aifFileName) ifTrue: [ + SampledSound + addLibrarySoundNamed: soundName + fromAIFFfileNamed: aifFileName]]. + + (SampledSound soundNames includes: soundName) ifTrue: [ + ^ SampledSound playSoundNamed: soundName]. + + ^ nil! - SoundService soundEnabled ifTrue: [ - (SampledSound soundNames includes: soundName) ifFalse: [ - (FileDirectory default fileExists: aifFileName) ifTrue: [ - SampledSound - addLibrarySoundNamed: soundName - fromAIFFfileNamed: aifFileName]]. - (SampledSound soundNames includes: soundName) ifTrue: [ - SampledSound playSoundNamed: soundName]]! Item was changed: ----- Method: BaseSoundSystem>>playSoundNamedOrBeep: (in category 'playing') ----- playSoundNamedOrBeep: soundName "There is sound support, so we play the given sound instead of beeping." + ^ self playSoundNamed: soundName! - SoundService soundEnabled ifTrue: [ - ^self playSoundNamed: soundName]! From commits at source.squeak.org Wed Apr 6 08:27:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 08:27:29 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1013.mcz Message-ID: Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.1013.mcz ==================== Summary ==================== Name: Kernel-mt.1013 Author: mt Time: 6 April 2016, 10:27:04.586834 am UUID: b0488a79-3625-4d40-8aad-1cb2b3ad4936 Ancestors: Kernel-mt.1012 Simplifies code for stopping the sound service on CMD+Dot =============== Diff against Kernel-mt.1012 =============== Item was changed: ----- Method: EventSensor>>userInterruptWatcher (in category 'user interrupts') ----- userInterruptWatcher "Wait for user interrupts and open a notifier on the active process when one occurs." [ InterruptSemaphore wait. Display deferUpdates: false. + SoundService stop. - SoundService defaultOrNil ifNotNil: [ : soundSystem | soundSystem shutDown ]. Smalltalk handleUserInterrupt ] repeat! From commits at source.squeak.org Wed Apr 6 08:28:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 08:28:52 2016 Subject: [squeak-dev] The Trunk: Sound-mt.49.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.49.mcz ==================== Summary ==================== Name: Sound-mt.49 Author: mt Time: 6 April 2016, 10:28:46.469834 am UUID: a2a341f2-f4d3-b946-a104-0e5f59c1554c Ancestors: Sound-mt.48 Adds code for conveniently playing MIDIs stored in the file system. Compares with Form class. =============== Diff against Sound-mt.48 =============== Item was added: + ScorePlayer subclass: #MIDISound + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Sound-Scores'! + + !MIDISound commentStamp: 'mt 4/6/2016 10:19' prior: 0! + This empty class just makes the fact explicit that this object is a sound object that needs can be played. Just like other sounds. + + Example: (MIDISound fromFileNamed: 'some.mid') play! Item was added: + ----- Method: ScorePlayer class>>fromFileNamed: (in category 'instance creation') ----- + fromFileNamed: fileName + + ^ self onScore: (MIDIFileReader scoreFromFileNamed: fileName)! From commits at source.squeak.org Wed Apr 6 08:53:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 08:53:09 2016 Subject: [squeak-dev] The Trunk: System-mt.808.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.808.mcz ==================== Summary ==================== Name: System-mt.808 Author: mt Time: 6 April 2016, 10:52:46.735095 am UUID: be179802-28c2-f942-afbf-ddbe14153684 Ancestors: System-mt.807 Temporary change to not lock up the system while moving #isMorphic into an extension category in Project. =============== Diff against System-mt.807 =============== Item was changed: ----- Method: SmalltalkImage>>isMorphic (in category 'snapshot and quit') ----- isMorphic + "Temporary implementation." + + ^ (Project current respondsTo: #isMorphic) not or: [Project current isMorphic]! - - ^ Project current isMorphic! From Das.Linux at gmx.de Wed Apr 6 08:54:13 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Apr 6 08:54:18 2016 Subject: [squeak-dev] The Trunk: Sound-mt.49.mcz Message-ID: On 06.04.2016, at 08:28, commits@source.squeak.org wrote: > Marcel Taeumel uploaded a new version of Sound to project The Trunk: > http://source.squeak.org/trunk/Sound-mt.49.mcz > > ==================== Summary ==================== > > Name: Sound-mt.49 > Author: mt > Time: 6 April 2016, 10:28:46.469834 am > UUID: a2a341f2-f4d3-b946-a104-0e5f59c1554c > Ancestors: Sound-mt.48 > > Adds code for conveniently playing MIDIs stored in the file system. Compares with Form class. \o/ BTW: this makes Squeak the only convenient midi player on mac ;P Best -tobias > > =============== Diff against Sound-mt.48 =============== > > Item was added: > + ScorePlayer subclass: #MIDISound > + instanceVariableNames: '' > + classVariableNames: '' > + poolDictionaries: '' > + category: 'Sound-Scores'! > + > + !MIDISound commentStamp: 'mt 4/6/2016 10:19' prior: 0! > + This empty class just makes the fact explicit that this object is a sound object that needs can be played. Just like other sounds. > + > + Example: (MIDISound fromFileNamed: 'some.mid') play! > > Item was added: From commits at source.squeak.org Wed Apr 6 08:55:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 08:55:24 2016 Subject: [squeak-dev] The Trunk: System-mt.809.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.809.mcz ==================== Summary ==================== Name: System-mt.809 Author: mt Time: 6 April 2016, 10:54:56.661095 am UUID: 6cbea751-999b-284a-a834-62df239c3892 Ancestors: System-mt.808 Move #isMorphic into Morphic extension. =============== Diff against System-mt.808 =============== Item was removed: - ----- Method: Project>>isMorphic (in category 'accessing') ----- - isMorphic - "Complexity is because #isMVC is lazily installed" - ^ world isInMemory - ifTrue: [world isMorph] - ifFalse: [(self projectParameters at: #isMVC ifAbsent: [false]) not]! From commits at source.squeak.org Wed Apr 6 08:56:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 08:56:24 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1101.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1101.mcz ==================== Summary ==================== Name: Morphic-mt.1101 Author: mt Time: 6 April 2016, 10:55:47.896095 am UUID: 8f859759-097e-ec4c-80ce-4894b2ef62a7 Ancestors: Morphic-mt.1100 Adds #isMorphic as extension to Project. =============== Diff against Morphic-mt.1100 =============== Item was added: + ----- Method: Project>>isMorphic (in category '*Morphic-testing') ----- + isMorphic + "Complexity is because #isMVC is lazily installed" + ^ world isInMemory + ifTrue: [world isMorph] + ifFalse: [(self projectParameters at: #isMVC ifAbsent: [false]) not]! From commits at source.squeak.org Wed Apr 6 09:05:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 09:05:52 2016 Subject: [squeak-dev] The Trunk: System-mt.810.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.810.mcz ==================== Summary ==================== Name: System-mt.810 Author: mt Time: 6 April 2016, 11:05:30.468095 am UUID: 8d6172bc-5f9e-af49-b88f-4c74141fdd38 Ancestors: System-mt.809 Migration complete. Revert implementation of #isMorphic. =============== Diff against System-mt.809 =============== Item was changed: ----- Method: SmalltalkImage>>isMorphic (in category 'snapshot and quit') ----- isMorphic + + ^ Project current isMorphic! - "Temporary implementation." - - ^ (Project current respondsTo: #isMorphic) not or: [Project current isMorphic]! From commits at source.squeak.org Wed Apr 6 09:08:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 09:08:04 2016 Subject: [squeak-dev] The Trunk: ST80-mt.198.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.198.mcz ==================== Summary ==================== Name: ST80-mt.198 Author: mt Time: 6 April 2016, 11:07:56.476095 am UUID: 7d0ce778-da08-474b-87cd-dbb594553c42 Ancestors: ST80-mt.197 Simple MVC check. =============== Diff against ST80-mt.197 =============== Item was added: + ----- Method: MVCProject>>isMVC (in category 'testing') ----- + isMVC + + ^ true! Item was added: + ----- Method: Project>>isMVC (in category '*ST80-testing') ----- + isMVC + + ^ false! From Marcel.Taeumel at hpi.de Wed Apr 6 08:41:16 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 6 09:13:19 2016 Subject: [squeak-dev] Re: The Trunk: Sound-mt.49.mcz In-Reply-To: References: Message-ID: <1459932076751-4888578.post@n4.nabble.com> Hey Tobias, it would be great if we could attach to some MIDI device in the operating system. For using sound fonts. :) ...or maybe we can even load sound fonts? :-D Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Sound-mt-49-mcz-tp4888544p4888578.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Apr 6 09:14:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 09:14:43 2016 Subject: [squeak-dev] The Trunk: ST80-mt.199.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.199.mcz ==================== Summary ==================== Name: ST80-mt.199 Author: mt Time: 6 April 2016, 11:14:33.615625 am UUID: f48e2a2b-62a5-eb4d-b9ed-a2bb95db0935 Ancestors: ST80-mt.198 Fixes MVC-specific clean-up for save/load the image. =============== Diff against ST80-mt.198 =============== Item was changed: ----- Method: ControlManager class>>shutDown (in category 'snapshots') ----- + shutDown + "Saves space in snapshots" - shutDown "Saves space in snapshots" + Project current isMVC + ifTrue: [ScheduledControllers unCacheWindows].! - Smalltalk isMorphic ifFalse: [ScheduledControllers unCacheWindows]! Item was changed: ----- Method: ControlManager class>>startUp (in category 'snapshots') ----- startUp + + Project current isMVC + ifTrue: [ScheduledControllers restore].! - Smalltalk isMorphic ifFalse: [ScheduledControllers restore]! From commits at source.squeak.org Wed Apr 6 09:16:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 09:16:43 2016 Subject: [squeak-dev] The Trunk: System-mt.811.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.811.mcz ==================== Summary ==================== Name: System-mt.811 Author: mt Time: 6 April 2016, 11:16:15.706625 am UUID: 582451db-f36b-ca41-8510-d3b5505f8e8d Ancestors: System-mt.810 Make start-up scripts work also in othere GUIs. =============== Diff against System-mt.810 =============== Item was changed: ----- Method: AutoStart class>>startUp: (in category 'initialization') ----- startUp: resuming "The image is either being newly started (resuming is true), or it's just been snapshotted. If this has just been a snapshot, skip all the startup stuff." | startupParameters launchers | self active ifTrue: [^self]. self active: true. resuming ifFalse: [^self]. HTTPClient determineIfRunningInBrowser. startupParameters := Smalltalk namedArguments. (startupParameters includesKey: 'apiSupported' asUppercase ) ifTrue: [ HTTPClient browserSupportsAPI: ((startupParameters at: 'apiSupported' asUppercase) asUppercase = 'TRUE'). HTTPClient isRunningInBrowser ifFalse: [HTTPClient isRunningInBrowser: true]]. "Some images might not have the UpdateStream package." ((self respondsTo: #checkForUpdates) and: [self checkForUpdates]) ifTrue: [^self]. self checkForPluginUpdate. launchers := self installedLaunchers collect: [:launcher | launcher new]. launchers do: [:launcher | launcher parameters: startupParameters]. launchers do: [:launcher | + Project current addDeferredUIMessage: [launcher startUp]]! - Smalltalk at: #WorldState ifPresent: [ :ws | ws addDeferredUIMessage: [launcher startUp]]]! From commits at source.squeak.org Wed Apr 6 11:07:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 11:07:22 2016 Subject: [squeak-dev] The Trunk: System-mt.812.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.812.mcz ==================== Summary ==================== Name: System-mt.812 Author: mt Time: 6 April 2016, 1:06:06.171625 pm UUID: 3b380312-0a9d-e542-93d4-26edd4e87e24 Ancestors: System-mt.811 Rename to be consistent with ToolSet metaphor. =============== Diff against System-mt.811 =============== Item was removed: - ----- Method: SoundService class>>play: (in category 'playing') ----- - play: sound - - self soundEnabled ifFalse: [^ self]. - - self defaultOrNil ifNotNil: [:soundSystem | - soundSystem playSound: sound].! Item was added: + ----- Method: SoundService class>>playSound: (in category 'playing') ----- + playSound: sound + + self soundEnabled ifFalse: [^ self]. + + self defaultOrNil ifNotNil: [:soundSystem | + soundSystem playSound: sound].! From commits at source.squeak.org Wed Apr 6 11:08:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 11:08:10 2016 Subject: [squeak-dev] The Trunk: Sound-mt.50.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.50.mcz ==================== Summary ==================== Name: Sound-mt.50 Author: mt Time: 6 April 2016, 1:07:48.224625 pm UUID: 07f087d1-3449-4f4d-a243-7bf79a49b90e Ancestors: Sound-mt.49 Use this sound system by default if there is no other sound system used already. =============== Diff against Sound-mt.49 =============== Item was changed: ----- Method: AbstractSound>>play (in category 'playing') ----- play "Play this sound to the sound output port in real time. Use the sound service to check for sound preferences." + SoundService playSound: self.! - SoundService play: self.! Item was changed: ----- Method: BaseSoundSystem class>>initialize (in category 'class initialization') ----- initialize + + SoundService register: self. + + SoundService defaultOrNil + ifNil: [SoundService default: self].! - SoundService register: self.! From bert at freudenbergs.de Wed Apr 6 11:44:58 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Apr 6 11:45:03 2016 Subject: [squeak-dev] The Trunk: Sound-mt.49.mcz In-Reply-To: <1459932076751-4888578.post@n4.nabble.com> References: <1459932076751-4888578.post@n4.nabble.com> Message-ID: > On 06.04.2016, at 10:41, marcel.taeumel wrote: > > Hey Tobias, > > it would be great if we could attach to some MIDI device in the operating > system. For using sound fonts. :) That used to work. The VM has primitives for MIDI input and output. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160406/10ab3516/smime.bin From bert at freudenbergs.de Wed Apr 6 12:11:21 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Apr 6 12:11:24 2016 Subject: [squeak-dev] New Help Feature for System Windows In-Reply-To: References: <1459847160289-4888349.post@n4.nabble.com> <1459847353220-4888350.post@n4.nabble.com> Message-ID: Well, being orthodox is not always bad ;) Common practice is to have a dark overlay explaining the parts of the UI, which is dismissed fully by clicking: https://www.google.com/search?q=help+overlay&tbm=isch I wouldn?t abuse help balloons for this at all. - Bert - > On 06.04.2016, at 01:08, Chris Muller wrote: > > One idea; what if the new "?" button toggles these balloons on/off so > that, when they're "on" they just stay there, centered in the lists.. > > Who cares if they obscure one line in the middle, just scroll around > it..(although it may not work for the annotation pane, because its > short). > > Unorthodox, I know. > > On Tue, Apr 5, 2016 at 4:09 AM, marcel.taeumel wrote: >> Here a more eye-friendly overlay: >> >> >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/New-Help-Feature-for-System-Windows-tp4888349p4888350.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> > -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160406/81e11b05/smime.bin From Marcel.Taeumel at hpi.de Wed Apr 6 13:44:22 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 6 14:15:34 2016 Subject: [squeak-dev] The Trunk: Sound-mt.49.mcz In-Reply-To: References: <1459932076751-4888578.post@n4.nabble.com> Message-ID: <1459950262797-4888684.post@n4.nabble.com> This idea of re-using balloon texts comes from re-using the existing help content to make it more visible. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Sound-mt-49-mcz-tp4888544p4888684.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Apr 6 13:45:07 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 6 14:16:19 2016 Subject: [squeak-dev] Re: New Help Feature for System Windows In-Reply-To: References: <1459847160289-4888349.post@n4.nabble.com> <1459847353220-4888350.post@n4.nabble.com> Message-ID: <1459950307471-4888686.post@n4.nabble.com> This idea of re-using balloon texts comes from re-using the existing help content to make it more visible. Best, Marcel -- View this message in context: http://forum.world.st/New-Help-Feature-for-System-Windows-tp4888349p4888686.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Apr 6 16:04:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 16:04:52 2016 Subject: [squeak-dev] The Trunk: Sound-mt.51.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.51.mcz ==================== Summary ==================== Name: Sound-mt.51 Author: mt Time: 6 April 2016, 6:04:45.917125 pm UUID: ee88ba13-414b-8e49-ba8e-2a0c42a9b886 Ancestors: Sound-mt.50 Fixes MIDI support wrt. to using real MIDI devices and CMD+Dot behavior. Keep sounds and music playing when only snapshotting but not quitting the image. =============== Diff against Sound-mt.50 =============== Item was changed: ----- Method: BaseSoundSystem>>shutDown (in category 'misc') ----- shutDown + + SoundPlayer shutDown: true. + ScorePlayer shutDown: true.! - SoundPlayer shutDown - ! Item was added: + ----- Method: MIDISound>>play (in category 'as yet unclassified') ----- + play + "The base class ScorePlayer has two interfaces: a sound and a sound player. Choose the right interface depending on whether MIDI support is present." + + SimpleMIDIPort useMIDIDeviceForOutput ifTrue: [ + [self openMIDIPort] + on: Error + do: [ + SimpleMIDIPort askForDefault. + self openMIDIPort]]. + + self reset; resumePlaying.! Item was added: + ----- Method: ScorePlayer class>>initialize (in category 'as yet unclassified') ----- + initialize + + Smalltalk addToShutDownList: self.! Item was added: + ----- Method: ScorePlayer class>>shutDown: (in category 'snapshotting') ----- + shutDown: quitting + + quitting ifTrue: [ + ScorePlayer allSubInstancesDo: [:ea | [ea stopMIDIPlaying] on: Error do: [] ] ].! Item was added: + ----- Method: ScorePlayer>>openMIDIPort (in category 'midi output') ----- + openMIDIPort + + midiPort := SimpleMIDIPort openDefault.! Item was changed: Object subclass: #SimpleMIDIPort instanceVariableNames: 'portNumber accessSema lastCommandByteOut' + classVariableNames: 'DefaultPortNumber InterfaceClockRate UseMIDIDeviceForOutput' - classVariableNames: 'DefaultPortNumber InterfaceClockRate' poolDictionaries: '' category: 'Sound-Scores'! !SimpleMIDIPort commentStamp: '' prior: 0! This is a first cut at a simple MIDI output port. ! Item was added: + ----- Method: SimpleMIDIPort class>>anyPortNumFromUser (in category 'utilities') ----- + anyPortNumFromUser + + ^ UIManager default + chooseFrom: ((0 to: self primPortCount - 1) collect:[:i| self portDescription: i]) + values: (0 to: self primPortCount - 1) + title: 'MIDI port for default usage:' translated + ! Item was added: + ----- Method: SimpleMIDIPort class>>askForDefault (in category 'utilities') ----- + askForDefault + "self askForDefault" + + self anyPortNumFromUser ifNotNil: [:num | + DefaultPortNumber := num].! Item was added: + ----- Method: SimpleMIDIPort class>>useMIDIDeviceForOutput (in category 'preferences') ----- + useMIDIDeviceForOutput + + + ^ UseMIDIDeviceForOutput ifNil: [false]! Item was added: + ----- Method: SimpleMIDIPort class>>useMIDIDeviceForOutput: (in category 'preferences') ----- + useMIDIDeviceForOutput: boolean + + UseMIDIDeviceForOutput := boolean.! Item was changed: ----- Method: SimpleMIDIPort>>midiCmd:channel:byte: (in category 'output') ----- midiCmd: cmd channel: channel byte: dataByte + "Immediately output the given MIDI command with the given channel and argument byte to this MIDI port. Assume that the port is open." - "Immediately output the given MIDI command with the given channel and - argument byte to this MIDI port. Assume that the port is open." accessSema critical: [ + self primMIDIWritePort: portNumber - self primMIDIWriteNoErrorPort: portNumber from: (ByteArray with: (cmd bitOr: channel) with: dataByte) at: 0]. ! Item was changed: ----- Method: SimpleMIDIPort>>midiCmd:channel:byte:byte: (in category 'output') ----- midiCmd: cmd channel: channel byte: dataByte1 byte: dataByte2 + "Immediately output the given MIDI command with the given channel and argument bytes to this MIDI port. Assume that the port is open." - "Immediately output the given MIDI command with the given channel - and argument bytes to this MIDI port. Assume that the port is open." accessSema critical: [ + self primMIDIWritePort: portNumber - self primMIDIWriteNoErrorPort: portNumber from: (ByteArray with: (cmd bitOr: channel) with: dataByte1 with: dataByte2) at: 0]. ! Item was removed: - ----- Method: SoundPlayer class>>shutDown (in category 'snapshotting') ----- - shutDown - "Stop player process, for example before snapshotting." - - self stopPlayerProcess. - ReverbState := nil. - ! Item was added: + ----- Method: SoundPlayer class>>shutDown: (in category 'snapshotting') ----- + shutDown: quitting + "Stop player process, for example before snapshotting." + + quitting ifTrue: [ + self stopPlayerProcess. + ReverbState := nil].! From commits at source.squeak.org Wed Apr 6 16:06:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 16:06:57 2016 Subject: [squeak-dev] The Trunk: Sound-mt.52.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.52.mcz ==================== Summary ==================== Name: Sound-mt.52 Author: mt Time: 6 April 2016, 6:06:14.405125 pm UUID: c5f62084-edd7-a64f-a95a-9ae29db062f6 Ancestors: Sound-mt.51 Adds descriptive process names to the processes that are playing sound and MIDI. =============== Diff against Sound-mt.51 =============== Item was changed: ----- Method: MIDIFileReader>>asScore (in category 'chunk reading') ----- asScore ^ MIDIScore new tracks: tracks; trackInfo: trackInfo; tempoMap: tempoMap; + ticksPerQuarterNote: ticksPerQuarter; + source: stream localName - ticksPerQuarterNote: ticksPerQuarter ! Item was changed: Object subclass: #MIDIScore + instanceVariableNames: 'tracks trackInfo ambientTrack tempoMap ticksPerQuarterNote source' - instanceVariableNames: 'tracks trackInfo ambientTrack tempoMap ticksPerQuarterNote' classVariableNames: '' poolDictionaries: '' category: 'Sound-Scores'! !MIDIScore commentStamp: '' prior: 0! A MIDIScore is a container for a number of MIDI tracks as well as an ambient track for such things as sounds, book page triggers and other related events.! Item was added: + ----- Method: MIDIScore>>printOn: (in category 'printing') ----- + printOn: stream + + self source + ifNotNil: [:s | s printOn: stream] + ifNil: [super printOn: stream].! Item was added: + ----- Method: MIDIScore>>source (in category 'accessing') ----- + source + ^ source! Item was added: + ----- Method: MIDIScore>>source: (in category 'accessing') ----- + source: anObject + source := anObject.! Item was changed: ----- Method: ScorePlayer>>startMIDIPlaying (in category 'midi output') ----- startMIDIPlaying "Start up a process to play this score via MIDI." midiPort ensureOpen. midiPlayerProcess ifNotNil: [midiPlayerProcess terminate]. midiPlayerProcess := [self midiPlayLoop] newProcess. midiPlayerProcess + name: 'Score Player (', self score printString, ')'; priority: Processor userInterruptPriority; resume. ! Item was changed: ----- Method: SoundPlayer class>>resumePlaying:quickStart: (in category 'playing') ----- resumePlaying: aSound quickStart: quickStart "Start playing the given sound without resetting it; it will resume playing from where it last stopped. If quickStart is true, then try to start playing the given sound immediately." | doQuickStart | SoundService soundEnabled ifFalse: [^ self]. doQuickStart := quickStart. self soundQuickStart ifFalse: [doQuickStart := false]. PlayerProcess == nil ifTrue: [ self canStartPlayer ifFalse: [^ self]. ^self startUpWithSound: aSound]. + - PlayerSemaphore critical: [ (ActiveSounds includes: aSound) ifTrue: [doQuickStart := false] + ifFalse: [doQuickStart ifFalse: [ActiveSounds add: aSound]]. + PlayerProcess name: 'Sound Player (', ActiveSounds size asString, ')']. - ifFalse: [ - doQuickStart ifFalse: [ActiveSounds add: aSound]]]. "quick-start the given sound, unless the sound player has just started" doQuickStart ifTrue: [self startPlayingImmediately: aSound]. ! Item was changed: ----- Method: SoundPlayer class>>startPlayerProcessBufferSize:rate:stereo:sound: (in category 'player process') ----- startPlayerProcessBufferSize: bufferSize rate: samplesPerSecond stereo: stereoFlag sound: aSound "Start the sound player process. Terminate the old process, if any." "SoundPlayer startPlayerProcessBufferSize: 1000 rate: 11025 stereo: false" self stopPlayerProcess. aSound ifNil:[ActiveSounds := OrderedCollection new] ifNotNil:[ActiveSounds := OrderedCollection with: aSound]. Buffer := SoundBuffer newStereoSampleCount: (bufferSize // 4) * 4. LastBuffer ifNotNil:[LastBuffer := SoundBuffer basicNew: Buffer basicSize]. PlayerSemaphore := Semaphore forMutualExclusion. SamplingRate := samplesPerSecond. Stereo := stereoFlag. SoundSupported := true. "Assume so" UseReadySemaphore := true. "set to false if ready semaphore not supported by VM" Smalltalk newExternalSemaphoreDo: [ :semaphore :index | ReadyForBuffer := semaphore. self primSoundStartBufferSize: Buffer stereoSampleCount rate: samplesPerSecond stereo: Stereo semaIndex: index ]. "Check if sound start prim was successful" SoundSupported ifFalse:[ Smalltalk unregisterExternalObject: ReadyForBuffer. ReadyForBuffer := nil. ^self ]. UseReadySemaphore ifTrue: [PlayerProcess := [SoundPlayer playLoop] newProcess] ifFalse: [PlayerProcess := [SoundPlayer oldStylePlayLoop] newProcess]. UseReverb ifTrue: [self startReverb]. + PlayerProcess + name: 'Sound Player (', ActiveSounds size asString, ')'; + priority: Processor userInterruptPriority; + resume! - PlayerProcess priority: Processor userInterruptPriority. - PlayerProcess resume! From commits at source.squeak.org Wed Apr 6 16:12:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 16:12:10 2016 Subject: [squeak-dev] The Trunk: Tools-mt.685.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.685.mcz ==================== Summary ==================== Name: Tools-mt.685 Author: mt Time: 6 April 2016, 6:11:52.977125 pm UUID: 87ada98c-1487-8b40-aff3-51e64dd6686f Ancestors: Tools-mt.684 Removes 'the Sound Player' as a well-known global process to get rid of some global state considering the playing of sounds. Scores, for example, are played as one process per score. Maybe sounds could benefit from that, too. Anyway, it's primarily about the global state here. And: Sound player processes got a clear description now. So, this is no step back in usability. =============== Diff against Tools-mt.684 =============== Item was changed: ----- Method: ProcessBrowser class>>registerWellKnownProcesses (in category 'class initialization') ----- registerWellKnownProcesses "Associate each well-known process with a nickname and two flags: allow-stop, and allow-debug. Additional processes may be added to this list as required" WellKnownProcesses := OrderedCollection new. self registerWellKnownProcess: [] label: 'no process' allowStop: false allowDebug: false. self registerWellKnownProcess: [Smalltalk lowSpaceWatcherProcess] label: 'the low space watcher' allowStop: false allowDebug: false. self registerWellKnownProcess: [WeakArray runningFinalizationProcess] label: 'the WeakArray finalization process' allowStop: false allowDebug: false. self registerWellKnownProcess: [Processor activeProcess] label: 'the UI process' allowStop: false allowDebug: true. self registerWellKnownProcess: [Processor backgroundProcess] label: 'the idle process' allowStop: false allowDebug: false. self registerWellKnownProcess: [Sensor interruptWatcherProcess] label: 'the user interrupt watcher' allowStop: false allowDebug: false. self registerWellKnownProcess: [Sensor eventTicklerProcess] label: 'the event tickler' allowStop: false allowDebug: false. self registerWellKnownProcess: [Project uiProcess] label: 'the inactive Morphic UI process' allowStop: false allowDebug: false. + " self registerWellKnownProcess: - self registerWellKnownProcess: [Smalltalk at: #SoundPlayer ifPresent: [:sp | sp playerProcess]] label: 'the Sound Player' allowStop: false + allowDebug: false." - allowDebug: false. self registerWellKnownProcess: [ScheduledControllers ifNotNil: [ScheduledControllers activeControllerProcess]] label: 'the inactive MVC controller process' allowStop: false allowDebug: true. self registerWellKnownProcess: [Smalltalk at: #CPUWatcher ifPresent: [:cw | cw currentWatcherProcess]] label: 'the CPUWatcher' allowStop: false allowDebug: false ! Item was changed: + (PackageInfo named: 'Tools') postscript: 'ProcessBrowser initialize.'! - (PackageInfo named: 'Tools') postscript: '"Updated for new global hot-key support." - ActiveWorld initializeDesktopCommandKeySelectors'! From Marcel.Taeumel at hpi.de Wed Apr 6 15:49:34 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 6 16:20:46 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.685.mcz In-Reply-To: References: Message-ID: <1459957774633-4888726.post@n4.nabble.com> Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-685-mcz-tp4888722p4888726.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Apr 6 16:25:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 16:26:02 2016 Subject: [squeak-dev] The Trunk: Sound-mt.53.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.53.mcz ==================== Summary ==================== Name: Sound-mt.53 Author: mt Time: 6 April 2016, 6:25:53.027926 pm UUID: 7e1b7e43-e9c2-2a41-90c2-d545cd195582 Ancestors: Sound-mt.52 Disable usage of MIDI device if it does not work. =============== Diff against Sound-mt.52 =============== Item was changed: ----- Method: MIDISound>>play (in category 'as yet unclassified') ----- play "The base class ScorePlayer has two interfaces: a sound and a sound player. Choose the right interface depending on whether MIDI support is present." SimpleMIDIPort useMIDIDeviceForOutput ifTrue: [ [self openMIDIPort] on: Error do: [ SimpleMIDIPort askForDefault. + [self openMIDIPort] + on: Error + do: [ + self inform: 'Use of MIDI device is not working. Using custom synthesis.\Go to preferences to change again.' withCRs. + SimpleMIDIPort useMIDIDeviceForOutput: false]]]. - self openMIDIPort]]. self reset; resumePlaying.! From commits at source.squeak.org Wed Apr 6 16:30:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 16:30:49 2016 Subject: [squeak-dev] The Trunk: Sound-mt.54.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.54.mcz ==================== Summary ==================== Name: Sound-mt.54 Author: mt Time: 6 April 2016, 6:30:41.370961 pm UUID: a0aa6992-2b6c-c648-87b2-124df7b804ba Ancestors: Sound-mt.53 Consider the sound-enabled preference also for playing MIDI scores. =============== Diff against Sound-mt.53 =============== Item was changed: ----- Method: MIDISound>>play (in category 'as yet unclassified') ----- play "The base class ScorePlayer has two interfaces: a sound and a sound player. Choose the right interface depending on whether MIDI support is present." + SoundService soundEnabled ifFalse: [^ self]. + SimpleMIDIPort useMIDIDeviceForOutput ifTrue: [ [self openMIDIPort] on: Error do: [ SimpleMIDIPort askForDefault. [self openMIDIPort] on: Error do: [ self inform: 'Use of MIDI device is not working. Using custom synthesis.\Go to preferences to change again.' withCRs. SimpleMIDIPort useMIDIDeviceForOutput: false]]]. self reset; resumePlaying.! From lewis at mail.msen.com Wed Apr 6 16:44:02 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Apr 6 16:44:04 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.685.mcz In-Reply-To: <1459957774633-4888726.post@n4.nabble.com> References: <1459957774633-4888726.post@n4.nabble.com> Message-ID: <63743.136.1.1.165.1459961042.squirrel@webmail.msen.com> Really nice! It's great to see all these updates to the sound system. Dave > > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Tools-mt-685-mcz-tp4888722p4888726.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Wed Apr 6 17:01:44 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Apr 6 17:02:27 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.685.mcz In-Reply-To: <1459957774633-4888726.post@n4.nabble.com> References: <1459957774633-4888726.post@n4.nabble.com> Message-ID: I thought the reason for one global sound process was due to it needing to "sum up" all the voices of a given instant and pass that aggregate waveform to some primitive which would play it for that millisecond (or whatever). Clearly, my mental model must be wrong. Sound in Squeak is an area where I could qualify as a "beginner" any enlightenment would be welcome. On Wed, Apr 6, 2016 at 10:49 AM, marcel.taeumel wrote: > > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Tools-mt-685-mcz-tp4888722p4888726.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From commits at source.squeak.org Wed Apr 6 17:16:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 17:16:22 2016 Subject: [squeak-dev] The Trunk: Sound-mt.55.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.55.mcz ==================== Summary ==================== Name: Sound-mt.55 Author: mt Time: 6 April 2016, 7:16:16.273155 pm UUID: c5be3a4c-30f2-dd48-8f1e-087d240d455a Ancestors: Sound-mt.54 Adds support for dropping a MIDI file into the image and play it directly. (Instead of only offering to open a ScorePlayerMorph for that.) =============== Diff against Sound-mt.54 =============== Item was added: + ----- Method: ScorePlayer class>>fileReaderServicesForFile:suffix: (in category 'file reader services') ----- + fileReaderServicesForFile: fullName suffix: suffix + + ^ (suffix = 'mid') | (suffix = '*') + ifTrue: [self services] + ifFalse: [#()] + ! Item was changed: + ----- Method: ScorePlayer class>>initialize (in category 'class initialization') ----- - ----- Method: ScorePlayer class>>initialize (in category 'as yet unclassified') ----- initialize + Smalltalk addToShutDownList: self. + FileServices registerFileReader: self.! - Smalltalk addToShutDownList: self.! Item was added: + ----- Method: ScorePlayer class>>playFileNamed: (in category 'instance creation') ----- + playFileNamed: fileName + + ^ (MIDISound fromFileNamed: fileName) + play; yourself! Item was added: + ----- Method: ScorePlayer class>>servicePlayMidiFile (in category 'file reader services') ----- + servicePlayMidiFile + "Answer a service for opening player on a midi file" + + ^ SimpleServiceEntry + provider: self + label: 'play MIDI file' + selector: #playFileNamed: + description: 'play the MIDI file directly' + buttonLabel: 'play'! Item was added: + ----- Method: ScorePlayer class>>services (in category 'file reader services') ----- + services + + ^ Array with: self servicePlayMidiFile! Item was added: + ----- Method: ScorePlayer class>>unload (in category 'initialize-release') ----- + unload + + FileServices unregisterFileReader: self ! From Marcel.Taeumel at hpi.de Wed Apr 6 17:00:13 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 6 17:31:30 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.685.mcz In-Reply-To: References: <1459957774633-4888726.post@n4.nabble.com> Message-ID: <1459962013215-4888740.post@n4.nabble.com> Hi Chris, you're right. I mixed that up. Regular sound output has to be a single process while multiple processes for MIDI output can overlap and still produce okay-ish audible output. Anyway, processes should store flags for debuggability, stoppability, and label in themselves. Simplifies maintenance. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-685-mcz-tp4888722p4888740.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Wed Apr 6 17:36:41 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Apr 6 17:36:45 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.685.mcz In-Reply-To: References: <1459957774633-4888726.post@n4.nabble.com> Message-ID: <9E262DCF-D94E-43C4-BF1E-BAA117BAF52E@rowledge.org> > On 06-04-2016, at 10:01 AM, Chris Muller wrote: > > I thought the reason for one global sound process was due to it > needing to "sum up" all the voices of a given instant and pass that > aggregate waveform to some primitive which would play it for that > millisecond (or whatever). As best I understand it the MIDI synthesiser is quite separate and outputs whatever it wants via the system sound handler. Our FM sound(etc) goes out via our own soundplayer process and the prims that add it to the system sound handler. On the Pi (and therefore I hope generic linux) we recently got a parcel of fixes integrated that make MIDI stuff work decently via timidity; no idea if that means it would work with any other linux midi synth. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Furnulum pani nolo = I don't want a toaster. From herbertkoenig at gmx.net Wed Apr 6 18:43:46 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Wed Apr 6 18:43:46 2016 Subject: [squeak-dev] Multichannel Sound Message-ID: <570558E2.2070308@gmx.net> Hi, has anybody used more than 2 audio channels in Squeak? Cheers, Herbert From Marcel.Taeumel at hpi.de Wed Apr 6 18:30:25 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 6 19:01:39 2016 Subject: [squeak-dev] Re: Multichannel Sound In-Reply-To: <570558E2.2070308@gmx.net> References: <570558E2.2070308@gmx.net> Message-ID: <1459967425750-4888757.post@n4.nabble.com> Hi Herbert, I guess one would have to extend the SoundPlugin for that. Best, Marcel -- View this message in context: http://forum.world.st/Multichannel-Sound-tp4888753p4888757.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Apr 6 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 6 21:55:05 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160406215502.1464.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009543.html Name: System-mt.807 Ancestors: System-bf.806 Make SoundService usable in code just like ToolSet is. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009544.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009545.html Name: Sound-mt.48 Ancestors: Sound-tpr.47 Fixes sound playing in the way that it goes through the sound service to ensure sound preferences. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009546.html Name: Kernel-mt.1013 Ancestors: Kernel-mt.1012 Simplifies code for stopping the sound service on CMD+Dot ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009547.html Name: Sound-mt.49 Ancestors: Sound-mt.48 Adds code for conveniently playing MIDIs stored in the file system. Compares with Form class. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009548.html Name: System-mt.808 Ancestors: System-mt.807 Temporary change to not lock up the system while moving #isMorphic into an extension category in Project. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009549.html Name: System-mt.809 Ancestors: System-mt.808 Move #isMorphic into Morphic extension. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009550.html Name: Morphic-mt.1101 Ancestors: Morphic-mt.1100 Adds #isMorphic as extension to Project. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009551.html Name: System-mt.810 Ancestors: System-mt.809 Migration complete. Revert implementation of #isMorphic. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009552.html Name: ST80-mt.198 Ancestors: ST80-mt.197 Simple MVC check. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009553.html Name: ST80-mt.199 Ancestors: ST80-mt.198 Fixes MVC-specific clean-up for save/load the image. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009554.html Name: System-mt.811 Ancestors: System-mt.810 Make start-up scripts work also in othere GUIs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009555.html Name: System-mt.812 Ancestors: System-mt.811 Rename to be consistent with ToolSet metaphor. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009556.html Name: Sound-mt.50 Ancestors: Sound-mt.49 Use this sound system by default if there is no other sound system used already. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009557.html Name: Sound-mt.51 Ancestors: Sound-mt.50 Fixes MIDI support wrt. to using real MIDI devices and CMD+Dot behavior. Keep sounds and music playing when only snapshotting but not quitting the image. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009558.html Name: Sound-mt.52 Ancestors: Sound-mt.51 Adds descriptive process names to the processes that are playing sound and MIDI. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009559.html Name: Tools-mt.685 Ancestors: Tools-mt.684 Removes 'the Sound Player' as a well-known global process to get rid of some global state considering the playing of sounds. Scores, for example, are played as one process per score. Maybe sounds could benefit from that, too. Anyway, it's primarily about the global state here. And: Sound player processes got a clear description now. So, this is no step back in usability. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009560.html Name: Sound-mt.53 Ancestors: Sound-mt.52 Disable usage of MIDI device if it does not work. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009561.html Name: Sound-mt.54 Ancestors: Sound-mt.53 Consider the sound-enabled preference also for playing MIDI scores. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009562.html Name: Sound-mt.55 Ancestors: Sound-mt.54 Adds support for dropping a MIDI file into the image and play it directly. (Instead of only offering to open a ScorePlayerMorph for that.) ============================================= From bert at freudenbergs.de Thu Apr 7 13:39:30 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Apr 7 13:39:34 2016 Subject: [squeak-dev] Host window resizing (was: [Vm-dev] Re: Too many full GCs in Cog/Spur ... while just drawing GUI ...) In-Reply-To: <1460029511591-4888829.post@n4.nabble.com> References: <1460027093694-4888823.post@n4.nabble.com> <1460029173376-4888828.post@n4.nabble.com> <1460029511591-4888829.post@n4.nabble.com> Message-ID: <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> (moving from vm-dev) On 07.04.2016, at 13:45, marcel.taeumel wrote: > > DisplayScreen depth: 32 width: 1024 height: 768 fullscreen: false. This does nothing except on Windows I believe. I was pretty certain that at some point we added these methods from Etoys: DisplayScreen class>>hostWindowSize: DisplayScreen class>>hostWindowTitle: (which are used to set the proper out-of-the box image size, and to display a document title) ... but I can?t find them in Trunk. Am I misremembering? Anyway, the primitive works: nil with: 1 with: 1024 with: 768 executeMethod: HostWindowProxy>>#primitiveWindowSize:x:y: How about we remove DisplayScreen's depth:width:height:fullscreen: and add these instead? Alternatively, we could implement it using the hostwindow and fullscreen primitives, but since there are no senders anyway (ad it never worked on all platforms) I?d say we can deprecate it. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160407/7fad1d9f/smime.bin From jelena at misticnabica.hr Thu Apr 7 13:39:45 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Thu Apr 7 13:39:50 2016 Subject: [squeak-dev] Host window resizing (was: [Vm-dev] Re: Too many full GCs in Cog/Spur ... while just drawing GUI ...) Message-ID: <36780100DE244B5F9412DBA1E54A43A0.MAI@server2.totohost.hr> From Das.Linux at gmx.de Thu Apr 7 14:55:30 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Apr 7 14:55:44 2016 Subject: [squeak-dev] Host window resizing (was: [Vm-dev] Re: Too many full GCs in Cog/Spur ... while just drawing GUI ...) In-Reply-To: <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> References: <1460027093694-4888823.post@n4.nabble.com> <1460029173376-4888828.post@n4.nabble.com> <1460029511591-4888829.post@n4.nabble.com> <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> Message-ID: On 07.04.2016, at 15:39, Bert Freudenberg wrote: > (moving from vm-dev) > > On 07.04.2016, at 13:45, marcel.taeumel wrote: >> >> DisplayScreen depth: 32 width: 1024 height: 768 fullscreen: false. > > This does nothing except on Windows I believe. > > I was pretty certain that at some point we added these methods from Etoys: > > DisplayScreen class>>hostWindowSize: > DisplayScreen class>>hostWindowTitle: > > (which are used to set the proper out-of-the box image size, and to display a document title) > > ... but I can?t find them in Trunk. Am I misremembering? > > Anyway, the primitive works: > > nil with: 1 with: 1024 with: 768 executeMethod: HostWindowProxy>>#primitiveWindowSize:x:y: > Or just HostWindowProxy new primitiveWindowSize: 1 x: 1024 y: 768. > How about we remove DisplayScreen's depth:width:height:fullscreen: and add these instead? Alternatively, we could implement it using the hostwindow and fullscreen primitives, but since there are no senders anyway (ad it never worked on all platforms) I?d say we can deprecate it. > > - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 1656 bytes Desc: Message signed with OpenPGP using GPGMail Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160407/e6b17643/signature.pgp From leves at caesar.elte.hu Thu Apr 7 15:57:33 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu Apr 7 15:57:38 2016 Subject: [squeak-dev] Host window resizing (was: [Vm-dev] Re: Too many full GCs in Cog/Spur ... while just drawing GUI ...) In-Reply-To: <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> References: <1460027093694-4888823.post@n4.nabble.com> <1460029173376-4888828.post@n4.nabble.com> <1460029511591-4888829.post@n4.nabble.com> <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> Message-ID: On Thu, 7 Apr 2016, Bert Freudenberg wrote: > (moving from vm-dev) > > On 07.04.2016, at 13:45, marcel.taeumel wrote: >> >> DisplayScreen depth: 32 width: 1024 height: 768 fullscreen: false. > > This does nothing except on Windows I believe. It works on Unix VMs using the vm-display-null driver. We use it to resize the window without restarting the image. > > I was pretty certain that at some point we added these methods from Etoys: > > DisplayScreen class>>hostWindowSize: > DisplayScreen class>>hostWindowTitle: > > (which are used to set the proper out-of-the box image size, and to display a document title) > > ... but I can?t find them in Trunk. Am I misremembering? > > Anyway, the primitive works: > > nil with: 1 with: 1024 with: 768 executeMethod: HostWindowProxy>>#primitiveWindowSize:x:y: The primitive fails on unix Spur VMs. > > How about we remove DisplayScreen's depth:width:height:fullscreen: and add these instead? Alternatively, we could implement it using the hostwindow and fullscreen primitives, but since there are no senders anyway (ad it never worked on all platforms) I?d say we can deprecate it. Sure, as soon as there's a unified way to do it on all platforms. Levente > > - Bert - > > > > From tim at rowledge.org Thu Apr 7 17:26:35 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Apr 7 17:26:40 2016 Subject: [squeak-dev] Host window resizing (was: [Vm-dev] Re: Too many full GCs in Cog/Spur ... while just drawing GUI ...) In-Reply-To: References: <1460027093694-4888823.post@n4.nabble.com> <1460029173376-4888828.post@n4.nabble.com> <1460029511591-4888829.post@n4.nabble.com> <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> Message-ID: <3A81712C-0B2C-43CE-ADCD-023941B09BF9@rowledge.org> There?s a long and complicated history to host-window sizing in Squeak. There is (or at least was, it?s been a while since I had to look) a fair bit of ugly code that tries to cope with several competing approaches. a) initial opening of the host window on startup, where we try to open a window of the same size as the one the image was saved from. In. With? Whatever. We have to deal with possibly being on a different size screen or on a device that limits the size somehow. I guess opening on a fixed-size framebuffer is the most restrictive. b) after startup the user uses host UI widgets to change the window size and we have to detect that (which I think is done horribly in the image by actually polling the ?screen? size every now and then, rather than by having any sort of signal from the vm to the image) and rebuild the Display object c) programmatic Display size changes; this one used to be a mess as various VMs tried to resize the host window in response to a new object being set as the vm-known display bitmap, whilst others didn?t and so on. d) cleverer programmatic size changes driven by the ancient DisplayScreen>fullScreenMode: that expect to take over the whole device screen area whilst you remember the prior size and handle multiple (ab)uses. e) even cleverer programmatic stuff from the Ariethfa Ffenestri project to manipulate host window sizes, positions, displaying and so on. Which was all done because people spent years claiming Squeak absolutely had to do host windows or die. Funny that nobody has done anything with it since ?04. f) probably more that I?ve not been flayed by. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Maybe Computer Science should be in the College of Theology From tim at rowledge.org Thu Apr 7 17:29:59 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Apr 7 17:30:03 2016 Subject: [squeak-dev] Host window resizing (was: [Vm-dev] Re: Too many full GCs in Cog/Spur ... while just drawing GUI ...) In-Reply-To: References: <1460027093694-4888823.post@n4.nabble.com> <1460029173376-4888828.post@n4.nabble.com> <1460029511591-4888829.post@n4.nabble.com> <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> Message-ID: <63C00A0F-13C9-439B-BF19-A40B5012221B@rowledge.org> > On 07-04-2016, at 8:57 AM, Levente Uzonyi wrote: > > On Thu, 7 Apr 2016, Bert Freudenberg wrote: [snip] >> >> How about we remove DisplayScreen's depth:width:height:fullscreen: and add these instead? Alternatively, we could implement it using the hostwindow and fullscreen primitives, but since there are no senders anyway (ad it never worked on all platforms) I?d say we can deprecate it. > > Sure, as soon as there's a unified way to do it on all platforms. There is; Ffenestri. It appears that all current platforms have the HostWindowPlugin filled out, though I can?t vouch for their correctness. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Semolina - a system of signalling with pudding. From commits at source.squeak.org Thu Apr 7 18:26:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 7 18:26:46 2016 Subject: [squeak-dev] The Trunk: Tests-ul.339.mcz Message-ID: Levente Uzonyi uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-ul.339.mcz ==================== Summary ==================== Name: Tests-ul.339 Author: ul Time: 7 April 2016, 8:26:14.155989 pm UUID: 7a4c1480-05bb-4037-9b24-45e5401e2af7 Ancestors: Tests-ul.338 - don't leave the empty Tests-MonticelloMocks category in the system after running MCFileInTest =============== Diff against Tests-ul.338 =============== Item was changed: ----- Method: MCFileInTest>>tearDown (in category 'running') ----- tearDown super tearDown. (diff isNil or: [diff isEmpty not]) + ifTrue: [expected updatePackage: self mockPackage]. + SystemOrganizer default removeEmptyCategories! - ifTrue: [expected updatePackage: self mockPackage]! From commits at source.squeak.org Thu Apr 7 18:28:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 7 18:28:08 2016 Subject: [squeak-dev] The Trunk: Tools-ul.686.mcz Message-ID: Levente Uzonyi uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-ul.686.mcz ==================== Summary ==================== Name: Tools-ul.686 Author: ul Time: 7 April 2016, 7:54:49.263045 pm UUID: 6da353d4-ff75-445e-a5f9-037112763617 Ancestors: Tools-mt.685 TimeProfileBrowser changes: - make #messageHelpAt: work - calculate and store methodReferences - use the precreated methodReferences instead of re-parsing the lines all the time - simplify a few things now that we have methodReferences available - added a hack to show the tallied block's source when the tally contains a block outside of a method. This is not correct in all cases, but the block itself doesn't seem it be available - use lazy initialization for methodReference so that existing instances will keep working after update =============== Diff against Tools-mt.685 =============== Item was changed: MessageSet subclass: #TimeProfileBrowser + instanceVariableNames: 'block tally methodReferences' - instanceVariableNames: 'selectedClass selectedSelector block tally' classVariableNames: 'TextMenu' poolDictionaries: '' category: 'Tools-Debugger'! !TimeProfileBrowser commentStamp: '' prior: 0! A TimeProfileBrowser is a browser visualizing the runtime profile of an executed Smalltalk block. It is useful for finding performance bottlenecks in code. When optimizing code it can be hard to know what methods actually constitute the bulk of the execution time. Is it a few methods that take very long time to execute or is it perhaps a single method that gets executed a thousand times? The block is first spied on using a MessageTally instance (which has even more funtionality than used by the TimeProfileBrowser) which samples the block during it's execution and collects the amount of time approximately spent in the methods executed. Then the methods are shown in the browser with their relative execution time in percent. Example: TimeProfileBrowser onBlock: [20 timesRepeat: [Transcript show: 100 factorial printString]] ! Item was added: + ----- Method: TimeProfileBrowser>>hasMessageSelected (in category 'message list') ----- + hasMessageSelected + + ^super hasMessageSelected and: [ + (self methodReferences at: self messageListIndex) notNil ]! Item was added: + ----- Method: TimeProfileBrowser>>messageHelpAt: (in category 'message list') ----- + messageHelpAt: anIndex + "Show the first n lines of the sources code of the selected message." + + | reference source formatted lineCount | + Preferences balloonHelpInMessageLists ifFalse: [^ nil]. + self messageList size < anIndex ifTrue: [^ nil]. + + reference := (self methodReferences at: anIndex) ifNil: [ ^nil ]. + reference isValid ifFalse: [ ^nil ]. + + source := reference compiledMethod getSource. + formatted := (Smalltalk classNamed: #SHTextStylerST80) + ifNil: [ source asText ] + ifNotNil: [ :SHTextStylerST80 | + SHTextStylerST80 new + classOrMetaClass: reference actualClass; + styledTextFor: source asText ]. + + lineCount := 0. + source doWithIndex: [:char :index | + char = Character cr ifTrue: [lineCount := lineCount + 1]. + lineCount > 10 ifTrue: [ + formatted := formatted copyFrom: 1 to: index-1. + formatted append: ' [...]'. + ^ formatted]]. + + ^ formatted! Item was added: + ----- Method: TimeProfileBrowser>>methodReferenceFrom: (in category 'private') ----- + methodReferenceFrom: aString + "Try to create a MethodReference from a line returned by MessageTally. Return nil if the string doesn't have the given format." + + | stream className selector | + stream := aString readStream. + "Skip percentages and timing data." + stream + skipTo: $}; + skipSeparators. + (stream peekFor: $[) ifTrue: [ "Skip block markers." + stream upToAnyOf: CharacterSet separators ]. + className := stream upToAnyOf: '(>'. + stream atEnd ifTrue: [ ^nil ]. + stream last == $( ifTrue: [ "Method is defined in a super class" + className := stream upTo: $). + (stream peekFor: $>) ifFalse: [ ^nil ] ]. + (stream peekFor: $>) ifFalse: [ ^nil ]. + selector := stream upToEnd. + ^MethodReference + class: ((Smalltalk classNamed: className) ifNil: [ ^nil ]) + selector: ((Symbol lookup: selector) ifNil: [ ^nil ])! Item was added: + ----- Method: TimeProfileBrowser>>methodReferences (in category 'accessing') ----- + methodReferences + + ^methodReferences ifNil: [ + methodReferences := messageList collect: [ :each | self methodReferenceFrom: each ] ] + ! Item was removed: - ----- Method: TimeProfileBrowser>>selectedClass (in category 'accessing') ----- - selectedClass - "Answer the receiver's 'selectedClass'." - - ^selectedClass! Item was removed: - ----- Method: TimeProfileBrowser>>selectedClass: (in category 'accessing') ----- - selectedClass: anObject - "Set the receiver's instance variable 'selectedClass' to be anObject." - - selectedClass := anObject! Item was changed: ----- Method: TimeProfileBrowser>>selectedMessage (in category 'message list') ----- selectedMessage "Answer the source method for the currently selected message." + self setClassAndSelectorIn: [ :class :selector | + | source | + source := (class == UndefinedObject and: [ selector == #DoIt ]) + ifTrue: [ 'DoIt', String cr, String cr, block arguments first decompile decompileString ] + ifFalse: [ class sourceMethodAt: selector ifAbsent: [ ^'Missing' ] ]. + SystemBrowser browseWithPrettyPrint ifTrue: [ + source := class prettyPrinterClass + format: source + in: class + notifying: nil + decorated: false ]. + ^source asText makeSelectorBoldIn: class ]. - - self setClassAndSelectorIn: - [:class :selector | | source | - source := class sourceMethodAt: selector ifAbsent: [^'Missing']. - SystemBrowser browseWithPrettyPrint - ifTrue: - [source := class prettyPrinterClass - format: source - in: class - notifying: nil - decorated: false]. - self selectedClass: class. - self selectedSelector: selector. - ^source asText makeSelectorBoldIn: class]. ^''! Item was removed: - ----- Method: TimeProfileBrowser>>selectedSelector (in category 'accessing') ----- - selectedSelector - "Answer the receiver's 'selectedSelector'." - - ^selectedSelector! Item was removed: - ----- Method: TimeProfileBrowser>>selectedSelector: (in category 'accessing') ----- - selectedSelector: anObject - "Set the receiver's instance variable 'selectedSelector' to be anObject." - - selectedSelector := anObject! Item was changed: ----- Method: TimeProfileBrowser>>setClassAndSelectorIn: (in category 'private') ----- setClassAndSelectorIn: csBlock + "Evaluate csBlock with the selected methodReference, or return nil if there's nothing selected." - "Decode strings of the form ( [class]) " + ^((self methodReferences at: self messageListIndex) ifNil: [ ^nil ]) + setClassAndSelectorIn: csBlock! - self flag: #mref. "fix for faster references to methods" - - ^[ | strm string class parens sel | - string := self selection asString. - string first == $* ifTrue: [^contents := nil]. "Ignore lines starting with *" - parens := string includes: $(. "Does it have open-paren?" - strm := ReadStream on: string. - parens - ifTrue: [strm skipTo: $(. "easy case" - class := strm upTo: $). - strm next: 2. - sel := strm upToEnd] - ifFalse: [strm position: (string findString: ' class>>'). - strm position > 0 - ifFalse: [strm position: (string findLast: [ :ch | ch == $ ])] - ifTrue: - [ | subString | "find the next to last space character" - subString := strm contents copyFrom: 1 to: (string findLast: [ :ch | ch == $ ]) - 1. - strm position: (subString findLast: [ :ch | ch == $ ])]. - "ifFalse: [strm position: (string findLast: [ :ch | ch == $ ])." - class := strm upTo: $>. - strm next. - sel := strm upToEnd]. - MessageSet parse: (class, ' ', sel) toClassAndSelector: csBlock] - on: Error do: [:ex | contents := nil]! From bert at freudenbergs.de Thu Apr 7 18:41:42 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Apr 7 18:42:11 2016 Subject: [squeak-dev] Host window resizing (was: [Vm-dev] Re: Too many full GCs in Cog/Spur ... while just drawing GUI ...) In-Reply-To: References: <1460027093694-4888823.post@n4.nabble.com> <1460029173376-4888828.post@n4.nabble.com> <1460029511591-4888829.post@n4.nabble.com> <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> Message-ID: <6A4A771B-A21E-4F44-9FC9-02096D1CE55C@freudenbergs.de> > On 07.04.2016, at 17:57, Levente Uzonyi wrote: > >> On Thu, 7 Apr 2016, Bert Freudenberg wrote: >> >> nil with: 1 with: 1024 with: 768 executeMethod: HostWindowProxy>>#primitiveWindowSize:x:y: > > The primitive fails on unix Spur VMs. Oh. Guess that is compiled without the HostWindowPlugin? It should work in X11. - Bert - From commits at source.squeak.org Thu Apr 7 20:38:54 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 7 20:38:58 2016 Subject: [squeak-dev] The Trunk: Morphic-ul.1102.mcz Message-ID: Levente Uzonyi uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-ul.1102.mcz ==================== Summary ==================== Name: Morphic-ul.1102 Author: ul Time: 7 April 2016, 8:44:58.454544 pm UUID: 13b607fc-9dee-4ffa-96c6-8f7a3d0b6a79 Ancestors: Morphic-mt.1101 - always initialize SimpleBorder's instance variables, so that we can simplify accessors and make them quicker - added #smallDeleteIcon to the 'remove (x)' menu item in MenuIcons - String >> #, with a non-string argument has unexpected results. Fix that in TextEditor >> #querySymbol:. =============== Diff against Morphic-mt.1101 =============== Item was changed: ----- Method: MenuIcons class>>itemsIcons (in category 'menu decoration') ----- itemsIcons "answer a collection of associations wordings -> icon to decorate the menus all over the image" | icons | icons := OrderedCollection new. "icons add: #('Test Runner' ) -> self smallTrafficIcon." " world menu" "icons add: #('previous project' 'go to previous project') -> self smallProjectBackIcon." icons add: #('go to next project') -> self smallProjectNextIcon. icons add: #('select' ) -> self smallSelectIcon. icons add: #('jump to project...' ) -> self smallProjectJumpIcon. icons add: #('open...' ) -> self smallOpenIcon. icons add: #('appearance...' ) -> self smallConfigurationIcon. icons add: #('help...' ) -> self smallHelpIcon. "icons add: #('windows...' ) -> self smallWindowIcon." icons add: #('changes...' ) -> self smallDocumentClockIcon. icons add: #('print PS to file...' ) -> self smallPrintIcon. icons add: #('debug...' ) -> self smallDebugIcon. icons add: #('export...' ) -> self smallExportIcon. icons add: #('save' ) -> self smallSaveIcon. "icons add: #('save project on file...' ) -> self smallProjectSaveIcon." "icons add: #('save as...') -> self smallSaveAsIcon. icons add: #('save as new version') -> self smallSaveNewIcon. icons add: #('save and quit' ) -> self smallQuitIcon." icons add: #('quit') -> self smallQuitNoSaveIcon. "icons add: #('load project from file...' ) -> self smallProjectLoadIcon." "" icons add: #('do it (d)' ) -> self smallDoItIcon. icons add: #('inspect it (i)' 'inspect world' 'explore world' 'inspect model' 'inspect morph' 'explore morph' 'inspect owner chain' 'explore' 'inspect' 'explore (I)' 'inspect (i)' 'basic inspect' ) -> self smallInspectItIcon. icons add: #('print it (p)' ) -> self smallPrintIcon. icons add: #('debug it (D)' ) -> self smallDebugIcon. icons add: #('tally it' ) -> self smallTimerIcon. "" icons add: #('copy (c)' 'copy to paste buffer' 'copy text' ) -> self smallCopyIcon. icons add: #('paste (v)') -> self smallPasteIcon. icons add: #('cut (x)' ) -> self smallCutIcon. "" icons add: #('accept (s)' 'yes' 'Yes' ) -> self smallOkIcon. icons add: #('cancel (l)' 'no' 'No' ) -> self smallCancelIcon. "" icons add: #('redo (Z)' ) -> self smallRedoIcon. icons add: #('undo (z)' ) -> self smallUndoIcon. "" icons add: #( 'find class... (f)' 'find method...' ) -> self smallSearchIcon. icons add: #('find...(f)') -> self smallFindIcon. "" + icons add: #('remove' 'remove (x)' 'remove class (x)' 'delete method from changeset (d)' 'remove method from system (x)' 'delete class from change set (d)' 'remove class from system (x)' 'destroy change set (X)' ) -> self smallDeleteIcon. - icons add: #('remove' 'remove class (x)' 'delete method from changeset (d)' 'remove method from system (x)' 'delete class from change set (d)' 'remove class from system (x)' 'destroy change set (X)' ) -> self smallDeleteIcon. icons add: #('add item...' 'new category...' 'new change set... (n)' ) -> self smallNewIcon. "" icons add: #('objects (o)' ) -> self smallObjectCatalogIcon. icons add: #('authoring tools...') -> self smallAuthoringToolsIcon. icons add: #('projects...') -> self smallProjectIcon. "" icons add: #('make screenshot') -> self smallScreenshotIcon. "" icons add: #('leftFlush' ) -> self smallLeftFlushIcon. icons add: #('rightFlush' ) -> self smallRightFlushIcon. icons add: #('centered' 'set alignment... (u)' ) -> self smallCenteredIcon. icons add: #('justified' ) -> self smallJustifiedIcon. "" icons add: #('set font... (k)' 'list font...' 'set subtitles font' 'change font' 'system fonts...' 'change font...' 'default text font...' 'flaps font...' 'eToys font...' 'eToys title font...' 'halo label font...' 'menu font...' 'window-title font...' 'balloon-help font...' 'code font...' 'button font...') -> self smallFontsIcon. icons add: #('full screen on') -> self smallFullscreenOnIcon. icons add: #('full screen off' ) -> self smallFullscreenOffIcon. "" ^ icons! Item was changed: ----- Method: SimpleBorder>>baseColor (in category 'accessing') ----- baseColor + + ^baseColor! - ^baseColor ifNil:[Color transparent]! Item was changed: ----- Method: SimpleBorder>>baseColor: (in category 'accessing') ----- baseColor: aColor + + baseColor = aColor ifTrue:[^self]. + baseColor := aColor. + self color: aColor "#color: will do #releaseCachedState"! - | cc | - cc := aColor isTransparent ifTrue:[nil] ifFalse:[aColor]. - baseColor = cc ifTrue:[^self]. - baseColor := cc. - self releaseCachedState. - self color: cc. - ! Item was changed: ----- Method: SimpleBorder>>color (in category 'accessing') ----- color + + ^color! - ^color ifNil:[Color transparent]! Item was added: + ----- Method: SimpleBorder>>initialize (in category 'initialize-release') ----- + initialize + + width := 0. + baseColor := color := Color transparent! Item was changed: ----- Method: SimpleBorder>>width (in category 'accessing') ----- width + + ^width! - ^width ifNil:[0]! Item was changed: ----- Method: TextEditor>>querySymbol: (in category 'typing/selecting keys') ----- querySymbol: aKeyboardEvent "Invoked by Ctrl-q to query the Symbol table and display alternate symbols." | hintText lastOffering offering | self isTypingIn ifFalse: [ self selectPrecedingIdentifier. hintText := self selection string] ifTrue: [ self history current type = #query ifFalse: [ self closeTypeIn. self selectPrecedingIdentifier. hintText := self selection string] ifTrue: [ self history hasPrevious ifFalse: [morph flash. self closeTypeIn. ^ true]. hintText := self history previous contentsAfter string. hintText := hintText copyFrom: (hintText + lastIndexOfAnyOf: Character separators, '#' - lastIndexOfAnyOf: Character separators, #($#) startingAt: hintText size ifAbsent: [0])+1 to: hintText size. self selectPrecedingIdentifier. lastOffering := self selection string]]. offering := '-'. [offering allSatisfy: [:ea | ea tokenish]] whileFalse: [ offering := (Symbol thatStarts: hintText skipping: lastOffering) ifNil: [hintText]. lastOffering := offering]. self openTypeInFor: #query. self typeAhead nextPutAll: offering. ^ false! From commits at source.squeak.org Thu Apr 7 20:39:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 7 20:39:14 2016 Subject: [squeak-dev] The Trunk: Morphic-ul.1103.mcz Message-ID: Levente Uzonyi uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-ul.1103.mcz ==================== Summary ==================== Name: Morphic-ul.1103 Author: ul Time: 7 April 2016, 9:23:45.114299 pm UUID: ef807f4c-d5f0-4cb0-805b-1cbea949be81 Ancestors: Morphic-ul.1102 - migrate SimpleBorder instances both in preamble and postscript =============== Diff against Morphic-ul.1102 =============== Item was changed: + (PackageInfo named: 'Morphic') preamble: 'SimpleBorder allSubInstancesDo: [ :each | + (each instVarNamed: #width) ifNil: [ each instVarNamed: #width put: 0 ]. + (each instVarNamed: #color) ifNil: [ each instVarNamed: #color put: Color transparent ]. + (each instVarNamed: #baseColor) ifNil: [ each instVarNamed: #baseColor put: Color transparent ] ].'! - (PackageInfo named: 'Morphic') preamble: 'TheWorldMainDockingBar setTimeStamp'! Item was changed: + (PackageInfo named: 'Morphic') postscript: 'SimpleBorder allSubInstancesDo: [ :each | + (each instVarNamed: #width) ifNil: [ each instVarNamed: #width put: 0 ]. + (each instVarNamed: #color) ifNil: [ each instVarNamed: #color put: Color transparent ]. + (each instVarNamed: #baseColor) ifNil: [ each instVarNamed: #baseColor put: Color transparent ] ].'! - (PackageInfo named: 'Morphic') postscript: 'Editor initialize. - - SystemWindow allSubInstancesDo: [:ea | - ea paneMorphs do: #comeToFront. - ea labelArea comeToFront]. - - HandMorph allInstancesDo: [:hand | - hand removeProperty: #balloonHelpMorph].'! From commits at source.squeak.org Thu Apr 7 21:04:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 7 21:04:27 2016 Subject: [squeak-dev] The Trunk: Tools-ul.687.mcz Message-ID: Levente Uzonyi uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-ul.687.mcz ==================== Summary ==================== Name: Tools-ul.687 Author: ul Time: 7 April 2016, 11:04:02.506276 pm UUID: 2d6efa2b-2716-439f-8c7e-e351e2e37883 Ancestors: Tools-ul.686 - removed the hard dependency on HelpBrowser - all browser panels respond to Cmd+x with the same behavior: remove =============== Diff against Tools-ul.686 =============== Item was changed: ----- Method: Browser>>browseAllCommentsForClass (in category 'message functions') ----- browseAllCommentsForClass "Opens a HelpBrowser on the class" | myClass | + myClass := self selectedClassOrMetaClass ifNil: [ ^self ]. + myClass isTrait ifTrue: [ ^self ]. + (Smalltalk classNamed: #HelpBrowser) + ifNil: [ ^self inform: 'HelpBrowser is not available.' ] + ifNotNil: [ :HelpBrowser | + HelpBrowser openOn: myClass theNonMetaClass ] - ((myClass := self selectedClassOrMetaClass) isNil or: [myClass isTrait]) - ifFalse: [HelpBrowser openOn: myClass theNonMetaClass] ! Item was changed: ----- Method: Browser>>buildMessageCategoryListWith: (in category 'toolbuilder') ----- buildMessageCategoryListWith: builder | listSpec | listSpec := builder pluggableListSpec new. listSpec model: self; list: #messageCategoryList; getIndex: #messageCategoryListIndex; setIndex: #messageCategoryListIndex:; menu: #messageCategoryMenu:; + keyPress: #messageCategoryListKey:from:. - keyPress: #arrowKey:from:. SystemBrowser browseWithDragNDrop ifTrue:[ listSpec dropAccept: #wantsMessageCategoriesDrop:; dropItem: #dropOnMessageCategories:at:]. ^listSpec ! Item was changed: ----- Method: Browser>>mainMessageCategoryMenu: (in category 'message category functions') ----- mainMessageCategoryMenu: aMenu ^ aMenu addList: #( ('browse' buildMessageCategoryBrowser) ('print out' printOutMessageCategories) ('file out' fileOutMessageCategories) - ('reorganize' editMessageCategories) ('alphabetize' alphabetizeMessageCategories) ('remove empty categories' removeEmptyCategories) ('categorize all uncategorized' categorizeAllUncategorizedMethods) ('new category...' addCategory) - ('rename...' renameCategory) + ('remove (x)' removeMessageCategory)); - ('remove' removeMessageCategory)); yourself ! Item was changed: ----- Method: Browser>>mainSystemCategoryMenu: (in category 'system category functions') ----- mainSystemCategoryMenu: aMenu ^ aMenu addList: #( ('find class... (f)' findClass) ('back... (b)' recent) - ('browse all' browseAllClasses) ('browse' buildSystemCategoryBrowser) - ('printOut' printOutSystemCategory) ('fileOut' fileOutSystemCategory) - ('reorganize' editSystemCategories) ('alphabetize' alphabetizeSystemCategories) - ('update' updateSystemCategories) ('add item...' addSystemCategory) ('rename...' renameSystemCategory) + ('remove (x)' removeSystemCategory)); - ('remove' removeSystemCategory)); yourself ! Item was added: + ----- Method: Browser>>messageCategoryListKey:from: (in category 'message category list') ----- + messageCategoryListKey: aCharacter from: view + + aCharacter == $x ifTrue: [ ^self removeMessageCategory ]. + ^self arrowKey: aCharacter from: view + ! From commits at source.squeak.org Thu Apr 7 21:15:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 7 21:15:15 2016 Subject: [squeak-dev] The Trunk: Morphic-cmm.1104.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1104.mcz ==================== Summary ==================== Name: Morphic-cmm.1104 Author: cmm Time: 7 April 2016, 4:14:29.108974 pm UUID: 3fa0654e-9d15-4a86-94c5-9982def7e94f Ancestors: Morphic-ul.1103 - Put the new 'Wrapped Navigation' feature onto a Preference, so that the ability to easily navigate trees with just one hand on the arrow keys is restored. - It also restores navigation keys [Home], [End], [Pg Up] and [Pg Down] to ONLY navigate, and not cause tree expansions. =============== Diff against Morphic-ul.1103 =============== Item was changed: ScrollPane subclass: #SimpleHierarchicalListMorph instanceVariableNames: 'selectedMorph hoveredMorph getListSelector keystrokeActionSelector autoDeselect columns sortingSelector getSelectionSelector setSelectionSelector potentialDropMorph lineColor' + classVariableNames: 'WrappedNavigation' - classVariableNames: '' poolDictionaries: '' category: 'Morphic-Explorer'! SimpleHierarchicalListMorph class instanceVariableNames: 'expandedForm notExpandedForm'! !SimpleHierarchicalListMorph commentStamp: 'ls 3/1/2004 12:15' prior: 0! Display a hierarchical list of items. Each item should be wrapped with a ListItemWrapper. For a simple example, look at submorphsExample. For beefier examples, look at ObjectExplorer or FileList2.! SimpleHierarchicalListMorph class instanceVariableNames: 'expandedForm notExpandedForm'! Item was added: + ----- Method: SimpleHierarchicalListMorph class>>wrappedNavigation (in category 'preferences') ----- + wrappedNavigation + + ^ WrappedNavigation ifNil: [ false ]! Item was added: + ----- Method: SimpleHierarchicalListMorph class>>wrappedNavigation: (in category 'preferences') ----- + wrappedNavigation: aBoolean + WrappedNavigation := aBoolean! Item was changed: ----- Method: SimpleHierarchicalListMorph>>arrowKey: (in category 'keyboard navigation') ----- arrowKey: asciiValue "Handle a keyboard navigation character. Answer true if handled, false if not." + | keyEvent max oldSelection nextSelection howManyItemsShowing keyHandled | + keyHandled := false. - | keyEvent max oldSelection nextSelection howManyItemsShowing | keyEvent := asciiValue. max := self maximumSelection. nextSelection := oldSelection := self getSelectionIndex. keyEvent = 31 ifTrue:["down" + keyHandled := true. nextSelection :=oldSelection + 1. + nextSelection > max ifTrue: [nextSelection := (self class wrappedNavigation ifTrue: [1] ifFalse: [max])]]. - nextSelection > max ifTrue: [nextSelection := 1]]. keyEvent = 30 ifTrue:["up" + keyHandled := true. nextSelection := oldSelection - 1. + nextSelection < 1 ifTrue: [nextSelection := self class wrappedNavigation ifTrue: [max] ifFalse: [1]]]. - nextSelection < 1 ifTrue: [nextSelection := max]]. keyEvent = 1 ifTrue: ["home" + keyHandled := true. nextSelection := 1]. keyEvent = 4 ifTrue: ["end" + keyHandled := true. nextSelection := max]. howManyItemsShowing := self numSelectionsInView. keyEvent = 11 ifTrue: ["page up" + keyHandled := true. nextSelection := 1 max: oldSelection - howManyItemsShowing]. keyEvent = 12 ifTrue: ["page down" + keyHandled := true. nextSelection := oldSelection + howManyItemsShowing min: max]. + (nextSelection ~= oldSelection or: [ keyHandled and: [ self class wrappedNavigation not ]]) ifTrue: [ - nextSelection = oldSelection ifFalse: [ self setSelectionIndex: nextSelection. ^ true]. keyEvent = 29 ifTrue:["right" selectedMorph ifNotNil:[ (selectedMorph canExpand and:[selectedMorph isExpanded not]) ifTrue:[self toggleExpandedState: selectedMorph] ifFalse:[self setSelectionIndex: self getSelectionIndex+1]. ]. ^true]. keyEvent = 28 ifTrue:["left" selectedMorph ifNotNil:[ (selectedMorph isExpanded) ifTrue:[self toggleExpandedState: selectedMorph] ifFalse:[self setSelectionIndex: (self getSelectionIndex-1 max: 1)]. ]. ^true]. ^false! From leves at caesar.elte.hu Thu Apr 7 21:19:26 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu Apr 7 21:19:32 2016 Subject: Slang question (was: Re: [squeak-dev] The Trunk: Collections-ul.685.mcz) In-Reply-To: <20160405231429.GA96161@shell.msen.com> References: <20160403220013.GA65953@shell.msen.com> <20160405231429.GA96161@shell.msen.com> Message-ID: Hi Dave, On Tue, 5 Apr 2016, David T. Lewis wrote: > I just got around to checking this for code generation for the interpreter VM > (VMMaker, not VMMaker.oscog). The #ifNil: is not translated at all, so I replaced > it with this: That's pretty interesting. The Cog branch behaves differently matchTable ifNil: [ will become if (!matchTable) { while matchTable = nil ifTrue: [ and matchTable == nil ifTrue: [ will both compile to if (matchTable == null) { just like in the main branch. All of these are correct, because null is just a macro to 0, but it's a bit surprising that "ifNil:" and "== nil ifTrue:" are not the same in Slang, while they are in Squeak. My main concern is how matchTable is initialized. The generated code is matchTable = arrayValueOf(stackValue(0)); matchTable -= 1; if (failed()) { return null; } which makes me think that matchTable will not be the C null pointer at all when the argument nil is passed to the primitive, because matchTable -= 1; would not yield an unsigned char* with 0 value unless arrayValueOf returns a pointer with the value 1 (assuming that sizeof(unsigned char) is 1). I haven't found where arrayValueOf was defined, so I can't tell if it has a chance to work at all. Levente P.S.: Since we're talking about C here, I CC'd the vm-dev list. > > matchTable = nil ifTrue: > > This produces the expected result, and can be compiled. > > There are other issues in the resulting VM, but they do not seem to be > related to Collections-ul.685 (I reverted to Collections-ul.684 with the > same results). I don't know the cause of those issues, but I will follow > up in a separate thread as needed. > > With respect to Collections-ul.685, replacing the ifNil: test as above > seems like the right thing to do. > > Dave > > > On Sun, Apr 03, 2016 at 06:00:13PM -0400, David T. Lewis wrote: >> Many people will not be familiar with this optimization, so a few words of >> explanation are in order for background: >> >> There is a mechanism for translating certain methods in the image directly >> into primitives for performance. This is normally not noticed, but you will >> find occasional refernces such at this one in the image: >> >> findSubstring: key in: body startingAt: start matchTable: matchTable >> >> >> This is a method that first tries to call a version of itself that has >> been translated to C. If the primitive fails, the normal Smalltalk method >> is executed. The hidden tricky bit is that MiscPrimitivePlugin, which >> lives in the VMMaker package, arranges for the #findSubstring:in:startingAt:matchTable: >> method in the image to be translated to C and installed as a primitive. >> This means that the generated VM is actually governed partly my methods >> in the main image (not in the VMMaker package). >> >> It also means that if one of these methods is changed in the image, it >> might accidentally result in unexpected (and possibly wrong) code being >> generated for the plugin in the VM. That is the reason that Levente is >> asking about the slang code generation in this case. >> >> Dave >> >> >> On Sun, Apr 03, 2016 at 07:45:13PM +0200, Levente Uzonyi wrote: >>> On Sun, 3 Apr 2016, commits@source.squeak.org wrote: >>> >>>> Levente Uzonyi uploaded a new version of Collections to project The Trunk: >>>> http://source.squeak.org/trunk/Collections-ul.685.mcz >>>> >>>> ==================== Summary ==================== >>>> >>>> Name: Collections-ul.685 >>>> Author: ul >>>> Time: 3 April 2016, 3:21:51.035808 am >>>> UUID: db8fd391-2306-4ccc-87d5-b5dee96a78ab >>>> Ancestors: Collections-eem.684 >>>> >>>> Use Spur's new character comparison abilities in some String methods. >>>> >>>> =============== Diff against Collections-eem.684 =============== >>>> >>>> Item was changed: >>>> ----- Method: ByteString>>findSubstring:in:startingAt:matchTable: (in >>>> category 'comparing') ----- >>>> findSubstring: key in: body startingAt: start matchTable: matchTable >>>> "Answer the index in the string body at which the substring key >>>> first occurs, at or beyond start. The match is determined using >>>> matchTable, which can be used to effect, eg, case-insensitive >>>> matches. If no match is found, zero will be returned. >>>> >>>> The algorithm below is not optimum -- it is intended to be >>>> translated to C which will go so fast that it wont matter." >>>> | index | >>>> >>>> >>>> >>>> >>>> >>>> key size = 0 ifTrue: [^ 0]. >>>> + matchTable ifNil: [ >>>> + start to: body size - key size + 1 do: [ :startIndex | >>>> + index := 0. >>>> + [ (body at: startIndex + index) == (key at: (index >>>> := index + 1)) ] whileTrue: [ >>>> + index = key size ifTrue: [ ^startIndex ] ] ]. >>>> + ^0 ]. >>> >>> I wonder if the #ifNil: check is correct in Slang. The generated code is >>> >>> ... >>> unsigned char *matchTable; >>> ... >>> matchTable = arrayValueOf(stackValue(0)); >>> matchTable -= 1; >>> ... >>> if (!(matchTable)) { >>> ... >>> >>> So, will the value of matchTable actually be NULL or not, when nil is >>> passed to the primitive. That -= 1 makes me think that it won't be NULL. >>> >>> Another thing is that the loop condition, while it's order of evaluation >>> is well defined in Smalltalk, will compile to C code containing undefined >>> behavior: >>> >>> while ((body[startIndex + index]) == (key[index += >>> 1])) { >>> >>> Since in C the evaluation of the left and right side of == can happen in >>> any order, the generated machine code may or may not be correct. >>> Is this is a difference between Smalltalk and Slang, or is it just a slip >>> in the code generator? >>> >>> Levente >>> >>>> (start max: 1) to: body size - key size + 1 do: >>>> [:startIndex | >>>> index := 1. >>>> [(matchTable at: (body at: startIndex+index-1) >>>> asciiValue + 1) >>>> = (matchTable at: (key at: index) asciiValue >>>> + 1)] >>>> whileTrue: >>>> [index = key size ifTrue: [^ startIndex]. >>>> index := index+1]]. >>>> ^ 0 >>>> " >>>> ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 1 matchTable: >>>> CaseSensitiveOrder 1 >>>> ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 2 matchTable: >>>> CaseSensitiveOrder 7 >>>> ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 8 matchTable: >>>> CaseSensitiveOrder 0 >>>> ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: >>>> CaseSensitiveOrder 0 >>>> ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: >>>> CaseInsensitiveOrder 7 >>>> "! > > From commits at source.squeak.org Thu Apr 7 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 7 21:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160407215502.13776.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009563.html Name: Tests-ul.339 Ancestors: Tests-ul.338 - don't leave the empty Tests-MonticelloMocks category in the system after running MCFileInTest ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009564.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009565.html Name: Tools-ul.686 Ancestors: Tools-mt.685 TimeProfileBrowser changes: - make #messageHelpAt: work - calculate and store methodReferences - use the precreated methodReferences instead of re-parsing the lines all the time - simplify a few things now that we have methodReferences available - added a hack to show the tallied block's source when the tally contains a block outside of a method. This is not correct in all cases, but the block itself doesn't seem it be available - use lazy initialization for methodReference so that existing instances will keep working after update ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009566.html Name: Morphic-ul.1102 Ancestors: Morphic-mt.1101 - always initialize SimpleBorder's instance variables, so that we can simplify accessors and make them quicker - added #smallDeleteIcon to the 'remove (x)' menu item in MenuIcons - String >> #, with a non-string argument has unexpected results. Fix that in TextEditor >> #querySymbol:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009567.html Name: Morphic-ul.1103 Ancestors: Morphic-ul.1102 - migrate SimpleBorder instances both in preamble and postscript ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009568.html Name: Tools-ul.687 Ancestors: Tools-ul.686 - removed the hard dependency on HelpBrowser - all browser panels respond to Cmd+x with the same behavior: remove ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009569.html Name: Morphic-cmm.1104 Ancestors: Morphic-ul.1103 - Put the new 'Wrapped Navigation' feature onto a Preference, so that the ability to easily navigate trees with just one hand on the arrow keys is restored. - It also restores navigation keys [Home], [End], [Pg Up] and [Pg Down] to ONLY navigate, and not cause tree expansions. ============================================= From jakob.reschke at student.hpi.de Thu Apr 7 22:32:11 2016 From: jakob.reschke at student.hpi.de (Jakob Reschke) Date: Thu Apr 7 22:32:35 2016 Subject: [squeak-dev] Removing from MessageSet browsers, re: Tools-ul.687 Message-ID: Hi, would anybody else be interested in key mappings for "remove from this browser" in MessageSet/MessageTrace browsers (cyan by default with colorful windows), i.e. to only remove a method from the displayed set instead of removing the method from its class? Use case/user story: when exploring a system, I repeatedly invoke senders/implementors which collects me lots of methods in such a browser. In order to keep an overview of the control flow I would like to tidy that up by removing unrelated matches (methods with equal names from unrelated classes). But currently that is tedious, because you have to go through the 2nd level ("more...") context menu for every single method to be thus removed. Best regards, Jakob 2016-04-07 22:04 GMT+02:00 commits@source.squeak.org : > Levente Uzonyi uploaded a new version of Tools to project The Trunk: > http://source.squeak.org/trunk/Tools-ul.687.mcz > > ==================== Summary ==================== > > Name: Tools-ul.687 > Author: ul > Time: 7 April 2016, 11:04:02.506276 pm > UUID: 2d6efa2b-2716-439f-8c7e-e351e2e37883 > Ancestors: Tools-ul.686 > > - removed the hard dependency on HelpBrowser > - all browser panels respond to Cmd+x with the same behavior: remove > > =============== Diff against Tools-ul.686 =============== > > Item was changed: > ----- Method: Browser>>browseAllCommentsForClass (in category 'message functions') ----- > browseAllCommentsForClass > "Opens a HelpBrowser on the class" > > | myClass | > + myClass := self selectedClassOrMetaClass ifNil: [ ^self ]. > + myClass isTrait ifTrue: [ ^self ]. > + (Smalltalk classNamed: #HelpBrowser) > + ifNil: [ ^self inform: 'HelpBrowser is not available.' ] > + ifNotNil: [ :HelpBrowser | > + HelpBrowser openOn: myClass theNonMetaClass ] > - ((myClass := self selectedClassOrMetaClass) isNil or: [myClass isTrait]) > - ifFalse: [HelpBrowser openOn: myClass theNonMetaClass] > ! > > Item was changed: > ----- Method: Browser>>buildMessageCategoryListWith: (in category 'toolbuilder') ----- > buildMessageCategoryListWith: builder > | listSpec | > listSpec := builder pluggableListSpec new. > listSpec > model: self; > list: #messageCategoryList; > getIndex: #messageCategoryListIndex; > setIndex: #messageCategoryListIndex:; > menu: #messageCategoryMenu:; > + keyPress: #messageCategoryListKey:from:. > - keyPress: #arrowKey:from:. > SystemBrowser browseWithDragNDrop ifTrue:[ > listSpec > dropAccept: #wantsMessageCategoriesDrop:; > dropItem: #dropOnMessageCategories:at:]. > ^listSpec > ! > > Item was changed: > ----- Method: Browser>>mainMessageCategoryMenu: (in category 'message category functions') ----- > mainMessageCategoryMenu: aMenu > > ^ aMenu addList: #( > ('browse' buildMessageCategoryBrowser) > ('print out' printOutMessageCategories) > ('file out' fileOutMessageCategories) > - > ('reorganize' editMessageCategories) > ('alphabetize' alphabetizeMessageCategories) > ('remove empty categories' removeEmptyCategories) > ('categorize all uncategorized' categorizeAllUncategorizedMethods) > ('new category...' addCategory) > - > ('rename...' renameCategory) > + ('remove (x)' removeMessageCategory)); > - ('remove' removeMessageCategory)); > yourself > ! > > Item was changed: > ----- Method: Browser>>mainSystemCategoryMenu: (in category 'system category functions') ----- > mainSystemCategoryMenu: aMenu > > ^ aMenu addList: #( > ('find class... (f)' findClass) > ('back... (b)' recent) > - > ('browse all' browseAllClasses) > ('browse' buildSystemCategoryBrowser) > - > ('printOut' printOutSystemCategory) > ('fileOut' fileOutSystemCategory) > - > ('reorganize' editSystemCategories) > ('alphabetize' alphabetizeSystemCategories) > - > ('update' updateSystemCategories) > ('add item...' addSystemCategory) > ('rename...' renameSystemCategory) > + ('remove (x)' removeSystemCategory)); > - ('remove' removeSystemCategory)); > yourself > ! > > Item was added: > + ----- Method: Browser>>messageCategoryListKey:from: (in category 'message category list') ----- > + messageCategoryListKey: aCharacter from: view > + > + aCharacter == $x ifTrue: [ ^self removeMessageCategory ]. > + ^self arrowKey: aCharacter from: view > + ! > > From jelena at misticnabica.hr Thu Apr 7 22:32:41 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Thu Apr 7 22:32:46 2016 Subject: [squeak-dev] Removing from MessageSet browsers, re: Tools-ul.687 Message-ID: From leves at caesar.elte.hu Thu Apr 7 22:40:10 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu Apr 7 22:40:12 2016 Subject: [squeak-dev] Removing from MessageSet browsers, re: Tools-ul.687 In-Reply-To: References: Message-ID: Hi Jakob, What you're looking for is the "filter message list..." menu item. Unfortunately it's on the second page of the menu and it's a bit more cumbersome to use than the envisioned "filter out this message" menu item. Perhaps we should add that. Levente On Fri, 8 Apr 2016, Jakob Reschke wrote: > Hi, > > would anybody else be interested in key mappings for "remove from this > browser" in MessageSet/MessageTrace browsers (cyan by default with > colorful windows), i.e. to only remove a method from the displayed set > instead of removing the method from its class? > > Use case/user story: when exploring a system, I repeatedly invoke > senders/implementors which collects me lots of methods in such a > browser. In order to keep an overview of the control flow I would like > to tidy that up by removing unrelated matches (methods with equal > names from unrelated classes). But currently that is tedious, because > you have to go through the 2nd level ("more...") context menu for > every single method to be thus removed. > > Best regards, > Jakob > > 2016-04-07 22:04 GMT+02:00 commits@source.squeak.org > : >> Levente Uzonyi uploaded a new version of Tools to project The Trunk: >> http://source.squeak.org/trunk/Tools-ul.687.mcz >> >> ==================== Summary ==================== >> >> Name: Tools-ul.687 >> Author: ul >> Time: 7 April 2016, 11:04:02.506276 pm >> UUID: 2d6efa2b-2716-439f-8c7e-e351e2e37883 >> Ancestors: Tools-ul.686 >> >> - removed the hard dependency on HelpBrowser >> - all browser panels respond to Cmd+x with the same behavior: remove >> >> =============== Diff against Tools-ul.686 =============== >> >> Item was changed: >> ----- Method: Browser>>browseAllCommentsForClass (in category 'message functions') ----- >> browseAllCommentsForClass >> "Opens a HelpBrowser on the class" >> >> | myClass | >> + myClass := self selectedClassOrMetaClass ifNil: [ ^self ]. >> + myClass isTrait ifTrue: [ ^self ]. >> + (Smalltalk classNamed: #HelpBrowser) >> + ifNil: [ ^self inform: 'HelpBrowser is not available.' ] >> + ifNotNil: [ :HelpBrowser | >> + HelpBrowser openOn: myClass theNonMetaClass ] >> - ((myClass := self selectedClassOrMetaClass) isNil or: [myClass isTrait]) >> - ifFalse: [HelpBrowser openOn: myClass theNonMetaClass] >> ! >> >> Item was changed: >> ----- Method: Browser>>buildMessageCategoryListWith: (in category 'toolbuilder') ----- >> buildMessageCategoryListWith: builder >> | listSpec | >> listSpec := builder pluggableListSpec new. >> listSpec >> model: self; >> list: #messageCategoryList; >> getIndex: #messageCategoryListIndex; >> setIndex: #messageCategoryListIndex:; >> menu: #messageCategoryMenu:; >> + keyPress: #messageCategoryListKey:from:. >> - keyPress: #arrowKey:from:. >> SystemBrowser browseWithDragNDrop ifTrue:[ >> listSpec >> dropAccept: #wantsMessageCategoriesDrop:; >> dropItem: #dropOnMessageCategories:at:]. >> ^listSpec >> ! >> >> Item was changed: >> ----- Method: Browser>>mainMessageCategoryMenu: (in category 'message category functions') ----- >> mainMessageCategoryMenu: aMenu >> >> ^ aMenu addList: #( >> ('browse' buildMessageCategoryBrowser) >> ('print out' printOutMessageCategories) >> ('file out' fileOutMessageCategories) >> - >> ('reorganize' editMessageCategories) >> ('alphabetize' alphabetizeMessageCategories) >> ('remove empty categories' removeEmptyCategories) >> ('categorize all uncategorized' categorizeAllUncategorizedMethods) >> ('new category...' addCategory) >> - >> ('rename...' renameCategory) >> + ('remove (x)' removeMessageCategory)); >> - ('remove' removeMessageCategory)); >> yourself >> ! >> >> Item was changed: >> ----- Method: Browser>>mainSystemCategoryMenu: (in category 'system category functions') ----- >> mainSystemCategoryMenu: aMenu >> >> ^ aMenu addList: #( >> ('find class... (f)' findClass) >> ('back... (b)' recent) >> - >> ('browse all' browseAllClasses) >> ('browse' buildSystemCategoryBrowser) >> - >> ('printOut' printOutSystemCategory) >> ('fileOut' fileOutSystemCategory) >> - >> ('reorganize' editSystemCategories) >> ('alphabetize' alphabetizeSystemCategories) >> - >> ('update' updateSystemCategories) >> ('add item...' addSystemCategory) >> ('rename...' renameSystemCategory) >> + ('remove (x)' removeSystemCategory)); >> - ('remove' removeSystemCategory)); >> yourself >> ! >> >> Item was added: >> + ----- Method: Browser>>messageCategoryListKey:from: (in category 'message category list') ----- >> + messageCategoryListKey: aCharacter from: view >> + >> + aCharacter == $x ifTrue: [ ^self removeMessageCategory ]. >> + ^self arrowKey: aCharacter from: view >> + ! >> >> > > From jakob.reschke at student.hpi.de Thu Apr 7 22:57:06 2016 From: jakob.reschke at student.hpi.de (Jakob Reschke) Date: Thu Apr 7 22:57:30 2016 Subject: [squeak-dev] Removing from MessageSet browsers, re: Tools-ul.687 In-Reply-To: References: Message-ID: Hi Levente, I was referring to the menu item immediately above "filter message list..." which is called "remove from this browser", so the feature is already there. Only its usability is lacking for removals in numbers. 2016-04-08 0:40 GMT+02:00 Levente Uzonyi : > Hi Jakob, > > What you're looking for is the "filter message list..." menu item. > Unfortunately it's on the second page of the menu and it's a bit more > cumbersome to use than the envisioned "filter out this message" menu item. > Perhaps we should add that. > > Levente > > On Fri, 8 Apr 2016, Jakob Reschke wrote: > >> Hi, >> >> would anybody else be interested in key mappings for "remove from this >> browser" in MessageSet/MessageTrace browsers (cyan by default with >> colorful windows), i.e. to only remove a method from the displayed set >> instead of removing the method from its class? >> >> Use case/user story: when exploring a system, I repeatedly invoke >> senders/implementors which collects me lots of methods in such a >> browser. In order to keep an overview of the control flow I would like >> to tidy that up by removing unrelated matches (methods with equal >> names from unrelated classes). But currently that is tedious, because >> you have to go through the 2nd level ("more...") context menu for >> every single method to be thus removed. >> >> Best regards, >> Jakob >> >> 2016-04-07 22:04 GMT+02:00 commits@source.squeak.org >> : >>> Levente Uzonyi uploaded a new version of Tools to project The Trunk: >>> http://source.squeak.org/trunk/Tools-ul.687.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Tools-ul.687 >>> Author: ul >>> Time: 7 April 2016, 11:04:02.506276 pm >>> UUID: 2d6efa2b-2716-439f-8c7e-e351e2e37883 >>> Ancestors: Tools-ul.686 >>> >>> - removed the hard dependency on HelpBrowser >>> - all browser panels respond to Cmd+x with the same behavior: remove >>> >>> =============== Diff against Tools-ul.686 =============== >>> >>> Item was changed: >>> ----- Method: Browser>>browseAllCommentsForClass (in category 'message functions') ----- >>> browseAllCommentsForClass >>> "Opens a HelpBrowser on the class" >>> >>> | myClass | >>> + myClass := self selectedClassOrMetaClass ifNil: [ ^self ]. >>> + myClass isTrait ifTrue: [ ^self ]. >>> + (Smalltalk classNamed: #HelpBrowser) >>> + ifNil: [ ^self inform: 'HelpBrowser is not available.' ] >>> + ifNotNil: [ :HelpBrowser | >>> + HelpBrowser openOn: myClass theNonMetaClass ] >>> - ((myClass := self selectedClassOrMetaClass) isNil or: [myClass isTrait]) >>> - ifFalse: [HelpBrowser openOn: myClass theNonMetaClass] >>> ! >>> >>> Item was changed: >>> ----- Method: Browser>>buildMessageCategoryListWith: (in category 'toolbuilder') ----- >>> buildMessageCategoryListWith: builder >>> | listSpec | >>> listSpec := builder pluggableListSpec new. >>> listSpec >>> model: self; >>> list: #messageCategoryList; >>> getIndex: #messageCategoryListIndex; >>> setIndex: #messageCategoryListIndex:; >>> menu: #messageCategoryMenu:; >>> + keyPress: #messageCategoryListKey:from:. >>> - keyPress: #arrowKey:from:. >>> SystemBrowser browseWithDragNDrop ifTrue:[ >>> listSpec >>> dropAccept: #wantsMessageCategoriesDrop:; >>> dropItem: #dropOnMessageCategories:at:]. >>> ^listSpec >>> ! >>> >>> Item was changed: >>> ----- Method: Browser>>mainMessageCategoryMenu: (in category 'message category functions') ----- >>> mainMessageCategoryMenu: aMenu >>> >>> ^ aMenu addList: #( >>> ('browse' buildMessageCategoryBrowser) >>> ('print out' printOutMessageCategories) >>> ('file out' fileOutMessageCategories) >>> - >>> ('reorganize' editMessageCategories) >>> ('alphabetize' alphabetizeMessageCategories) >>> ('remove empty categories' removeEmptyCategories) >>> ('categorize all uncategorized' categorizeAllUncategorizedMethods) >>> ('new category...' addCategory) >>> - >>> ('rename...' renameCategory) >>> + ('remove (x)' removeMessageCategory)); >>> - ('remove' removeMessageCategory)); >>> yourself >>> ! >>> >>> Item was changed: >>> ----- Method: Browser>>mainSystemCategoryMenu: (in category 'system category functions') ----- >>> mainSystemCategoryMenu: aMenu >>> >>> ^ aMenu addList: #( >>> ('find class... (f)' findClass) >>> ('back... (b)' recent) >>> - >>> ('browse all' browseAllClasses) >>> ('browse' buildSystemCategoryBrowser) >>> - >>> ('printOut' printOutSystemCategory) >>> ('fileOut' fileOutSystemCategory) >>> - >>> ('reorganize' editSystemCategories) >>> ('alphabetize' alphabetizeSystemCategories) >>> - >>> ('update' updateSystemCategories) >>> ('add item...' addSystemCategory) >>> ('rename...' renameSystemCategory) >>> + ('remove (x)' removeSystemCategory)); >>> - ('remove' removeSystemCategory)); >>> yourself >>> ! >>> >>> Item was added: >>> + ----- Method: Browser>>messageCategoryListKey:from: (in category 'message category list') ----- >>> + messageCategoryListKey: aCharacter from: view >>> + >>> + aCharacter == $x ifTrue: [ ^self removeMessageCategory ]. >>> + ^self arrowKey: aCharacter from: view >>> + ! >>> >>> >> >> > From asqueaker at gmail.com Thu Apr 7 23:00:36 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Apr 7 23:01:19 2016 Subject: [squeak-dev] Removing from MessageSet browsers, re: Tools-ul.687 In-Reply-To: References: Message-ID: Hi Jakob, the key you seek is Command+d. It will remove all selected methods from the browser without deleting them from the system. I've just added that hint to the menu, I'll commit that soon. > Use case/user story: when exploring a system, I repeatedly invoke > senders/implementors which collects me lots of methods in such a > browser. In order to keep an overview of the control flow I would like > to tidy that up by removing unrelated matches (methods with equal > names from unrelated classes). Congratulations. You have absolutely grok'd how MessageTrace browser is intended to be used where I think it has been misunderstood a lot, before. Also, please note the role of Command+I (capital eye) to invert the selection within the current level. This allows you to merely swipe the methods you wish within the indented and press two keys in succession: Command+I+d to leave it at just what you selected. Best, Chris From commits at source.squeak.org Fri Apr 8 00:15:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 8 00:16:02 2016 Subject: [squeak-dev] The Trunk: Files-eem.152.mcz Message-ID: Eliot Miranda uploaded a new version of Files to project The Trunk: http://source.squeak.org/trunk/Files-eem.152.mcz ==================== Summary ==================== Name: Files-eem.152 Author: eem Time: 7 April 2016, 5:15:38.065706 pm UUID: 877750a6-6e05-4513-99a4-499660329d85 Ancestors: Files-ul.151 Restore the ability to open the sources file in a ChangeList from the FIleList. =============== Diff against Files-ul.151 =============== Item was changed: ----- Method: FileStream class>>sourceFileSuffixes (in category 'file reader services') ----- sourceFileSuffixes + ^ {FileStream st. FileStream sources. FileStream cs. FileStream multiSt. FileStream multiCs} asSet asArray. - ^ {FileStream st. FileStream cs. FileStream multiSt. FileStream multiCs} asSet asArray. ! Item was added: + ----- Method: FileStream class>>sources (in category 'file reader services') ----- + sources + + ^ 'sources' clone! From commits at source.squeak.org Fri Apr 8 00:17:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 8 00:18:00 2016 Subject: [squeak-dev] The Trunk: Files-eem.152.mcz Message-ID: Eliot Miranda uploaded a new version of Files to project The Trunk: http://source.squeak.org/trunk/Files-eem.152.mcz ==================== Summary ==================== Name: Files-eem.152 Author: eem Time: 7 April 2016, 5:15:38.065706 pm UUID: 877750a6-6e05-4513-99a4-499660329d85 Ancestors: Files-ul.151 Restore the ability to open the sources file in a ChangeList from the FIleList. =============== Diff against Files-ul.151 =============== Item was changed: ----- Method: FileStream class>>sourceFileSuffixes (in category 'file reader services') ----- sourceFileSuffixes + ^ {FileStream st. FileStream sources. FileStream cs. FileStream multiSt. FileStream multiCs} asSet asArray. - ^ {FileStream st. FileStream cs. FileStream multiSt. FileStream multiCs} asSet asArray. ! Item was added: + ----- Method: FileStream class>>sources (in category 'file reader services') ----- + sources + + ^ 'sources' clone! From ma.chris.m at gmail.com Fri Apr 8 03:23:51 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Fri Apr 8 03:24:33 2016 Subject: [squeak-dev] cannot step Through critical blocks Message-ID: Debugging "Through" is really really awesome, except when it causes your image to lock. At first I thought it was because I had some DNU ahppening when I pressed Through, like on the send to #critical:, here: |mutex| mutex := Mutex new. mutex critical: [ [Object new] do: [:err | ] on: Error ] but then even after correcting it, it happened again: |mutex | mutex := Mutex new. mutex critical: [ [Object new ] on: Notification do: [ : noti | ] ] I love Through, but I have no idea how to fix this.. From Marcel.Taeumel at hpi.de Fri Apr 8 06:49:03 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 8 07:20:27 2016 Subject: [squeak-dev] Re: cannot step Through critical blocks In-Reply-To: References: Message-ID: <1460098143427-4888976.post@n4.nabble.com> Hi Chris! It may be that Mutex has no support for re-entrancy. You can use a Semaphore instead: | accessProtect | accessProtect := Semaphore forMutualExclusion. accessProtect critical: [ [Object new ] on: Notification do: [ : noti | ] ]. Then, step-through works. Best, Marcel -- View this message in context: http://forum.world.st/cannot-step-Through-critical-blocks-tp4888942p4888976.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Fri Apr 8 08:38:31 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri Apr 8 08:38:36 2016 Subject: [squeak-dev] Re: cannot step Through critical blocks In-Reply-To: <1460098143427-4888976.post@n4.nabble.com> References: <1460098143427-4888976.post@n4.nabble.com> Message-ID: Mutexes are reentrant, while Semaphores are not. I suspect that primitive 187 doesn't know about effectiveProcess. Levente On Thu, 7 Apr 2016, marcel.taeumel wrote: > Hi Chris! > > It may be that Mutex has no support for re-entrancy. You can use a Semaphore > instead: > > | accessProtect | > accessProtect := Semaphore forMutualExclusion. > accessProtect critical: [ [Object new ] on: Notification do: [ : noti | ] ]. > > Then, step-through works. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/cannot-step-Through-critical-blocks-tp4888942p4888976.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From bert at freudenbergs.de Fri Apr 8 10:21:52 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Fri Apr 8 10:21:57 2016 Subject: Slang question (was: Re: [squeak-dev] The Trunk: Collections-ul.685.mcz) In-Reply-To: References: Message-ID: <9069A6ED-C42F-4C18-BDB4-AA6F0BC8E7CF@freudenbergs.de> > On 03.04.2016, at 19:45, Levente Uzonyi wrote: > > On Sun, 3 Apr 2016, commits@source.squeak.org wrote: > >> Levente Uzonyi uploaded a new version of Collections to project The Trunk: >> http://source.squeak.org/trunk/Collections-ul.685.mcz >> >> ==================== Summary ==================== >> >> Name: Collections-ul.685 >> Author: ul >> Time: 3 April 2016, 3:21:51.035808 am >> UUID: db8fd391-2306-4ccc-87d5-b5dee96a78ab >> Ancestors: Collections-eem.684 >> >> Use Spur's new character comparison abilities in some String methods. >> >> =============== Diff against Collections-eem.684 =============== >> >> Item was changed: >> ----- Method: ByteString>>findSubstring:in:startingAt:matchTable: (in category 'comparing') ----- >> findSubstring: key in: body startingAt: start matchTable: matchTable >> "Answer the index in the string body at which the substring key first occurs, at or beyond start. The match is determined using matchTable, which can be used to effect, eg, case-insensitive matches. If no match is found, zero will be returned. >> >> The algorithm below is not optimum -- it is intended to be translated to C which will go so fast that it wont matter." >> | index | >> >> >> >> >> >> key size = 0 ifTrue: [^ 0]. >> + matchTable ifNil: [ >> + start to: body size - key size + 1 do: [ :startIndex | >> + index := 0. >> + [ (body at: startIndex + index) == (key at: (index := index + 1)) ] whileTrue: [ >> + index = key size ifTrue: [ ^startIndex ] ] ]. >> + ^0 ]. > > I wonder if the #ifNil: check is correct in Slang. It?s not correct. Arguably the translation for MiscPrims should deal with it but then there would be special semantics for that, which is probably not a good idea. The way to check arguments in Slang is to see if they have the number of pointer slots you?re expecting. Besides, for ByteStrings this primitive is always called with a proper matchTable. No check needed. - Bert - - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160408/429718c7/smime.bin From lewis at mail.msen.com Fri Apr 8 12:33:59 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Apr 8 12:34:01 2016 Subject: VM included methods (was: Slang question (was: Re: [squeak-dev] The Trunk: Collections-ul.685.mcz)) In-Reply-To: <9069A6ED-C42F-4C18-BDB4-AA6F0BC8E7CF@freudenbergs.de> References: <9069A6ED-C42F-4C18-BDB4-AA6F0BC8E7CF@freudenbergs.de> Message-ID: <20160408123359.GA47520@shell.msen.com> On Fri, Apr 08, 2016 at 12:21:52PM +0200, Bert Freudenberg wrote: > > > On 03.04.2016, at 19:45, Levente Uzonyi wrote: > > > > I wonder if the #ifNil: check is correct in Slang. > > It???s not correct. Arguably the translation for MiscPrims should deal with it but then there would be special semantics for that, which is probably not a good idea. The way to check arguments in Slang is to see if they have the number of pointer slots you???re expecting. > > Besides, for ByteStrings this primitive is always called with a proper matchTable. No check needed. > I think we're going to need to take a closer look at the various methods in trunk that are translated for the VM. It may be that e.g. image changes for immediate characters are changing the generated plugins in ways that are going unnoticed. It also may be that some of the primitives are simply not needed for Cog/Spur, so some performance checks may be in order there. Given that the jit is already optimizing the methods, does translating those methods to primitives still provide any additional benefit? The VM plugins that make use of methods translated from the image are MiscPrimitivePlugin, SoundGeneratorPlugin, and ADPCMCodecPlug. Dave From leves at caesar.elte.hu Fri Apr 8 12:46:29 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri Apr 8 12:46:33 2016 Subject: Slang question (was: Re: [squeak-dev] The Trunk: Collections-ul.685.mcz) In-Reply-To: <9069A6ED-C42F-4C18-BDB4-AA6F0BC8E7CF@freudenbergs.de> References: <9069A6ED-C42F-4C18-BDB4-AA6F0BC8E7CF@freudenbergs.de> Message-ID: On Fri, 8 Apr 2016, Bert Freudenberg wrote: > >> On 03.04.2016, at 19:45, Levente Uzonyi wrote: >> >> On Sun, 3 Apr 2016, commits@source.squeak.org wrote: >> >>> Levente Uzonyi uploaded a new version of Collections to project The Trunk: >>> http://source.squeak.org/trunk/Collections-ul.685.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Collections-ul.685 >>> Author: ul >>> Time: 3 April 2016, 3:21:51.035808 am >>> UUID: db8fd391-2306-4ccc-87d5-b5dee96a78ab >>> Ancestors: Collections-eem.684 >>> >>> Use Spur's new character comparison abilities in some String methods. >>> >>> =============== Diff against Collections-eem.684 =============== >>> >>> Item was changed: >>> ----- Method: ByteString>>findSubstring:in:startingAt:matchTable: (in category 'comparing') ----- >>> findSubstring: key in: body startingAt: start matchTable: matchTable >>> "Answer the index in the string body at which the substring key first occurs, at or beyond start. The match is determined using matchTable, which can be used to effect, eg, case-insensitive matches. If no match is found, zero will be returned. >>> >>> The algorithm below is not optimum -- it is intended to be translated to C which will go so fast that it wont matter." >>> | index | >>> >>> >>> >>> >>> >>> key size = 0 ifTrue: [^ 0]. >>> + matchTable ifNil: [ >>> + start to: body size - key size + 1 do: [ :startIndex | >>> + index := 0. >>> + [ (body at: startIndex + index) == (key at: (index := index + 1)) ] whileTrue: [ >>> + index = key size ifTrue: [ ^startIndex ] ] ]. >>> + ^0 ]. >> >> I wonder if the #ifNil: check is correct in Slang. > > It?s not correct. Arguably the translation for MiscPrims should deal with it but then there would be special semantics for that, which is probably not a good idea. The way to check arguments in Slang is to see if they have the number of pointer slots you?re expecting. > > Besides, for ByteStrings this primitive is always called with a proper matchTable. No check needed. That's right, but even the C code would become quicker if it wouldn't have to translate the characters. Levente > > - Bert - > > > > - Bert - > > > > From commits at source.squeak.org Fri Apr 8 16:37:54 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 8 16:37:56 2016 Subject: [squeak-dev] The Inbox: Kernel-ul.1014.mcz Message-ID: Levente Uzonyi uploaded a new version of Kernel to project The Inbox: http://source.squeak.org/inbox/Kernel-ul.1014.mcz ==================== Summary ==================== Name: Kernel-ul.1014 Author: ul Time: 8 April 2016, 6:32:46.797344 pm UUID: 7be073b0-6c2b-461d-a836-3031dc02743d Ancestors: Kernel-mt.1013 - before doing a full GC, try an incremental one when primitive 71 fails. This is expected to reduce the number of full GCs when large chunks of memory are being allocated repeatedly =============== Diff against Kernel-mt.1013 =============== Item was changed: ----- Method: Behavior>>handleFailingBasicNew (in category 'private') ----- handleFailingBasicNew "handleFailingBasicNew gets sent after basicNew has failed and allowed a scavenging garbage collection to occur. The scavenging collection will have happened as the VM is activating the (failing) basicNew. If handleFailingBasicNew fails then the scavenge failed to reclaim sufficient space and a global garbage collection is required. Retry after garbage collecting and growing memory if necessary. Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." + Smalltalk garbageCollectMost < 1048576 ifTrue: + [Smalltalk garbageCollect < 1048576 ifTrue: + [Smalltalk growMemoryByAtLeast: 1048576]]. - Smalltalk garbageCollect < 1048576 ifTrue: - [Smalltalk growMemoryByAtLeast: 1048576]. ^self handleFailingFailingBasicNew "retry after global garbage collect"! Item was changed: ----- Method: Behavior>>handleFailingBasicNew: (in category 'private') ----- handleFailingBasicNew: sizeRequested "handleFailingBasicNew: gets sent after basicNew: has failed and allowed a scavenging garbage collection to occur. The scavenging collection will have happened as the VM is activating the (failing) basicNew:. If handleFailingBasicNew: fails then the scavenge failed to reclaim sufficient space and a global garbage collection is required. Retry after garbage collecting and growing memory if necessary. Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." | bytesRequested | bytesRequested := self byteSizeOfInstanceOfSize: sizeRequested. + Smalltalk garbageCollectMost < bytesRequested ifTrue: + [Smalltalk garbageCollect < bytesRequested ifTrue: + [Smalltalk growMemoryByAtLeast: bytesRequested]]. - Smalltalk garbageCollect < bytesRequested ifTrue: - [Smalltalk growMemoryByAtLeast: bytesRequested]. "retry after global garbage collect and possible grow" ^self handleFailingFailingBasicNew: sizeRequested! From Marcel.Taeumel at hpi.de Fri Apr 8 16:37:55 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 8 17:09:26 2016 Subject: [squeak-dev] Adjusting Morphic Alarm Times Message-ID: <1460133475533-4889145.post@n4.nabble.com> Hi, there! There is this method WorldState >> #adjustAlarmTimes: to correct larger drifts between the nowTime and the lastAlarmTime. A check and this correction is performed in *every *world cycle. Here is, where it works fine: 1. You set an alarm to go off in 5 seconds. 2. You immediately close the Squeak image. 3. You wait a minute. 4. You open Squeak again. 5. You wait 5 seconds. 6. Alarm goes off. I think we can agree that a closed Squeak image freezes all Morphic behavior. Now, here is, where it seems annoying: 1. You set an alarm to go off in 5 seconds. 2. You immediately start a longer running operation from the workspace in the UI process. 3. You wait that operation to complete. Maybe some minutes. *4. You still have to wait 5 seconds.* 5. Alarm goes off. This is not acceptable. Think of larger alarm delays. We cannot just ignore the fact that time has passed while working inside the image. It think we should only adjust alarm times when: - Starting a Squeak image. - Entering a Morphic project. Because in both cases, the respective Morphic world freezed. Any thoughts on this? Best, Marcel -- View this message in context: http://forum.world.st/Adjusting-Morphic-Alarm-Times-tp4889145.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Apr 8 16:44:56 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 8 17:16:21 2016 Subject: [squeak-dev] Re: The Inbox: Kernel-ul.1014.mcz In-Reply-To: References: Message-ID: <1460133896294-4889146.post@n4.nabble.com> Hi Levente, not really fewer full GCs in my image. :-/ Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Kernel-ul-1014-mcz-tp4889141p4889146.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From asqueaker at gmail.com Fri Apr 8 17:18:23 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Apr 8 17:19:05 2016 Subject: [squeak-dev] Adjusting Morphic Alarm Times In-Reply-To: <1460133475533-4889145.post@n4.nabble.com> References: <1460133475533-4889145.post@n4.nabble.com> Message-ID: That sounds logical to me. It makes me curious, though, what is the purpose of doing this adjustment in the first place? For in case the image was exited and restarted later? If only for that, then on every world cycle seems unnecessarily inefficient.. On Fri, Apr 8, 2016 at 11:37 AM, marcel.taeumel wrote: > Hi, there! > > There is this method WorldState >> #adjustAlarmTimes: to correct larger > drifts between the nowTime and the lastAlarmTime. A check and this > correction is performed in *every *world cycle. > > Here is, where it works fine: > 1. You set an alarm to go off in 5 seconds. > 2. You immediately close the Squeak image. > 3. You wait a minute. > 4. You open Squeak again. > 5. You wait 5 seconds. > 6. Alarm goes off. > > I think we can agree that a closed Squeak image freezes all Morphic > behavior. > > Now, here is, where it seems annoying: > 1. You set an alarm to go off in 5 seconds. > 2. You immediately start a longer running operation from the workspace in > the UI process. > 3. You wait that operation to complete. Maybe some minutes. > *4. You still have to wait 5 seconds.* > 5. Alarm goes off. > > This is not acceptable. Think of larger alarm delays. We cannot just ignore > the fact that time has passed while working inside the image. It think we > should only adjust alarm times when: > > - Starting a Squeak image. > - Entering a Morphic project. > > Because in both cases, the respective Morphic world freezed. Any thoughts on > this? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Adjusting-Morphic-Alarm-Times-tp4889145.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From leves at caesar.elte.hu Fri Apr 8 17:40:17 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri Apr 8 17:40:22 2016 Subject: [squeak-dev] Re: The Inbox: Kernel-ul.1014.mcz In-Reply-To: <1460133896294-4889146.post@n4.nabble.com> References: <1460133896294-4889146.post@n4.nabble.com> Message-ID: Hi Marcell, Is it exactly the same or just slightly fewer? What's Smalltalk vmParameterAt: 25? Levente On Fri, 8 Apr 2016, marcel.taeumel wrote: > Hi Levente, > > not really fewer full GCs in my image. :-/ > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Inbox-Kernel-ul-1014-mcz-tp4889141p4889146.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From Marcel.Taeumel at hpi.de Fri Apr 8 17:13:44 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 8 17:45:11 2016 Subject: [squeak-dev] Re: Adjusting Morphic Alarm Times In-Reply-To: References: <1460133475533-4889145.post@n4.nabble.com> Message-ID: <1460135624907-4889150.post@n4.nabble.com> Hi Chris, according to the method comment, this was the purpose: "Adjust the alarm times after some clock weirdness (such as roll-over, image-startup etc)" Does "Time millisecondClockValue" has time zone in it? What happes to alarms if we switch from summer to winter time while using Squeak? Best, Marcel -- View this message in context: http://forum.world.st/Adjusting-Morphic-Alarm-Times-tp4889145p4889150.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Apr 8 17:14:54 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 8 17:46:20 2016 Subject: [squeak-dev] Re: Adjusting Morphic Alarm Times In-Reply-To: References: <1460133475533-4889145.post@n4.nabble.com> Message-ID: <1460135694583-4889151.post@n4.nabble.com> Hi, there! That adjustment is only done if necessary: World >> #triggerAlarmsBefore: ... (nowTime < lastAlarmTime or:[nowTime - lastAlarmTime > 10000]) ifTrue:[self adjustAlarmTimes: nowTime]. ... That 10 seconds is suspicious, too. Best, Marcel -- View this message in context: http://forum.world.st/Adjusting-Morphic-Alarm-Times-tp4889145p4889151.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Fri Apr 8 17:55:07 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri Apr 8 17:55:14 2016 Subject: [squeak-dev] Re: The Inbox: Kernel-ul.1014.mcz In-Reply-To: References: <1460133896294-4889146.post@n4.nabble.com> Message-ID: And what's the return value of Smalltalk garbageCollect? Levente On Fri, 8 Apr 2016, Levente Uzonyi wrote: > Hi Marcell, > > Is it exactly the same or just slightly fewer? > What's Smalltalk vmParameterAt: 25? > > Levente > > On Fri, 8 Apr 2016, marcel.taeumel wrote: > >> Hi Levente, >> >> not really fewer full GCs in my image. :-/ >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/The-Inbox-Kernel-ul-1014-mcz-tp4889141p4889146.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > > From commits at source.squeak.org Fri Apr 8 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 8 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160408215502.2013.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009570.html Name: Files-eem.152 Ancestors: Files-ul.151 Restore the ability to open the sources file in a ChangeList from the FIleList. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009571.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009572.html Name: Files-eem.152 Ancestors: Files-ul.151 Restore the ability to open the sources file in a ChangeList from the FIleList. ============================================= From joseph.alotta at gmail.com Sat Apr 9 14:30:10 2016 From: joseph.alotta at gmail.com (Joseph Alotta) Date: Sat Apr 9 14:30:16 2016 Subject: [squeak-dev] Looking for Squeak Smalltalk tutor in the Chicago suburbs, particularly Downers Grove Message-ID: <5143659D-6905-4E3B-BF6C-95A0FEB932D7@gmail.com> Greetings Lots of people take piano lessons. I thought I could take Squeak lessons. So, I am looking for a master to meet me in a coffee shop in the western suburbs of Chicago once a week and teach me directly. Answer questions, assist in using all the tools and concepts. I am an adult student and have a strong background in programming, but it is pretty old, and in other languages. The lessons would be for pay. I am thinking of $70 an hour and could potentially go for several years. Sincerely, Joe. From jelena at misticnabica.hr Sat Apr 9 14:30:24 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Sat Apr 9 14:30:33 2016 Subject: [squeak-dev] Looking for Squeak Smalltalk tutor in the Chicago suburbs, particularly Downers Grove Message-ID: <59D0D134D5DC4F94B39230D4E50CE4A2.MAI@server2.totohost.hr> From jakob.reschke at student.hpi.de Sat Apr 9 19:57:15 2016 From: jakob.reschke at student.hpi.de (Jakob Reschke) Date: Sat Apr 9 19:57:44 2016 Subject: [squeak-dev] Removing from MessageSet browsers, re: Tools-ul.687 In-Reply-To: References: Message-ID: Hi Chris, 2016-04-08 1:00 GMT+02:00 Chris Muller : > the key you seek is Command+d. It will remove all selected > methods from the browser without deleting them from the system. > > I've just added that hint to the menu, I'll commit that soon. > ... > Also, please note the role of Command+I (capital eye) to invert the > selection within the current level. This allows you to merely swipe > the methods you wish within the indented and press two keys in > succession: Command+I+d to leave it at just what you selected. Great to hear that once again Squeak already has what I asked for. :-) Thank you very much! Best regards, Jakob From edgardec2005 at gmail.com Sat Apr 9 20:36:20 2016 From: edgardec2005 at gmail.com (Edgar De Cleene) Date: Sat Apr 9 20:36:27 2016 Subject: [squeak-dev] [OFF TOPIC} Apple TV 4 with Squeak server Message-ID: <40573E73-44F9-48F3-B639-C76EC70C960A@gmail.com> http://squeakros.org/Divagaciones/img/Screen%20Shot%202016-04-09%20at%2017.28.00.png So I need capture clicks, send to server and voila, kind of Smalltalk TV :=) From tim at rowledge.org Sat Apr 9 21:43:47 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Apr 9 21:43:52 2016 Subject: [squeak-dev] [OFF TOPIC} Apple TV 4 with Squeak server In-Reply-To: <40573E73-44F9-48F3-B639-C76EC70C960A@gmail.com> References: <40573E73-44F9-48F3-B639-C76EC70C960A@gmail.com> Message-ID: Seriously? Squeak on an AppleTV? Wow. > On 09-04-2016, at 1:36 PM, Edgar De Cleene wrote: > > http://squeakros.org/Divagaciones/img/Screen%20Shot%202016-04-09%20at%2017.28.00.png tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Oxymorons: Resident alien From tim at rowledge.org Sat Apr 9 22:01:12 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Apr 9 22:01:16 2016 Subject: [squeak-dev] [OFF TOPIC} Apple TV 4 with Squeak server In-Reply-To: References: <40573E73-44F9-48F3-B639-C76EC70C960A@gmail.com> Message-ID: <37A9C777-3592-4EC9-8AAC-4C396FA4D185@rowledge.org> Oh, wait. Still cool but not quite as cool as I hoped. > On 09-04-2016, at 2:43 PM, tim Rowledge wrote: > > Seriously? Squeak on an AppleTV? Wow. > >> On 09-04-2016, at 1:36 PM, Edgar De Cleene wrote: >> >> http://squeakros.org/Divagaciones/img/Screen%20Shot%202016-04-09%20at%2017.28.00.png > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Oxymorons: Resident alien > > > > tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim A bug in the hand is better than one as yet undetected. From jelena at misticnabica.hr Sat Apr 9 22:01:23 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Sat Apr 9 22:01:35 2016 Subject: [squeak-dev] [OFF TOPIC} Apple TV 4 with Squeak server Message-ID: <0342184D29D04231A28F12612D7B7CE5.MAI@server2.totohost.hr> From edgardec2005 at gmail.com Sun Apr 10 00:39:28 2016 From: edgardec2005 at gmail.com (Edgar De Cleene) Date: Sun Apr 10 00:39:33 2016 Subject: [squeak-dev] [OFF TOPIC} Apple TV 4 with Squeak server In-Reply-To: References: <40573E73-44F9-48F3-B639-C76EC70C960A@gmail.com> Message-ID: <8EE61C85-F466-4B5C-8338-EBD6EBA072AC@gmail.com> Squeak server and Apple TV client . Still not Squeak resident image, a long way but could be possible. > On Apr 9, 2016, at 18:43, tim Rowledge wrote: > > Seriously? Squeak on an AppleTV? Wow. > >> On 09-04-2016, at 1:36 PM, Edgar De Cleene wrote: >> >> http://squeakros.org/Divagaciones/img/Screen%20Shot%202016-04-09%20at%2017.28.00.png > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Oxymorons: Resident alien > > > From lewis at mail.msen.com Sun Apr 10 02:11:43 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Apr 10 02:11:45 2016 Subject: [squeak-dev] TrunkUpdateStreamV3 Message-ID: <20160410021143.GA36496@shell.msen.com> For some time now, I have been maintaining an update.V3 update stream on squeaksource.com in project TrunkUpdateStreamV3. I am manually updating packages Compiler, Collections, Kernel and System in that project, so the update maps point to these packages and refer to the main trunk repository for everything else. The result is an update stream for the old V3 image that tracks trunk except for the differences related to Spur, which are localized to those four packages. An image updated from this stream can be run on a Cog or interpreter VM. A monticello browser in the V3 image can be used to show the Spur related differences by comparingto the Compiler, Collections, Kernel and System packages in the trunk repository on source.squeak.org. I do not intend to maintain this update stream long term, but for a few months or so it may be of some general interest. I therefore made a Jenkins job on build.squeak.org that updates a Squeak 4.6 release image and saves the 32 bit and 64 bit versions of the resulting "trunk" image. The saved images are at a version level comparable to trunk. Running both the 64 bit and 32 bit images requires an interpreter VM built from source because of some recently added primitives that are required for a trunk image. The 32 bit V3 image will run on a Cog VM. Links that may be of interest: The update stream that follows trunk for a V3 image is at http://www.squeaksource.com/TrunkUpdateStreamV3. The Jenkins project is http://build.squeak.org/job/FollowTrunkOnOldV3Image. The most recent updated images (32 and 64 bit) are saved at http://build.squeak.org/job/FollowTrunkOnOldV3Image/lastSuccessfulBuild/artifact/trunkV3Images.zip The scripts that build these images are run.sh, update46.st, traceTo64.st and resave.st. These are located in http://build.squeak.org/job/FollowTrunkOnOldV3Image/ws/. The five minute recipe for a Linux interpreter VM is at http://wiki.squeak.org/squeak/6354. Dave From robert.w.withers at gmail.com Sun Apr 10 02:55:51 2016 From: robert.w.withers at gmail.com (Robert Withers) Date: Sun Apr 10 02:55:57 2016 Subject: [squeak-dev] SecureSessionV1Server Message-ID: <5709C0B7.4070604@gmail.com> Over the course of several months, I've been working on the implementation of SecureSessionV1 to adopt new protocol and message frame definitions. As to the original connection protocol and frames, I preserved it as a backwards compatible Vintage implementation. This change simplified a fair bit of code and will allow for some further modifications. I apologize for my habit in using the code and unit tests to document the system, an old habit to try for a self-describing domain language of secure sessions. Please look in SecureSession-Tests for examples in using both the Vintage and V1 protocols. The key classes for the Vintage version remain SecureSessionServer and SecureSessionTerminal, while the V1 version use SecureSessionV1Server and SecureSessionV1Terminal. Here are some helpful links.. The V1 Frame Design is http://jmp.sh/1Uo0dr7, though I should note there are changes to the DataHeader, which holds the mac and the plaintextLength. The code is found in http://www.squeaksource.com/Cryptography and the SecureSession package requires the Cryptography package and for a notable speed improvements the Cryptography plugins build for your VM. - Robert From commits at source.squeak.org Mon Apr 11 08:20:05 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Apr 11 08:20:07 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1105.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1105.mcz ==================== Summary ==================== Name: Morphic-mt.1105 Author: mt Time: 11 April 2016, 10:19:30.423264 am UUID: ea97f6eb-ebd3-f34a-b7ea-f6b0fb77b730 Ancestors: Morphic-cmm.1104 Fixes deferred balloon tips that showed up at the hand but the hand has already moved above another morph. =============== Diff against Morphic-cmm.1104 =============== Item was changed: ----- Method: NewBalloonMorph>>popUpAt: (in category 'initialization') ----- popUpAt: point "Do not remove other balloon helps." | w h | self balloonOwner ifNil: [^ self]. self balloonOwner isInWorld ifFalse: [^ self]. w := self balloonOwner world. h := w activeHand. + + self hasTail: true. #(bottomLeft topLeft bottomRight topRight) detect: [:nextOrientation | | pointWithOffset | self orientation: nextOrientation. pointWithOffset := point + self tailOffset. self move: pointWithOffset. self bounds: (self bounds translatedToBeWithin: w bounds). (self bounds perform: self orientation) = pointWithOffset] ifNone: ["Keep last try."]. w activeHand addBalloonHelp: self. self openInWorld.! Item was changed: ----- Method: NewBalloonMorph>>popUpFor:hand: (in category 'initialization') ----- popUpFor: aMorph hand: aHand + "Pop up the receiver as balloon help for the given hand. Ignore if the hand does not touch the morph." - "Pop up the receiver as balloon help for the given hand" + (aMorph boundsInWorld containsPoint: aHand position) + ifFalse: [^ self "Ignore"]. + self balloonOwner: aMorph. self popUpForHand: aHand.! From jelena at misticnabica.hr Mon Apr 11 08:20:20 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Mon Apr 11 08:20:38 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1105.mcz Message-ID: From smalltalk at stefan-marr.de Mon Apr 11 08:45:37 2016 From: smalltalk at stefan-marr.de (Stefan Marr) Date: Mon Apr 11 08:45:41 2016 Subject: [squeak-dev] Call for Papers: 11th ICOOOLPS Workshop at ECOOP. New Deadline April 22nd, 2016 Message-ID: Please note that the submission deadline is on the 22nd of April, 2016. Call for Papers: ICOOOLPS?16 ============================ 11th Workshop on Implementation, Compilation, Optimization of OO Languages, Programs and Systems Co-located with ECOOP July 18, 2016, Rome, Italy URL: http://2016.ecoop.org/track/ICOOOLPS-2016 Twitter: @ICOOOLPS The ICOOOLPS workshop series brings together researchers and practitioners working in the field of language implementation and optimization. The goal of the workshop is to discuss emerging problems and research directions as well as new solutions to classic performance challenges. The topics of interest for the workshop include techniques for the implementation and optimization of a wide range of languages including but not limited to object-oriented ones. Furthermore, meta-compilation techniques or language-agnostic approaches are welcome, too. A non-exclusive list of topics follows: - implementation and optimization of fundamental languages features (from automatic memory management to zero-overhead metaprogramming) - runtime systems technology (libraries, virtual machines) - static, adaptive, and speculative optimizations and compiler techniques - meta-compilation techniques and language-agnostic approaches for the efficient implementation of languages - compilers (intermediate representations, offline and online optimizations,...) - empirical studies on language usage, benchmark design, and benchmarking methodology - resource-sensitive systems (real-time, low power, mobile, cloud) - studies on design choices and tradeoffs (dynamic vs. static compilation, heuristics vs. programmer input,...) - tooling support, debuggability and observability of languages as well as their implementations ### Workshop Format and Submissions This workshop welcomes the presentation and discussion of new ideas and emerging problems that give a chance for interaction and exchange. More mature work is welcome as part of a mini-conference format, too. We aim to interleave interactive brainstorming and demonstration sessions between the formal presentations to foster an active exchange of ideas. The workshop papers will be published either in the ACM DL or in the Dagstuhl LIPIcs ECOOP Workshop proceedings. Until further notice, please use the ACM SIGPLAN template with a 10pt font size: http://www.sigplan.org/Resources/Author/. - position and work-in-progress paper: 1-4 pages - technical paper: max. 10 pages - demos and posters: 1-page abstract The page limits include references and appendixes. Note further that the upper page limit is a maximum and not a requirement. For the submission, please use the HotCRP system: http://ssw.jku.at/icooolps/ ### Important Dates - abstract submission: April 18, 2016 - paper submission: April 22, 2016 - notification: May 13, 2016 - all deadlines: Anywhere on Earth (AoE), i.e., GMT/UTC?12:00 hour - workshop: July 18th, 2016 ### Program Committee Edd Barrett, King?s College London, UK Clement Bera, Inria Lille, France Maxime Chevalier-Boisvert, Universit? de Montr?al, Canada Tim Felgentreff, Hasso Plattner Institute, Germany Roland Ducournau, LIRMM, Universit? de Montpellier, France Elisa Gonzalez Boix, Vrije Universiteit Brussel, Belgium David Gregg, Trinity College Dublin, Ireland Matthias Grimmer, Johannes Kepler University Linz, Austria Michael Haupt, Oracle, Germany Richard Jones, University of Kent, UK Tomas Kalibera, Northeastern University, USA Hidehiko Masuhara, Tokyo Institute of Technology, Japan Tiark Rompf, Purdue University, USA Jennifer B. Sartor, Ghent University, Belgium Sam Tobin-Hochstadt, Indiana University, USA ### Workshop Organizers Stefan Marr, Johannes Kepler University Linz, Austria Eric Jul, University of Oslo, Norway From Marcel.Taeumel at hpi.de Mon Apr 11 12:42:16 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 11 13:14:11 2016 Subject: [squeak-dev] WeakArray finalization never yields Message-ID: <1460378536884-4889361.post@n4.nabble.com> Hi, there! Please, have a look at WorldState >> #runStepMethodsIn:, which processes the list of deferred UI messages in a loop: runStepMethodsIn: aWorld "Perform periodic activity inbetween event cycles" | queue msg limit stamp | "Limit processing of deferredUIMessages to a max. amount of time" limit := self class deferredExecutionTimeLimit. stamp := Time millisecondClockValue. queue := self class deferredUIMessages. [(Time millisecondsSince: stamp) >= limit or:[(msg := queue nextOrNil) == nil]] whileFalse: [msg value]. "..." There is a time limit to keep the UI responsive. Now look at WeakArray class >> finalizationProcess: finalizationProcess [FinalizationSemaphore wait. FinalizationLock critical: [FinalizationDependents do: [ :weakDependent | weakDependent ifNotNil: [weakDependent finalizeValues]]] ifError: [:msg :rcvr | rcvr error: msg]] repeat Could be add a "Process yield" in the loop to keep the system responsive when facing complex finalization routines? Or would that just post-pone the problem? We could add support for having many-many small finalizers, which add up to a big amount of time to finalize. Like Morphic's deferred UI message handling does. What about priorities? At the moment, we have to ways to specify the priority at which priority Object >> #finalize is called. Has this finalization mechanism been used extensively in some project? Best, Marcel -- View this message in context: http://forum.world.st/WeakArray-finalization-never-yields-tp4889361.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Mon Apr 11 14:28:38 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Apr 11 14:28:44 2016 Subject: [squeak-dev] WeakArray finalization never yields In-Reply-To: <1460378536884-4889361.post@n4.nabble.com> References: <1460378536884-4889361.post@n4.nabble.com> Message-ID: Hi Marcell, On Mon, 11 Apr 2016, marcel.taeumel wrote: > Hi, there! > > Please, have a look at WorldState >> #runStepMethodsIn:, which processes the > list of deferred UI messages in a loop: > > runStepMethodsIn: aWorld > "Perform periodic activity inbetween event cycles" > | queue msg limit stamp | > "Limit processing of deferredUIMessages to a max. amount of time" > limit := self class deferredExecutionTimeLimit. > stamp := Time millisecondClockValue. > queue := self class deferredUIMessages. > [(Time millisecondsSince: stamp) >= limit > or:[(msg := queue nextOrNil) == nil]] > whileFalse: [msg value]. > "..." > > There is a time limit to keep the UI responsive. > > Now look at WeakArray class >> finalizationProcess: > > finalizationProcess > > [FinalizationSemaphore wait. > FinalizationLock > critical: > [FinalizationDependents do: > [ :weakDependent | > weakDependent ifNotNil: > [weakDependent finalizeValues]]] > ifError: > [:msg :rcvr | rcvr error: msg]] repeat > > Could be add a "Process yield" in the loop to keep the system responsive > when facing complex finalization routines? Or would that just post-pone the The finalization process runs at priority 50, so #yield wouldn't make the UI more responsive at all, only delays would. > problem? We could add support for having many-many small finalizers, which > add up to a big amount of time to finalize. Like Morphic's deferred UI > message handling does. Finalization will change as soon as the VMs support ephemerons. It might be the case that they already do. > > What about priorities? At the moment, we have to ways to specify the > priority at which priority Object >> #finalize is called. > > Has this finalization mechanism been used extensively in some project? In a Trunk image Files, Sockets and HostWindowProxies use the finalization process. Files rely on the higher priority of it. They keep forcing GCs until there's a new file descriptor available, which only works when the finalization process is able to release one. So, I think currently there would be a problem when a higher priority process were trying to open files and all file descriptors were in use. Levente > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/WeakArray-finalization-never-yields-tp4889361.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From asqueaker at gmail.com Mon Apr 11 15:03:11 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 11 15:03:54 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1105.mcz In-Reply-To: <570b5e3a.45158c0a.5e6e.1bfdSMTPIN_ADDED_MISSING@mx.google.com> References: <570b5e3a.45158c0a.5e6e.1bfdSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Why hasTail: true? It's not actually "pointing" at anything other than where the Hand is already pointing, so its two "arrows" pionting at each other, which is redundant and even somewhat confusing. I don't think you will find any other UI which does that. Strangely, I can't seem to turn it off myself -- if I specify "hasTail: false" right there, it has no effect, the tail still appears... On Mon, Apr 11, 2016 at 3:19 AM, wrote: > Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-mt.1105.mcz > > ==================== Summary ==================== > > Name: Morphic-mt.1105 > Author: mt > Time: 11 April 2016, 10:19:30.423264 am > UUID: ea97f6eb-ebd3-f34a-b7ea-f6b0fb77b730 > Ancestors: Morphic-cmm.1104 > > Fixes deferred balloon tips that showed up at the hand but the hand has already moved above another morph. > > =============== Diff against Morphic-cmm.1104 =============== > > Item was changed: > ----- Method: NewBalloonMorph>>popUpAt: (in category 'initialization') ----- > popUpAt: point > "Do not remove other balloon helps." > > | w h | > self balloonOwner ifNil: [^ self]. > self balloonOwner isInWorld ifFalse: [^ self]. > > w := self balloonOwner world. > h := w activeHand. > + > + self hasTail: true. > > #(bottomLeft topLeft bottomRight topRight) detect: [:nextOrientation | > | pointWithOffset | > self orientation: nextOrientation. > pointWithOffset := point + self tailOffset. > self move: pointWithOffset. > self bounds: (self bounds translatedToBeWithin: w bounds). > (self bounds perform: self orientation) = pointWithOffset] ifNone: ["Keep last try."]. > > w activeHand addBalloonHelp: self. > self openInWorld.! > > Item was changed: > ----- Method: NewBalloonMorph>>popUpFor:hand: (in category 'initialization') ----- > popUpFor: aMorph hand: aHand > + "Pop up the receiver as balloon help for the given hand. Ignore if the hand does not touch the morph." > - "Pop up the receiver as balloon help for the given hand" > > + (aMorph boundsInWorld containsPoint: aHand position) > + ifFalse: [^ self "Ignore"]. > + > self balloonOwner: aMorph. > self popUpForHand: aHand.! > > From hebbarp at gmail.com Mon Apr 11 16:11:04 2016 From: hebbarp at gmail.com (Prashanth Hebbar) Date: Mon Apr 11 16:11:06 2016 Subject: [squeak-dev] State of Postscript printing Message-ID: Hello, The last time I tried printing a non-trivial morph (such as a page from a book morph) as a postscript file, I failed. Can someone please point me to the state of ps printing in Squeak. My objective is to print out morphs in high resolution (printable, > 300 dpi), can someone point me to the right way to this. Thanks in advance. Regards, Prashanth -- Prashanth Hebbar Bangalore P.S.: I check my personal mails once in two days. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160411/27ffcddc/attachment.htm From Marcel.Taeumel at hpi.de Mon Apr 11 15:53:16 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 11 16:25:22 2016 Subject: [squeak-dev] Re: WeakArray finalization never yields In-Reply-To: References: <1460378536884-4889361.post@n4.nabble.com> Message-ID: <1460389996799-4889387.post@n4.nabble.com> Hi Levente, think about sound playing, not the GUI. Right now, sound player runs at 50, too. Best, Marcel -- View this message in context: http://forum.world.st/WeakArray-finalization-never-yields-tp4889361p4889387.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Apr 11 15:57:50 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 11 16:29:38 2016 Subject: [squeak-dev] Generators on Streams on Generators on Collections on ... Message-ID: <1460390270702-4889389.post@n4.nabble.com> Hi, there! Please try the attached change set: stream-chains.cs It adds the possibility to attach transformations to streams using generators. Example: foo := (#(1 2 3 4 5 6) readStream select: [:ea | ea even]) collect: [:ea | 2 * ea]. foo upToNil. "#(4 8 12)" It is tested. :-) Thanks Patrick for the idea. Best, Marcel -- View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Mon Apr 11 16:43:06 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Apr 11 16:43:10 2016 Subject: [squeak-dev] Re: WeakArray finalization never yields In-Reply-To: <1460389996799-4889387.post@n4.nabble.com> References: <1460378536884-4889361.post@n4.nabble.com> <1460389996799-4889387.post@n4.nabble.com> Message-ID: Well, it would be possible to do something about it, but there's a limit of achievable granularity. E.g. you have no control over what an executor will actually do. So even a single executor may take seconds to finish its job. By the way, is this an actual problem or just a theoretical one? Levente On Mon, 11 Apr 2016, marcel.taeumel wrote: > Hi Levente, > > think about sound playing, not the GUI. Right now, sound player runs at 50, > too. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/WeakArray-finalization-never-yields-tp4889361p4889387.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From asqueaker at gmail.com Mon Apr 11 17:55:39 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 11 17:56:21 2016 Subject: [squeak-dev] Generators on Streams on Generators on Collections on ... In-Reply-To: <1460390270702-4889389.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> Message-ID: This is so Smalltalk. Very cool. We should consider it for trunk. On Mon, Apr 11, 2016 at 10:57 AM, marcel.taeumel wrote: > Hi, there! > > Please try the attached change set: stream-chains.cs > > > It adds the possibility to attach transformations to streams using > generators. > > Example: > > foo := (#(1 2 3 4 5 6) readStream > select: [:ea | ea even]) > collect: [:ea | 2 * ea]. > foo upToNil. "#(4 8 12)" > > It is tested. :-) > > Thanks Patrick for the idea. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Das.Linux at gmx.de Mon Apr 11 17:59:11 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon Apr 11 17:59:15 2016 Subject: [squeak-dev] Generators on Streams on Generators on Collections on ... In-Reply-To: <1460390270702-4889389.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> Message-ID: On 11.04.2016, at 17:57, marcel.taeumel wrote: > Hi, there! > > Please try the attached change set: stream-chains.cs > > > It adds the possibility to attach transformations to streams using > generators. > > Example: > > foo := (#(1 2 3 4 5 6) readStream > select: [:ea | ea even]) > collect: [:ea | 2 * ea]. > foo upToNil. "#(4 8 12)" upToNil -> upToEnd? :D Btw: I really like this api, can we do such things with Xtreams, too? Best -Tobias > > It is tested. :-) > > Thanks Patrick for the idea. > > Best, > Marcel From eliot.miranda at gmail.com Mon Apr 11 18:01:06 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 11 18:01:12 2016 Subject: [squeak-dev] Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> Message-ID: <21A63306-BCC1-43EE-AFF2-AD3768EAE34D@gmail.com> > On Apr 11, 2016, at 10:59 AM, Tobias Pape wrote: > > >> On 11.04.2016, at 17:57, marcel.taeumel wrote: >> >> Hi, there! >> >> Please try the attached change set: stream-chains.cs >> >> >> It adds the possibility to attach transformations to streams using >> generators. >> >> Example: >> >> foo := (#(1 2 3 4 5 6) readStream >> select: [:ea | ea even]) >> collect: [:ea | 2 * ea]. >> foo upToNil. "#(4 8 12)" > > upToNil -> upToEnd? :D +1 > > Btw: I really like this api, can we do such things with Xtreams, too? > > Best > -Tobias >> >> It is tested. :-) >> >> Thanks Patrick for the idea. >> >> Best, >> Marcel > > > > From frank.shearar at gmail.com Mon Apr 11 20:27:57 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Mon Apr 11 20:27:59 2016 Subject: [squeak-dev] Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> Message-ID: On 11 April 2016 at 10:59, Tobias Pape wrote: > > On 11.04.2016, at 17:57, marcel.taeumel wrote: > > > Hi, there! > > > > Please try the attached change set: stream-chains.cs > > > > > > It adds the possibility to attach transformations to streams using > > generators. > > > > Example: > > > > foo := (#(1 2 3 4 5 6) readStream > > select: [:ea | ea even]) > > collect: [:ea | 2 * ea]. > > foo upToNil. "#(4 8 12)" > > upToNil -> upToEnd? :D > > Btw: I really like this api, can we do such things with Xtreams, too? > Yes. I wrote up an intro a few years back, after Michael presented Xtreams at UKSTUG: http://www.lshift.net/blog/2010/11/29/xtreams-framework-for-squeak/ frank > Best > -Tobias > > > > It is tested. :-) > > > > Thanks Patrick for the idea. > > > > Best, > > Marcel > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160411/30a5ddf7/attachment.htm From commits at source.squeak.org Mon Apr 11 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Apr 11 21:55:06 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160411215502.9436.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009573.html Name: Morphic-mt.1105 Ancestors: Morphic-cmm.1104 Fixes deferred balloon tips that showed up at the hand but the hand has already moved above another morph. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009574.html ============================================= From Marcel.Taeumel at hpi.de Tue Apr 12 06:38:08 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 12 07:10:00 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> Message-ID: <1460443088494-4889453.post@n4.nabble.com> Hi Tobias, this version is made for endless streams, not the ones the always operate on a collection but sockets etc. So, the generator never ends and hence #atEnd is never true. I thought that #upToNil might be sufficient and also practical for other streams. Best, Marcel -- View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889453.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From jelena at misticnabica.hr Tue Apr 12 07:10:10 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Tue Apr 12 07:10:22 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... Message-ID: <182F4D498FA3474A8DF9AE2619543353.MAI@server2.totohost.hr> From Marcel.Taeumel at hpi.de Tue Apr 12 06:40:02 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 12 07:11:53 2016 Subject: [squeak-dev] Re: WeakArray finalization never yields In-Reply-To: References: <1460378536884-4889361.post@n4.nabble.com> <1460389996799-4889387.post@n4.nabble.com> Message-ID: <1460443202170-4889455.post@n4.nabble.com> Hi Levente, this is just a theoretical problem. You are right, a single executor can take any time. However, what about supporting a vast load of small executors? We could add support for that with a delay or a yield. Best, Marcel -- View this message in context: http://forum.world.st/WeakArray-finalization-never-yields-tp4889361p4889455.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Apr 12 06:45:49 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 12 07:17:40 2016 Subject: [squeak-dev] Adding a "media priority" ... Message-ID: <1460443549784-4889456.post@n4.nabble.com> Hi, there! Would it make sense to add a "media priority" (55) for processes? Right now, I am concerned about sound players running at the same priority as the weak array finalization routine, which is "user interrupt priority" (50). Note that CMD+. interruption works up to 59. Here is a change set: media-priority.cs Best, Marcel -- View this message in context: http://forum.world.st/Adding-a-media-priority-tp4889456.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Das.Linux at gmx.de Tue Apr 12 09:10:37 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Apr 12 09:10:43 2016 Subject: [squeak-dev] Generators on Streams on Generators on Collections on ... In-Reply-To: <1460443088494-4889453.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> Message-ID: On 12.04.2016, at 08:38, marcel.taeumel wrote: > Hi Tobias, > > this version is made for endless streams, not the ones the always operate on > a collection but sockets etc. So, the generator never ends and hence #atEnd > is never true. I thought that #upToNil might be sufficient and also > practical for other streams. > > Best, > Marcel Sounds reasonable :) Best regards -Tobias From commits at source.squeak.org Tue Apr 12 09:24:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 09:24:45 2016 Subject: [squeak-dev] The Trunk: Collections-mt.686.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.686.mcz ==================== Summary ==================== Name: Collections-mt.686 Author: mt Time: 12 April 2016, 11:24:26.579799 am UUID: 3ce0e394-c4eb-9c4d-9367-4f885e4a62f8 Ancestors: Collections-ul.685 Adds possibility to map and filter streams using generators. There are *Infinitely-versions of map and filter to support streams that can have contents again after #atEnd returned true - like socket streams. In that case, there is an #upToNil to get a chunk of objects to work with. =============== Diff against Collections-ul.685 =============== Item was added: + ----- Method: Stream>>collect: (in category 'enumerating') ----- + collect: block + + ^ Generator on: [:g | + [self atEnd] whileFalse: [ + g yield: (self next + ifNil: [nil] + ifNotNil: [:object | block value: object])]]! Item was added: + ----- Method: Stream>>collectInfinitely: (in category 'enumerating - infinitely') ----- + collectInfinitely: block + + ^ Generator on: [:g | + [ + g yield: (self next + ifNil: [nil] + ifNotNil: [:object | block value: object]) + ] repeat ]! Item was added: + ----- Method: Stream>>gather: (in category 'enumerating') ----- + gather: block + + ^ Generator on: [:g | + [self atEnd] whileFalse: [ + self next + ifNil: [g yield: nil] + ifNotNil: [:object | + (block value: object) do: [:ea | + g yield: ea]]]]! Item was added: + ----- Method: Stream>>gatherInfinitely: (in category 'enumerating - infinitely') ----- + gatherInfinitely: block + + ^ Generator on: [:g | + [ + self next + ifNil: [g yield: nil] + ifNotNil: [:object | + (block value: object) in: [:result | | n | + result isStream "Simulate upToNil for infinite gathering." + ifTrue: [ [n := result next] whileNotNil: [g yield: n] ] + ifFalse: [result do: [:ea | g yield: ea]]]] + ] repeat ]! Item was added: + ----- Method: Stream>>nextSatisfy: (in category 'accessing') ----- + nextSatisfy: aBlock + + self do: [:each | (aBlock value: each) ifTrue: [^ each]]. + Error signal: 'No object could satisfy the block'.! Item was added: + ----- Method: Stream>>reject: (in category 'enumerating') ----- + reject: aBlock + + ^ self select: [:element | (aBlock value: element) == false]! Item was added: + ----- Method: Stream>>rejectInfinitely: (in category 'enumerating - infinitely') ----- + rejectInfinitely: aBlock + + ^ self selectInfinitely: [:element | (aBlock value: element) == false]! Item was added: + ----- Method: Stream>>select: (in category 'enumerating') ----- + select: block + + ^ Generator on: [:g | + [self atEnd] whileFalse: [ + self next + ifNil: [g yield: nil] + ifNotNil: [:object | + (block value: object) + ifTrue: [g yield: object]]]]! Item was added: + ----- Method: Stream>>select:thenCollect: (in category 'enumerating') ----- + select: block thenCollect: anotherBlock + + ^ (self select: block) collect: anotherBlock! Item was added: + ----- Method: Stream>>selectInfinitely: (in category 'enumerating - infinitely') ----- + selectInfinitely: block + + ^ Generator on: [:g | + [ + self next + ifNil: [g yield: nil] + ifNotNil: [:object | + (block value: object) + ifTrue: [g yield: object]] + ] repeat ]! Item was changed: ----- Method: Stream>>upToEnd (in category 'accessing') ----- upToEnd + "Answer the remaining elements in the stream." + - "answer the remaining elements in the string" | elements | elements := OrderedCollection new. + [self atEnd] whileFalse: [ + elements add: self next]. + ^ elements! - [ self atEnd ] whileFalse: [ - elements add: self next ]. - ^elements! Item was added: + ----- Method: Stream>>upToNil (in category 'accessing') ----- + upToNil + "Answer all elements in the stream until a nil shows up." + + | elements next | + elements := OrderedCollection new. + [next := self next] whileNotNil: [ + elements add: next]. + ^ elements! From commits at source.squeak.org Tue Apr 12 09:25:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 09:25:39 2016 Subject: [squeak-dev] The Trunk: CollectionsTests-mt.260.mcz Message-ID: Marcel Taeumel uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-mt.260.mcz ==================== Summary ==================== Name: CollectionsTests-mt.260 Author: mt Time: 12 April 2016, 11:25:28.083799 am UUID: 82d502c8-eb72-5a43-989f-f49c08225575 Ancestors: CollectionsTests-mt.259 Tests for latest stream additions. =============== Diff against CollectionsTests-mt.259 =============== Item was added: + ----- Method: ReadStreamTest>>testCollect (in category 'tests - enumerating') ----- + testCollect + + | stream | + stream := (self streamOn: #(1 2 3 4)) collect: [:num | 2 * num]. + self + assert: (stream next: 4) asArray = #(2 4 6 8); + assert: stream atEnd; + assert: stream next isNil.! Item was added: + ----- Method: ReadStreamTest>>testCollectInfinitely (in category 'tests - enumerating - infinitely') ----- + testCollectInfinitely + + | stream | + stream := (self streamOn: #(1 2 3 4)) collectInfinitely: [:num | 2 * num]. + self + assert: stream upToNil asArray = #(2 4 6 8); + deny: stream atEnd; + assert: stream next isNil.! Item was added: + ----- Method: ReadStreamTest>>testGather (in category 'tests - enumerating') ----- + testGather + + | stream | + stream := (self streamOn: #(1 2 3 4)) gather: [:num | 1 to: num]. + self assert: stream upToEnd asArray = #(1 1 2 1 2 3 1 2 3 4).! Item was added: + ----- Method: ReadStreamTest>>testGatherInfinitely (in category 'tests - enumerating - infinitely') ----- + testGatherInfinitely + + | stream | + stream := (self streamOn: #(1 2 3 4)) gatherInfinitely: [:num | 1 to: num]. + self + assert: stream upToNil asArray = #(1 1 2 1 2 3 1 2 3 4); + deny: stream atEnd; + assert: stream next isNil.! Item was added: + ----- Method: ReadStreamTest>>testGatherInfinitely2 (in category 'tests - enumerating - infinitely') ----- + testGatherInfinitely2 + "Try gathering infinite streams as results." + + | stream | + stream := (self streamOn: #(1 2 3 4)) gatherInfinitely: [:num | (self streamOn: (1 to: num)) collectInfinitely: [:ea | ea * ea]]. + self + assert: stream upToNil asArray = #(1 1 4 1 4 9 1 4 9 16); + deny: stream atEnd; + assert: stream next isNil.! Item was added: + ----- Method: ReadStreamTest>>testNextSatisfy (in category 'tests - accessing') ----- + testNextSatisfy + + | stream | + stream := self streamOn: #(1 2 3 4). + self assert: 2 = (stream nextSatisfy: [:ea | ea even]). + self assert: 4 = (stream nextSatisfy: [:ea | ea even]). + self should: [stream nextSatisfy: [:ea | ea even]] raise: Error.! Item was added: + ----- Method: ReadStreamTest>>testReject (in category 'tests - enumerating') ----- + testReject + + | stream | + stream := (self streamOn: #(1 2 3 4)) reject: [:num | num even]. + self assert: (stream next: 2) asArray = #(1 3).! Item was added: + ----- Method: ReadStreamTest>>testRejectInfinitely (in category 'tests - enumerating - infinitely') ----- + testRejectInfinitely + + | stream | + stream := (self streamOn: #(1 2 3 4)) rejectInfinitely: [:num | num even]. + self + assert: stream upToNil asArray = #(1 3); + deny: stream atEnd; + assert: stream next isNil.! Item was added: + ----- Method: ReadStreamTest>>testSelect (in category 'tests - enumerating') ----- + testSelect + + | stream | + stream := (self streamOn: #(1 2 3 4)) select: [:num | num even]. + self assert: (stream next: 2) asArray = #(2 4).! Item was added: + ----- Method: ReadStreamTest>>testSelectCollect (in category 'tests - enumerating') ----- + testSelectCollect + + | stream | + stream := ((self streamOn: #(1 2 3 4)) + select: [:num | num even]) + collect: [:num | 2 * num]. + self assert: (stream next: 2) asArray = #(4 8).! Item was added: + ----- Method: ReadStreamTest>>testSelectInfinitely (in category 'tests - enumerating - infinitely') ----- + testSelectInfinitely + + | stream | + stream := (self streamOn: #(1 2 3 4)) selectInfinitely: [:num | num even]. + self + assert: stream upToNil asArray = #(2 4); + deny: stream atEnd; + assert: stream next isNil.! Item was added: + ----- Method: ReadStreamTest>>testSelectThenCollect (in category 'tests - enumerating') ----- + testSelectThenCollect + + | stream | + stream := (self streamOn: #(1 2 3 4)) + select: [:num | num even] + thenCollect: [:num | 2 * num]. + self assert: (stream next: 2) asArray = #(4 8).! Item was added: + ----- Method: ReadStreamTest>>testUpToNil (in category 'tests - accessing') ----- + testUpToNil + + | stream | + stream := self streamOn: #(1 2 3 4). + self assert: stream upToNil asArray = #(1 2 3 4). + self assert: stream atEnd.! Item was added: + ----- Method: ReadStreamTest>>testUpToNil2 (in category 'tests - accessing') ----- + testUpToNil2 + + | stream | + stream := (self streamOn: #(1 2 3 4)) collect: [:ea | 2 * ea]. + self assert: stream upToNil asArray = #(2 4 6 8). + self assert: stream atEnd.! From commits at source.squeak.org Tue Apr 12 09:26:29 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 09:26:31 2016 Subject: [squeak-dev] The Trunk: Collections-mt.687.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.687.mcz ==================== Summary ==================== Name: Collections-mt.687 Author: mt Time: 12 April 2016, 11:26:12.382799 am UUID: e2089a91-178b-ab42-8e57-a71bfb023e74 Ancestors: Collections-mt.686 Support flatten across nested collections and streams. =============== Diff against Collections-mt.686 =============== Item was changed: ----- Method: SequenceableCollection>>flatten (in category 'converting') ----- flatten "Similar to #concatenation but removes all nesting except for strings. Example: {3 .4 .{2 .4 .{'hi'} .'ho'}} flatten = {3 .4 .2 .4 .'hi' .'ho'}" ^ Array streamContents: [:stream | self do: [:each | + ((each isCollection and: [each isString not]) or: [each isStream]) - (each isCollection and: [each isString not]) ifFalse: [stream nextPut: each] ifTrue: [stream nextPutAll: each flatten]]]! Item was added: + ----- Method: Stream>>flatten (in category 'converting') ----- + flatten + + ^ Generator on: [:g | + [self atEnd] whileFalse: [ + self next in: [:object | + ((object isCollection and: [object isString not]) or: [object isStream]) + ifFalse: [g yield: object] + ifTrue: [object flatten do: [:each | g yield: each]]]]]! Item was added: + ----- Method: Stream>>flattened (in category 'converting') ----- + flattened + "An alias for #flatten + This message's name is in line with messages like #sorted or #reversed + while #flatten's is in line with #reverse (as per ANSI, see comment there)" + + ^ self flatten! From commits at source.squeak.org Tue Apr 12 09:27:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 09:28:01 2016 Subject: [squeak-dev] The Trunk: CollectionsTests-mt.261.mcz Message-ID: Marcel Taeumel uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-mt.261.mcz ==================== Summary ==================== Name: CollectionsTests-mt.261 Author: mt Time: 12 April 2016, 11:27:49.454799 am UUID: 3b951241-c308-9446-92a3-4fdc63949e47 Ancestors: CollectionsTests-mt.260 Adds test for flatten across nesten streams and collections. =============== Diff against CollectionsTests-mt.260 =============== Item was added: + ----- Method: ReadStreamTest>>testFlatten (in category 'tests - enumerating') ----- + testFlatten + + | stream | + stream := (self streamOn: {3 .4 .{2 .4 .{'hi'} .'ho'}}) flatten. + self assert: (stream next: 6) asArray = {3 .4 .2 .4 .'hi' .'ho'}.! Item was added: + ----- Method: ReadStreamTest>>testFlatten2 (in category 'tests - enumerating') ----- + testFlatten2 + + | stream | + stream := (self streamOn: {3 .4 . self streamOn: {2 .4 .{'hi'} .'ho'} }) flatten. + self assert: (stream next: 6) asArray = {3 .4 .2 .4 .'hi' .'ho'}.! Item was added: + ----- Method: SequenceableCollectionTest>>testFlatten2 (in category 'tests - converting') ----- + testFlatten2 + + self + assert: {3 .4 .2 .4 .'hi' .'ho'} + equals: {3 .4 .{2 .4 .{'hi'} .'ho'} readStream } flatten + description: '#flatten should deeply inline all collection-like elements and work with streams'.! From francisco.garau at gmail.com Tue Apr 12 09:36:38 2016 From: francisco.garau at gmail.com (Francisco Garau) Date: Tue Apr 12 09:36:44 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <1460443088494-4889453.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> Message-ID: I think #all would read much nicer than #upToNil Cheers - Francisco > On 12 Apr 2016, at 07:38, marcel.taeumel wrote: > > Hi Tobias, > > this version is made for endless streams, not the ones the always operate on > a collection but sockets etc. So, the generator never ends and hence #atEnd > is never true. I thought that #upToNil might be sufficient and also > practical for other streams. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889453.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Marcel.Taeumel at hpi.de Tue Apr 12 09:17:10 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 12 09:49:04 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> Message-ID: <1460452630314-4889485.post@n4.nabble.com> I want it to sound like #upToEnd. :-) Best, Marcel -- View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889485.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Tue Apr 12 11:00:32 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Apr 12 11:00:39 2016 Subject: [squeak-dev] Re: [Pharo-dev] A weak/leak story In-Reply-To: <570CC2C3.4080104@gmail.com> References: <570CC2C3.4080104@gmail.com> Message-ID: <9524EF46-A4C0-46AF-A95D-F84A2457D56D@gmail.com> Hi Guille, > On Apr 12, 2016, at 2:41 AM, Guille Polito wrote: > > Hi list, > > With Pavel and Christophe we spend some time digging these last weaks chasing the memory leaks we were seeing lately. It is a long story to tell, so this mail is divided in three: > > 1) A brief intro to weak structures and finalization in Pharo, for those that do not know, > 2) A bit of history to explain what happened in pre-spur and post-spur, > 3) The actual cause of the memory leak today, > 4) How to avoid them in your application, and what are we going to do to prevent this in the future. forgive me for not responding with code immediately. Proper Ephemeron support is already in the Spur VM, plus a "proper" finalization queue, which allows us to drop the weak registries, which have a scaling problem. The proper Ephemeron support required ClassBuilder changes. I can provide Squeak code soon, but not until the end of the week; Cl?ment and I have two presentations to prepare today and tomorrow, and it's 4am... Replacing the weak registry with the proper finalization queue, in which appears both triggered ephemerons and weak collections that have lost references, means that individual ephemerons and weak collections can mourn, instead of the system having to scan all weak collections in all weak registries whenever a single weak collection loses a referent. My own Ephemeron story is that when I tried to replace the weak registry with the proper finalization queue in Squeak last year the mysterious symptom I had was the system running out of file descriptors and source file access stopping working. I haven't had time (or a collaborator of two) to dig further. So if there is a brave soul or two interested in getting ephemerons released and tested I'd love to get in touch and get this done. We need ephemerons and I expect we want a scalable weak mourning scheme. _,,,^..^,,,_ (phone) > For those that need/want/prefer just the practical explanation, you can jump over 2) and just read 1) and 3). > > ======================================================================== > 1. A weak explanation > ======================================================================== > > To cleanup objects upon garbage collection, Pharo and Squeak use a finalization mechanism based on a Weak Registry. That is, if you want to execute some cleanup (like closing a file) when an object is about to be collected, you have to put your object inside the weak registry with the corresponding executor/finalizer object. The object you want to 'track' is hold weakly by this weak registry i.e., if the only reference to the object is from the weak registry, it will be chosen for garbage collection. When this object is collected, a special process in the Pharo image will send #finalize to your executor object where you implement your cleanup. > > To interact with the weak registry, there are two main subscription messages: > > - #add:executor: > > Will add an object to the registry with the executor that is send as argument. > > - #add: > > Will add an object to the registry, and use as executor a 'shallow copy' of the object. > > Some conclusions to be made from this: > 1) If the executor points strongly to the object that we want to collect, it will never be collected. That is why the #add: message creates a copy of the object. > 2) If we do not provide an explicit executor, the registered object should already contain all information required for the finalization (like file handlers or external pointers). If not, the shallow copy will not be able to finalize correctly. > > Also: > - Using weak objects/references do not guarantee that #finalize will be called, you need to put your object inside the registry! > - Using weak objects/references do not guarantee that your object will be magically collected. You can still cause memory leaks! > > ======================================================================== > 2. A weak story > ======================================================================== > > Pharo and Squeak use historically the weak registry mentioned above. Because of the limitations that we mentioned, a different kind of weak structure called Ephemerons is required/more useful. To overcome some of these limitations, Igor (Hi Igor! maybe you're reading :)) implemented a couple of years ago a new finalization mechanism that, IIANM, worked as follows: > > - Some weak objects could have a first instance variable with a special linked list > - When the object was about to be collected, instead it was removed from the weak structure and put into its container's linked list > - On the image side, a special process iterated all special linked lists and executed #finalize on the weak objects > > This mechanism was called NewFinalization, in contrast with what was called LegacyFinalization. Of course these names are context dependent, since today's Pharo is back to the so called legacy one ;). NewFinalization was implemented as the default finalization mechanim in Pharo, both in VM and image side. But the VM changes remained in the Pharo branch of development. After some discussions, I remember Igor and Eliot agreed that what they actually needed were Ephemerons, and since Eliot had started working on Spur at that time, he said he would provide Ephemeric classes with the new object format. > > Basically, for those interested, an ephemeron is an association > > weak key -> strong value > > with the special quality that upon garbage collection all references to the weak key that are computed from the strong value (directly or indirectly) are taken as weak. This allows the collection of the weak key even if the strong value points to it, but requires some more machinery in the GC/VM. You can read more in here [1]. > > Until a couple of months/weeks ago, Pharo was using the NewFinalization mechanism with it's special image and VM support. And Squeak was using the 'Legacy' one. And then Spur arrived. > > So Spur arrived, and Eliot and Esteban made a lot of effort to simplify the VM's maintenance, and they merged both branches. As a conclusion, Pharo Spur VM did not support any more NewFinalization. This provoked at first some leaks because objects were not being finalized. A couple of weeks ago, we migrated back the image code to use the 'Legacy' mechanism, see issue 17537 [2]. > > And then finalization was not working either. Nor #finalize was being called on executors, nor objects in the weak registry were collected. As a symptom, opening any tool will cause 30 new everlasting registrations into the weakregistry, and no tools were collected. > > > ======================================================================== > 3. The cause > ======================================================================== > > After lots of digging, we finally found what was the particular issue causing objects in the weak registry to not be collected. In some words, it is caused by the normal belief that "weak objects are magical", which caused that weak references and finalizers are really spread over the system with no proper care. And particularly related to the usage of announcements. > > To explain better, I made some pictures for you :) > > > ***First, imagine you have a morph with its own local announcer. You subscribe to two events, and the graph will look like this. > > > > - the announcer knows two strong subscriptions > - the subscriptions know the announcer to be able to unregister > - the subscriptions know the registered object to send the message in case the event happens > > This forms a closed graph that will be collected. No problem so far. > > > ***Second, let's see what happens if we use weak subsriptions: > > > > - the announcer know two weak subscriptions > - these weak subscriptions know the announcer strongly to be able to unregister > - they also know the subscriber object but weakly > - THE difference is made by the weak registry: a global object that manages when and how objects are finalized. In the case of announcers, the weak registry will store weakly the subscriber morph, and strongly the weak announcer subscription. > > So far so good also: the references to the morph are weak. When the morph is collected, the weak registry will execute finalize on the announcement subscriptions. The subscriptions will unregister from the morph. > > > ***The really problematic case is the third one: mixing weak and strong subscriptions in the same announcer. > > > > The object graph is just a mixture of the two other ones. One weak subscription and one strong subscription. BUT: > > - there is a strong path from a global object (the weak registry) to the subscriber (the morph) > - then the morph is never collected > - the weak registry never finalizes the weak announcement subscription > - the graph remains there forever. > > > And these are the simple cases that show the problem. Imagine that you can have this same configuration but in cycles/chains among different morphs/announcements. Plus this is aggravated by evil globals (e.g., the theme and the HandMorph remembers the last focused morph, the system window class remembers the last top window even if it was closed...). > > > ======================================================================== > 4. The solution? > ======================================================================== > > Our solution for the moment is simple. We would like to enforce the following two rules for announcements: > > - announcers local to a morph should only be used strongly. YES, this may cause small hiccups and leaks, for example if you register a morph A to the announcer to another morph B. But in the long term, these two will form a closed graph and will be collected. > > - announcers used globally, such as the System announcer, should be used only and uniquely in a weak manner. Like that we ensure that they are loosely coupled for real. > > So, please, please, do not use weak announcements unless you're really sure of what you're doing. At least, until we have ephemerons and we are sure everything works as expected. Ephemerons would solve this in a more natural way: if we model the weak registry subscription as an ephemeron, any reference to the weak #key that arrives from the #value will be treated as weak also. > > Other action points we are working on: > - fixing tools to follow the rules above > - We are also writing tests to check that tools (gt*, Nautilus, Rubric, FT) do not leak. > - chasing other small memory leaks created by stepping, focus global variables... > > > ((fogbugz allIssues select: [ :each | each relatedToLeak ]) > flatCollect: [ :each | each participants ]) > do: #thanks > > > > [1] https://en.wikipedia.org/wiki/Ephemeron > [2] https://pharo.fogbugz.com/f/cases/17537/SystemAnnouncer-has-far-too-many-subscriptions -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/b18da2d6/attachment.htm From leves at caesar.elte.hu Tue Apr 12 13:46:30 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Apr 12 13:46:35 2016 Subject: [squeak-dev] Re: [Pharo-dev] A weak/leak story In-Reply-To: <9524EF46-A4C0-46AF-A95D-F84A2457D56D@gmail.com> References: <570CC2C3.4080104@gmail.com> <9524EF46-A4C0-46AF-A95D-F84A2457D56D@gmail.com> Message-ID: Hi Eliot, I think the only interesting question is: can I create an ephemeron in a Spur image? If yes, then weak collections can be significanly improved. If the answer is no, then the difference made by individual weak collection finalization will be insignificant for most users, since there are usually less than four WeakRegistries in an image, while other weak collections don't rely on the finalizationProcess. (One might get the impression that WeakKeyDictionary does, but that won't work as one might think unless the dictionary is the internal collection of a WeakRegistry.) Of course, the above only applies to Squeak. Levente On Tue, 12 Apr 2016, Eliot Miranda wrote: > Hi Guille, > > On Apr 12, 2016, at 2:41 AM, Guille Polito wrote: > > Hi list, > > With Pavel and Christophe we spend some time digging these last weaks chasing the memory leaks we were seeing lately. It is a long > story to tell, so this mail is divided in three: > > 1) A brief intro to weak structures and finalization in Pharo, for those that do not know, > 2) A bit of history to explain what happened in pre-spur and post-spur, > 3) The actual cause of the memory leak today, > 4) How to avoid them in your application, and what are we going to do to prevent this in the future. > > > ? ? forgive me for not responding with code immediately. ?Proper Ephemeron support is already in the Spur VM, plus a "proper" finalization queue, > which allows us to drop the weak registries, which have a scaling problem. ?The proper Ephemeron support required ClassBuilder changes. ?I can > provide Squeak code soon, but not until the end of the week; Cl?ment and I have two presentations to prepare today and tomorrow, and it's 4am... > > Replacing the weak registry with the proper finalization queue, in which appears both triggered ephemerons and weak collections that have lost > references, means that individual?ephemerons and weak collections can mourn, instead of the system having to scan all weak collections in all weak > registries whenever a single weak collection loses a referent. > > My own Ephemeron story is that when I tried to replace the weak registry with the proper finalization queue in Squeak last year the mysterious > symptom I had was the system running out of file descriptors and source file access stopping working. ?I haven't had time (or a collaborator of > two) to dig further. ?So if there is a brave soul or two interested in getting ephemerons released and tested I'd love to get in touch and get > this done. ?We need ephemerons and I expect we want a scalable weak mourning scheme. > > _,,,^..^,,,_ (phone) > > For those that need/want/prefer just the practical explanation, you can jump over 2) and just read 1) and 3). > > ======================================================================== > 1. A weak explanation > ======================================================================== > > To cleanup objects upon garbage collection, Pharo and Squeak use a finalization mechanism based on a Weak Registry. That is, if you > want to execute some cleanup (like closing a file) when an object is about to be collected, you have to put your object inside the > weak registry with the corresponding executor/finalizer object. The object you want to 'track' is hold weakly by this weak registry > i.e., if the only reference to the object is from the weak registry, it will be chosen for garbage collection. When this object is > collected, a special process in the Pharo image will send #finalize to your executor object where you implement your cleanup. > > To interact with the weak registry, there are two main subscription messages: > > - #add:executor: > > ? Will add an object to the registry with the executor that is send as argument. > > - #add: > > ? Will add an object to the registry, and use as executor a 'shallow copy' of the object. > > Some conclusions to be made from this: > ?1) If the executor points strongly to the object that we want to collect, it will never be collected. That is why the #add: message > creates a copy of the object. > ?2) If we do not provide an explicit executor, the registered object should already contain all information required for the > finalization (like file handlers or external pointers). If not, the shallow copy will not be able to finalize correctly. > > Also: > ?- Using weak objects/references do not guarantee that #finalize will be called, you need to put your object inside the registry! > ?- Using weak objects/references do not guarantee that your object will be magically collected. You can still cause memory leaks! > > ======================================================================== > 2. A weak story > ======================================================================== > > Pharo and Squeak use historically the weak registry mentioned above. Because of the limitations that we mentioned, a different kind of > weak structure called Ephemerons is required/more useful. To overcome some of these limitations, Igor (Hi Igor! maybe you're reading > :)) implemented a couple of years ago a new finalization mechanism that, IIANM, worked as follows: > > - Some weak objects could have a first instance variable with a special linked list > - When the object was about to be collected, instead it was removed from the weak structure and put into its container's linked list > - On the image side, a special process iterated all special linked lists and executed #finalize on the weak objects > > This mechanism was called NewFinalization, in contrast with what was called LegacyFinalization. Of course these names are context > dependent, since today's Pharo is back to the so called legacy one ;). NewFinalization was implemented as the default finalization > mechanim in Pharo, both in VM and image side. But the VM changes remained in the Pharo branch of development. After some discussions, > I remember Igor and Eliot agreed that what they actually needed were Ephemerons, and since Eliot had started working on Spur at that > time, he said he would provide Ephemeric classes with the new object format. > > Basically, for those interested, an ephemeron is an association > > ? weak key -> strong value > > with the special quality that upon garbage collection all references to the weak key that are computed from the strong value (directly > or indirectly) are taken as weak. This allows the collection of the weak key even if the strong value points to it, but requires some > more machinery in the GC/VM. You can read more in here [1]. > > Until a couple of months/weeks ago, Pharo was using the NewFinalization mechanism with it's special image and VM support. And Squeak > was using the 'Legacy' one. And then Spur arrived. > > So Spur arrived, and Eliot and Esteban made a lot of effort to simplify the VM's maintenance, and they merged both branches. As a > conclusion, Pharo Spur VM did not support any more NewFinalization. This provoked at first some leaks because objects were not being > finalized. A couple of weeks ago, we migrated back the image code to use the 'Legacy' mechanism, see issue 17537 [2]. > > And then finalization was not working either. Nor #finalize was being called on executors, nor objects in the weak registry were > collected. As a symptom, opening any tool will cause 30 new everlasting registrations into the weakregistry, and no tools were > collected. > > > ======================================================================== > 3. The cause > ======================================================================== > > After lots of digging, we finally found what was the particular issue causing objects in the weak registry to not be collected. In > some words, it is caused by the normal belief that "weak objects are magical", which caused that weak references and finalizers are > really spread over the system with no proper care. And particularly related to the usage of announcements. > > To explain better, I made some pictures for you :) > > > ***First, imagine you have a morph with its own local announcer. You subscribe to two events, and the graph will look like this. > > > > - the announcer knows two strong subscriptions > - the subscriptions know the announcer to be able to unregister > - the subscriptions know the registered object to send the message in case the event happens > > This forms a closed graph that will be collected. No problem so far. > > > ***Second, let's see what happens if we use weak subsriptions: > > > > - the announcer know two weak subscriptions > - these weak subscriptions know the announcer strongly to be able to unregister > - they also know the subscriber object but weakly > - THE difference is made by the weak registry: a global object that manages when and how objects are finalized. In the case of > announcers, the weak registry will store weakly the subscriber morph, and strongly the weak announcer subscription. > > So far so good also: the references to the morph are weak. When the morph is collected, the weak registry will execute finalize on the > announcement subscriptions. The subscriptions will unregister from the morph. > > > ***The really problematic case is the third one: mixing weak and strong subscriptions in the same announcer. > > > > The object graph is just a mixture of the two other ones. One weak subscription and one strong subscription. BUT: > > ?- there is a strong path from a global object (the weak registry) to the subscriber (the morph) > ?- then the morph is never collected > ?- the weak registry never finalizes the weak announcement subscription > ?- the graph remains there forever. > > > And these are the simple cases that show the problem. Imagine that you can have this same configuration but in cycles/chains among > different morphs/announcements. Plus this is aggravated by evil globals (e.g., the theme and the HandMorph remembers the last focused > morph, the system window class remembers the last top window even if it was closed...). > > > ======================================================================== > 4. The solution? > ======================================================================== > > Our solution for the moment is simple. We would like to enforce the following two rules for announcements: > > - announcers local to a morph should only be used strongly. YES, this may cause small hiccups and leaks, for example if you register a > morph A to the announcer to another morph B. But in the long term, these two will form a closed graph and will be collected. > > - announcers used globally, such as the System announcer, should be used only and uniquely in a weak manner. Like that we ensure that > they are loosely coupled for real. > > So, please, please, do not use weak announcements unless you're really sure of what you're doing. At least, until we have ephemerons > and we are sure everything works as expected. Ephemerons would solve this in a more natural way: if we model the weak registry > subscription as an ephemeron, any reference to the weak #key that arrives from the #value will be treated as weak also. > > Other action points we are working on: > - fixing tools to follow the rules above > - We are also writing tests to check that tools (gt*, Nautilus, Rubric, FT) do not leak. > - chasing other small memory leaks created by stepping, focus global variables... > > > ((fogbugz allIssues select: [ :each | each relatedToLeak ]) > ??? flatCollect: [ :each | each participants ]) > ??? ??? do: #thanks > > > > [1] https://en.wikipedia.org/wiki/Ephemeron > [2] https://pharo.fogbugz.com/f/cases/17537/SystemAnnouncer-has-far-too-many-subscriptions > > > From commits at source.squeak.org Tue Apr 12 15:31:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 15:31:19 2016 Subject: [squeak-dev] The Trunk: Tools-mt.688.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.688.mcz ==================== Summary ==================== Name: Tools-mt.688 Author: mt Time: 12 April 2016, 5:30:57.841201 pm UUID: bc552370-bdf0-2546-9e5c-a53a46d96323 Ancestors: Tools-ul.687 Fixes Inspector Browser tool. =============== Diff against Tools-ul.687 =============== Item was changed: Inspector subclass: #InspectorBrowser instanceVariableNames: 'fieldList msgList msgListIndex' classVariableNames: '' poolDictionaries: '' category: 'Tools-Inspector'! + + !InspectorBrowser commentStamp: 'mt 4/12/2016 17:29' prior: 0! + I am an inspector that also shows all messages the inspected objects can understand. I combine inspetor and code browser. + + InspectorBrowser openOn: Smalltalk! Item was removed: - ----- Method: InspectorBrowser class>>openAsMorphOn: (in category 'as yet unclassified') ----- - openAsMorphOn: anObject - "(InspectorBrowser openAsMorphOn: SystemOrganization) openInMVC" - | window inspector | - inspector := self inspect: anObject. - window := (SystemWindow labelled: anObject defaultLabelForInspector) - model: inspector. - - window addMorph: (PluggableListMorph on: inspector list: #fieldList - selected: #selectionIndex changeSelected: #toggleIndex: menu: #fieldListMenu:) - frame: (0@0 corner: 0.3@0.5). - window addMorph: (PluggableTextMorph on: inspector text: #contents accept: #accept: - readSelection: nil menu: #codePaneMenu:shifted:) - frame: (0.3@0 corner: 1.0@0.5). - window addMorph: (PluggableListMorph on: inspector list: #msgList - selected: #msgListIndex changeSelected: #msgListIndex: menu: #msgListMenu:) - frame: (0@0.5 corner: 0.3@1.0). - window addMorph: (PluggableTextMorph on: inspector text: #msgText accept: #msgAccept:from: - readSelection: nil menu: #msgPaneMenu:shifted:) - frame: (0.3@0.5 corner: 1.0@1.0). - - window setUpdatablePanesFrom: #(fieldList msgList). - window position: 16@0. "Room for scroll bar." - ^ window! Item was added: + ----- Method: InspectorBrowser>>buildWith: (in category 'tool builder') ----- + buildWith: builder + + | window fieldSpec valueSpec msgSpec codeSpec | + + window := builder pluggableWindowSpec new + model: self; + children: OrderedCollection new; + yourself. + + fieldSpec := builder pluggableListSpec new + model: self; + list: #fieldList; + getIndex: #selectionIndex; + setIndex: #toggleIndex:; + menu: #fieldListMenu:; + frame: (0@0 corner: 0.3@0.5). + + valueSpec := builder pluggableTextSpec new + model: self; + getText: #contents; + setText: #accept:; + menu: #codePaneMenu:shifted:; + frame: (0.3@0 corner: 1.0@0.5). + + msgSpec := builder pluggableListSpec new + model: self; + list: #msgList; + getIndex: #msgListIndex; + setIndex: #msgListIndex:; + menu: #msgListMenu; + frame: (0@0.5 corner: 0.3@1.0). + + codeSpec := builder pluggableTextSpec new + model: self; + getText: #msgText; + setText: #msgAccept:from:; + menu: #msgPaneMenu:shifted:; + frame: (0.3@0.5 corner: 1.0@1.0). + + window children addAll: {fieldSpec. valueSpec. msgSpec. codeSpec}. + ^ builder build: window! Item was removed: - ----- Method: TheWorldMenu>>inspectWorldModel (in category '*Tools') ----- - inspectWorldModel - | insp | - - insp := InspectorBrowser openOn: myWorld model. - myWorld addMorph: insp; startStepping: insp! From commits at source.squeak.org Tue Apr 12 15:33:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 15:33:18 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1106.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1106.mcz ==================== Summary ==================== Name: Morphic-mt.1106 Author: mt Time: 12 April 2016, 5:32:37.089201 pm UUID: 47c10647-b443-714c-87de-7a4d410a1e35 Ancestors: Morphic-mt.1105 Use the usual call to inspect world model. =============== Diff against Morphic-mt.1105 =============== Item was changed: ----- Method: TheWorldMenu>>debugMenu (in category 'construction') ----- debugMenu | menu | menu := self menu: 'debug...'. self fillIn: menu from: { { 'inspect world' . { #myWorld . #inspect } }. { 'explore world' . { #myWorld . #explore } }. + { 'inspect model' . { myWorld model . #inspect } }. - { 'inspect model' . { self . #inspectWorldModel } }. " { 'talk to world...' . { self . #typeInMessageToWorld } }." { 'start MessageTally' . { self . #startMessageTally } }. { 'start/browse MessageTally' . { self . #startThenBrowseMessageTally } }. { 'open process browser' . { self . #openProcessBrowser } }. nil. "(self hasProperty: #errorOnDraw) ifTrue: Later make this come up only when needed." { 'start drawing again' . { #myWorld . #resumeAfterDrawError } }. { 'start stepping again' . { #myWorld . #resumeAfterStepError } }. nil. { 'call #tempCommand' . { #myWorld . #tempCommand } }. { 'define #tempCommand' . { #myWorld . #defineTempCommand } }. }. self haltOnceEnabled ifTrue: [menu add: 'disable halt/inspect once' translated target: menu action: #clearHaltOnce] ifFalse: [menu add: 'enable halt/inspect once' translated target: menu action: #setHaltOnce]. ^menu ! From commits at source.squeak.org Tue Apr 12 15:33:35 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 15:33:37 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.20.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.20.mcz ==================== Summary ==================== Name: 51Deprecated-mt.20 Author: mt Time: 12 April 2016, 5:33:20.220201 pm UUID: fc058320-2b04-c246-bbd7-7a29d9b41a7a Ancestors: 51Deprecated-bf.19 Use the usual call to inspect world model. =============== Diff against 51Deprecated-bf.19 =============== Item was added: + ----- Method: TheWorldMenu>>inspectWorldModel (in category '*51Deprecated-Tools') ----- + inspectWorldModel + + myWorld model inspect.! From commits at source.squeak.org Tue Apr 12 15:47:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 15:47:45 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1107.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1107.mcz ==================== Summary ==================== Name: Morphic-mt.1107 Author: mt Time: 12 April 2016, 5:47:03.102201 pm UUID: 6bf0d0d3-52fb-2d40-939a-f6ac840fba55 Ancestors: Morphic-mt.1106 Do not spoil the Morphic package with uni-classes for new world models. We have "UserObjects" for that, which will already be used in Class >> newSubclass. =============== Diff against Morphic-mt.1106 =============== Item was changed: SystemOrganization addCategory: #'Morphic-Balloon'! SystemOrganization addCategory: #'Morphic-Basic'! SystemOrganization addCategory: #'Morphic-Basic-NewCurve'! SystemOrganization addCategory: #'Morphic-Borders'! SystemOrganization addCategory: #'Morphic-Collections-Arrayed'! SystemOrganization addCategory: #'Morphic-Demo'! SystemOrganization addCategory: #'Morphic-Events'! SystemOrganization addCategory: #'Morphic-Explorer'! SystemOrganization addCategory: #'Morphic-Kernel'! SystemOrganization addCategory: #'Morphic-Layouts'! SystemOrganization addCategory: #'Morphic-Menus'! SystemOrganization addCategory: #'Morphic-Menus-DockingBar'! - SystemOrganization addCategory: #'Morphic-Models'! SystemOrganization addCategory: #'Morphic-Pluggable Widgets'! SystemOrganization addCategory: #'Morphic-Sound'! SystemOrganization addCategory: #'Morphic-Sound-Synthesis'! SystemOrganization addCategory: #'Morphic-Support'! SystemOrganization addCategory: #'Morphic-Text Support'! SystemOrganization addCategory: #'Morphic-TrueType'! SystemOrganization addCategory: #'Morphic-Widgets'! SystemOrganization addCategory: #'Morphic-Windows'! SystemOrganization addCategory: #'Morphic-Worlds'! Item was removed: - ----- Method: MorphicModel class>>newSubclass (in category 'subclass creation') ----- - newSubclass - | i className | - i := 1. - [className := (self name , i printString) asSymbol. - Smalltalk includesKey: className] - whileTrue: [i := i + 1]. - - ^ self subclass: className - instanceVariableNames: '' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Models'! Item was removed: - MorphicModel subclass: #MorphicModel1 - instanceVariableNames: '' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Models'! Item was removed: - MorphicModel subclass: #MorphicModel2 - instanceVariableNames: '' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Models'! Item was removed: - MorphicModel subclass: #MorphicModel3 - instanceVariableNames: '' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Models'! From commits at source.squeak.org Tue Apr 12 15:53:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 15:53:44 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.130.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.130.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.130 Author: mt Time: 12 April 2016, 5:53:34.162201 pm UUID: 68b407c0-ded1-254b-b5ef-cd4d906cca5c Ancestors: ReleaseBuilder-mt.129 Discard user objects. =============== Diff against ReleaseBuilder-mt.129 =============== Item was added: + ----- Method: ReleaseBuilder class>>discardUserObjects (in category 'scripts') ----- + discardUserObjects + + Player removeUninstantiatedSubclassesSilently. + MorphicModel removeUninstantiatedSubclassesSilently.! Item was changed: ----- Method: ReleaseBuilder class>>prepareNewBuild: (in category 'scripts') ----- prepareNewBuild: anMCRepository "ReleaseBuilderTrunk prepareNewBuild" "Prepare everything that should be done for a new image build" MCMcmUpdater updateMissingPackages: true. MCMcmUpdater enableUpdatesForAllPackages. TTCFont registerAll. FileList initialize. RealEstateAgent standardSize: 600 @ 400. SystemVersion newVersion: self versionString. SMLoaderPlus setDefaultFilters: (OrderedCollection with: #filterSafelyAvailable). " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." self setDisplayExtent: 800 @ 600 ; switchToNewRepository: anMCRepository ; setPreferences ; "<-- remove this after defaultValueTableForCurrentRelease is fixed up." checkForDirtyPackages ; + discardUserObjects ; configureDesktop. Smalltalk cleanUp: true. MCFileBasedRepository flushAllCaches. MCHttpRepository clearCredentials. Utilities setAuthorInitials: String empty. Environment allInstancesDo: [ : env | env purgeUndeclared ]. Undeclared removeUnreferencedKeys. Smalltalk garbageCollect. [ self loadWellKnownPackages "<-- 4.5 is not ready for unloaded / reloaded packages" ]. Compiler recompileAll. self setProjectBackground: Color darkGray ; openWelcomeWorkspaces! From commits at source.squeak.org Tue Apr 12 16:27:15 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 16:27:18 2016 Subject: [squeak-dev] The Trunk: System-mt.813.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.813.mcz ==================== Summary ==================== Name: System-mt.813 Author: mt Time: 12 April 2016, 6:26:51.673201 pm UUID: 2291ee1b-1840-7a4f-8236-470c181b8b07 Ancestors: System-mt.812 Let projects decide how to clean-up their processes. =============== Diff against System-mt.812 =============== Item was changed: ----- Method: Project>>enter:revert:saveForRevert: (in category 'enter') ----- enter: returningFlag revert: revertFlag saveForRevert: saveForRevert "Install my ChangeSet, Transcript, and scheduled views as current globals. If returningFlag is true, we will return to the project from whence the current project was entered; don't change its previousProject link in this case. If saveForRevert is true, save the ImageSegment of the project being left. If revertFlag is true, make stubs for the world of the project being left. If revertWithoutAsking is true in the project being left, then always revert." | showZoom recorderOrNil old forceRevert response seg | self isIncompletelyLoaded ifTrue: [^self loadFromServer: true "try to get a fresh copy"]. self isCurrentProject ifTrue: [^ self]. "Check the guards" guards ifNotNil: [guards := guards reject: [:obj | obj isNil]. guards do: [:obj | obj okayToEnterProject ifFalse: [^ self]]]. CurrentProject world triggerEvent: #aboutToLeaveWorld. forceRevert := false. CurrentProject rawParameters ifNil: [revertFlag ifTrue: [^ self inform: 'nothing to revert to' translated]] ifNotNil: [saveForRevert ifFalse: [ forceRevert := CurrentProject projectParameters at: #revertWithoutAsking ifAbsent: [false]]]. forceRevert not & revertFlag ifTrue: [ response := (UIManager default chooseFrom: { 'Revert to saved version' translated. 'Cancel' translated. } title: 'Are you sure you want to destroy this Project\ and revert to an older version?\\(From the parent project, click on this project''s thumbnail.)' translated withCRs) = 1. response ifFalse: [^ self]]. revertFlag | forceRevert ifTrue: [seg := CurrentProject projectParameters at: #revertToMe ifAbsent: [ ^ self inform: 'nothing to revert to' translated]] ifFalse: [ CurrentProject makeThumbnail. returningFlag == #specialReturn ifTrue: [ProjectHistory forget: CurrentProject. "this guy is irrelevant" Project forget: CurrentProject] ifFalse: [ProjectHistory remember: CurrentProject]]. (revertFlag | saveForRevert | forceRevert) ifFalse: [(Preferences valueOfFlag: #projectsSentToDisk) ifTrue: [self storeToMakeRoom]]. CurrentProject abortResourceLoading. CurrentProject triggerClosingScripts. CurrentProject saveProjectPreferences. "Update the display depth and make a thumbnail of the current project" CurrentProject displayDepth: Display depth. old := CurrentProject. "for later" "Show the project transition. Note: The project zoom is run in the context of the old project, so that eventual errors can be handled accordingly" displayDepth == nil ifTrue: [displayDepth := Display depth]. self installNewDisplay: Display extent depth: displayDepth. (showZoom := self showZoom) ifTrue: [ self displayZoom: CurrentProject parent ~~ self]. CurrentProject pauseSoundPlayers. returningFlag == #specialReturn ifTrue: [ old removeChangeSetIfPossible. "keep this stuff from accumulating" nextProject := nil ] ifFalse: [ returningFlag ifTrue: [nextProject := CurrentProject] ifFalse: [previousProject := CurrentProject]. ]. recorderOrNil := old pauseEventRecorder. CurrentProject saveState. CurrentProject finalExitActions. "Now I am the current project." CurrentProject := self. self installProjectPreferences. ChangeSet newChanges: changeSet. TranscriptStream newTranscript: transcript. Sensor flushKeyboard. ProjectHistory remember: CurrentProject. self setWorldForEnterFrom: old recorder: recorderOrNil. saveForRevert ifTrue: [ Smalltalk garbageCollect. "let go of pointers" old storeSegment. "result :=" old world isInMemory ifTrue: ['Can''t seem to write the project.'] ifFalse: [old projectParameters at: #revertToMe put: old world xxxSegment clone]. 'Project written.']. "original is for coming back in and continuing." revertFlag | forceRevert ifTrue: [ seg clone revert]. "non-cloned one is for reverting again later" self removeParameter: #exportState. "Complete the enter: by launching a new process" self finalEnterActions. + self scheduleProcessForEnter: showZoom. + old terminateProcessForLeave. - self scheduleProcessForEnter: showZoom ! Item was added: + ----- Method: Project>>terminateProcessForLeave (in category 'enter') ----- + terminateProcessForLeave + "Clean-up processes that this project uses." + + self subclassResponsibility.! From commits at source.squeak.org Tue Apr 12 16:29:56 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 16:29:57 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1108.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1108.mcz ==================== Summary ==================== Name: Morphic-mt.1108 Author: mt Time: 12 April 2016, 6:29:13.607201 pm UUID: 55078748-a20e-1049-ad33-dc2def01dcbb Ancestors: Morphic-mt.1107 Let projects decide how to clean-up their processes. =============== Diff against Morphic-mt.1107 =============== Item was changed: ----- Method: MorphicProject>>finalExitActions (in category 'enter') ----- finalExitActions (world findA: ProjectNavigationMorph) ifNotNil: [:navigator | navigator retractIfAppropriate]. World := nil. ActiveWorld := ActiveHand := ActiveEvent := nil. + Sensor flushAllButDandDEvents. "Will be reinstalled by World>>install"! - Sensor flushAllButDandDEvents. "Will be reinstalled by World>>install" - - uiProcess := nil. "forget the uiProcess that soon will be terminated"! Item was changed: ----- Method: MorphicProject>>scheduleProcessForEnter: (in category 'enter') ----- scheduleProcessForEnter: showZoom "Complete the enter: by launching a new process" world repairEmbeddedWorlds. world triggerEvent: #aboutToEnterWorld. + self spawnNewProcess.! - self spawnNewProcessAndTerminateOld: true.! Item was added: + ----- Method: MorphicProject>>terminateProcessForLeave (in category 'enter') ----- + terminateProcessForLeave + "There is only one UI process. Kill it." + + self assert: Processor activeProcess == uiProcess. + uiProcess := nil. + Processor terminateActive.! From commits at source.squeak.org Tue Apr 12 16:30:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 16:30:29 2016 Subject: [squeak-dev] The Trunk: ST80-mt.200.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.200.mcz ==================== Summary ==================== Name: ST80-mt.200 Author: mt Time: 12 April 2016, 6:30:14.560201 pm UUID: c8e17ae9-8f1f-664a-beee-27026e58c790 Ancestors: ST80-mt.199 Let projects decide how to clean-up their processes. =============== Diff against ST80-mt.199 =============== Item was changed: ----- Method: MVCProject>>scheduleProcessForEnter: (in category 'enter') ----- scheduleProcessForEnter: showZoom "Complete the enter: by launching a new process" | newProcess | SystemWindow clearTopWindow. "break external ref to this project" newProcess := [ ScheduledControllers resetActiveController. "in case of walkback in #restore" showZoom ifFalse: [ScheduledControllers restore]. ScheduledControllers searchForActiveController ] newProcess priority: Processor userSchedulingPriority. newProcess resume. "lose the current process and its referenced morphs" - Processor terminateActive ! Item was added: + ----- Method: MVCProject>>terminateProcessForLeave (in category 'enter') ----- + terminateProcessForLeave + "There is only one active controller at a time. Kill it's process." + + self assert: Processor activeProcess == world activeControllerProcess. + Processor terminateActive.! From bert at freudenbergs.de Tue Apr 12 16:35:01 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Apr 12 16:35:05 2016 Subject: [squeak-dev] Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> Message-ID: <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> > On 12.04.2016, at 11:10, Tobias Pape wrote: > > > On 12.04.2016, at 08:38, marcel.taeumel wrote: > >> Hi Tobias, >> >> this version is made for endless streams, not the ones the always operate on >> a collection but sockets etc. So, the generator never ends and hence #atEnd >> is never true. I thought that #upToNil might be sufficient and also >> practical for other streams. >> >> Best, >> Marcel > > > Sounds reasonable :) Actually, no, it does not ;) If the stream hasn?t ended, the generator should continue. If the stream is at end, the generator should stop. We don?t need #upToNil, you just need to stop the generator when the stream ends: select: block ^ Generator on: [:g | [self atEnd] whileFalse: [ | object | object := self next. (block value: object) ifTrue: [g yield: object]]] ... and similarly for the other methods. With that change, #upToEnd works just fine on the generator. Agreed? :) - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/a0ecfca8/smime.bin From commits at source.squeak.org Tue Apr 12 16:52:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 16:52:02 2016 Subject: [squeak-dev] The Trunk: EToys-mt.133.mcz Message-ID: Marcel Taeumel uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-mt.133.mcz ==================== Summary ==================== Name: EToys-mt.133 Author: mt Time: 12 April 2016, 6:51:41.830201 pm UUID: 400acaea-780d-c145-8a55-5eeb945b644d Ancestors: EToys-mt.132 Simplifies uni-class clean-up. The method #allSubclassesWithLevelDo:startingLevel: is misleading because it is only a counter and no filter. =============== Diff against EToys-mt.132 =============== Item was changed: ----- Method: Player class>>removeUninstantiatedSubclassesSilently (in category 'housekeeping') ----- removeUninstantiatedSubclassesSilently "Remove the classes of any subclasses that have neither instances nor subclasses. Answer the number of bytes reclaimed" "Player removeUninstantiatedSubclassesSilently" + | oldFree | - | candidatesForRemoval oldFree | - oldFree := Smalltalk garbageCollect. + + self allSubclasses + select: [:c | (c isSystemDefined not and: [c instanceCount = 0]) and: [c subclasses isEmpty]] + thenDo: [:c | c removeFromSystemUnlogged]. + - candidatesForRemoval := OrderedCollection new. - self allSubclassesWithLevelDo: [:e :l | candidatesForRemoval add: e] startingLevel: 2. - candidatesForRemoval := candidatesForRemoval reverse. - candidatesForRemoval := - candidatesForRemoval select: [:c | - (c instanceCount = 0) and: [c subclasses size = 0]]. - candidatesForRemoval := candidatesForRemoval select: - [:aClass | aClass isSystemDefined not]. - candidatesForRemoval do: [:c | c removeFromSystemUnlogged]. ^ Smalltalk garbageCollect - oldFree! From commits at source.squeak.org Tue Apr 12 16:54:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 16:54:29 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1014.mcz Message-ID: Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.1014.mcz ==================== Summary ==================== Name: Kernel-mt.1014 Author: mt Time: 12 April 2016, 6:54:04.593201 pm UUID: b82ee689-f086-bc41-a438-f9c5b7e383c9 Ancestors: Kernel-mt.1013 Fixes uni-class clean-up by adding the check for #isSystemDefinied. =============== Diff against Kernel-mt.1013 =============== Item was changed: ----- Method: ClassDescription>>removeUninstantiatedSubclassesSilently (in category 'accessing class hierarchy') ----- removeUninstantiatedSubclassesSilently "Remove the classes of any subclasses that have neither instances nor subclasses. Answer the number of bytes reclaimed" + "self removeUninstantiatedSubclassesSilently" - "Player removeUninstantiatedSubclassesSilently" + | oldFree | - | candidatesForRemoval oldFree | - oldFree := Smalltalk garbageCollect. + + self subclasses + select: [:c | (c isSystemDefined not and: [c instanceCount = 0]) and: [c subclasses isEmpty]] + thenDo: [:c | c removeFromSystem]. + + ^ Smalltalk garbageCollect - oldFree! - candidatesForRemoval := - self subclasses select: [:c | - (c instanceCount = 0) and: [c subclasses size = 0]]. - candidatesForRemoval do: [:c | c removeFromSystem]. - ^Smalltalk garbageCollect - oldFree! From nicolas.cellier.aka.nice at gmail.com Tue Apr 12 17:23:44 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue Apr 12 17:23:47 2016 Subject: [squeak-dev] Generators on Streams on Generators on Collections on ... In-Reply-To: <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> Message-ID: 2016-04-12 18:35 GMT+02:00 Bert Freudenberg : > > > On 12.04.2016, at 11:10, Tobias Pape wrote: > > > > > > On 12.04.2016, at 08:38, marcel.taeumel wrote: > > > >> Hi Tobias, > >> > >> this version is made for endless streams, not the ones the always > operate on > >> a collection but sockets etc. So, the generator never ends and hence > #atEnd > >> is never true. I thought that #upToNil might be sufficient and also > >> practical for other streams. > >> > >> Best, > >> Marcel > > > > > > Sounds reasonable :) > > Actually, no, it does not ;) > > If the stream hasn?t ended, the generator should continue. If the stream > is at end, the generator should stop. > > We don?t need #upToNil, you just need to stop the generator when the > stream ends: > > select: block > ^ Generator on: [:g | > [self atEnd] whileFalse: [ > | object | > object := self next. > (block value: object) ifTrue: [g yield: object]]] > > ... and similarly for the other methods. With that change, #upToEnd works > just fine on the generator. > > Agreed? :) > > - Bert - > > > +1, what's so special about nil? For me upToNil is just upTo: nil Nicolas -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/ddc89843/attachment.htm From commits at source.squeak.org Tue Apr 12 17:41:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 17:41:25 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1109.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1109.mcz ==================== Summary ==================== Name: Morphic-mt.1109 Author: mt Time: 12 April 2016, 7:40:42.953943 pm UUID: 1f3d1aa2-1df5-7446-85d0-5262c3d99a83 Ancestors: Morphic-mt.1108 Reduce the use of globals in project classes. Clean-up code. =============== Diff against Morphic-mt.1108 =============== Item was removed: - ----- Method: MorphicProject>>addItem:toMenu:selection:requestor: (in category 'utilities') ----- - addItem: item toMenu: menu selection: action requestor: requestingProject - "Add a menu item representing this project to a menu being created by requestingProject" - - | color | - "Color to be used for this menu item" - color := self world isInMemory - ifTrue: [Color black] - ifFalse: [Color brown]. - "Menu item of type appropriate for current project" - requestingProject - addItem: item - toMenu: menu - selection: action - color: color - thumbnail: thumbnail! Item was added: + ----- Method: MorphicProject>>color (in category 'accessing') ----- + color + + ^ self world isInMemory + ifTrue: [Color black] + ifFalse: [Color brown]! Item was changed: ----- Method: MorphicProject>>interruptName:preemptedProcess: (in category 'utilities') ----- interruptName: labelString preemptedProcess: theInterruptedProcess "Create a Notifier on the active scheduling process with the given label." | preemptedProcess projectProcess | ActiveHand ifNotNil:[ActiveHand interrupted]. + ActiveWorld := world. "reinstall active globals" + ActiveHand := world primaryHand. - ActiveWorld := World. "reinstall active globals" - ActiveHand := World primaryHand. ActiveHand interrupted. "make sure this one's interrupted too" ActiveEvent := nil. projectProcess := self uiProcess. "we still need the accessor for a while" preemptedProcess := theInterruptedProcess ifNil: [Processor preemptedProcess]. "Only debug preempted process if its priority is >= projectProcess' priority" preemptedProcess priority < projectProcess priority ifTrue:[preemptedProcess := projectProcess]. preemptedProcess suspend. ToolSet interrupt: preemptedProcess label: labelString.! Item was changed: ----- Method: MorphicProject>>openImage:name:saveResource: (in category 'editors') ----- openImage: aForm name: fullName saveResource: aBoolean "Open a view on an image. If aBoolean is true, save the image as a project resource." aBoolean ifTrue: [self resourceManager addResource: aForm url: (FileDirectory urlForFileNamed: fullName) asString]. + (world drawingClass withForm: aForm) openInWorld - (World drawingClass withForm: aForm) openInWorld ! Item was changed: ----- Method: MorphicProject>>pauseEventRecorder (in category 'enter') ----- pauseEventRecorder "Suspend any event recorder, and return it if found" + ^ world pauseEventRecorder! - ^World pauseEventRecorder! Item was changed: ----- Method: MorphicProject>>pointerMoved (in category 'utilities') ----- pointerMoved "Pointer has moved during a drag operation. Perform any necessary updates. In Morphic, pay the price for reading the sensor directly." + world activeHand - World activeHand newMouseFocus: nil; showTemporaryCursor: nil; flushEvents! Item was changed: ----- Method: MorphicProject>>resetDisplay (in category 'display') ----- resetDisplay "Bring the display to a usable state after handling primitiveError." + world install "init hands and redisplay"! - World install "init hands and redisplay"! Item was changed: ----- Method: MorphicProject>>restoreDisplay (in category 'display') ----- restoreDisplay "Clear the screen to gray and then redisplay all the scheduled views." + ^ world restoreMorphicDisplay - ^ World restoreMorphicDisplay ! Item was changed: ----- Method: MorphicProject>>saveState (in category 'enter') ----- saveState "Save the current state in me prior to leaving this project" changeSet := ChangeSet current. thumbnail ifNotNil: [thumbnail hibernate]. - world := World. world sleep. transcript := Transcript. ! Item was changed: ----- Method: MorphicProject>>setFlaps (in category 'flaps support') ----- setFlaps | flapTabs flapIDs sharedFlapTabs navigationMorph | self flag: #toRemove. "check if this method still used by Etoys" flapTabs := ActiveWorld flapTabs. flapIDs := flapTabs collect: [:tab | tab knownName]. flapTabs do: [:tab | (tab isMemberOf: ViewerFlapTab) ifFalse: [tab isGlobalFlap ifTrue: [Flaps removeFlapTab: tab keepInList: false. tab currentWorld reformulateUpdatingMenus] ifFalse: [| referent | referent := tab referent. referent isInWorld ifTrue: [referent delete]. tab delete]]]. sharedFlapTabs := Flaps classPool at: #SharedFlapTabs. flapIDs do: [:id | id = 'Navigator' translated ifTrue: [sharedFlapTabs add: Flaps newNavigatorFlap]. id = 'Widgets' translated ifTrue: [sharedFlapTabs add: Flaps newWidgetsFlap]. id = 'Tools' translated ifTrue: [sharedFlapTabs add: Flaps newToolsFlap]. id = 'Squeak' translated ifTrue: [sharedFlapTabs add: Flaps newSqueakFlap]. id = 'Supplies' translated ifTrue: [sharedFlapTabs add: Flaps newSuppliesFlap]. id = 'Stack Tools' translated ifTrue: [sharedFlapTabs add: Flaps newStackToolsFlap]. id = 'Painting' translated ifTrue: [sharedFlapTabs add: Flaps newPaintingFlap]. id = 'Objects' translated ifTrue: [sharedFlapTabs add: Flaps newObjectsFlap ]]. 2 timesRepeat: [flapIDs do: [:id | Flaps enableDisableGlobalFlapWithID: id]]. ActiveWorld flapTabs do: [:flapTab | flapTab isCurrentlyTextual ifTrue: [flapTab changeTabText: flapTab knownName]]. Flaps positionNavigatorAndOtherFlapsAccordingToPreference. + navigationMorph := ActiveWorld findDeeplyA: ProjectNavigationMorph preferredNavigator. - navigationMorph := World findDeeplyA: ProjectNavigationMorph preferredNavigator. navigationMorph isNil ifTrue: [^ self]. navigationMorph allMorphs do: [:morph | morph class == SimpleButtonDelayedMenuMorph ifTrue: [(morph findA: ImageMorph) isNil ifTrue: [| label | label := morph label. label isNil ifFalse: [| name | name := morph knownName. name isNil ifTrue: [morph name: label. name := label]. morph label: name translated]]]]! Item was changed: ----- Method: MorphicProject>>showImage:named: (in category 'utilities') ----- showImage: aForm named: imageName "Show an image, possibly attached to the pointer for positioning" + HandMorph attach: (world drawingClass withForm: aForm) - HandMorph attach: (World drawingClass withForm: aForm) ! Item was changed: ----- Method: MorphicProject>>spawnNewProcess (in category 'active process') ----- spawnNewProcess uiProcess := [ + [world doOneCycle. Processor yield ] repeat. - [World doOneCycle. Processor yield ] repeat. ] newProcess priority: Processor userSchedulingPriority. uiProcess resume! Item was changed: ----- Method: MorphicProject>>textWindows (in category 'utilities') ----- textWindows "Answer a dictionary of all system windows for text display keyed by window title. Generate new window titles as required to ensure unique keys in the dictionary." | aDict windows title | aDict := Dictionary new. + windows := world submorphs select: [:m | m isSystemWindow]. - windows := World submorphs select: [:m | m isSystemWindow]. windows do: [:w | | assoc | assoc := w titleAndPaneText. assoc ifNotNil: [w holdsTranscript ifFalse: [title := assoc key. (aDict includesKey: title) ifTrue: [ | newKey | "Ensure unique keys in aDict" (1 to: 100) detect: [:e | newKey := title, '-', e asString. (aDict includesKey: newKey) not]. title := newKey. assoc := newKey -> assoc value]. aDict add: assoc]]]. ^ aDict ! Item was changed: ----- Method: Project>>isMorphic (in category '*Morphic-testing') ----- isMorphic + + ^ false! - "Complexity is because #isMVC is lazily installed" - ^ world isInMemory - ifTrue: [world isMorph] - ifFalse: [(self projectParameters at: #isMVC ifAbsent: [false]) not]! From commits at source.squeak.org Tue Apr 12 17:42:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 17:42:23 2016 Subject: [squeak-dev] The Trunk: ST80-mt.201.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.201.mcz ==================== Summary ==================== Name: ST80-mt.201 Author: mt Time: 12 April 2016, 7:42:10.072943 pm UUID: 318221b7-0676-3842-a01a-c0039d004bf8 Ancestors: ST80-mt.200 Reduce the use of globals in project classes. Clean-up code. =============== Diff against ST80-mt.200 =============== Item was changed: ----- Method: MVCProject>>addDeferredUIMessage: (in category 'scheduling') ----- addDeferredUIMessage: valuableObject "Arrange for valuableObject to be evaluated at a time when the user interface is in a coherent state." + world activeController - ScheduledControllers activeController ifNotNil: [:controller | controller addDeferredUIMessage: valuableObject]! Item was removed: - ----- Method: MVCProject>>addItem:toMenu:selection:requestor: (in category 'utilities') ----- - addItem: item toMenu: menu selection: action requestor: requestingProject - "Add a menu item representing this project to a menu being created by requestingProject" - - | color | - "Color to be used for this menu item, will be ignored if current project is MVC" - color := self world isInMemory - ifTrue: [Color veryVeryDarkGray] - ifFalse: [Color blue]. - "Menu item of type appropriate for current project" - requestingProject - addItem: item - toMenu: menu - selection: action - color: color - thumbnail: thumbnail! Item was added: + ----- Method: MVCProject>>color (in category 'accessing') ----- + color + + ^ self world isInMemory + ifTrue: [Color veryVeryDarkGray] + ifFalse: [Color blue]! Item was changed: ----- Method: MVCProject>>interruptName: (in category 'utilities') ----- interruptName: labelString "Create a Notifier on the active scheduling process with the given label." + ^ world interruptName: labelString - ^ ScheduledControllers interruptName: labelString ! Item was changed: ----- Method: MVCProject>>interruptName:preemptedProcess: (in category 'utilities') ----- interruptName: labelString preemptedProcess: theInterruptedProcess "Create a Notifier on the active scheduling process with the given label." + ^ world interruptName: labelString preemptedProcess: theInterruptedProcess - ^ ScheduledControllers interruptName: labelString preemptedProcess: theInterruptedProcess ! Item was changed: ----- Method: MVCProject>>resetDisplay (in category 'display') ----- resetDisplay "Bring the display to a usable state after handling primitiveError." + world searchForActiveController! - ScheduledControllers searchForActiveController! Item was changed: ----- Method: MVCProject>>restoreDisplay (in category 'display') ----- restoreDisplay "Clear the screen to gray and then redisplay all the scheduled views." Display extent = DisplayScreen actualScreenSize ifFalse: [DisplayScreen startUp. + world unCacheWindows]. + world restore! - ScheduledControllers unCacheWindows]. - ScheduledControllers restore! Item was changed: ----- Method: MVCProject>>saveState (in category 'enter') ----- saveState "Save the current state in me prior to leaving this project" changeSet := ChangeSet current. thumbnail ifNotNil: [thumbnail hibernate]. - world := ScheduledControllers. transcript := Transcript ! Item was changed: ----- Method: MVCProject>>scheduleProcessForEnter: (in category 'enter') ----- scheduleProcessForEnter: showZoom "Complete the enter: by launching a new process" | newProcess | SystemWindow clearTopWindow. "break external ref to this project" newProcess := [ + world resetActiveController. "in case of walkback in #restore" + showZoom ifFalse: [world restore]. + world searchForActiveController - ScheduledControllers resetActiveController. "in case of walkback in #restore" - showZoom ifFalse: [ScheduledControllers restore]. - ScheduledControllers searchForActiveController ] newProcess priority: Processor userSchedulingPriority. newProcess resume. "lose the current process and its referenced morphs" ! Item was changed: ----- Method: MVCProject>>setAsBackground: (in category 'utilities') ----- setAsBackground: aForm "Set aForm as a background image." + world screenController model form: aForm. - ScheduledControllers screenController model form: aForm. Display restoreAfter: []! Item was changed: ----- Method: MVCProject>>textWindows (in category 'utilities') ----- textWindows "Answer a dictionary of all system windows for text display keyed by window title. Generate new window titles as required to ensure unique keys in the dictionary." | aDict windows title | aDict := Dictionary new. + windows := world controllersSatisfying: - windows := ScheduledControllers controllersSatisfying: [:c | (c model isKindOf: StringHolder)]. windows do: [:aController | | textToUse aTextView | aTextView := aController view subViews detect: [:m | m isKindOf: PluggableTextView] ifNone: [nil]. textToUse := aTextView ifNil: [aController model contents] ifNotNil: [aTextView controller text]. "The latest edits, whether accepted or not" title := aController view label. (aDict includesKey: title) ifTrue: [ | newKey | "Ensure unique keys in aDict" (1 to: 100) detect: [:e | newKey := title, '-', e asString. (aDict includesKey: newKey) not]. title := newKey]. aDict at: title put: textToUse]. ^ aDict! Item was changed: ----- Method: MVCProject>>uiProcess (in category 'active process') ----- uiProcess + + ^ world activeControllerProcess! - ^ScheduledControllers activeControllerProcess! From commits at source.squeak.org Tue Apr 12 17:44:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 17:44:09 2016 Subject: [squeak-dev] The Trunk: System-mt.814.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.814.mcz ==================== Summary ==================== Name: System-mt.814 Author: mt Time: 12 April 2016, 7:43:43.456943 pm UUID: 6a0c1da2-9aeb-c14a-b091-46ea91f87972 Ancestors: System-mt.813 Code clean-up. Give new kinds of projects the chance to ignore the concept of sub-projects. =============== Diff against System-mt.813 =============== Item was removed: - ----- Method: Project>>addItem:toMenu:selection:project: (in category 'utilities') ----- - addItem: item toMenu: menu selection: action project: aProject - "Request aProject to add a menu item to represent it in the menu" - - ^ aProject addItem: item toMenu: menu selection: action requestor: self! Item was removed: - ----- Method: Project>>addItem:toMenu:selection:requestor: (in category 'utilities') ----- - addItem: item toMenu: menu selection: action requestor: requestingProject - "Add a menu item representing this project to a menu being created by requestingProject" - - self subclassResponsibility! Item was changed: ----- Method: Project>>buildJumpToMenu: (in category 'utilities') ----- buildJumpToMenu: menu "Make the supplied menu offer a list of potential projects, consisting of: * The previous-project chain * The next project, if any * The parent project, if any * All projects, alphabetically or hierarchically" | prev listed i next | listed := OrderedCollection with: self. i := 0. "The previous Project chain" prev := self previousProject. [(prev ~~ nil and: [(listed includes: prev) not])] whileTrue: [i := i + 1. listed add: prev. self addItem: prev name , ' (', ('back {1}' translated format:{i} ), ')' toMenu: menu selection: ('%back' , i printString) + color: prev color + thumbnail: prev thumbnail. - project: prev. prev := prev previousProject]. i > 0 ifTrue: [menu addLine]. "Then the next Project" (((next := self nextProject) ~~ nil) and: [(listed includes: next) not]) ifTrue: [self addItem: (next name, ' (', ('forward {1}' translated format:{1}), ')') toMenu: menu selection: next name + color: next color + thumbnail: next thumbnail]. - project: next]. next ~~ nil ifTrue: [menu addLine]. "Then the parent" self isTopProject ifFalse: [self addItem: self parent name , ' (', 'parent' translated, ')' toMenu: menu selection: #parent + color: self parent color + thumbnail: self parent thumbnail. - project: self parent. menu addLine]. "Finally all the projects, in hierarchical or alphabetical order:" (Preferences alphabeticalProjectMenu ifTrue: [Project allNamesAndProjects] ifFalse: [Project hierarchyOfNamesAndProjects]) do: [:aPair | | toAdd | toAdd := aPair last isCurrentProject ifTrue: [aPair first, ' (', 'current' translated, ')'] ifFalse: [aPair first]. self addItem: toAdd toMenu: menu selection: aPair first + color: aPair last color + thumbnail: aPair last thumbnail]. - project: aPair last]. ^ menu! Item was added: + ----- Method: Project>>color (in category 'accessing') ----- + color + "Color representation for this project." + + ^ Color black! Item was removed: - ----- Method: Project>>obsolete (in category 'OBSOLETE') ----- - obsolete - - self flag: #obsolete. - "instance variable - exitFlag is no longer used - activeProcess is on the way out - "! Item was changed: ----- Method: Project>>subProjects (in category 'release') ----- subProjects + "Answer a list of all the subprojects of the receiver. By default, there are no sub-projects." + + ^ #()! - "Answer a list of all the subprojects of the receiver." - ^self subclassResponsibility! Item was changed: ----- Method: Project>>uiProcess (in category 'active process') ----- uiProcess + "Answer the most important process of this project." + + self subclassResponsibility.! - self subclassResponsibility! From commits at source.squeak.org Tue Apr 12 17:49:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 17:49:30 2016 Subject: [squeak-dev] The Trunk: System-mt.815.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.815.mcz ==================== Summary ==================== Name: System-mt.815 Author: mt Time: 12 April 2016, 7:49:03.886943 pm UUID: c1de1458-727a-344c-81d2-6599cea8b7e9 Ancestors: System-mt.814 Managing the last change set, transcript, and thumbnail is shared between all kinds of projects. =============== Diff against System-mt.814 =============== Item was changed: ----- Method: Project>>saveState (in category 'enter') ----- saveState "Save the current state in me prior to leaving this project" + changeSet := ChangeSet current. + thumbnail ifNotNil: [thumbnail hibernate]. + transcript := Transcript.! - self subclassResponsibility! From commits at source.squeak.org Tue Apr 12 17:53:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 17:53:35 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1110.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1110.mcz ==================== Summary ==================== Name: Morphic-mt.1110 Author: mt Time: 12 April 2016, 7:52:49.946943 pm UUID: 875b0cff-8d16-4840-a401-bc9395d9457a Ancestors: Morphic-mt.1109 Code clean-up. =============== Diff against Morphic-mt.1109 =============== Item was changed: ----- Method: MorphicProject>>finalExitActions (in category 'enter') ----- finalExitActions (world findA: ProjectNavigationMorph) ifNotNil: [:navigator | navigator retractIfAppropriate]. World := nil. ActiveWorld := ActiveHand := ActiveEvent := nil. + Sensor flushAllButDandDEvents. "Will be reinstalled by World>>install" + + world sleep.! - Sensor flushAllButDandDEvents. "Will be reinstalled by World>>install"! Item was removed: - ----- Method: MorphicProject>>saveState (in category 'enter') ----- - saveState - "Save the current state in me prior to leaving this project" - - changeSet := ChangeSet current. - thumbnail ifNotNil: [thumbnail hibernate]. - world sleep. - transcript := Transcript. - ! From commits at source.squeak.org Tue Apr 12 17:53:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 17:54:01 2016 Subject: [squeak-dev] The Trunk: ST80-mt.202.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.202.mcz ==================== Summary ==================== Name: ST80-mt.202 Author: mt Time: 12 April 2016, 7:53:47.231943 pm UUID: dd77d345-6196-7647-be08-08526ab6ef0b Ancestors: ST80-mt.201 Code clean-up. =============== Diff against ST80-mt.201 =============== Item was removed: - ----- Method: MVCProject>>saveState (in category 'enter') ----- - saveState - "Save the current state in me prior to leaving this project" - - changeSet := ChangeSet current. - thumbnail ifNotNil: [thumbnail hibernate]. - transcript := Transcript - ! From commits at source.squeak.org Tue Apr 12 17:56:35 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 17:56:37 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1111.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1111.mcz ==================== Summary ==================== Name: Morphic-mt.1111 Author: mt Time: 12 April 2016, 7:55:59.206205 pm UUID: 2b9323d7-867b-d64d-bdf8-090059be1311 Ancestors: Morphic-mt.1110 Sorry for the hick-up. Morphic projects need to let world sleep first, then clean-up globals. =============== Diff against Morphic-mt.1110 =============== Item was changed: ----- Method: MorphicProject>>finalExitActions (in category 'enter') ----- finalExitActions + world sleep. + (world findA: ProjectNavigationMorph) ifNotNil: [:navigator | navigator retractIfAppropriate]. World := nil. ActiveWorld := ActiveHand := ActiveEvent := nil. + Sensor flushAllButDandDEvents. "Will be reinstalled by World>>install"! - Sensor flushAllButDandDEvents. "Will be reinstalled by World>>install" - - world sleep.! From Marcel.Taeumel at hpi.de Tue Apr 12 17:43:25 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 12 18:15:21 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> Message-ID: <1460483005846-4889611.post@n4.nabble.com> Hi Bert, yes. I made that so. It remains a question about #collectInfinitely: #selectInfinitely: #gatherInfinitely: #rejectInfinitely: #upToNil If you wrap this stuff around SocketStream, you can re-used even after a time window without data. So, should we remove it or keep it? It already is in trunk, if you don't know what I refer to. Best, Marcel -- View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889611.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From nicolas.cellier.aka.nice at gmail.com Tue Apr 12 19:44:50 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue Apr 12 19:44:54 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <1460483005846-4889611.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> Message-ID: Hi Marcel, So what are you trying to achieve? Is it something like (self nextAvailable: infinitelyMany)? -- fetch as much as possible from the stream, but don't block (wait) -- 2016-04-12 19:43 GMT+02:00 marcel.taeumel : > Hi Bert, > > yes. I made that so. > > It remains a question about > > #collectInfinitely: > #selectInfinitely: > #gatherInfinitely: > #rejectInfinitely: > #upToNil > > If you wrap this stuff around SocketStream, you can re-used even after a > time window without data. > > So, should we remove it or keep it? It already is in trunk, if you don't > know what I refer to. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889611.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/f9b630ca/attachment.htm From Marcel.Taeumel at hpi.de Tue Apr 12 19:33:39 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 12 20:05:40 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> Message-ID: <1460489619168-4889623.post@n4.nabble.com> Hi Nicolas, if you construct something like: | someStream | someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | ... ]. ... someStream next. ... someStream next: 5. ... You can only use someStream as long as there is data available while it is connected. Now, it can happen that socket streams are temporarily "at end" while no data is waiting in the buffer. Then, you would have to reconstruct someStream to continue. And know about it. Best, Marcel -- View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889623.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From robert.w.withers at gmail.com Tue Apr 12 20:07:33 2016 From: robert.w.withers at gmail.com (Robert Withers) Date: Tue Apr 12 20:07:38 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> Message-ID: <5B8A7B42-5E2A-4FE1-9CDE-17392B8D95B8@gmail.com> In my case I think of this as draining what has collected. How about #drainAvailable? --- robert > On Apr 12, 2016, at 15:44, Nicolas Cellier wrote: > > Hi Marcel, > So what are you trying to achieve? > Is it something like (self nextAvailable: infinitelyMany)? > -- fetch as much as possible from the stream, but don't block (wait) -- > > 2016-04-12 19:43 GMT+02:00 marcel.taeumel : >> Hi Bert, >> >> yes. I made that so. >> >> It remains a question about >> >> #collectInfinitely: >> #selectInfinitely: >> #gatherInfinitely: >> #rejectInfinitely: >> #upToNil >> >> If you wrap this stuff around SocketStream, you can re-used even after a >> time window without data. >> >> So, should we remove it or keep it? It already is in trunk, if you don't >> know what I refer to. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889611.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/e3e65459/attachment.htm From bert at freudenbergs.de Tue Apr 12 20:19:02 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Apr 12 20:19:07 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <1460489619168-4889623.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> Message-ID: On 12.04.2016, at 21:33, marcel.taeumel wrote: > > Hi Nicolas, > > if you construct something like: > > | someStream | > someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | ... ]. > ... > someStream next. > ... > someStream next: 5. > ... > > You can only use someStream as long as there is data available while it is > connected. Now, it can happen that socket streams are temporarily "at end" > while no data is waiting in the buffer. Then, you would have to reconstruct > someStream to continue. And know about it. AFAIK, ?at end? means there will not be any more data: SocketStream>>atEnd "There is nothing more to read when there is no more data in our inBuffer, the socket is disconnected and there is none available on the socket. Note that we need to check isConnected before isDataAvailable, otherwise data may sneak in in the meantime. But we check the buffer first, because it is faster.? self isInBufferEmpty ifFalse: [^false]. ^self isConnected not and: [self isDataAvailable not] - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/b6e937ff/smime.bin From lewis at mail.msen.com Tue Apr 12 20:47:53 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Apr 12 20:47:56 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> Message-ID: <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> FWIW, In OSProcess I used #upToEnd to mean "all of the data that is currently available in the stream" and #upToEndOfFile to mean "all of that data that will ever be available". Separately, the steam may be in blocking or non-blocking mode, where blocking means that #upToEndOfFile will block until EOF is detected. Dave > On 12.04.2016, at 21:33, marcel.taeumel wrote: >> >> Hi Nicolas, >> >> if you construct something like: >> >> | someStream | >> someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | >> ... ]. >> ... >> someStream next. >> ... >> someStream next: 5. >> ... >> >> You can only use someStream as long as there is data available while it >> is >> connected. Now, it can happen that socket streams are temporarily "at >> end" >> while no data is waiting in the buffer. Then, you would have to >> reconstruct >> someStream to continue. And know about it. > > AFAIK, ???at end??? means there will not be any more data: > > SocketStream>>atEnd > "There is nothing more to read when > there is no more data in our inBuffer, the socket > is disconnected and there is none available on the socket. > Note that we need to check isConnected before isDataAvailable, > otherwise data may sneak in in the meantime. But we check the > buffer first, because it is faster.??? > > self isInBufferEmpty ifFalse: [^false]. > ^self isConnected not > and: [self isDataAvailable not] > > > - Bert - > > > From commits at source.squeak.org Tue Apr 12 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 12 21:55:07 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160412215502.5341.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/009575.html Name: Collections-mt.686 Ancestors: Collections-ul.685 Adds possibility to map and filter streams using generators. There are *Infinitely-versions of map and filter to support streams that can have contents again after #atEnd returned true - like socket streams. In that case, there is an #upToNil to get a chunk of objects to work with. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009576.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009577.html Name: CollectionsTests-mt.260 Ancestors: CollectionsTests-mt.259 Tests for latest stream additions. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009578.html Name: Collections-mt.687 Ancestors: Collections-mt.686 Support flatten across nested collections and streams. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009579.html Name: CollectionsTests-mt.261 Ancestors: CollectionsTests-mt.260 Adds test for flatten across nesten streams and collections. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009580.html Name: Tools-mt.688 Ancestors: Tools-ul.687 Fixes Inspector Browser tool. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009581.html Name: Morphic-mt.1106 Ancestors: Morphic-mt.1105 Use the usual call to inspect world model. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009582.html Name: 51Deprecated-mt.20 Ancestors: 51Deprecated-bf.19 Use the usual call to inspect world model. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009583.html Name: Morphic-mt.1107 Ancestors: Morphic-mt.1106 Do not spoil the Morphic package with uni-classes for new world models. We have "UserObjects" for that, which will already be used in Class >> newSubclass. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009584.html Name: ReleaseBuilder-mt.130 Ancestors: ReleaseBuilder-mt.129 Discard user objects. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009585.html Name: System-mt.813 Ancestors: System-mt.812 Let projects decide how to clean-up their processes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009586.html Name: Morphic-mt.1108 Ancestors: Morphic-mt.1107 Let projects decide how to clean-up their processes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009587.html Name: ST80-mt.200 Ancestors: ST80-mt.199 Let projects decide how to clean-up their processes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009588.html Name: EToys-mt.133 Ancestors: EToys-mt.132 Simplifies uni-class clean-up. The method #allSubclassesWithLevelDo:startingLevel: is misleading because it is only a counter and no filter. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009589.html Name: Kernel-mt.1014 Ancestors: Kernel-mt.1013 Fixes uni-class clean-up by adding the check for #isSystemDefinied. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009590.html Name: Morphic-mt.1109 Ancestors: Morphic-mt.1108 Reduce the use of globals in project classes. Clean-up code. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009591.html Name: ST80-mt.201 Ancestors: ST80-mt.200 Reduce the use of globals in project classes. Clean-up code. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009592.html Name: System-mt.814 Ancestors: System-mt.813 Code clean-up. Give new kinds of projects the chance to ignore the concept of sub-projects. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009593.html Name: System-mt.815 Ancestors: System-mt.814 Managing the last change set, transcript, and thumbnail is shared between all kinds of projects. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009594.html Name: Morphic-mt.1110 Ancestors: Morphic-mt.1109 Code clean-up. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009595.html Name: ST80-mt.202 Ancestors: ST80-mt.201 Code clean-up. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/009596.html Name: Morphic-mt.1111 Ancestors: Morphic-mt.1110 Sorry for the hick-up. Morphic projects need to let world sleep first, then clean-up globals. ============================================= From eliot.miranda at gmail.com Wed Apr 13 05:51:41 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 05:51:45 2016 Subject: [Vm-dev] Re: [squeak-dev] Re: [Pharo-dev] A weak/leak story In-Reply-To: References: <570CC2C3.4080104@gmail.com> <9524EF46-A4C0-46AF-A95D-F84A2457D56D@gmail.com> Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: Ephemeron.st Type: application/octet-stream Size: 2184 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/5731dcbb/Ephemeron.obj -------------- next part -------------- A non-text attachment was scrubbed... Name: WeakArray newFinalization methods.st Type: application/octet-stream Size: 4590 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/5731dcbb/WeakArraynewFinalizationmethods.obj From jelena at misticnabica.hr Wed Apr 13 05:52:00 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Wed Apr 13 05:52:12 2016 Subject: [Vm-dev] Re: [squeak-dev] Re: [Pharo-dev] A weak/leak story Message-ID: <96140F203F0149FEA88FC6CA306FEFA9.MAI@server2.totohost.hr> From eliot.miranda at gmail.com Wed Apr 13 05:54:53 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 05:54:56 2016 Subject: [Vm-dev] Re: [squeak-dev] Re: [Pharo-dev] A weak/leak story In-Reply-To: <96140F203F0149FEA88FC6CA306FEFA9.MAI@server2.totohost.hr> References: <96140F203F0149FEA88FC6CA306FEFA9.MAI@server2.totohost.hr> Message-ID: Hi Jelena, every message you've posted in the last few days has been delivered to the list completely empty. Can you check your email lint? On Tue, Apr 12, 2016 at 10:52 PM, wrote: > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160412/c85d578b/attachment.htm From dionisiydk at gmail.com Wed Apr 13 07:38:14 2016 From: dionisiydk at gmail.com (Denis Kudriashov) Date: Wed Apr 13 07:38:37 2016 Subject: [Vm-dev] Re: [squeak-dev] Re: [Pharo-dev] A weak/leak story In-Reply-To: References: <570CC2C3.4080104@gmail.com> <9524EF46-A4C0-46AF-A95D-F84A2457D56D@gmail.com> Message-ID: Hi. I open issue 17990 2016-04-13 7:51 GMT+02:00 Eliot Miranda : > > > On Tue, Apr 12, 2016 at 6:46 AM, Levente Uzonyi > wrote: > >> >> Hi Eliot, >> >> I think the only interesting question is: can I create an ephemeron in a >> Spur image? >> If yes, then weak collections can be significanly improved. If the answer >> is no, then the difference made by individual weak collection finalization >> will be insignificant for most users, since there are usually less than >> four WeakRegistries in an image, while other weak collections don't rely on >> the finalizationProcess. (One might get the impression that >> WeakKeyDictionary does, but that won't work as one might think unless the >> dictionary is the internal collection of a WeakRegistry.) >> Of course, the above only applies to Squeak. >> > > The answer is yes. Find attached an Ephemeron definition (but with no > methods) and the new finalisation scheme. To use the scheme one must > evaluate Smalltalk supportsQueueingFinalization: true. Ephemeron needs a > suitable mourn method, which would send finalise to its key, but also > remove the ephemeron from whatever registry we keep ephemerons in. > > As I say, though, the first order of business is to find out why turning > on the scheme causes file access to fail very soon after. > > >> Levente >> >> >> On Tue, 12 Apr 2016, Eliot Miranda wrote: >> >> Hi Guille, >>> >>> On Apr 12, 2016, at 2:41 AM, Guille Polito >>> wrote: >>> >>> Hi list, >>> >>> With Pavel and Christophe we spend some time digging these last >>> weaks chasing the memory leaks we were seeing lately. It is a long >>> story to tell, so this mail is divided in three: >>> >>> 1) A brief intro to weak structures and finalization in Pharo, for >>> those that do not know, >>> 2) A bit of history to explain what happened in pre-spur and >>> post-spur, >>> 3) The actual cause of the memory leak today, >>> 4) How to avoid them in your application, and what are we going to >>> do to prevent this in the future. >>> >>> >>> forgive me for not responding with code immediately. Proper >>> Ephemeron support is already in the Spur VM, plus a "proper" finalization >>> queue, >>> which allows us to drop the weak registries, which have a scaling >>> problem. The proper Ephemeron support required ClassBuilder changes. I can >>> provide Squeak code soon, but not until the end of the week; Cl?ment and >>> I have two presentations to prepare today and tomorrow, and it's 4am... >>> >>> Replacing the weak registry with the proper finalization queue, in which >>> appears both triggered ephemerons and weak collections that have lost >>> references, means that individual ephemerons and weak collections can >>> mourn, instead of the system having to scan all weak collections in all weak >>> registries whenever a single weak collection loses a referent. >>> >>> My own Ephemeron story is that when I tried to replace the weak registry >>> with the proper finalization queue in Squeak last year the mysterious >>> symptom I had was the system running out of file descriptors and source >>> file access stopping working. I haven't had time (or a collaborator of >>> two) to dig further. So if there is a brave soul or two interested in >>> getting ephemerons released and tested I'd love to get in touch and get >>> this done. We need ephemerons and I expect we want a scalable weak >>> mourning scheme. >>> >>> _,,,^..^,,,_ (phone) >>> >>> For those that need/want/prefer just the practical explanation, >>> you can jump over 2) and just read 1) and 3). >>> >>> >>> ======================================================================== >>> 1. A weak explanation >>> >>> ======================================================================== >>> >>> To cleanup objects upon garbage collection, Pharo and Squeak use a >>> finalization mechanism based on a Weak Registry. That is, if you >>> want to execute some cleanup (like closing a file) when an object >>> is about to be collected, you have to put your object inside the >>> weak registry with the corresponding executor/finalizer object. >>> The object you want to 'track' is hold weakly by this weak registry >>> i.e., if the only reference to the object is from the weak >>> registry, it will be chosen for garbage collection. When this object is >>> collected, a special process in the Pharo image will send >>> #finalize to your executor object where you implement your cleanup. >>> >>> To interact with the weak registry, there are two main >>> subscription messages: >>> >>> - #add:executor: >>> >>> Will add an object to the registry with the executor that is >>> send as argument. >>> >>> - #add: >>> >>> Will add an object to the registry, and use as executor a >>> 'shallow copy' of the object. >>> >>> Some conclusions to be made from this: >>> 1) If the executor points strongly to the object that we want to >>> collect, it will never be collected. That is why the #add: message >>> creates a copy of the object. >>> 2) If we do not provide an explicit executor, the registered >>> object should already contain all information required for the >>> finalization (like file handlers or external pointers). If not, >>> the shallow copy will not be able to finalize correctly. >>> >>> Also: >>> - Using weak objects/references do not guarantee that #finalize >>> will be called, you need to put your object inside the registry! >>> - Using weak objects/references do not guarantee that your object >>> will be magically collected. You can still cause memory leaks! >>> >>> >>> ======================================================================== >>> 2. A weak story >>> >>> ======================================================================== >>> >>> Pharo and Squeak use historically the weak registry mentioned >>> above. Because of the limitations that we mentioned, a different kind of >>> weak structure called Ephemerons is required/more useful. To >>> overcome some of these limitations, Igor (Hi Igor! maybe you're reading >>> :)) implemented a couple of years ago a new finalization mechanism >>> that, IIANM, worked as follows: >>> >>> - Some weak objects could have a first instance variable with a >>> special linked list >>> - When the object was about to be collected, instead it was >>> removed from the weak structure and put into its container's linked list >>> - On the image side, a special process iterated all special linked >>> lists and executed #finalize on the weak objects >>> >>> This mechanism was called NewFinalization, in contrast with what >>> was called LegacyFinalization. Of course these names are context >>> dependent, since today's Pharo is back to the so called legacy one >>> ;). NewFinalization was implemented as the default finalization >>> mechanim in Pharo, both in VM and image side. But the VM changes >>> remained in the Pharo branch of development. After some discussions, >>> I remember Igor and Eliot agreed that what they actually needed >>> were Ephemerons, and since Eliot had started working on Spur at that >>> time, he said he would provide Ephemeric classes with the new >>> object format. >>> >>> Basically, for those interested, an ephemeron is an association >>> >>> weak key -> strong value >>> >>> with the special quality that upon garbage collection all >>> references to the weak key that are computed from the strong value (directly >>> or indirectly) are taken as weak. This allows the collection of >>> the weak key even if the strong value points to it, but requires some >>> more machinery in the GC/VM. You can read more in here [1]. >>> >>> Until a couple of months/weeks ago, Pharo was using the >>> NewFinalization mechanism with it's special image and VM support. And Squeak >>> was using the 'Legacy' one. And then Spur arrived. >>> >>> So Spur arrived, and Eliot and Esteban made a lot of effort to >>> simplify the VM's maintenance, and they merged both branches. As a >>> conclusion, Pharo Spur VM did not support any more >>> NewFinalization. This provoked at first some leaks because objects were not >>> being >>> finalized. A couple of weeks ago, we migrated back the image code >>> to use the 'Legacy' mechanism, see issue 17537 [2]. >>> >>> And then finalization was not working either. Nor #finalize was >>> being called on executors, nor objects in the weak registry were >>> collected. As a symptom, opening any tool will cause 30 new >>> everlasting registrations into the weakregistry, and no tools were >>> collected. >>> >>> >>> >>> ======================================================================== >>> 3. The cause >>> >>> ======================================================================== >>> >>> After lots of digging, we finally found what was the particular >>> issue causing objects in the weak registry to not be collected. In >>> some words, it is caused by the normal belief that "weak objects >>> are magical", which caused that weak references and finalizers are >>> really spread over the system with no proper care. And >>> particularly related to the usage of announcements. >>> >>> To explain better, I made some pictures for you :) >>> >>> >>> ***First, imagine you have a morph with its own local announcer. >>> You subscribe to two events, and the graph will look like this. >>> >>> >>> >>> - the announcer knows two strong subscriptions >>> - the subscriptions know the announcer to be able to unregister >>> - the subscriptions know the registered object to send the message >>> in case the event happens >>> >>> This forms a closed graph that will be collected. No problem so >>> far. >>> >>> >>> ***Second, let's see what happens if we use weak subsriptions: >>> >>> >>> >>> - the announcer know two weak subscriptions >>> - these weak subscriptions know the announcer strongly to be able >>> to unregister >>> - they also know the subscriber object but weakly >>> - THE difference is made by the weak registry: a global object >>> that manages when and how objects are finalized. In the case of >>> announcers, the weak registry will store weakly the subscriber >>> morph, and strongly the weak announcer subscription. >>> >>> So far so good also: the references to the morph are weak. When >>> the morph is collected, the weak registry will execute finalize on the >>> announcement subscriptions. The subscriptions will unregister from >>> the morph. >>> >>> >>> ***The really problematic case is the third one: mixing weak and >>> strong subscriptions in the same announcer. >>> >>> >>> >>> The object graph is just a mixture of the two other ones. One weak >>> subscription and one strong subscription. BUT: >>> >>> - there is a strong path from a global object (the weak registry) >>> to the subscriber (the morph) >>> - then the morph is never collected >>> - the weak registry never finalizes the weak announcement >>> subscription >>> - the graph remains there forever. >>> >>> >>> And these are the simple cases that show the problem. Imagine that >>> you can have this same configuration but in cycles/chains among >>> different morphs/announcements. Plus this is aggravated by evil >>> globals (e.g., the theme and the HandMorph remembers the last focused >>> morph, the system window class remembers the last top window even >>> if it was closed...). >>> >>> >>> >>> ======================================================================== >>> 4. The solution? >>> >>> ======================================================================== >>> >>> Our solution for the moment is simple. We would like to enforce >>> the following two rules for announcements: >>> >>> - announcers local to a morph should only be used strongly. YES, >>> this may cause small hiccups and leaks, for example if you register a >>> morph A to the announcer to another morph B. But in the long term, >>> these two will form a closed graph and will be collected. >>> >>> - announcers used globally, such as the System announcer, should >>> be used only and uniquely in a weak manner. Like that we ensure that >>> they are loosely coupled for real. >>> >>> So, please, please, do not use weak announcements unless you're >>> really sure of what you're doing. At least, until we have ephemerons >>> and we are sure everything works as expected. Ephemerons would >>> solve this in a more natural way: if we model the weak registry >>> subscription as an ephemeron, any reference to the weak #key that >>> arrives from the #value will be treated as weak also. >>> >>> Other action points we are working on: >>> - fixing tools to follow the rules above >>> - We are also writing tests to check that tools (gt*, Nautilus, >>> Rubric, FT) do not leak. >>> - chasing other small memory leaks created by stepping, focus >>> global variables... >>> >>> >>> ((fogbugz allIssues select: [ :each | each relatedToLeak ]) >>> flatCollect: [ :each | each participants ]) >>> do: #thanks >>> >>> >>> >>> [1] https://en.wikipedia.org/wiki/Ephemeron >>> [2] >>> https://pharo.fogbugz.com/f/cases/17537/SystemAnnouncer-has-far-too-many-subscriptions >>> >> > _,,,^..^,,,_ > best, Eliot > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160413/bf19a380/attachment.htm From commits at source.squeak.org Wed Apr 13 08:21:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 13 08:22:01 2016 Subject: [squeak-dev] The Trunk: Collections-mt.688.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.688.mcz ==================== Summary ==================== Name: Collections-mt.688 Author: mt Time: 13 April 2016, 10:21:42.107044 am UUID: f8eaf0a0-9f3d-bd4d-b350-5437f277b970 Ancestors: Collections-mt.687 Remove infinite generators on streams due to lack of use cases. =============== Diff against Collections-mt.687 =============== Item was removed: - ----- Method: Stream>>collectInfinitely: (in category 'enumerating - infinitely') ----- - collectInfinitely: block - - ^ Generator on: [:g | - [ - g yield: (self next - ifNil: [nil] - ifNotNil: [:object | block value: object]) - ] repeat ]! Item was removed: - ----- Method: Stream>>gatherInfinitely: (in category 'enumerating - infinitely') ----- - gatherInfinitely: block - - ^ Generator on: [:g | - [ - self next - ifNil: [g yield: nil] - ifNotNil: [:object | - (block value: object) in: [:result | | n | - result isStream "Simulate upToNil for infinite gathering." - ifTrue: [ [n := result next] whileNotNil: [g yield: n] ] - ifFalse: [result do: [:ea | g yield: ea]]]] - ] repeat ]! Item was removed: - ----- Method: Stream>>rejectInfinitely: (in category 'enumerating - infinitely') ----- - rejectInfinitely: aBlock - - ^ self selectInfinitely: [:element | (aBlock value: element) == false]! Item was removed: - ----- Method: Stream>>selectInfinitely: (in category 'enumerating - infinitely') ----- - selectInfinitely: block - - ^ Generator on: [:g | - [ - self next - ifNil: [g yield: nil] - ifNotNil: [:object | - (block value: object) - ifTrue: [g yield: object]] - ] repeat ]! Item was removed: - ----- Method: Stream>>upToNil (in category 'accessing') ----- - upToNil - "Answer all elements in the stream until a nil shows up." - - | elements next | - elements := OrderedCollection new. - [next := self next] whileNotNil: [ - elements add: next]. - ^ elements! From commits at source.squeak.org Wed Apr 13 08:22:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 13 08:22:35 2016 Subject: [squeak-dev] The Trunk: CollectionsTests-mt.262.mcz Message-ID: Marcel Taeumel uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-mt.262.mcz ==================== Summary ==================== Name: CollectionsTests-mt.262 Author: mt Time: 13 April 2016, 10:22:24.408044 am UUID: 8c0ca403-4c4d-fc4f-88b2-245a00b65b80 Ancestors: CollectionsTests-mt.261 Remove infinite generators on streams due to lack of use cases. =============== Diff against CollectionsTests-mt.261 =============== Item was removed: - ----- Method: ReadStreamTest>>testCollectInfinitely (in category 'tests - enumerating - infinitely') ----- - testCollectInfinitely - - | stream | - stream := (self streamOn: #(1 2 3 4)) collectInfinitely: [:num | 2 * num]. - self - assert: stream upToNil asArray = #(2 4 6 8); - deny: stream atEnd; - assert: stream next isNil.! Item was removed: - ----- Method: ReadStreamTest>>testGatherInfinitely (in category 'tests - enumerating - infinitely') ----- - testGatherInfinitely - - | stream | - stream := (self streamOn: #(1 2 3 4)) gatherInfinitely: [:num | 1 to: num]. - self - assert: stream upToNil asArray = #(1 1 2 1 2 3 1 2 3 4); - deny: stream atEnd; - assert: stream next isNil.! Item was removed: - ----- Method: ReadStreamTest>>testGatherInfinitely2 (in category 'tests - enumerating - infinitely') ----- - testGatherInfinitely2 - "Try gathering infinite streams as results." - - | stream | - stream := (self streamOn: #(1 2 3 4)) gatherInfinitely: [:num | (self streamOn: (1 to: num)) collectInfinitely: [:ea | ea * ea]]. - self - assert: stream upToNil asArray = #(1 1 4 1 4 9 1 4 9 16); - deny: stream atEnd; - assert: stream next isNil.! Item was removed: - ----- Method: ReadStreamTest>>testRejectInfinitely (in category 'tests - enumerating - infinitely') ----- - testRejectInfinitely - - | stream | - stream := (self streamOn: #(1 2 3 4)) rejectInfinitely: [:num | num even]. - self - assert: stream upToNil asArray = #(1 3); - deny: stream atEnd; - assert: stream next isNil.! Item was removed: - ----- Method: ReadStreamTest>>testSelectInfinitely (in category 'tests - enumerating - infinitely') ----- - testSelectInfinitely - - | stream | - stream := (self streamOn: #(1 2 3 4)) selectInfinitely: [:num | num even]. - self - assert: stream upToNil asArray = #(2 4); - deny: stream atEnd; - assert: stream next isNil.! Item was removed: - ----- Method: ReadStreamTest>>testUpToNil (in category 'tests - accessing') ----- - testUpToNil - - | stream | - stream := self streamOn: #(1 2 3 4). - self assert: stream upToNil asArray = #(1 2 3 4). - self assert: stream atEnd.! Item was removed: - ----- Method: ReadStreamTest>>testUpToNil2 (in category 'tests - accessing') ----- - testUpToNil2 - - | stream | - stream := (self streamOn: #(1 2 3 4)) collect: [:ea | 2 * ea]. - self assert: stream upToNil asArray = #(2 4 6 8). - self assert: stream atEnd.! From craig at blackpagedigital.com Wed Apr 13 08:48:22 2016 From: craig at blackpagedigital.com (Craig Latta) Date: Wed Apr 13 08:55:12 2016 Subject: [squeak-dev] re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> Message-ID: Hi-- Nicolas writes: > So what [is Marcel] trying to achieve? Is it something like (self > nextAvailable: infinitelyMany)? -- fetch as much as possible from the > stream, but don't block (wait) Otherwise known simply as "nextAvailable", yes? -C -- Craig Latta Black Page Digital Amsterdam craig@blackpagedigital.com +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From commits at source.squeak.org Wed Apr 13 13:13:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 13 13:13:15 2016 Subject: [squeak-dev] The Inbox: Collections-CW.640.mcz Message-ID: A new version of Collections was added to project The Inbox: http://source.squeak.org/inbox/Collections-CW.640.mcz ==================== Summary ==================== Name: Collections-CW.640 UUID: a0706e52-62c7-4ec4-b22b-6d99aa062158 Ancestors: Collections-cmm.639 constantNameFor: handles all untypeable characters =============== Diff against Collections-cmm.639 =============== Item was changed: ----- Method: Character class>>constantNames (in category 'private') ----- constantNames + + ^ self class organization listAtCategoryNamed: 'accessing untypeable characters' + ! - ^ #( backspace cr delete escape lf null newPage space tab ).! From eliot.miranda at gmail.com Wed Apr 13 13:30:07 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 13:30:12 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <1460443088494-4889453.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> Message-ID: <7BAEFDE1-F900-4D6F-B609-037EBE78700D@gmail.com> > On Apr 11, 2016, at 11:38 PM, marcel.taeumel wrote: > > Hi Tobias, > > this version is made for endless streams, not the ones the always operate on > a collection but sockets etc. So, the generator never ends and hence #atEnd > is never true. I thought that #upToNil might be sufficient and also > practical for other streams. I disagree. In general it is wrong to assume nil is the end-of-stream value. In VW it is only a default, and one can set the end-of-stream value to something else, a facility we could use also. In some circumstances nil can be a valid element in the stream (#(nil true false) readStream). upToEnd is the right message to provide. _,,,^..^,,,_ (phone) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889453.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From eliot.miranda at gmail.com Wed Apr 13 13:31:55 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 13:32:00 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <1460483005846-4889611.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> Message-ID: <508AB166-8665-48E4-B64E-4776FFCA4823@gmail.com> > On Apr 12, 2016, at 10:43 AM, marcel.taeumel wrote: > > Hi Bert, > > yes. I made that so. > > It remains a question about > > #collectInfinitely: > #selectInfinitely: > #gatherInfinitely: > #rejectInfinitely: > #upToNil > > If you wrap this stuff around SocketStream, you can re-used even after a > time window without data. > > So, should we remove it or keep it? It already is in trunk, if you don't > know what I refer to. Remove upToNil. It is a mistake. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889611.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From eliot.miranda at gmail.com Wed Apr 13 13:35:07 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 13:35:16 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <1460489619168-4889623.post@n4.nabble.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> Message-ID: > On Apr 12, 2016, at 12:33 PM, marcel.taeumel wrote: > > Hi Nicolas, > > if you construct something like: > > | someStream | > someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | ... ]. > ... > someStream next. > ... > someStream next: 5. > ... > > You can only use someStream as long as there is data available while it is > connected. Now, it can happen that socket streams are temporarily "at end" > while no data is waiting in the buffer. Then, you would have to reconstruct > someStream to continue. And know about it. That's changing the definition of "at end". A socket stream is at end when it is closed. In thus circumstance a few stream implementations use basicAtEnd to answer if at the end of the current buffer's worth. But atEnd meaning "at the end of what's available so far" doesn't make sense, at least to me. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Generators-on-Streams-on-Generators-on-Collections-on-tp4889389p4889623.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From eliot.miranda at gmail.com Wed Apr 13 13:35:53 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 13:35:59 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> Message-ID: <4759C05A-5001-4478-8E98-9E76C85DC83D@gmail.com> > On Apr 12, 2016, at 1:19 PM, Bert Freudenberg wrote: > >> On 12.04.2016, at 21:33, marcel.taeumel wrote: >> >> Hi Nicolas, >> >> if you construct something like: >> >> | someStream | >> someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | ... ]. >> ... >> someStream next. >> ... >> someStream next: 5. >> ... >> >> You can only use someStream as long as there is data available while it is >> connected. Now, it can happen that socket streams are temporarily "at end" >> while no data is waiting in the buffer. Then, you would have to reconstruct >> someStream to continue. And know about it. > > AFAIK, ?at end? means there will not be any more data: > > SocketStream>>atEnd > "There is nothing more to read when > there is no more data in our inBuffer, the socket > is disconnected and there is none available on the socket. > Note that we need to check isConnected before isDataAvailable, > otherwise data may sneak in in the meantime. But we check the > buffer first, because it is faster.? > > self isInBufferEmpty ifFalse: [^false]. > ^self isConnected not > and: [self isDataAvailable not] > > > - Bert - +1 From eliot.miranda at gmail.com Wed Apr 13 13:36:26 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 13:36:36 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> Message-ID: <589734B2-BB17-43BC-9C89-C61D868145AD@gmail.com> > On Apr 12, 2016, at 1:47 PM, David T. Lewis wrote: > > FWIW, In OSProcess I used #upToEnd to mean "all of the data that is > currently available in the stream" and #upToEndOfFile to mean "all of that > data that will ever be available". Separately, the steam may be in > blocking or non-blocking mode, where blocking means that #upToEndOfFile > will block until EOF is detected. > > Dave yuck :-( > >>> On 12.04.2016, at 21:33, marcel.taeumel wrote: >>> >>> Hi Nicolas, >>> >>> if you construct something like: >>> >>> | someStream | >>> someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | >>> ... ]. >>> ... >>> someStream next. >>> ... >>> someStream next: 5. >>> ... >>> >>> You can only use someStream as long as there is data available while it >>> is >>> connected. Now, it can happen that socket streams are temporarily "at >>> end" >>> while no data is waiting in the buffer. Then, you would have to >>> reconstruct >>> someStream to continue. And know about it. >> >> AFAIK, ?at end? means there will not be any more data: >> >> SocketStream>>atEnd >> "There is nothing more to read when >> there is no more data in our inBuffer, the socket >> is disconnected and there is none available on the socket. >> Note that we need to check isConnected before isDataAvailable, >> otherwise data may sneak in in the meantime. But we check the >> buffer first, because it is faster.? >> >> self isInBufferEmpty ifFalse: [^false]. >> ^self isConnected not >> and: [self isDataAvailable not] >> >> >> - Bert - > > > From eliot.miranda at gmail.com Wed Apr 13 13:40:37 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 13:40:42 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> Message-ID: Dave, > On Apr 12, 2016, at 1:47 PM, David T. Lewis wrote: > > FWIW, In OSProcess I used #upToEnd to mean "all of the data that is > currently available in the stream" and #upToEndOfFile to mean "all of that > data that will ever be available". Separately, the steam may be in > blocking or non-blocking mode, where blocking means that #upToEndOfFile > will block until EOF is detected. I think this is a mistake and I hope you'll reconsider. #atEnd is well-defined, as Bert's example for SocketStream showed. If you choose to change the meaning in this one example you sow the seeds of confusion, and force people trying to use standard stream facilities (such as xstreams of generators) to implement exceptions to adapt to your alternative. That way leads to brittle and hard-to-understand code. Please change this. > > Dave > >>> On 12.04.2016, at 21:33, marcel.taeumel wrote: >>> >>> Hi Nicolas, >>> >>> if you construct something like: >>> >>> | someStream | >>> someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | >>> ... ]. >>> ... >>> someStream next. >>> ... >>> someStream next: 5. >>> ... >>> >>> You can only use someStream as long as there is data available while it >>> is >>> connected. Now, it can happen that socket streams are temporarily "at >>> end" >>> while no data is waiting in the buffer. Then, you would have to >>> reconstruct >>> someStream to continue. And know about it. >> >> AFAIK, ?at end? means there will not be any more data: >> >> SocketStream>>atEnd >> "There is nothing more to read when >> there is no more data in our inBuffer, the socket >> is disconnected and there is none available on the socket. >> Note that we need to check isConnected before isDataAvailable, >> otherwise data may sneak in in the meantime. But we check the >> buffer first, because it is faster.? >> >> self isInBufferEmpty ifFalse: [^false]. >> ^self isConnected not >> and: [self isDataAvailable not] >> >> >> - Bert - > > > From eliot.miranda at gmail.com Wed Apr 13 13:42:14 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 13:42:24 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> Message-ID: > On Apr 12, 2016, at 1:47 PM, David T. Lewis wrote: > > FWIW, In OSProcess I used #upToEnd to mean "all of the data that is > currently available in the stream" and #upToEndOfFile to mean "all of that > data that will ever be available". Separately, the steam may be in > blocking or non-blocking mode, where blocking means that #upToEndOfFile > will block until EOF is detected. You could use e.g. upToAvailable and upToEnd. > > Dave > >>> On 12.04.2016, at 21:33, marcel.taeumel wrote: >>> >>> Hi Nicolas, >>> >>> if you construct something like: >>> >>> | someStream | >>> someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | >>> ... ]. >>> ... >>> someStream next. >>> ... >>> someStream next: 5. >>> ... >>> >>> You can only use someStream as long as there is data available while it >>> is >>> connected. Now, it can happen that socket streams are temporarily "at >>> end" >>> while no data is waiting in the buffer. Then, you would have to >>> reconstruct >>> someStream to continue. And know about it. >> >> AFAIK, ?at end? means there will not be any more data: >> >> SocketStream>>atEnd >> "There is nothing more to read when >> there is no more data in our inBuffer, the socket >> is disconnected and there is none available on the socket. >> Note that we need to check isConnected before isDataAvailable, >> otherwise data may sneak in in the meantime. But we check the >> buffer first, because it is faster.? >> >> self isInBufferEmpty ifFalse: [^false]. >> ^self isConnected not >> and: [self isDataAvailable not] >> >> >> - Bert - > > > From robert.w.withers at gmail.com Wed Apr 13 14:31:52 2016 From: robert.w.withers at gmail.com (Robert Withers) Date: Wed Apr 13 14:31:57 2016 Subject: [squeak-dev] SecureSessionV1 is green Message-ID: <570E5858.3090005@gmail.com> It took a few days to align the implementation with the spec. It is in http://www.squeaksource.com/Cryptography.html I also moved the DistObjectPresentation project there, though it's buggy. There are too many people to name who have made this, all of this, possible. Thank you so very very much. -- Robert . .. ... ^,^ From asqueaker at gmail.com Wed Apr 13 14:50:30 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Apr 13 14:51:12 2016 Subject: [squeak-dev] The Inbox: Collections-CW.640.mcz In-Reply-To: <570e45ee.46ab8c0a.27de.ffffb820SMTPIN_ADDED_MISSING@mx.google.com> References: <570e45ee.46ab8c0a.27de.ffffb820SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Given that this list will not change very often, just having it hardcoded seems fine. On Wed, Apr 13, 2016 at 8:13 AM, wrote: > A new version of Collections was added to project The Inbox: > http://source.squeak.org/inbox/Collections-CW.640.mcz > > ==================== Summary ==================== > > Name: Collections-CW.640 > UUID: a0706e52-62c7-4ec4-b22b-6d99aa062158 > Ancestors: Collections-cmm.639 > > constantNameFor: handles all untypeable characters > > =============== Diff against Collections-cmm.639 =============== > > Item was changed: > ----- Method: Character class>>constantNames (in category 'private') ----- > constantNames > + > + ^ self class organization listAtCategoryNamed: 'accessing untypeable characters' > + ! > - ^ #( backspace cr delete escape lf null newPage space tab ).! > > From eliot.miranda at gmail.com Wed Apr 13 15:03:08 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 13 15:03:16 2016 Subject: [squeak-dev] The Inbox: Collections-CW.640.mcz In-Reply-To: References: <570e45ee.46ab8c0a.27de.ffffb820SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: > On Apr 13, 2016, at 7:50 AM, Chris Muller wrote: > > Given that this list will not change very often, just having it > hardcoded seems fine. +1. Plus chaos will ensue if one weed to try and produce a deployment image that discarded class organization. IMO it's find for non-trunk packages that are development oriented (such as VMMaker) to use class and system organization, and of course the programming tools interact with them. But base library code should not assume organizations are present. It's been a common thing to discard organizations when constructing deployment images for many years. >> On Wed, Apr 13, 2016 at 8:13 AM, wrote: >> A new version of Collections was added to project The Inbox: >> http://source.squeak.org/inbox/Collections-CW.640.mcz >> >> ==================== Summary ==================== >> >> Name: Collections-CW.640 >> UUID: a0706e52-62c7-4ec4-b22b-6d99aa062158 >> Ancestors: Collections-cmm.639 >> >> constantNameFor: handles all untypeable characters >> >> =============== Diff against Collections-cmm.639 =============== >> >> Item was changed: >> ----- Method: Character class>>constantNames (in category 'private') ----- >> constantNames >> + >> + ^ self class organization listAtCategoryNamed: 'accessing untypeable characters' >> + ! >> - ^ #( backspace cr delete escape lf null newPage space tab ).! > From Marcel.Taeumel at hpi.de Wed Apr 13 15:44:33 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 13 16:16:35 2016 Subject: [squeak-dev] Re: The Inbox: Collections-CW.640.mcz In-Reply-To: References: Message-ID: <1460562273555-4889766.post@n4.nabble.com> We have hard-coded categories in only a very few places such as AbstractEvent class >> #allItemKinds AbstractSound class >> #initSounds AbstractSound class >> #updateFMSounds There, however, contents are variable and may change. I agree that there is no need to make such a modification in this context. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Collections-CW-640-mcz-tp4889722p4889766.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Das.Linux at gmx.de Wed Apr 13 16:18:38 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Apr 13 16:18:41 2016 Subject: [squeak-dev] The Inbox: Collections-CW.640.mcz In-Reply-To: <1460562273555-4889766.post@n4.nabble.com> References: <1460562273555-4889766.post@n4.nabble.com> Message-ID: <51C3A642-4DBE-4067-85BB-35EAC4FBACFE@gmx.de> On 13.04.2016, at 17:44, marcel.taeumel wrote: > We have hard-coded categories in only a very few places such as > > AbstractEvent class >> #allItemKinds > AbstractSound class >> #initSounds > AbstractSound class >> #updateFMSounds > > There, however, contents are variable and may change. I agree that there is > no need to make such a modification in this context. Magritte used to use categories to identify its descriptions. Now it uses pragmas/method annotations for that. Best -Tobias From Marcel.Taeumel at hpi.de Wed Apr 13 18:56:49 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 13 19:28:56 2016 Subject: [squeak-dev] Re: The Inbox: Collections-CW.640.mcz In-Reply-To: <51C3A642-4DBE-4067-85BB-35EAC4FBACFE@gmx.de> References: <1460562273555-4889766.post@n4.nabble.com> <51C3A642-4DBE-4067-85BB-35EAC4FBACFE@gmx.de> Message-ID: <1460573809490-4889777.post@n4.nabble.com> Part of this discussion is related to tools. Message categories are just too easy to change. How many of you do "full text search" or "string search" any time they add/remove/change a message category? Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Collections-CW-640-mcz-tp4889722p4889777.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From asqueaker at gmail.com Wed Apr 13 21:13:36 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Apr 13 21:14:26 2016 Subject: [squeak-dev] Re: The Inbox: Collections-CW.640.mcz In-Reply-To: <1460573809490-4889777.post@n4.nabble.com> References: <1460562273555-4889766.post@n4.nabble.com> <51C3A642-4DBE-4067-85BB-35EAC4FBACFE@gmx.de> <1460573809490-4889777.post@n4.nabble.com> Message-ID: Tests are just as much a part of the tools and development process. We have the SUnit tool to expose that. On Wed, Apr 13, 2016 at 1:56 PM, marcel.taeumel wrote: > Part of this discussion is related to tools. Message categories are just too > easy to change. How many of you do "full text search" or "string search" any > time they add/remove/change a message category? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Inbox-Collections-CW-640-mcz-tp4889722p4889777.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From reliablerobots at gmail.com Wed Apr 13 22:03:06 2016 From: reliablerobots at gmail.com (ReliableRobots.com) Date: Wed Apr 13 22:03:28 2016 Subject: [squeak-dev] Help > Terse Guide to Squeak Message-ID: i suggest a Terse Guide to Squeak distinct from the existing Terse Guide to Smalltalk. this should include everything in the All-In-One not in the Terse Guide including; 1) What the Resources bundles are; why and how to use them 2) How to use common peripherals like internet, Webcam, Audio, printer 3) How to write .Windows dll's and Linux equivalents to interact with Squeak 4) How to use Squeak on a network with multiple computers and cores 5) How to package an application for deployment i.e. without Halos etc. 6) Interacting with other software and their file formats like .dxf, .pdf, docx 7) Advanced topics like moving from interpreted Smalltalk to.exe Smalltalk for size and speed. Although forum availability of answers is appreciated, it is a lid on productivity compared to having 90% of the answers in a Terse Guide. It would improve the existing Terse Guide to make it possible to copy examples to try out instead of just showing them. My interest is currently developing a robot controller in Squeak, which will require much of the above. i am aware there are at least two complete robot systems online in C++ and a toy robot system in Squeak but I'd prefer to do a real robot with Squeak as my robot operating system. But i need real access to code such as a tutorial on hooking up OpenCV or how to write my own video contour program to attempt video object identification and a like tutorial on working with Audio to recognize speech, which most software still does not do well. I'll need a balance system that can do this. It may cross the line between a toy robot and a real robot. https://www.facebook.com/ScientificCuriosities/videos/1211415568924654/ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160413/b31388fe/attachment.htm From jelena at misticnabica.hr Wed Apr 13 22:03:19 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Wed Apr 13 22:03:48 2016 Subject: [squeak-dev] Help > Terse Guide to Squeak Message-ID: <827820EDFE14475EBA08E0532A981D50.MAI@server2.totohost.hr> From cunningham.cb at gmail.com Wed Apr 13 22:14:32 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Wed Apr 13 22:14:53 2016 Subject: [squeak-dev] Help > Terse Guide to Squeak In-Reply-To: References: Message-ID: That would be interesting, although it would seem to stretch the 'terse' name. Maybe not - just terse, but not short. For what it is worth, I think the Resource Bundles are for Mac only - I know I always start off by purging them when I unpack the all-in-one (I'm on Windows). -cbc On Wed, Apr 13, 2016 at 3:03 PM, ReliableRobots.com < reliablerobots@gmail.com> wrote: > i suggest a Terse Guide to Squeak distinct from the existing Terse Guide > to Smalltalk. > this should include everything in the All-In-One not in the Terse Guide > including; > 1) What the Resources bundles are; why and how to use them > 2) How to use common peripherals like internet, Webcam, Audio, printer > 3) How to write .Windows dll's and Linux equivalents to interact with > Squeak > 4) How to use Squeak on a network with multiple computers and cores > 5) How to package an application for deployment i.e. without Halos etc. > 6) Interacting with other software and their file formats like .dxf, .pdf, > docx > 7) Advanced topics like moving from interpreted Smalltalk to.exe Smalltalk > for size and speed. > > Although forum availability of answers is appreciated, it is a lid on > productivity compared to having 90% of the answers in a Terse Guide. It > would improve the existing Terse Guide to make it possible to copy examples > to try out instead of just showing them. > > My interest is currently developing a robot controller in Squeak, which > will require much of the above. i am aware there are at least two complete > robot systems online in C++ and a toy robot system in Squeak but I'd prefer > to do a real robot with Squeak as my robot operating system. But i need > real access to code such as a tutorial on hooking up OpenCV or how to write > my own video contour program to attempt video object identification and a > like tutorial on working with Audio to recognize speech, which most > software still does not do well. > > I'll need a balance system that can do this. It may cross the line > between a toy robot and a real robot. > https://www.facebook.com/ScientificCuriosities/videos/1211415568924654/ > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160413/021d76fb/attachment.htm From commits at source.squeak.org Wed Apr 13 22:29:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 13 22:29:30 2016 Subject: [squeak-dev] The Inbox: Collections-cbc.689.mcz Message-ID: A new version of Collections was added to project The Inbox: http://source.squeak.org/inbox/Collections-cbc.689.mcz ==================== Summary ==================== Name: Collections-cbc.689 Author: cbc Time: 13 April 2016, 3:28:58.221861 pm UUID: 84ae8fa7-91ee-4f47-8bdf-eadcac286a1e Ancestors: Collections-mt.688 Fix comment in Dictioanry class>>newFrom: so that the examples actually work. =============== Diff against Collections-mt.688 =============== Item was changed: ----- Method: Dictionary class>>newFrom: (in category 'instance creation') ----- newFrom: aDict "Answer an instance of me containing the same associations as aDict. Error if any key appears twice." | newDictionary | newDictionary := self new: aDict size. aDict associationsDo: [:x | (newDictionary includesKey: x key) ifTrue: [self error: 'Duplicate key: ', x key printString] ifFalse: [newDictionary add: x copy]]. ^ newDictionary + " Dictionary newFrom: {1->#a. 2->#b. 3->#c} + {1->#a. 2->#b. 3->#c} as: Dictionary + Dictionary newFrom: {1->#a. 2->#b. 1->#c} + {1->#a. 2->#b. 1->#c} as: Dictionary - " NewDictionary newFrom: {1->#a. 2->#b. 3->#c} - {1->#a. 2->#b. 3->#c} as: NewDictionary - NewDictionary newFrom: {1->#a. 2->#b. 1->#c} - {1->#a. 2->#b. 1->#c} as: NewDictionary "! From cunningham.cb at gmail.com Wed Apr 13 22:33:18 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Wed Apr 13 22:33:41 2016 Subject: [squeak-dev] The Inbox: Collections-cbc.689.mcz In-Reply-To: <570ec838.114c370a.f538c.ffff9b42SMTPIN_ADDED_MISSING@mx.google.com> References: <570ec838.114c370a.f538c.ffff9b42SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Could someone move this to trunk? Just fixed the comment (since we don't have a NewDictionary in trunk currently). I do have a mostly unrelated question. This method (newFrom:) checks to see if there is a duplicate key that in the source when making the new Dictionary, and fails if there is. But #newFromPairs: doesn't check - just happily writes over the previous value. Dictionary newFromPairs: {'Red' . Color red . 'Blue' . Color blue . 'Green' . Color green. 'Blue' . Color green. }. Is there a good, valid reason they are consistent? -cbc On Wed, Apr 13, 2016 at 3:29 PM, wrote: > A new version of Collections was added to project The Inbox: > http://source.squeak.org/inbox/Collections-cbc.689.mcz > > ==================== Summary ==================== > > Name: Collections-cbc.689 > Author: cbc > Time: 13 April 2016, 3:28:58.221861 pm > UUID: 84ae8fa7-91ee-4f47-8bdf-eadcac286a1e > Ancestors: Collections-mt.688 > > Fix comment in Dictioanry class>>newFrom: so that the examples actually > work. > > =============== Diff against Collections-mt.688 =============== > > Item was changed: > ----- Method: Dictionary class>>newFrom: (in category 'instance > creation') ----- > newFrom: aDict > "Answer an instance of me containing the same associations as > aDict. > Error if any key appears twice." > | newDictionary | > newDictionary := self new: aDict size. > aDict associationsDo: > [:x | > (newDictionary includesKey: x key) > ifTrue: [self error: 'Duplicate key: ', x key > printString] > ifFalse: [newDictionary add: x copy]]. > ^ newDictionary > > + " Dictionary newFrom: {1->#a. 2->#b. 3->#c} > + {1->#a. 2->#b. 3->#c} as: Dictionary > + Dictionary newFrom: {1->#a. 2->#b. 1->#c} > + {1->#a. 2->#b. 1->#c} as: Dictionary > - " NewDictionary newFrom: {1->#a. 2->#b. 3->#c} > - {1->#a. 2->#b. 3->#c} as: NewDictionary > - NewDictionary newFrom: {1->#a. 2->#b. 1->#c} > - {1->#a. 2->#b. 1->#c} as: NewDictionary > "! > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160413/9fca6a5f/attachment.htm From commits at source.squeak.org Wed Apr 13 22:57:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 13 22:58:03 2016 Subject: [squeak-dev] The Inbox: Kernel-dtl.1015.mcz Message-ID: David T. Lewis uploaded a new version of Kernel to project The Inbox: http://source.squeak.org/inbox/Kernel-dtl.1015.mcz ==================== Summary ==================== Name: Kernel-dtl.1015 Author: dtl Time: 13 April 2016, 6:57:22.56608 pm UUID: bd849f91-9b00-45c5-b2ab-891b420bde5e Ancestors: Kernel-mt.1014 Make large integer equality test be about 13 times faster. Implement #= in LargePositiveInteger, and use digitAt: (primitive 60) for the comparison. =============== Diff against Kernel-mt.1014 =============== Item was added: + ----- Method: LargePositiveInteger>>= (in category 'comparing') ----- + = aNumber + + aNumber class == self class ifTrue: [ + aNumber size = self size ifFalse: [ ^false ]. + self size to: 1 by: -1 do: [ :i | (aNumber digitAt: i) = (self digitAt: i) ifFalse: [ ^ false ] ]. + ^ true ]. + aNumber isInteger ifTrue: [ ^false ]. + aNumber isNumber ifFalse: [ ^false ]. + ^aNumber adaptToInteger: self andCompare: #=! From lewis at mail.msen.com Wed Apr 13 23:09:02 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Apr 13 23:09:03 2016 Subject: [squeak-dev] The Inbox: Kernel-dtl.1015.mcz In-Reply-To: <201604132257.u3DMvgZv048379@shell.msen.com> References: <201604132257.u3DMvgZv048379@shell.msen.com> Message-ID: <20160413230902.GA49579@shell.msen.com> I would appreciate a review before moving this to trunk. Background: In UTCDateAndTime, most things are much faster than the trunk version. However, DataAndTime equality check did not improve for 32-bit images, so I ran it under AndreasSystemProfiler. Profiling showed that large integer equality checks spends time mostly in primDigitCompare, which is inefficient when only a simple byte comparison is needed. Here is the performance difference that I see on my system, 32-bit trunk Spur on Linux: | a b c d | a := 7432154326465436. "a big number" b := a + 1. "low order digit changed" c := 8432154326465436. "high order digit changed" d := 7432154026465436. "a digit in the middle changed" "Base performance in the trunk image" Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 63733" Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 63152" Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 63581" "Performance after adding LargePositiveInteger>>=" Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 4676" Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 4883" Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 4512" Dave On Wed, Apr 13, 2016 at 10:57:28PM +0000, commits@source.squeak.org wrote: > David T. Lewis uploaded a new version of Kernel to project The Inbox: > http://source.squeak.org/inbox/Kernel-dtl.1015.mcz > > ==================== Summary ==================== > > Name: Kernel-dtl.1015 > Author: dtl > Time: 13 April 2016, 6:57:22.56608 pm > UUID: bd849f91-9b00-45c5-b2ab-891b420bde5e > Ancestors: Kernel-mt.1014 > > Make large integer equality test be about 13 times faster. Implement #= in LargePositiveInteger, and use digitAt: (primitive 60) for the comparison. > > =============== Diff against Kernel-mt.1014 =============== > > Item was added: > + ----- Method: LargePositiveInteger>>= (in category 'comparing') ----- > + = aNumber > + > + aNumber class == self class ifTrue: [ > + aNumber size = self size ifFalse: [ ^false ]. > + self size to: 1 by: -1 do: [ :i | (aNumber digitAt: i) = (self digitAt: i) ifFalse: [ ^ false ] ]. > + ^ true ]. > + aNumber isInteger ifTrue: [ ^false ]. > + aNumber isNumber ifFalse: [ ^false ]. > + ^aNumber adaptToInteger: self andCompare: #=! > From btc at openinworld.com Wed Apr 13 23:20:56 2016 From: btc at openinworld.com (Ben Coman) Date: Wed Apr 13 23:21:22 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> Message-ID: On Wed, Apr 13, 2016 at 9:42 PM, Eliot Miranda wrote: > > >> On Apr 12, 2016, at 1:47 PM, David T. Lewis wrote: >> >> FWIW, In OSProcess I used #upToEnd to mean "all of the data that is >> currently available in the stream" and #upToEndOfFile to mean "all of that >> data that will ever be available". Separately, the steam may be in >> blocking or non-blocking mode, where blocking means that #upToEndOfFile >> will block until EOF is detected. > > You could use e.g. upToAvailable and upToEnd. upToBufferEnd ? cheers -ben > >> >> Dave >> >>>> On 12.04.2016, at 21:33, marcel.taeumel wrote: >>>> >>>> Hi Nicolas, >>>> >>>> if you construct something like: >>>> >>>> | someStream | >>>> someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | >>>> ... ]. >>>> ... >>>> someStream next. >>>> ... >>>> someStream next: 5. >>>> ... >>>> >>>> You can only use someStream as long as there is data available while it >>>> is >>>> connected. Now, it can happen that socket streams are temporarily "at >>>> end" >>>> while no data is waiting in the buffer. Then, you would have to >>>> reconstruct >>>> someStream to continue. And know about it. >>> >>> AFAIK, ?at end? means there will not be any more data: >>> >>> SocketStream>>atEnd >>> "There is nothing more to read when >>> there is no more data in our inBuffer, the socket >>> is disconnected and there is none available on the socket. >>> Note that we need to check isConnected before isDataAvailable, >>> otherwise data may sneak in in the meantime. But we check the >>> buffer first, because it is faster.? >>> >>> self isInBufferEmpty ifFalse: [^false]. >>> ^self isConnected not >>> and: [self isDataAvailable not] >>> >>> >>> - Bert - >> >> >> > From cunningham.cb at gmail.com Wed Apr 13 23:30:58 2016 From: cunningham.cb at gmail.com (Chris) Date: Wed Apr 13 23:31:02 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> Message-ID: Sent from my iPhone > On Apr 13, 2016, at 4:20 PM, Ben Coman wrote: > >> On Wed, Apr 13, 2016 at 9:42 PM, Eliot Miranda wrote: >> >> >>> On Apr 12, 2016, at 1:47 PM, David T. Lewis wrote: >>> >>> FWIW, In OSProcess I used #upToEnd to mean "all of the data that is >>> currently available in the stream" and #upToEndOfFile to mean "all of that >>> data that will ever be available". Separately, the steam may be in >>> blocking or non-blocking mode, where blocking means that #upToEndOfFile >>> will block until EOF is detected. >> >> You could use e.g. upToAvailable and upToEnd. > > upToBufferEnd ? > allAvailable ? > cheers -ben > >> >>> >>> Dave >>> >>>>> On 12.04.2016, at 21:33, marcel.taeumel wrote: >>>>> >>>>> Hi Nicolas, >>>>> >>>>> if you construct something like: >>>>> >>>>> | someStream | >>>>> someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | >>>>> ... ]. >>>>> ... >>>>> someStream next. >>>>> ... >>>>> someStream next: 5. >>>>> ... >>>>> >>>>> You can only use someStream as long as there is data available while it >>>>> is >>>>> connected. Now, it can happen that socket streams are temporarily "at >>>>> end" >>>>> while no data is waiting in the buffer. Then, you would have to >>>>> reconstruct >>>>> someStream to continue. And know about it. >>>> >>>> AFAIK, ?at end? means there will not be any more data: >>>> >>>> SocketStream>>atEnd >>>> "There is nothing more to read when >>>> there is no more data in our inBuffer, the socket >>>> is disconnected and there is none available on the socket. >>>> Note that we need to check isConnected before isDataAvailable, >>>> otherwise data may sneak in in the meantime. But we check the >>>> buffer first, because it is faster.? >>>> >>>> self isInBufferEmpty ifFalse: [^false]. >>>> ^self isConnected not >>>> and: [self isDataAvailable not] >>>> >>>> >>>> - Bert - > From cunningham.cb at gmail.com Wed Apr 13 23:33:11 2016 From: cunningham.cb at gmail.com (Chris) Date: Wed Apr 13 23:33:16 2016 Subject: [squeak-dev] Re: Generators on Streams on Generators on Collections on ... In-Reply-To: References: <1460390270702-4889389.post@n4.nabble.com> <1460443088494-4889453.post@n4.nabble.com> <4F16BB49-A72A-49AE-9694-83A0E895565E@freudenbergs.de> <1460483005846-4889611.post@n4.nabble.com> <1460489619168-4889623.post@n4.nabble.com> <20146.136.1.1.166.1460494073.squirrel@webmail.msen.com> Message-ID: <4EC73D45-18CA-400D-BBB2-849FFDEC979E@gmail.com> Sent from my iPhone > On Apr 13, 2016, at 4:30 PM, Chris wrote: > > > > Sent from my iPhone > >>> On Apr 13, 2016, at 4:20 PM, Ben Coman wrote: >>> >>> On Wed, Apr 13, 2016 at 9:42 PM, Eliot Miranda wrote: >>> >>> >>>> On Apr 12, 2016, at 1:47 PM, David T. Lewis wrote: >>>> >>>> FWIW, In OSProcess I used #upToEnd to mean "all of the data that is >>>> currently available in the stream" and #upToEndOfFile to mean "all of that >>>> data that will ever be available". Separately, the steam may be in >>>> blocking or non-blocking mode, where blocking means that #upToEndOfFile >>>> will block until EOF is detected. >>> >>> You could use e.g. upToAvailable and upToEnd. >> >> upToBufferEnd ? > allAvailable ? Or remainingAvailable -cbc >> cheers -ben >> >>> >>>> >>>> Dave >>>> >>>>>> On 12.04.2016, at 21:33, marcel.taeumel wrote: >>>>>> >>>>>> Hi Nicolas, >>>>>> >>>>>> if you construct something like: >>>>>> >>>>>> | someStream | >>>>>> someStream := mySocketStream select: [:ea | ... ] thenCollect: [:ea | >>>>>> ... ]. >>>>>> ... >>>>>> someStream next. >>>>>> ... >>>>>> someStream next: 5. >>>>>> ... >>>>>> >>>>>> You can only use someStream as long as there is data available while it >>>>>> is >>>>>> connected. Now, it can happen that socket streams are temporarily "at >>>>>> end" >>>>>> while no data is waiting in the buffer. Then, you would have to >>>>>> reconstruct >>>>>> someStream to continue. And know about it. >>>>> >>>>> AFAIK, ?at end? means there will not be any more data: >>>>> >>>>> SocketStream>>atEnd >>>>> "There is nothing more to read when >>>>> there is no more data in our inBuffer, the socket >>>>> is disconnected and there is none available on the socket. >>>>> Note that we need to check isConnected before isDataAvailable, >>>>> otherwise data may sneak in in the meantime. But we check the >>>>> buffer first, because it is faster.? >>>>> >>>>> self isInBufferEmpty ifFalse: [^false]. >>>>> ^self isConnected not >>>>> and: [self isDataAvailable not] >>>>> >>>>> >>>>> - Bert - >> From leves at caesar.elte.hu Wed Apr 13 23:45:42 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Apr 13 23:45:48 2016 Subject: [squeak-dev] The Inbox: Kernel-dtl.1015.mcz In-Reply-To: <20160413230902.GA49579@shell.msen.com> References: <201604132257.u3DMvgZv048379@shell.msen.com> <20160413230902.GA49579@shell.msen.com> Message-ID: Hi Dave, I guess this is a VM related issue. On 64-bit Spur [ 7432154326465436 digitCompare: 8432154326465436 ] bench. returns '5,420,000 per second. 184 nanoseconds per run.'. Removing the primitive call from #digitCompare: the number goes up: '20,200,000 per second. 49.4 nanoseconds per run.'. You might think that it's okay because the JIT is so good. But we have another primitive to compare two bytes-objects. One which ought be slower than #primDigitCompare:, because it maps the bytes before doing the comparison. I even subtracted two from its result to match the result of #digitCompare: | order | order := (0 to: 255) as: ByteArray. [ (ByteString compare: 7432154326465436 with: 8432154326465436 collated: order) - 2 ] bench. But it's still about twice as quick as #primDigitCompare:. '9,590,000 per second. 104 nanoseconds per run.'. So, something must be wrong with #primDigitCompare:. Levente On Wed, 13 Apr 2016, David T. Lewis wrote: > I would appreciate a review before moving this to trunk. > > Background: > > In UTCDateAndTime, most things are much faster than the trunk version. > However, DataAndTime equality check did not improve for 32-bit images, > so I ran it under AndreasSystemProfiler. Profiling showed that large > integer equality checks spends time mostly in primDigitCompare, which > is inefficient when only a simple byte comparison is needed. > > Here is the performance difference that I see on my system, 32-bit trunk > Spur on Linux: > > | a b c d | > a := 7432154326465436. "a big number" > b := a + 1. "low order digit changed" > c := 8432154326465436. "high order digit changed" > d := 7432154026465436. "a digit in the middle changed" > > "Base performance in the trunk image" > Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 63733" > Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 63152" > Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 63581" > > "Performance after adding LargePositiveInteger>>=" > Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 4676" > Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 4883" > Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 4512" > > Dave > > > > On Wed, Apr 13, 2016 at 10:57:28PM +0000, commits@source.squeak.org wrote: >> David T. Lewis uploaded a new version of Kernel to project The Inbox: >> http://source.squeak.org/inbox/Kernel-dtl.1015.mcz >> >> ==================== Summary ==================== >> >> Name: Kernel-dtl.1015 >> Author: dtl >> Time: 13 April 2016, 6:57:22.56608 pm >> UUID: bd849f91-9b00-45c5-b2ab-891b420bde5e >> Ancestors: Kernel-mt.1014 >> >> Make large integer equality test be about 13 times faster. Implement #= in LargePositiveInteger, and use digitAt: (primitive 60) for the comparison. >> >> =============== Diff against Kernel-mt.1014 =============== >> >> Item was added: >> + ----- Method: LargePositiveInteger>>= (in category 'comparing') ----- >> + = aNumber >> + >> + aNumber class == self class ifTrue: [ >> + aNumber size = self size ifFalse: [ ^false ]. >> + self size to: 1 by: -1 do: [ :i | (aNumber digitAt: i) = (self digitAt: i) ifFalse: [ ^ false ] ]. >> + ^ true ]. >> + aNumber isInteger ifTrue: [ ^false ]. >> + aNumber isNumber ifFalse: [ ^false ]. >> + ^aNumber adaptToInteger: self andCompare: #=! >> > > From commits at source.squeak.org Wed Apr 13 23:48:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 13 23:48:36 2016 Subject: [squeak-dev] The Trunk: Collections-cbc.689.mcz Message-ID: David T. Lewis uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-cbc.689.mcz ==================== Summary ==================== Name: Collections-cbc.689 Author: cbc Time: 13 April 2016, 3:28:58.221861 pm UUID: 84ae8fa7-91ee-4f47-8bdf-eadcac286a1e Ancestors: Collections-mt.688 Fix comment in Dictioanry class>>newFrom: so that the examples actually work. =============== Diff against Collections-mt.688 =============== Item was changed: ----- Method: Dictionary class>>newFrom: (in category 'instance creation') ----- newFrom: aDict "Answer an instance of me containing the same associations as aDict. Error if any key appears twice." | newDictionary | newDictionary := self new: aDict size. aDict associationsDo: [:x | (newDictionary includesKey: x key) ifTrue: [self error: 'Duplicate key: ', x key printString] ifFalse: [newDictionary add: x copy]]. ^ newDictionary + " Dictionary newFrom: {1->#a. 2->#b. 3->#c} + {1->#a. 2->#b. 3->#c} as: Dictionary + Dictionary newFrom: {1->#a. 2->#b. 1->#c} + {1->#a. 2->#b. 1->#c} as: Dictionary - " NewDictionary newFrom: {1->#a. 2->#b. 3->#c} - {1->#a. 2->#b. 3->#c} as: NewDictionary - NewDictionary newFrom: {1->#a. 2->#b. 1->#c} - {1->#a. 2->#b. 1->#c} as: NewDictionary "! From lewis at mail.msen.com Thu Apr 14 00:25:33 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Apr 14 00:25:36 2016 Subject: [squeak-dev] The Inbox: Kernel-dtl.1015.mcz In-Reply-To: References: <201604132257.u3DMvgZv048379@shell.msen.com> <20160413230902.GA49579@shell.msen.com> Message-ID: <20160414002533.GB49579@shell.msen.com> Hi Levente, I think you may be right. I repeated my test with an interpreter VM on a 32-bit image (with loop count smaller because the interpreter VM is slower than Spur). The change that I put in the inbox does not have any benefit for the interpreter VM: a := 7432154326465436. "a big number" b := a + 1. "low order digit changed" c := 8432154326465436. "high order digit changed" d := 7432154026465436. "a digit in the middle changed" "Base performance in the trunk level V3 image with interpreter VM" Time millisecondsToRun: [5000000 timesRepeat: [ a = b ]]. "==> 3844" Time millisecondsToRun: [5000000 timesRepeat: [ a = c ]]. "==> 3786" Time millisecondsToRun: [5000000 timesRepeat: [ a = d ]].. "==> 3800" "Performance after adding LargePositiveInteger>>=" Time millisecondsToRun: [5000000 timesRepeat: [ a = b ]]. "==> 3868" Time millisecondsToRun: [5000000 timesRepeat: [ a = c ]]. "==> 3775" Time millisecondsToRun: [5000000 timesRepeat: [ a = d ]]. "==> 3770" So yes it is something related to the VM. But I do not understand how #primDigitCompare could be so slow? As you say, maybe something is wrong with it. Thank you, I am glad that I asked for a review :-) Dave On Thu, Apr 14, 2016 at 01:45:42AM +0200, Levente Uzonyi wrote: > Hi Dave, > > I guess this is a VM related issue. On 64-bit Spur > [ 7432154326465436 digitCompare: 8432154326465436 ] bench. > returns '5,420,000 per second. 184 nanoseconds per run.'. > > Removing the primitive call from #digitCompare: the number goes up: > '20,200,000 per second. 49.4 nanoseconds per run.'. > > You might think that it's okay because the JIT is so good. But we have > another primitive to compare two bytes-objects. One which ought be > slower than #primDigitCompare:, because it maps the bytes before doing the > comparison. I even subtracted two from its result to match the result of > #digitCompare: > > | order | > order := (0 to: 255) as: ByteArray. > [ (ByteString compare: 7432154326465436 with: 8432154326465436 collated: > order) - 2 ] bench. > > But it's still about twice as quick as #primDigitCompare:. > '9,590,000 per second. 104 nanoseconds per run.'. > So, something must be wrong with #primDigitCompare:. > > Levente > > On Wed, 13 Apr 2016, David T. Lewis wrote: > > >I would appreciate a review before moving this to trunk. > > > >Background: > > > >In UTCDateAndTime, most things are much faster than the trunk version. > >However, DataAndTime equality check did not improve for 32-bit images, > >so I ran it under AndreasSystemProfiler. Profiling showed that large > >integer equality checks spends time mostly in primDigitCompare, which > >is inefficient when only a simple byte comparison is needed. > > > >Here is the performance difference that I see on my system, 32-bit trunk > >Spur on Linux: > > > > | a b c d | > > a := 7432154326465436. "a big number" > > b := a + 1. "low order digit changed" > > c := 8432154326465436. "high order digit changed" > > d := 7432154026465436. "a digit in the middle changed" > > > > "Base performance in the trunk image" > > Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 63733" > > Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 63152" > > Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 63581" > > > > "Performance after adding LargePositiveInteger>>=" > > Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 4676" > > Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 4883" > > Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 4512" > > > >Dave > > > > > > > >On Wed, Apr 13, 2016 at 10:57:28PM +0000, commits@source.squeak.org wrote: > >>David T. Lewis uploaded a new version of Kernel to project The Inbox: > >>http://source.squeak.org/inbox/Kernel-dtl.1015.mcz > >> > >>==================== Summary ==================== > >> > >>Name: Kernel-dtl.1015 > >>Author: dtl > >>Time: 13 April 2016, 6:57:22.56608 pm > >>UUID: bd849f91-9b00-45c5-b2ab-891b420bde5e > >>Ancestors: Kernel-mt.1014 > >> > >>Make large integer equality test be about 13 times faster. Implement #= > >>in LargePositiveInteger, and use digitAt: (primitive 60) for the > >>comparison. > >> > >>=============== Diff against Kernel-mt.1014 =============== > >> > >>Item was added: > >>+ ----- Method: LargePositiveInteger>>= (in category 'comparing') ----- > >>+ = aNumber > >>+ > >>+ aNumber class == self class ifTrue: [ > >>+ aNumber size = self size ifFalse: [ ^false ]. > >>+ self size to: 1 by: -1 do: [ :i | (aNumber digitAt: i) = > >>(self digitAt: i) ifFalse: [ ^ false ] ]. > >>+ ^ true ]. > >>+ aNumber isInteger ifTrue: [ ^false ]. > >>+ aNumber isNumber ifFalse: [ ^false ]. > >>+ ^aNumber adaptToInteger: self andCompare: #=! > >> > > > > From edgardec2005 at gmail.com Thu Apr 14 06:45:50 2016 From: edgardec2005 at gmail.com (Edgar De Cleene) Date: Thu Apr 14 06:45:57 2016 Subject: [squeak-dev] [[Q] How set the permissions of text file Message-ID: I working in a Squeak way of creating and serve tvml files. ? stream := StandardFileStream forceNewFileNamed: aFileName. stream nextPutAll: self tvml pageEnd. stream close? Squeak gives me this -rw-r--r--@ and I need this -rwxr-xr-x How i set the right permissions from inside Squeak ? --? Edgar @morplenauta -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160414/3b05410e/attachment.htm From bert at freudenbergs.de Thu Apr 14 08:10:25 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Apr 14 08:10:28 2016 Subject: [squeak-dev] The Inbox: Collections-CW.640.mcz In-Reply-To: References: Message-ID: On 13.04.2016, at 13:13, commits@source.squeak.org wrote: > > A new version of Collections was added to project The Inbox: > http://source.squeak.org/inbox/Collections-CW.640.mcz > > ==================== Summary ==================== > > Name: Collections-CW.640 > UUID: a0706e52-62c7-4ec4-b22b-6d99aa062158 > Ancestors: Collections-cmm.639 > > constantNameFor: handles all untypeable characters > > =============== Diff against Collections-cmm.639 =============== > > Item was changed: > ----- Method: Character class>>constantNames (in category 'private') ----- > constantNames > + > + ^ self class organization listAtCategoryNamed: 'accessing untypeable characters' > + ! > - ^ #( backspace cr delete escape lf null newPage space tab ).! Not a good idea. The class organization is informational only and should not be used to affect behavior. E.g. it gets zapped when abandoning sources (to deploy a minimal system) and after that things would break. We might use something like names := Set new. Character class selectorsAndMethodsDo: [:sel :m | (m numArgs = 0 and: [(m at: m initialPC+ 2) = 202]) ifTrue: [names add: sel]]. names ... but if so then we?d better add a test that it does the right thing because it looks a bit fragile. If we really wanted a robust enumeration of selectors then it seems best to add a pragma to each of the methods, e.g. , and filter methods for that. But IMHO the old way of explicitly listing the constant names in a literal array is the simplest option, and good enough. - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160414/d4c084dd/smime.bin From Marcel.Taeumel at hpi.de Thu Apr 14 07:46:31 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Apr 14 08:18:42 2016 Subject: [squeak-dev] Re: [[Q] How set the permissions of text file In-Reply-To: References: Message-ID: <1460619991995-4889840.post@n4.nabble.com> Hi Edgar, to my knowledge, there are no primitives in the FilePlugin that support setting permissions. You can, however, use OSProces and a shell command to set the permissions. Best, Marcel -- View this message in context: http://forum.world.st/Q-How-set-the-permissions-of-text-file-tp4889815p4889840.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Apr 14 07:49:11 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Apr 14 08:21:26 2016 Subject: [squeak-dev] Re: The Inbox: Collections-CW.640.mcz In-Reply-To: References: <1460562273555-4889766.post@n4.nabble.com> <51C3A642-4DBE-4067-85BB-35EAC4FBACFE@gmx.de> <1460573809490-4889777.post@n4.nabble.com> Message-ID: <1460620151534-4889841.post@n4.nabble.com> Hi Chris, I am not exactly sure what you mean by that but yes: we can write a test for that. :-) Or are you referring to the test* prefix in test selectors? Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Collections-CW-640-mcz-tp4889722p4889841.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Apr 14 07:50:19 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Apr 14 08:22:28 2016 Subject: [squeak-dev] Re: The Trunk: Collections-cbc.689.mcz In-Reply-To: References: Message-ID: <1460620219624-4889852.post@n4.nabble.com> +1 -- View this message in context: http://forum.world.st/The-Trunk-Collections-cbc-689-mcz-tp4889796p4889852.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bert at freudenbergs.de Thu Apr 14 09:44:45 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Apr 14 09:44:50 2016 Subject: [squeak-dev] [[Q] How set the permissions of text file In-Reply-To: <1460619991995-4889840.post@n4.nabble.com> References: <1460619991995-4889840.post@n4.nabble.com> Message-ID: > On 14.04.2016, at 09:46, marcel.taeumel wrote: > > Hi Edgar, > > to my knowledge, there are no primitives in the FilePlugin that support > setting permissions. You can, however, use OSProces and a shell command to > set the permissions. > > Best, > Marcel That being said, I highly doubt that a TVML file needs to be made executable. "-rw-r--r?? should be fine because it?s not going to be executed directly (that is what the ?x? bit allows). - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160414/9b72f460/smime.bin From edgardec2005 at gmail.com Thu Apr 14 10:08:14 2016 From: edgardec2005 at gmail.com (Edgar De Cleene) Date: Thu Apr 14 10:08:19 2016 Subject: [squeak-dev] Re: [[Q] How set the permissions of text file In-Reply-To: <1460619991995-4889840.post@n4.nabble.com> References: <1460619991995-4889840.post@n4.nabble.com> Message-ID: Thanks Marcel and Bert On April 14, 2016 at 05:18:42, marcel.taeumel (marcel.taeumel@hpi.de) wrote: That being said, I highly doubt that a TVML file needs to be made executable. "-rw-r--r?? should be fine because it?s not going to be executed directly (that is what the ?x? bit allows).? - Bert -? Well, in doing my first baby steps in tvOS, but share what i learn The Squeak server works fine, you could arrange your folder outside Xcode and works like examples using Python. If you copy any of provided templates with a text editor, the examples do not run. If you made a test with a text editor, the examples do not run. The saved file with a text editor have same permissions as Squeak, with the @ at the end. I plan to go?http://www.spaceappsrosario.com?and present a kind of ?KNowNASA? app with public and free files of?http://www.nasa.gov. Any wishing be part of this, email me directly. Edgar @morplenauta -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160414/984cb9ca/attachment.htm From lewis at mail.msen.com Thu Apr 14 12:04:46 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Apr 14 12:04:52 2016 Subject: [squeak-dev] The Inbox: Kernel-dtl.1015.mcz In-Reply-To: <20160414002533.GB49579@shell.msen.com> References: <201604132257.u3DMvgZv048379@shell.msen.com> <20160413230902.GA49579@shell.msen.com> <20160414002533.GB49579@shell.msen.com> Message-ID: <20160414120446.GA4453@shell.msen.com> Oops, I just realized that my "interpreter VM" results were from a debugging VM with compiler optimization off (too many VMs, sorry). Here are the results for a more representative interpreter VM. I can't explain the variation, but one conclusion is clear: my suggested "optimization" in the inbox is a bad idea (and I will move it to the treated inbox). "Base performance in the trunk level V3 image with interpreter VM" Time millisecondsToRun: [100000000 timesRepeat: [ a = b ]]. "==> 26669" Time millisecondsToRun: [100000000 timesRepeat: [ a = c ]]. "==> 25052" Time millisecondsToRun: [100000000 timesRepeat: [ a = d ]]. "==> 25275" "Performance after adding LargePositiveInteger>>=" Time millisecondsToRun: [100000000 timesRepeat: [ a = b ]]. "==> 59224" Time millisecondsToRun: [100000000 timesRepeat: [ a = c ]]. "==> 27824" Time millisecondsToRun: [100000000 timesRepeat: [ a = d ]]. "==> 44324" Dave On Wed, Apr 13, 2016 at 08:25:33PM -0400, David T. Lewis wrote: > Hi Levente, > > I think you may be right. I repeated my test with an interpreter VM on a > 32-bit image (with loop count smaller because the interpreter VM is slower > than Spur). The change that I put in the inbox does not have any benefit > for the interpreter VM: > > > a := 7432154326465436. "a big number" > b := a + 1. "low order digit changed" > c := 8432154326465436. "high order digit changed" > d := 7432154026465436. "a digit in the middle changed" > > "Base performance in the trunk level V3 image with interpreter VM" > Time millisecondsToRun: [5000000 timesRepeat: [ a = b ]]. "==> 3844" > Time millisecondsToRun: [5000000 timesRepeat: [ a = c ]]. "==> 3786" > Time millisecondsToRun: [5000000 timesRepeat: [ a = d ]].. "==> 3800" > > "Performance after adding LargePositiveInteger>>=" > Time millisecondsToRun: [5000000 timesRepeat: [ a = b ]]. "==> 3868" > Time millisecondsToRun: [5000000 timesRepeat: [ a = c ]]. "==> 3775" > Time millisecondsToRun: [5000000 timesRepeat: [ a = d ]]. "==> 3770" > > So yes it is something related to the VM. But I do not understand > how #primDigitCompare could be so slow? As you say, maybe something > is wrong with it. > > Thank you, I am glad that I asked for a review :-) > > Dave > > > On Thu, Apr 14, 2016 at 01:45:42AM +0200, Levente Uzonyi wrote: > > Hi Dave, > > > > I guess this is a VM related issue. On 64-bit Spur > > [ 7432154326465436 digitCompare: 8432154326465436 ] bench. > > returns '5,420,000 per second. 184 nanoseconds per run.'. > > > > Removing the primitive call from #digitCompare: the number goes up: > > '20,200,000 per second. 49.4 nanoseconds per run.'. > > > > You might think that it's okay because the JIT is so good. But we have > > another primitive to compare two bytes-objects. One which ought be > > slower than #primDigitCompare:, because it maps the bytes before doing the > > comparison. I even subtracted two from its result to match the result of > > #digitCompare: > > > > | order | > > order := (0 to: 255) as: ByteArray. > > [ (ByteString compare: 7432154326465436 with: 8432154326465436 collated: > > order) - 2 ] bench. > > > > But it's still about twice as quick as #primDigitCompare:. > > '9,590,000 per second. 104 nanoseconds per run.'. > > So, something must be wrong with #primDigitCompare:. > > > > Levente > > > > On Wed, 13 Apr 2016, David T. Lewis wrote: > > > > >I would appreciate a review before moving this to trunk. > > > > > >Background: > > > > > >In UTCDateAndTime, most things are much faster than the trunk version. > > >However, DataAndTime equality check did not improve for 32-bit images, > > >so I ran it under AndreasSystemProfiler. Profiling showed that large > > >integer equality checks spends time mostly in primDigitCompare, which > > >is inefficient when only a simple byte comparison is needed. > > > > > >Here is the performance difference that I see on my system, 32-bit trunk > > >Spur on Linux: > > > > > > | a b c d | > > > a := 7432154326465436. "a big number" > > > b := a + 1. "low order digit changed" > > > c := 8432154326465436. "high order digit changed" > > > d := 7432154026465436. "a digit in the middle changed" > > > > > > "Base performance in the trunk image" > > > Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 63733" > > > Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 63152" > > > Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 63581" > > > > > > "Performance after adding LargePositiveInteger>>=" > > > Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 4676" > > > Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 4883" > > > Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 4512" > > > > > >Dave > > > > > > > > > > > >On Wed, Apr 13, 2016 at 10:57:28PM +0000, commits@source.squeak.org wrote: > > >>David T. Lewis uploaded a new version of Kernel to project The Inbox: > > >>http://source.squeak.org/inbox/Kernel-dtl.1015.mcz > > >> > > >>==================== Summary ==================== > > >> > > >>Name: Kernel-dtl.1015 > > >>Author: dtl > > >>Time: 13 April 2016, 6:57:22.56608 pm > > >>UUID: bd849f91-9b00-45c5-b2ab-891b420bde5e > > >>Ancestors: Kernel-mt.1014 > > >> > > >>Make large integer equality test be about 13 times faster. Implement #= > > >>in LargePositiveInteger, and use digitAt: (primitive 60) for the > > >>comparison. > > >> > > >>=============== Diff against Kernel-mt.1014 =============== > > >> > > >>Item was added: > > >>+ ----- Method: LargePositiveInteger>>= (in category 'comparing') ----- > > >>+ = aNumber > > >>+ > > >>+ aNumber class == self class ifTrue: [ > > >>+ aNumber size = self size ifFalse: [ ^false ]. > > >>+ self size to: 1 by: -1 do: [ :i | (aNumber digitAt: i) = > > >>(self digitAt: i) ifFalse: [ ^ false ] ]. > > >>+ ^ true ]. > > >>+ aNumber isInteger ifTrue: [ ^false ]. > > >>+ aNumber isNumber ifFalse: [ ^false ]. > > >>+ ^aNumber adaptToInteger: self andCompare: #=! > > >> > > > > > > From leves at caesar.elte.hu Thu Apr 14 17:04:47 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu Apr 14 17:04:54 2016 Subject: primitiveDigitCompare is slow (was: Re: [squeak-dev] The Inbox: Kernel-dtl.1015.mcz) In-Reply-To: <20160414120446.GA4453@shell.msen.com> References: <201604132257.u3DMvgZv048379@shell.msen.com> <20160413230902.GA49579@shell.msen.com> <20160414002533.GB49579@shell.msen.com> <20160414120446.GA4453@shell.msen.com> Message-ID: Hi Dave, I dag a bit deeper into this problem, and I found that it's been around for ages. I compared the two primitives in three older images. The first one is Squeak 4.2 running on Cog r2714: [ 7432154326465436 digitCompare: 8432154326465436 ] bench. '6,880,000 per second.' | order | order := (0 to: 255) as: ByteArray. [ (ByteString compare: 7432154326465436 with: 8432154326465436 collated: order) - 2 ] bench. '11,200,000 per second.' The next one was an even older Cog VM running an image updated from 3.10.2. The VM didn't have the primitives required to fetch the VM information. The result were '8.22459348130374e6 per second.' and '1.19677724910036e7 per second.', respectively. The last image was a closure-enabled 3.10.2 running on the classic Interpreter VM. The results were '3.911442911417717e6 per second.' and '4.84567866426715e6 per second.', respectively. Since in all VMs the seemingly more complex code (primitiveCompareString with a subtraction) was quicker than the simpler code (primitiveDigitCompare), I suspect that LargeIntegersPlugin is compiled with less aggressive optimization than MiscPrimitivePlugin. What's also interesting is that, based on these benchmarks, the performance got worse over the years. I think invoking a primitive has its cost in newer VMs. Levente On Thu, 14 Apr 2016, David T. Lewis wrote: > Oops, I just realized that my "interpreter VM" results were from a debugging > VM with compiler optimization off (too many VMs, sorry). Here are the results > for a more representative interpreter VM. I can't explain the variation, but > one conclusion is clear: my suggested "optimization" in the inbox is a bad idea > (and I will move it to the treated inbox). > > "Base performance in the trunk level V3 image with interpreter VM" > Time millisecondsToRun: [100000000 timesRepeat: [ a = b ]]. "==> 26669" > Time millisecondsToRun: [100000000 timesRepeat: [ a = c ]]. "==> 25052" > Time millisecondsToRun: [100000000 timesRepeat: [ a = d ]]. "==> 25275" > > "Performance after adding LargePositiveInteger>>=" > Time millisecondsToRun: [100000000 timesRepeat: [ a = b ]]. "==> 59224" > Time millisecondsToRun: [100000000 timesRepeat: [ a = c ]]. "==> 27824" > Time millisecondsToRun: [100000000 timesRepeat: [ a = d ]]. "==> 44324" > > Dave > > > > On Wed, Apr 13, 2016 at 08:25:33PM -0400, David T. Lewis wrote: >> Hi Levente, >> >> I think you may be right. I repeated my test with an interpreter VM on a >> 32-bit image (with loop count smaller because the interpreter VM is slower >> than Spur). The change that I put in the inbox does not have any benefit >> for the interpreter VM: >> >> >> a := 7432154326465436. "a big number" >> b := a + 1. "low order digit changed" >> c := 8432154326465436. "high order digit changed" >> d := 7432154026465436. "a digit in the middle changed" >> >> "Base performance in the trunk level V3 image with interpreter VM" >> Time millisecondsToRun: [5000000 timesRepeat: [ a = b ]]. "==> 3844" >> Time millisecondsToRun: [5000000 timesRepeat: [ a = c ]]. "==> 3786" >> Time millisecondsToRun: [5000000 timesRepeat: [ a = d ]].. "==> 3800" >> >> "Performance after adding LargePositiveInteger>>=" >> Time millisecondsToRun: [5000000 timesRepeat: [ a = b ]]. "==> 3868" >> Time millisecondsToRun: [5000000 timesRepeat: [ a = c ]]. "==> 3775" >> Time millisecondsToRun: [5000000 timesRepeat: [ a = d ]]. "==> 3770" >> >> So yes it is something related to the VM. But I do not understand >> how #primDigitCompare could be so slow? As you say, maybe something >> is wrong with it. >> >> Thank you, I am glad that I asked for a review :-) >> >> Dave >> >> >> On Thu, Apr 14, 2016 at 01:45:42AM +0200, Levente Uzonyi wrote: >>> Hi Dave, >>> >>> I guess this is a VM related issue. On 64-bit Spur >>> [ 7432154326465436 digitCompare: 8432154326465436 ] bench. >>> returns '5,420,000 per second. 184 nanoseconds per run.'. >>> >>> Removing the primitive call from #digitCompare: the number goes up: >>> '20,200,000 per second. 49.4 nanoseconds per run.'. >>> >>> You might think that it's okay because the JIT is so good. But we have >>> another primitive to compare two bytes-objects. One which ought be >>> slower than #primDigitCompare:, because it maps the bytes before doing the >>> comparison. I even subtracted two from its result to match the result of >>> #digitCompare: >>> >>> | order | >>> order := (0 to: 255) as: ByteArray. >>> [ (ByteString compare: 7432154326465436 with: 8432154326465436 collated: >>> order) - 2 ] bench. >>> >>> But it's still about twice as quick as #primDigitCompare:. >>> '9,590,000 per second. 104 nanoseconds per run.'. >>> So, something must be wrong with #primDigitCompare:. >>> >>> Levente >>> >>> On Wed, 13 Apr 2016, David T. Lewis wrote: >>> >>>> I would appreciate a review before moving this to trunk. >>>> >>>> Background: >>>> >>>> In UTCDateAndTime, most things are much faster than the trunk version. >>>> However, DataAndTime equality check did not improve for 32-bit images, >>>> so I ran it under AndreasSystemProfiler. Profiling showed that large >>>> integer equality checks spends time mostly in primDigitCompare, which >>>> is inefficient when only a simple byte comparison is needed. >>>> >>>> Here is the performance difference that I see on my system, 32-bit trunk >>>> Spur on Linux: >>>> >>>> | a b c d | >>>> a := 7432154326465436. "a big number" >>>> b := a + 1. "low order digit changed" >>>> c := 8432154326465436. "high order digit changed" >>>> d := 7432154026465436. "a digit in the middle changed" >>>> >>>> "Base performance in the trunk image" >>>> Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 63733" >>>> Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 63152" >>>> Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 63581" >>>> >>>> "Performance after adding LargePositiveInteger>>=" >>>> Time millisecondsToRun: [500000000 timesRepeat: [ a = b ]]. "==> 4676" >>>> Time millisecondsToRun: [500000000 timesRepeat: [ a = c ]]. "==> 4883" >>>> Time millisecondsToRun: [500000000 timesRepeat: [ a = d ]]. "==> 4512" >>>> >>>> Dave >>>> >>>> >>>> >>>> On Wed, Apr 13, 2016 at 10:57:28PM +0000, commits@source.squeak.org wrote: >>>>> David T. Lewis uploaded a new version of Kernel to project The Inbox: >>>>> http://source.squeak.org/inbox/Kernel-dtl.1015.mcz >>>>> >>>>> ==================== Summary ==================== >>>>> >>>>> Name: Kernel-dtl.1015 >>>>> Author: dtl >>>>> Time: 13 April 2016, 6:57:22.56608 pm >>>>> UUID: bd849f91-9b00-45c5-b2ab-891b420bde5e >>>>> Ancestors: Kernel-mt.1014 >>>>> >>>>> Make large integer equality test be about 13 times faster. Implement #= >>>>> in LargePositiveInteger, and use digitAt: (primitive 60) for the >>>>> comparison. >>>>> >>>>> =============== Diff against Kernel-mt.1014 =============== >>>>> >>>>> Item was added: >>>>> + ----- Method: LargePositiveInteger>>= (in category 'comparing') ----- >>>>> + = aNumber >>>>> + >>>>> + aNumber class == self class ifTrue: [ >>>>> + aNumber size = self size ifFalse: [ ^false ]. >>>>> + self size to: 1 by: -1 do: [ :i | (aNumber digitAt: i) = >>>>> (self digitAt: i) ifFalse: [ ^ false ] ]. >>>>> + ^ true ]. >>>>> + aNumber isInteger ifTrue: [ ^false ]. >>>>> + aNumber isNumber ifFalse: [ ^false ]. >>>>> + ^aNumber adaptToInteger: self andCompare: #=! >>>>> >>>> >>>> > > From asqueaker at gmail.com Thu Apr 14 17:33:14 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Apr 14 17:33:56 2016 Subject: [squeak-dev] Re: The Inbox: Collections-CW.640.mcz In-Reply-To: <1460620151534-4889841.post@n4.nabble.com> References: <1460562273555-4889766.post@n4.nabble.com> <51C3A642-4DBE-4067-85BB-35EAC4FBACFE@gmx.de> <1460573809490-4889777.post@n4.nabble.com> <1460620151534-4889841.post@n4.nabble.com> Message-ID: You had expressed concern about code having a dependence on categories / protocols. You wrote: > Part of this discussion is related to tools. Message categories are just too > easy to change. How many of you do "full text search" or "string search" any > time they add/remove/change a message category? I assumed your concern was that we don't have any tools to "alert us" if a message category which is depended on by code, would be changed. SUnit and its tools allows this sort of late-binding to be feasible. We use it to assert what certain behaviors *should* be. i.e., we could add a test to require teh presence of certain protocols. Or, even better, maybe some startup method on class-side could simply ensure the necessary protocols would be present (creating them, if necessary) to address Berts concern about stripping sources (does that strip protocols too?). We've heard Java advocates use the marketing phrase "type safe" but we know "safe" is misleading. The app could still have a NullPointnerException, DivideByZero, FileNotFound, etc. So they actually just need JUnit more than they need early-binding. Yes, early-binding supports better code-completion tool but... the rest is pure cost, IMHO). Best, Chris On Thu, Apr 14, 2016 at 2:49 AM, marcel.taeumel wrote: > Hi Chris, > > I am not exactly sure what you mean by that but yes: we can write a test for > that. :-) Or are you referring to the test* prefix in test selectors? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Inbox-Collections-CW-640-mcz-tp4889722p4889841.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From robert.w.withers at gmail.com Thu Apr 14 17:56:49 2016 From: robert.w.withers at gmail.com (Robert Withers) Date: Thu Apr 14 17:56:55 2016 Subject: [squeak-dev] SecureSession in Pharo5 (was Re: SecureSessionV1 is green) In-Reply-To: <570E5858.3090005@gmail.com> References: <570E5858.3090005@gmail.com> Message-ID: <570FD9E1.30607@gmail.com> I tried to load SecureSession-86 into Pharo and I ran into a couple of issues. I first tried in a 5.0 image I had from December that already had cryptography loaded. I loaded SecureSession and ran the tests which default to using compression. This determined my use of the selectors #zipped/#unzipped, which are missing in Pharo, though it does have compression present. I reloaded Compression-cmm.48 from http://source.squeak.org/trunk and it did not load all of the way, but those selectors I needed did. I ran SecureSession tests and they are all green except for one performance test. The uncompressible performance test failed as I am missing the crytpography plugins; I never was able to build the VM on this Ubuntu laptop, I tried the same in a current Pharo5.0 image and I couldn't even load Cryptography. The bottom line is that SecureSession-rww.86.mcz works fine in Pharo as long as Compression is updated and the ability to load Cryptography is restored. I have only tested a 32-bit spur image on Ubuntu. I would like to ask the community for review on the code, as well as testing on other VMs, for squeak, pharo and newspeak. Many thanks, Robert On 04/13/2016 10:31 AM, Robert Withers wrote: > It took a few days to align the implementation with the spec. It is in > http://www.squeaksource.com/Cryptography.html > > I also moved the DistObjectPresentation project there, though it's > buggy. There are too many people to name who have made this, all of > this, possible. Thank you so very very much. > -- Robert . .. ... ^,^ From commits at source.squeak.org Thu Apr 14 22:46:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 14 22:46:16 2016 Subject: [squeak-dev] The Trunk: Tools-cmm.689.mcz Message-ID: Chris Muller uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-cmm.689.mcz ==================== Summary ==================== Name: Tools-cmm.689 Author: cmm Time: 14 April 2016, 5:45:50.151772 pm UUID: 83a287db-4e6e-4a0f-a666-68405c7261c7 Ancestors: Tools-mt.688 - Don't blow up just to render an icon in a list. - Put keyboard shortcut hint into the 'remove from this browser' function of MessageLists. =============== Diff against Tools-mt.688 =============== Item was changed: ----- Method: Browser>>messageIconAt: (in category 'message list') ----- messageIconAt: anIndex + ^ self messageIconFor: (self messageList at: anIndex ifAbsent: [^nil])! - ^ self messageIconFor: (self messageList at: anIndex)! Item was changed: ----- Method: MessageSet>>addExtraShiftedItemsTo: (in category 'message list') ----- addExtraShiftedItemsTo: aMenu "The shifted selector-list menu is being built. Add items specific to MessageSet" self growable ifTrue: [aMenu addList: #( - + ('remove from this browser (d)' removeMessageFromBrowser) - ('remove from this browser' removeMessageFromBrowser) ('filter message list...' filterMessageList))]. aMenu + add: 'sort by date' - add: 'sort by date' action: #sortByDate! From jelena at misticnabica.hr Thu Apr 14 22:46:26 2016 From: jelena at misticnabica.hr (jelena@misticnabica.hr) Date: Thu Apr 14 22:46:50 2016 Subject: [squeak-dev] The Trunk: Tools-cmm.689.mcz Message-ID: From robert.w.withers at gmail.com Thu Apr 14 22:56:45 2016 From: robert.w.withers at gmail.com (Robert Withers) Date: Thu Apr 14 22:56:51 2016 Subject: [squeak-dev] update forthcoming for SecureSession Message-ID: <5710202D.8030200@gmail.com> I need to give you all a heads up that I will release a new version in coming days, with a potential change to the encryption. I must do some coding and testing first. This protocol change will break any currently installed versions V1, so please consider this alpha code at this point. Thank you. -- Robert . .. ... ^,^ From Marcel.Taeumel at hpi.de Fri Apr 15 06:56:27 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 15 07:28:42 2016 Subject: [squeak-dev] Re: Host window resizing (was: [Vm-dev] Re: Too many full GCs in Cog/Spur ... while just drawing GUI ...) In-Reply-To: <6A4A771B-A21E-4F44-9FC9-02096D1CE55C@freudenbergs.de> References: <95BEA6B9-6736-4720-BA76-9E4C6102E54B@freudenbergs.de> <6A4A771B-A21E-4F44-9FC9-02096D1CE55C@freudenbergs.de> Message-ID: <1460703387323-4890113.post@n4.nabble.com> Hi, Bert. Please add > DisplayScreen class>>hostWindowSize: > DisplayScreen class>>hostWindowTitle: from eToys and deprecate the other one. Best, Marcel -- View this message in context: http://forum.world.st/Host-window-resizing-was-Vm-dev-Re-Too-many-full-GCs-in-Cog-Spur-while-just-drawing-GUI-tp4888865p4890113.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Apr 15 08:02:50 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 15 08:35:15 2016 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.689.mcz In-Reply-To: References: Message-ID: <1460707370974-4890146.post@n4.nabble.com> There seems to be a bug in the list if it calles #messageIconAt: with an invalid index. We should rather investigate and fix that. :-) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-689-mcz-tp4890096p4890146.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From asqueaker at gmail.com Fri Apr 15 15:13:30 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Apr 15 15:14:12 2016 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.689.mcz In-Reply-To: <1460707370974-4890146.post@n4.nabble.com> References: <1460707370974-4890146.post@n4.nabble.com> Message-ID: Agree, and the best way to do that is for whomever wants to try to fix it to simply roll back the method and wait for it to blow up. Its not easy to reproduce, but it happens even though I don't use icons in message lists, so its hard for me to prioritize it above my other obligations at this time. In the meantime, I do not wish for a feature like this to be disruptive to anyone else. PS -- that it is so hard to understand and fix maybe speaks to another problem with it..? ;-/ On Fri, Apr 15, 2016 at 3:02 AM, marcel.taeumel wrote: > There seems to be a bug in the list if it calles #messageIconAt: with an > invalid index. We should rather investigate and fix that. :-) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-689-mcz-tp4890096p4890146.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Fri Apr 15 18:07:57 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Apr 15 18:08:40 2016 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.689.mcz In-Reply-To: References: <1460707370974-4890146.post@n4.nabble.com> Message-ID: It may be that, after investigating the root cause, this change _is_ the best fix. Between filtering, smart-splitters, scrolling, lists that are shorter than the widget height, etc., there ends up to be so many combinations of conditions a "defensive" style starts to become a better design for managing this much complexity. Not for hiding a problem, of course, but by structuring the method compositions from the get-go to have, for example, idempotent properties, it becomes more bullet proof against all the crazy conditions of a complex UI... From reliablerobots at gmail.com Fri Apr 15 19:52:35 2016 From: reliablerobots at gmail.com (ReliableRobots.com) Date: Fri Apr 15 19:52:38 2016 Subject: [squeak-dev] Squeak USB on Raspberry Pi Message-ID: Squeak on a Raspberry Pi (RPi) is easy - download it on a PC then upload 3 files from there to the RPi, changes, sources, and image then run squeak [path]image. But a search for Squeak classes returned nothing for USB. So how do I communicate with a Webcam, microcontroller, or other peripheral? A look at Pharo classes produced similar results. Also, couldn't get this Pharo to run on RPi. http://car.mines-douai.fr/category/software/pharos/ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160415/fcde3132/attachment.htm From commits at source.squeak.org Fri Apr 15 21:55:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 15 21:55:28 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160415215526.1761.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/016711.html Name: Tools-cmm.689 Ancestors: Tools-mt.688 - Don't blow up just to render an icon in a list. - Put keyboard shortcut hint into the 'remove from this browser' function of MessageLists. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016712.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016713.html ============================================= From tim at rowledge.org Fri Apr 15 22:41:56 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Apr 15 22:42:00 2016 Subject: [squeak-dev] Squeak USB on Raspberry Pi In-Reply-To: References: Message-ID: <89B7552C-FA68-4BBA-85D3-5D922440A7C9@rowledge.org> > On 15-04-2016, at 12:52 PM, ReliableRobots.com wrote: > > Squeak on a Raspberry Pi (RPi) is easy - download it on a PC then upload 3 files from there to the RPi, changes, sources, and image then run squeak [path]image. It can be even easier; just download the Squeak 5.0 All-in-One and run it. > But a search for Squeak classes returned nothing for USB. So how do I communicate with a Webcam, microcontroller, or other peripheral? All I know suggests that usb things are generally mapped as serial ports under *nix. You open serial ports and do whatever demented and weird, nay, dangerous, things *nix demands of you. > > A look at Pharo classes produced similar results. > Also, couldn't get this Pharo to run on RPi. > http://car.mines-douai.fr/category/software/pharos/ Can?t help you there. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Mommy! The cursor's winking at me! From btc at openinworld.com Sat Apr 16 02:45:49 2016 From: btc at openinworld.com (Ben Coman) Date: Sat Apr 16 02:46:13 2016 Subject: [squeak-dev] Squeak USB on Raspberry Pi In-Reply-To: References: Message-ID: On Sat, Apr 16, 2016 at 3:52 AM, ReliableRobots.com wrote: > Squeak on a Raspberry Pi (RPi) is easy - download it on a PC then upload 3 > files from there to the RPi, changes, sources, and image then run squeak > [path]image. But a search for Squeak classes returned nothing for USB. So > how do I communicate with a Webcam, microcontroller, or other peripheral? > > A look at Pharo classes produced similar results. > Also, couldn't get this Pharo to run on RPi. > http://car.mines-douai.fr/category/software/pharos/ The place to ask pharo questions is http://lists.pharo.org/mailman/listinfo/pharo-users_lists.pharo.org btw, apparently Pharo UI runs slower than Squeak UI on RPi https://mail.google.com/mail/u/0/#search/pharo+rpi++slow/152d785715c67e37 cheers -ben From Marcel.Taeumel at hpi.de Sat Apr 16 13:03:11 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Apr 16 13:35:34 2016 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.689.mcz In-Reply-To: References: <1460707370974-4890146.post@n4.nabble.com> Message-ID: <1460811791250-4890298.post@n4.nabble.com> Okay, it seems difficult to reproduce the bug. Hmmm... Btw: You don't need the additional return before nil. You do not actually need nil because empty blocks return nil. However, this seems to be more readable. :-) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-689-mcz-tp4890096p4890298.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Apr 16 13:07:55 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Apr 16 13:40:18 2016 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.689.mcz In-Reply-To: <1460811791250-4890298.post@n4.nabble.com> References: <1460707370974-4890146.post@n4.nabble.com> <1460811791250-4890298.post@n4.nabble.com> Message-ID: <1460812075432-4890299.post@n4.nabble.com> Oops, you do. Nevermind. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-689-mcz-tp4890096p4890299.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From reliablerobots at gmail.com Sat Apr 16 16:19:58 2016 From: reliablerobots at gmail.com (ReliableRobots.com) Date: Sat Apr 16 16:20:01 2016 Subject: [squeak-dev] Any hope for Smalltalk on Raspberry Pi? Message-ID: I have Squeak on a RPi but I don't know how to access any USB peripherals or how to make primitives to do so. I want to use RPi for controlling a microcontroller and processing webcam video for my robot. If I can't get that in Smalltalk can it be added or what language should I move to? I was referred to http://car.mines-douai.fr/category/software/pharos/ but I can't get it to work on RPi. A major focus of RPi is to teach electronics but without access to the peripherals, Smallltalk is not useful. But some access is available in Scratch which is built on top of Squeak so why can't I get access to that code directly instead of going through the Scratch changes file? Why can't I get Smalltalk goodies like I used to buy from Digitalk? With all the VM work, there must be a way to hook up C++ code like OpenCV to do real time video contours and other image recognition algorithms. Dolphin has a somewhat easy way to add primitives. If Squeak all in one contains package bundles only for Mac, why not include essentials for RPi? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160416/1184afb4/attachment.htm From tim at rowledge.org Sat Apr 16 16:41:55 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Apr 16 16:42:41 2016 Subject: [squeak-dev] Any hope for Smalltalk on Raspberry Pi? In-Reply-To: References: Message-ID: <01930EA8-E468-46DC-B2F9-59A8CD45C55E@rowledge.org> > On 16-04-2016, at 9:19 AM, ReliableRobots.com wrote: > > I have Squeak on a RPi but I don't know how to access any USB peripherals or how to make primitives to do so. I want to use RPi for controlling a microcontroller and processing webcam video for my robot. If I can't get that in Smalltalk can it be added or what language should I move to? Learn about FFI. That provides access to C libraries; then you wrap that low-level interface with nice Smalltalk code so it makes sense. > > I was referred to > http://car.mines-douai.fr/category/software/pharos/ > but I can't get it to work on RPi. Can?t help you there. As far as I can make out some of the changes in Pharo use too much compute to be realistic on a Pi. > > A major focus of RPi is to teach electronics but without access to the peripherals, Smallltalk is not useful. But some access is available in Scratch which is built on top of Squeak so why can't I get access to that code directly instead of going through the Scratch changes file? Because nobody has provided me with time (ie, money) to make all that stuff decently available for general use. There?s only so much I can do at one time. > > Why can't I get Smalltalk goodies like I used to buy from Digitalk? Because nobody will pay to buy software any more. > With all the VM work, there must be a way to hook up C++ code like OpenCV to do real time video contours and other image recognition algorithms. As I mentioned above, look up the FFI (Start with http://wiki.squeak.org/squeak/2426 for example) > > If Squeak all in one contains package bundles only for Mac, why not include essentials for RPi? It does. Last time I checked the Pi had all the linux related plugins there aren?t x86 specific. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim There are two ways to write error-free programs; only the third one works. From robert.w.withers at gmail.com Sat Apr 16 17:07:45 2016 From: robert.w.withers at gmail.com (Robert Withers) Date: Sat Apr 16 17:07:50 2016 Subject: [squeak-dev] Any hope for Smalltalk on Raspberry Pi? In-Reply-To: <01930EA8-E468-46DC-B2F9-59A8CD45C55E@rowledge.org> References: <01930EA8-E468-46DC-B2F9-59A8CD45C55E@rowledge.org> Message-ID: <57127161.3010702@gmail.com> Tim, would the Exobox USB code be around, available? On 04/16/2016 12:41 PM, tim Rowledge wrote: >> On 16-04-2016, at 9:19 AM, ReliableRobots.com wrote: >> >> I have Squeak on a RPi but I don't know how to access any USB peripherals or how to make primitives to do so. I want to use RPi for controlling a microcontroller and processing webcam video for my robot. If I can't get that in Smalltalk can it be added or what language should I move to? > Learn about FFI. That provides access to C libraries; then you wrap that low-level interface with nice Smalltalk code so it makes sense. > >> I was referred to >> http://car.mines-douai.fr/category/software/pharos/ >> but I can't get it to work on RPi. > Can?t help you there. As far as I can make out some of the changes in Pharo use too much compute to be realistic on a Pi. > >> A major focus of RPi is to teach electronics but without access to the peripherals, Smallltalk is not useful. But some access is available in Scratch which is built on top of Squeak so why can't I get access to that code directly instead of going through the Scratch changes file? > Because nobody has provided me with time (ie, money) to make all that stuff decently available for general use. There?s only so much I can do at one time. > >> Why can't I get Smalltalk goodies like I used to buy from Digitalk? > Because nobody will pay to buy software any more. > >> With all the VM work, there must be a way to hook up C++ code like OpenCV to do real time video contours and other image recognition algorithms. > As I mentioned above, look up the FFI (Start with http://wiki.squeak.org/squeak/2426 for example) >> If Squeak all in one contains package bundles only for Mac, why not include essentials for RPi? > It does. Last time I checked the Pi had all the linux related plugins there aren?t x86 specific. > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > There are two ways to write error-free programs; only the third one works. > > > -- Robert . .. ... ^,^ From stephan at stack.nl Sat Apr 16 20:54:35 2016 From: stephan at stack.nl (Stephan Eggermont) Date: Sat Apr 16 20:54:52 2016 Subject: [squeak-dev] Re: Any hope for Smalltalk on Raspberry Pi? In-Reply-To: References: Message-ID: On 16/04/16 18:19, ReliableRobots.com wrote: > I was referred to > http://car.mines-douai.fr/category/software/pharos/ > but I can't get it to work on RPi. That is the explanation and script for x86. On a Raspberry Pi you need an ARM vm. You'll need to make some changes in the script in http://car.mines-douai.fr/scripts/PhaROS I think Cyril Ferlicot runs Pharo on his pi, but I don't remember which vm he's using, probably the latest from Eliot: http://www.mirandabanda.org/files/Cog/VM/VM.r3663/ cogspurlinuxhtARM-16.13.3663.tgz Stephan From Lou at Keystone-Software.com Sat Apr 16 21:14:20 2016 From: Lou at Keystone-Software.com (Louis LaBrunda) Date: Sat Apr 16 21:14:38 2016 Subject: [squeak-dev] Squeak USB on Raspberry Pi References: Message-ID: Hi, A friend and I are working on an interface for VA Smalltalk [1][2] to LibUSB [3]. When we finish we intend to port our interface to Squeak/Pharo. In the mean time maybe you can use a few FFI calls to just enough of LibUSB to talk to a USB device. Lou 1) http://www.instantiations.com 2) https://groups.google.com/forum/#!topic/va-smalltalk/IuGPHMHS0zI 3) http://www.libusb.org On Fri, 15 Apr 2016 12:52:35 -0700, "ReliableRobots.com" wrote: >Squeak on a Raspberry Pi (RPi) is easy - download it on a PC then upload 3 >files from there to the RPi, changes, sources, and image then run squeak >[path]image. But a search for Squeak classes returned nothing for USB. So >how do I communicate with a Webcam, microcontroller, or other peripheral? > >A look at Pharo classes produced similar results. >Also, couldn't get this Pharo to run on RPi. >http://car.mines-douai.fr/category/software/pharos/ -- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon From eliot.miranda at gmail.com Sat Apr 16 22:07:01 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Apr 16 22:07:05 2016 Subject: [squeak-dev] deselection broken in method list In-Reply-To: References: <96E23C98-23BF-4F2C-8F96-1EC9844D95D5@gmx.de> <20140726132327.GA86800@shell.msen.com> Message-ID: Is it possible to deselect in a MessageList Browser? I am so /f*&^%ed off/ that I can't do fileOutAll. Grrr. On Sun, Jul 27, 2014 at 10:12 PM, Eliot Miranda wrote: > Hi Chris, > > > On Sat, Jul 26, 2014 at 9:53 AM, Chris Muller wrote: > >> > > Hi All, >>>>> > > >>>>> > > I depend heavily on fileOutAll in method list browsers. For >>>>> example, I'm trying to create versions of the VM's boolean cheat code for >>>>> the Sista bytecode set and do this by filing out the code for the Newspeak >>>>> set and editing it. I tried to do this using "self systemNavigation >>>>> browseAllSelect: [:m| ('*ooleanCheat*V*' match: m selector) or: [m >>>>> sendsSelector: #booleanCheatV4:]]" to get a method list browser. Then I >>>>> was expecting to be able to use file out with nothing in the list >>>>> selected. This files out all methods in the list but... >>>>> > > >>>>> > > Deselection is broken! I can't deselect the first item and hence >>>>> can only file out a single definition . Will whoever changed this please >>>>> restore it asap? (in trunk) >>>>> > > >>>>> > > >>>>> > > Hi again, hey, I just realized! There is a way to deselect in the >>>>> MessageTrace. It's called "Invert Level Selection" and its on the "more" >>>>> menu (Shift+yellow click). >>>>> > > >>>>> > > Hot key for it is Command+Shift+I (capital "eye"). >>>>> > > >>>>> > >>>>> > Wasn't that ?DoIt and invoke the inspector? ? >>>>> >>>> >>>> No, that's only from a code pane. We're talking about from the upper >>>> pane of a MessageTrace or MessageSet. >>>> >>>> But now I see I misspoke -- because I had been experimenting with >>>> Eliots question from a MessageTrace with only one message it it. >>>> >>>> This is something I've wnated fixed for a long time, I'll see if I can >>>> spend a little time wiht it today and solve it. >>>> >>>> BTW, why is it intuitive at all that NO SELECTION means ALL SELECTION >>>> for filing out? Talk about unintuitive -- THAT sounds like it would be a >>>> bug in itself but, whatever.. >>>> >>> >>> Nonsense ;-) A selection in a list means one thing in the list. What >>> else can nothing in the list be interpreted as? >>> >> >> That's a logical choice for the browser that only supports 0-or-1 >> selection. But the MessageTrace browser only currently supports 1-to-many >> selection, so to file them all out you would simply select them all. >> > > When I use multiple select followed by fileOut in the message trace only > the first selection is printed out. So multiple select is broken at least > for file out. > > In the latter case, What-Is-Selected = What-Is-Filed-Out, which is >> intuitive and consistent. In the former case, the user has to make the >> translation that "Zero-Selection = All-Filed-Out" which puts the UI's >> behavior briefly into their cognitive view (a higher level than the >> intuitive level). That's all I meant. >> > > Except that, at least in the case of fileOut, multiple select isn't > observed. > > >> It is either nothing selected or "the list". Of course it's intuitive. >>> If one says "file out" to a list of items it is natural for that command to >>> apply to the whole list. You're not seeing the trees for the forest. >>> >>> >> >>>> >>>>> To focus on Eliot's original question: The deselection mechanism works >>>>> in Squeak4.5-13352.image. It does not work in trunk now. >>>>> >>>> >>>> No, nothing has changed other than the traceMessages preference being >>>> set, which is way more important than occasionally filing out methods of a >>>> list. >>>> >>> >>> It's not about what is more important. It is about /not breaking >>> things/. >>> >> >> Eliot, I'm sorry to repeat myself but, _nothing has changed_. Nothing is >> broken that wasn't "broken" before. >> >> MessageSet is a 0-or-1 selection, period. MessageTrace selection is >> 1-to-many and has been for many years. You could very easily select them >> all and then file them out (and, I'm sorry I didn't mention that before!). >> In spite of that easy work-around, I offered in my last note to spend time >> looking into it MessageTrace supporting 0-to-many selection. >> >> And your value judgement that trace messages is way more important is >>> just that, a value judgement. >>> >> Trace messages drives me mad. There is no back button. If there was a >>> back button then it could be helpful, but without a back button it is >>> hugely irritating much of the time. i.e. "I want a list of senders of foo; >>> ok, got the list, now do a whole lot of reading based around that. Oh s**t, >>> I juts drilled down and now my original list is nested and I've lost my >>> context, and... there's no back button". >>> >> >> No browser in Squeak has a "back button." Squeak's UI has always been >> that you can navigate FROM anywhere, TO anywhere, instantly, which is >> multifold more productive than breadcrumbs and modal browsing. For the >> case above, your "back button" would be simply Command+d, or the up-arrow. >> Did you even try that? >> >> Makes me wonder if you've given MessageTrace a fair-shake.. :( >> >> Chris, you can't just change the tools to suit your whim because you're >>> release manager. >>> >> >> 4.5 had a very deliberately selected collection of >> productivity-improvements to the IDE by addressing long-standing issues >> that have plagued Smalltalk IDE's since the 1980's, like >> window-proliferation. It's clear you prefer modal browsing, and possibly >> why you think they were "whimsical" changes. They were not. >> >> The tools need to improve without breaking old workflows. >>> >> >> I hope you now agree, no workflow was "broken". You were just so >> accustomed to "Zero Selection = All Selection" that it didn't occur to us >> that "All selection = All selection". :) >> >> Dude, I'd like to work on the upgrades you suggested for the mc history. >> Since it's clear you don't like MessageTrace anyway, you now have TWO >> workarounds, and since I assume you'll just change your preference setting, >> I'm gonna go back to working on those mc history improvements rather than >> fiddle with MessageTrace to make it 0-to-many... Okay? >> > > It's OK. But the issue with MessageSet was that the BrowserRequestor did > break no-select fileOut by, when augmenting a menu in a message set with > nothing selected, prompting for a selector and selecting what ever the > cursor was pointing at in the list. I fixed this in Monticello-eem.595. > > So I'm sort-of happy in that I have no-select fileOutAll working again in > the message set. But I don't have it working in message trace, and the > message trace has no back button. > > If message set had a back button and observed multiple-select for the > operations it provides I /would/ prefer it over message set. It ain't > there yet. > > Forgive the criticism. It is not meant to be harsh. > > > Deselecting with the Control key is broken in 4.5 and for a long time >>>> before that. As I said, we should focus on letting that "isControlled" >>>> input var to MessageTrace>>#toggleSelectionAt:shifted:controlled: be >>>> able to come in as a "true" and then everything should just work... >>>> >>>> I'll see if there's an easy fix. >>>> >>> -- >>> best, >>> Eliot >>> >> -- > Aloha, > Eliot > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160416/a84294cb/attachment.htm From vavra_milan at yahoo.com Sun Apr 17 00:33:00 2016 From: vavra_milan at yahoo.com (Milan Vavra) Date: Sun Apr 17 01:05:24 2016 Subject: [squeak-dev] Re: deselection broken in method list In-Reply-To: References: <96E23C98-23BF-4F2C-8F96-1EC9844D95D5@gmx.de> <20140726132327.GA86800@shell.msen.com> Message-ID: <1460853180026-4890357.post@n4.nabble.com> Hi Elliot, As a quick workaround you could add the line ('file out all messages' fileOutAllMessages) to MessageSet>>#mainMessageListMenu: . Then right-click the message list and select 'file out all messages'. This will file out all messages in the list to a file with a name based on the selected message. The magic happens in StringHolder>>#fileOutAllMessages where you can change the filename to something you like. Best Regards, Milan -- View this message in context: http://forum.world.st/deselection-broken-in-method-list-tp4770141p4890357.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sun Apr 17 09:17:47 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Apr 17 09:50:15 2016 Subject: [squeak-dev] Re: deselection broken in method list In-Reply-To: References: Message-ID: <1460884667374-4890383.post@n4.nabble.com> Hi Eliot, I think that you need these preferences: PluggableListMorph menuRequestUpdatesSelection: false. Preferences disable: #traceMessages. Then, you can deselect everything in the list and file-out will file-out everything. Another way would be to show the vertical scroll bar and the menu icon: ScrollBar scrollBarsWithoutMenuButton: false. Preferences enable: #alwaysShowVScrollbar. *** Anyway, the feature you are looking for, namely "file out all messages", is not quite accessible at the moment. This may be one reason for your discomfort. --- We should improve that! Such hidden features affect user experience... Sorry, for any inconveniences. Considering the request of this thread, however, there is nothing broken. Best, Marcel -- View this message in context: http://forum.world.st/deselection-broken-in-method-list-tp4770141p4890383.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sun Apr 17 09:20:25 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Apr 17 09:52:52 2016 Subject: [squeak-dev] Why do we process the shutdown list if not snapshotting? Message-ID: <1460884825112-4890384.post@n4.nabble.com> Hi, there! Are there any reasons to process the shutdown list if we just quit without saving/snapshotting? At the moment, we do so... See SmalltalkImage >> snapshot:andQuit:withExitCode:embedded: Best, Marcel -- View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sun Apr 17 10:01:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 10:01:25 2016 Subject: [squeak-dev] The Trunk: Tools-mt.690.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.690.mcz ==================== Summary ==================== Name: Tools-mt.690 Author: mt Time: 17 April 2016, 12:00:40.266542 pm UUID: d4a2a77e-d3cf-7c49-8685-096e8f7ff578 Ancestors: Tools-cmm.689 Make the message trace tools more obvious to avoid applying a wrong user model. Regular message set and traced message set behave differently considering mouse clicks, keyboard shortcuts, etc. There is a preference traceMessage to switch between traditional senders/implementors and the traced versions. =============== Diff against Tools-cmm.689 =============== Item was changed: ----- Method: MessageTrace>>windowLabelAt: (in category 'private accessing') ----- windowLabelAt: anInteger | str | ^(str := autoSelectStrings at: anInteger) ifNil: + [ 'Traced Implementors of ', - [ 'Implementors of ', (self class parse: self selection toClassAndSelector: [ :class :selector | selector ]) ] ifNotNil: + [ 'Traced Senders of ', str ] - [ 'Senders of ', str ] ! Item was changed: ----- Method: StandardToolSet class>>browseMessageSet:name:autoSelect: (in category 'browsing') ----- browseMessageSet: messageList name: title autoSelect: autoSelectString "Open a message set or message-trace browser, depending on the #traceMessages setting." ^ Preferences traceMessages ifTrue: [ MessageTrace openMessageList: messageList + name: 'Traced ', title - name: title autoSelect: autoSelectString ] ifFalse: [ MessageSet openMessageList: messageList name: title autoSelect: autoSelectString ]! From vavra_milan at yahoo.com Sun Apr 17 12:39:12 2016 From: vavra_milan at yahoo.com (Milan Vavra) Date: Sun Apr 17 13:11:40 2016 Subject: [squeak-dev] Re: TTF import broken in 5.0? In-Reply-To: References: Message-ID: <1460896752531-4890411.post@n4.nabble.com> Hi Vaidotas, The following fix should allow you to import a TTF font and display the national characters in Squeak 5.0. In TTFontReader>>#decodeCmapFmtTable: change i < 256 ifTrue: [seg last > 0 ifTrue: to seg last > 0 ifTrue: and cmap at: i + 1 put: code]]]. to cmap at: i + 1 put: code]]. or revert the method to the version 'nice 12/27/2009 03:10' . In TTCFontReader>>#processCharMap: change value = 65535 ifFalse: [ "???" to value > 65535 ifFalse: [ "???" . Now import the font and check the characters display as expected.  This is how I would do it: | tmpStyleName tmpFontFileName | tmpStyleName := #Arial. tmpFontFileName := '/Library/Fonts/Arial.ttf'. TTCFont removeStyleName: tmpStyleName. "Remove the existing font if it exists" TTCFont newTextStyleFromTTFile: tmpFontFileName. "Import the new TTF font" FontChooserTool open. "Check that font" Best Regards, Milan -- View this message in context: http://forum.world.st/TTF-import-broken-in-5-0-tp4884157p4890411.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sun Apr 17 13:39:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 13:40:08 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1112.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1112.mcz ==================== Summary ==================== Name: Morphic-mt.1112 Author: mt Time: 17 April 2016, 3:39:02.961563 pm UUID: 02af3e51-0b5a-fc40-ab74-b7372906bad5 Ancestors: Morphic-mt.1111 Removes some ancient compatibility code for running Morphic worlds in MVC views. This feature, however, stopped working long time ago. =============== Diff against Morphic-mt.1111 =============== Item was changed: ----- Method: PasteUpMorph>>displayWorld (in category 'world state') ----- displayWorld + worldState displayWorld: self submorphs: submorphs.! - self outermostWorldMorph privateOuterDisplayWorld - ! Item was removed: - ----- Method: PasteUpMorph>>privateOuterDisplayWorld (in category 'world state') ----- - privateOuterDisplayWorld - - worldState displayWorld: self submorphs: submorphs - ! From commits at source.squeak.org Sun Apr 17 13:40:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 13:41:02 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.21.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.21.mcz ==================== Summary ==================== Name: 51Deprecated-mt.21 Author: mt Time: 17 April 2016, 3:40:38.829563 pm UUID: eb889a15-3f92-8449-a82e-fae0cbcb02fc Ancestors: 51Deprecated-mt.20 Removes some ancient compatibility code for running Morphic worlds in MVC views. This feature, however, stopped working long time ago. =============== Diff against 51Deprecated-mt.20 =============== Item was added: + ----- Method: PasteUpMorph>>privateOuterDisplayWorld (in category '*51Deprecated-Morphic') ----- + privateOuterDisplayWorld + + worldState displayWorld: self submorphs: submorphs + ! From Das.Linux at gmx.de Sun Apr 17 13:47:33 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Sun Apr 17 13:47:38 2016 Subject: [squeak-dev] Re: TTF import broken in 5.0? In-Reply-To: <1460896752531-4890411.post@n4.nabble.com> References: <1460896752531-4890411.post@n4.nabble.com> Message-ID: Hi Milan, On 17.04.2016, at 14:39, Milan Vavra wrote: > Hi Vaidotas, > > The following fix should allow you to import a TTF font > and display the national characters in Squeak 5.0. > > In > TTFontReader>>#decodeCmapFmtTable: > change > i < 256 ifTrue: > [seg last > 0 ifTrue: > to > seg last > 0 ifTrue: > and > cmap at: i + 1 put: code]]]. > to > cmap at: i + 1 put: code]]. > or revert the method to the version > 'nice 12/27/2009 03:10' > . > > In > TTCFontReader>>#processCharMap: > change > value = 65535 ifFalse: [ "???" > to > value > 65535 ifFalse: [ "???" > . > > Now import the font and check the characters display as expected. As I am probably the one who made that not work, can you explain that so I understand what went wrong? Best -Tobias >  > This is how I would do it: > > > | tmpStyleName tmpFontFileName | > > tmpStyleName := #Arial. > tmpFontFileName := '/Library/Fonts/Arial.ttf'. > > TTCFont removeStyleName: tmpStyleName. > "Remove the existing font if it exists" > > TTCFont newTextStyleFromTTFile: tmpFontFileName. > "Import the new TTF font" > > FontChooserTool open. > "Check that font" > > > > Best Regards, > Milan From commits at source.squeak.org Sun Apr 17 15:45:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 15:45:36 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1113.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1113.mcz ==================== Summary ==================== Name: Morphic-mt.1113 Author: mt Time: 17 April 2016, 5:44:23.036117 pm UUID: 1b36a4fb-13d9-f04f-8552-4048b9ac0439 Ancestors: Morphic-mt.1112 Improves robustness when facing erroneous drawing code that affects the debugger GUI. In that case, show primitive REPL instead of freezing the image. Note that there will soon be more code to recover from such serious errors. =============== Diff against Morphic-mt.1112 =============== Item was changed: ----- Method: Debugger class>>morphicOpenOn:context:label:contents:fullView: (in category '*Morphic-opening') ----- + morphicOpenOn: process context: context label: title contents: contentsStringOrNil fullView: full - morphicOpenOn: process context: context label: title contents: contentsStringOrNil fullView: bool "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger." | errorWasInUIProcess debugger | + ErrorRecursion ifTrue: [ + "self assert: process == Project current uiProcess -- DOCUMENTATION ONLY" + ErrorRecursion := false. + ^ Project current handleFatalDrawingError: title]. + + [ErrorRecursion not & Preferences logDebuggerStackToFile - errorWasInUIProcess := Project current spawnNewProcessIfThisIsUI: process. - [Preferences logDebuggerStackToFile ifTrue: [Smalltalk logSqueakError: title inContext: context]] on: Error do: [:ex | ex return: nil]. + + ErrorRecursion := true. + + errorWasInUIProcess := Project current spawnNewProcessIfThisIsUI: process. + + "Schedule debugging in deferred UI message because + 1) If process is the current UI process, it is already broken. + 2) If process is some other process, it must not execute UI code" + Project current addDeferredUIMessage: [ + debugger := self new process: process controller: nil context: context. + full + ifTrue: [debugger openFullNoSuspendLabel: title] + ifFalse: [debugger openNotifierContents: contentsStringOrNil label: title]. + debugger errorWasInUIProcess: errorWasInUIProcess. + + "Try drawing the debugger tool at least once to avoid freeze." + ActiveWorld displayWorldSafely. + + ErrorRecursion := false. - WorldState addDeferredUIMessage: [ - "schedule debugger in deferred UI message to address redraw - problems after opening a debugger e.g. from the testrunner." - [ - debugger := self new process: process controller: nil context: context. - bool - ifTrue: [debugger openFullNoSuspendLabel: title] - ifFalse: [debugger openNotifierContents: contentsStringOrNil label: title]. - debugger errorWasInUIProcess: errorWasInUIProcess. - ] on: Error do: [:ex | - self primitiveError: - 'Original error: ', - title asString, '. - Debugger error: ', - ([ex description] on: Error do: ['a ', ex class printString]), ':' - ] ]. process suspend. ! From vavra_milan at yahoo.com Sun Apr 17 15:13:30 2016 From: vavra_milan at yahoo.com (Milan Vavra) Date: Sun Apr 17 15:46:21 2016 Subject: [squeak-dev] Re: TTF import broken in 5.0? In-Reply-To: References: <1460896752531-4890411.post@n4.nabble.com> Message-ID: <1460906010514-4890434.post@n4.nabble.com> "Hi Tobias, Strings in Squeak are either ByteString or WideString based on the Unicode codePoints of their characters. Strings are instances of ByteString if they contain characters with codePoint < 256. And instances of WideString if they contain characters with codePoint >= 256. " | tmpString1 tmpString2 tmpString3 tmpString4 tmpString5 tmpString6 | $A codePoint = 65. tmpString1 := String with: $A. tmpString1 class = ByteString. tmpString1 size = 1. tmpString2 := String with: (Character codePoint: 269). tmpString2 class = WideString. tmpString2 size = 1. tmpString3 := tmpString1, tmpString2. tmpString3 class = WideString. tmpString3 size = 2. tmpString4 := tmpString3 copyFrom: 1 to: 1. tmpString4 class = ByteString. tmpString4 size = 1. tmpString5 := tmpString2 squeakToUtf8. tmpString5 class = ByteString. tmpString5 size = 2. tmpString6 := tmpString5 utf8ToSqueak. tmpString6 class = WideString. tmpString6 size = 1. "The national characters mentioned have Unicode codePoint >= 256. When importing a Unicode font, the guard i < 256 ifTrue: [] in TTFontReader>>#decodeCmapFmtTable: discards all characters with Unicode codePoint >= 256. This is undesirable as all those characters mentioned have codePoint >= 256. The guard value > 65535 ifFalse: [ ] in TTCFontReader>>#processCharMap: discards all characters with Unicode codePoint > 65535. This is required as glyphs size = 65536 . Most languages have characters with codePoint <= 65535 so this should not be a problem. Best Regards, Milan " -- View this message in context: http://forum.world.st/TTF-import-broken-in-5-0-tp4884157p4890434.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Sun Apr 17 16:22:51 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Apr 17 16:22:57 2016 Subject: [squeak-dev] Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460884825112-4890384.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> Message-ID: <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> Hi Marcel, IMO yes. Anything that needs t flush and close (eg a database connexion?) would want this. What's /not/ needed is compressing all the bitmap D. So shutdown could do with an argument that reflects if saving or quitting _,,,^..^,,,_ (phone) > On Apr 17, 2016, at 2:20 AM, marcel.taeumel wrote: > > Hi, there! > > Are there any reasons to process the shutdown list if we just quit without > saving/snapshotting? At the moment, we do so... > > See SmalltalkImage >> snapshot:andQuit:withExitCode:embedded: > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Marcel.Taeumel at hpi.de Sun Apr 17 16:51:39 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Apr 17 17:24:09 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> Message-ID: <1460911899721-4890453.post@n4.nabble.com> Hi Eliot, we can distinguish between "resuming" and "quitting." For the latter, however, we cannot know whether that quitting makes a snapshot or not. I think we need another argument. Best, Marcel -- View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890453.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sun Apr 17 17:26:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:26:55 2016 Subject: [squeak-dev] The Trunk: System-mt.816.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.816.mcz ==================== Summary ==================== Name: System-mt.816 Author: mt Time: 17 April 2016, 7:26:27.669544 pm UUID: ed43f5c1-124e-5443-8a75-630449e78766 Ancestors: System-mt.815 Deprecated. =============== Diff against System-mt.815 =============== Item was removed: - ----- Method: Project class>>interruptName: (in category 'utilities') ----- - interruptName: labelString - "Create a Notifier on the active scheduling process with the given label." - - self flag: #toRemove. "after restarting the user interrupt watcher process" - ^ self current interruptName: labelString - ! From commits at source.squeak.org Sun Apr 17 17:27:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:27:35 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.22.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.22.mcz ==================== Summary ==================== Name: 51Deprecated-mt.22 Author: mt Time: 17 April 2016, 7:27:29.345544 pm UUID: 85e7ecd3-ad2f-3540-8d97-f76a165720ec Ancestors: 51Deprecated-mt.21 Deprecated. =============== Diff against 51Deprecated-mt.21 =============== Item was added: + ----- Method: Project class>>interruptName: (in category '*51Deprecated') ----- + interruptName: labelString + "Create a Notifier on the active scheduling process with the given label." + + self flag: #toRemove. "after restarting the user interrupt watcher process" + ^ self current interruptName: labelString + ! From commits at source.squeak.org Sun Apr 17 17:29:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:29:35 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1114.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1114.mcz ==================== Summary ==================== Name: Morphic-mt.1114 Author: mt Time: 17 April 2016, 7:28:54.179544 pm UUID: 4dbd1bf1-ad31-7c47-9995-e5896ec3045e Ancestors: Morphic-mt.1113 Deprecated. =============== Diff against Morphic-mt.1113 =============== Item was removed: - ----- Method: PasteUpMorph>>handleFatalDrawingError: (in category 'world state') ----- - handleFatalDrawingError: errMsg - "Handle a fatal drawing error." - self flag: #toRemove. "Implementation moved to Project, but are there external packages with senders?" - Project current handleFatalDrawingError: errMsg - ! Item was removed: - ----- Method: WorldState>>handleFatalDrawingError: (in category 'update cycle') ----- - handleFatalDrawingError: errMsg - "Handle a fatal drawing error." - self flag: #toRemove. "Implementation moved to Project, but are there external packages with senders?" - Project current handleFatalDrawingError: errMsg - ! From commits at source.squeak.org Sun Apr 17 17:30:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:30:30 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.23.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.23.mcz ==================== Summary ==================== Name: 51Deprecated-mt.23 Author: mt Time: 17 April 2016, 7:29:43.024544 pm UUID: 109f98eb-152b-9d4d-8025-713e1d88d0a3 Ancestors: 51Deprecated-mt.22 Deprecated. =============== Diff against 51Deprecated-mt.22 =============== Item was added: + ----- Method: PasteUpMorph>>handleFatalDrawingError: (in category '*51Deprecated-Morphic') ----- + handleFatalDrawingError: errMsg + "Handle a fatal drawing error." + self flag: #toRemove. "Implementation moved to Project, but are there external packages with senders?" + Project current handleFatalDrawingError: errMsg + ! Item was added: + ----- Method: WorldState>>handleFatalDrawingError: (in category '*51Deprecated-Morphic') ----- + handleFatalDrawingError: errMsg + "Handle a fatal drawing error." + self flag: #toRemove. "Implementation moved to Project, but are there external packages with senders?" + Project current handleFatalDrawingError: errMsg + ! From commits at source.squeak.org Sun Apr 17 17:41:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:41:10 2016 Subject: [squeak-dev] The Trunk: CommandLine-mt.5.mcz Message-ID: Marcel Taeumel uploaded a new version of CommandLine to project The Trunk: http://source.squeak.org/trunk/CommandLine-mt.5.mcz ==================== Summary ==================== Name: CommandLine-mt.5 Author: mt Time: 17 April 2016, 7:41:06.181544 pm UUID: 9f322cab-68f3-934a-8e85-2b999941bd9a Ancestors: CommandLine-cmm.4 Deprecated. =============== Diff against CommandLine-cmm.4 =============== Item was removed: - ----- Method: DummyUIManager>>checkForNewDisplaySize (in category 'display') ----- - checkForNewDisplaySize - Display extent = DisplayScreen actualScreenSize ifTrue: [^ self]. - DisplayScreen startUp. - ! From commits at source.squeak.org Sun Apr 17 17:41:54 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:42:14 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.24.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.24.mcz ==================== Summary ==================== Name: 51Deprecated-mt.24 Author: mt Time: 17 April 2016, 7:41:48.854544 pm UUID: 22a8e1a0-f1d3-da45-a6ff-0f995584ec75 Ancestors: 51Deprecated-mt.23 Deprecated. =============== Diff against 51Deprecated-mt.23 =============== Item was added: + ----- Method: DummyUIManager>>checkForNewDisplaySize (in category '*51Deprecated') ----- + checkForNewDisplaySize + + self deprecated: 'Use Display >> #checkForNewScreenSize. Note that is actually no task for the UI manager. It belongs to the projects main loop.'. + Display extent = DisplayScreen actualScreenSize ifTrue: [^ self]. + DisplayScreen startUp.! From commits at source.squeak.org Sun Apr 17 17:47:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:47:54 2016 Subject: [squeak-dev] The Trunk: System-mt.817.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.817.mcz ==================== Summary ==================== Name: System-mt.817 Author: mt Time: 17 April 2016, 7:47:22.777544 pm UUID: 9e14c93b-8b3b-4946-a768-2f4eba591f61 Ancestors: System-mt.816 Adds hook for "debug it" to tool set. =============== Diff against System-mt.816 =============== Item was added: + ----- Method: ToolSet class>>debugMethod:forReceiver:inContext: (in category 'debugging') ----- + debugMethod: aCompiledMethod forReceiver: anObject inContext: aContext + + self default ifNil:[^ self inform: 'Cannot debug method.']. + ^self default debugMethod: aCompiledMethod forReceiver: anObject inContext: aContext + ! From commits at source.squeak.org Sun Apr 17 17:49:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:49:32 2016 Subject: [squeak-dev] The Trunk: Tools-mt.691.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.691.mcz ==================== Summary ==================== Name: Tools-mt.691 Author: mt Time: 17 April 2016, 7:49:07.078544 pm UUID: 03f9910d-38a2-5a46-bd59-340958701e6c Ancestors: Tools-mt.690 Adds hook for "debug it" to tool set. =============== Diff against Tools-mt.690 =============== Item was added: + ----- Method: StandardToolSet class>>debugMethod:forReceiver:inContext: (in category 'debugging') ----- + debugMethod: aCompiledMethod forReceiver: anObject inContext: aContext + + Project current debugMethod: aCompiledMethod forReceiver: anObject inContext: aContext. + ! From commits at source.squeak.org Sun Apr 17 17:51:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:51:41 2016 Subject: [squeak-dev] The Trunk: System-mt.818.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.818.mcz ==================== Summary ==================== Name: System-mt.818 Author: mt Time: 17 April 2016, 7:50:54.661544 pm UUID: e9cfe7de-b054-f640-a44d-958280b6acd4 Ancestors: System-mt.817 Generic projects "debug it" by just executing the method. =============== Diff against System-mt.817 =============== Item was added: + ----- Method: Project>>debugMethod:forReceiver:inContext: (in category 'debugging') ----- + debugMethod: aCompiledMethod forReceiver: anObject inContext: aContextOrNil + "Just execute the method and return the result. We cannot know how interactive debugging works for arbitrary projects." + + aCompiledMethod + valueWithReceiver: anObject + arguments: (aContextOrNil + ifNil: [#()] + ifNotNil: [{aContextOrNil}]).! From commits at source.squeak.org Sun Apr 17 17:54:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:54:14 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1115.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1115.mcz ==================== Summary ==================== Name: Morphic-mt.1115 Author: mt Time: 17 April 2016, 7:53:29.399544 pm UUID: c54f2046-be47-6c41-8280-6760e845852d Ancestors: Morphic-mt.1114 Use tool set to "debug it". =============== Diff against Morphic-mt.1114 =============== Item was added: + ----- Method: MorphicProject>>debugMethod:forReceiver:inContext: (in category 'debugging') ----- + debugMethod: aCompiledMethod forReceiver: anObject inContext: aContextOrNil + + | guineaPig debugger debuggerWindow context | + guineaPig := + [aCompiledMethod + valueWithReceiver: anObject + arguments: (aContextOrNil ifNil: [ #() ] ifNotNil: [ { aContextOrNil } ]). + guineaPig := nil "spot the return from aCompiledMethod"] newProcess. + context := guineaPig suspendedContext. + debugger := Debugger new + process: guineaPig + controller: nil + context: context. + debuggerWindow := debugger openFullNoSuspendLabel: 'Debug it'. + "Now step into the expression. But if it is quick (is implemented as a primtiive, e.g. `0') + it will return immediately back to the block that is sent newProcess above. Guard + against that with the check for home being thisContext." + [debugger interruptedContext method == aCompiledMethod] + whileFalse: + [(guineaPig isNil + and: [debugger interruptedContext home == thisContext]) ifTrue: + [debuggerWindow delete. + UIManager default inform: 'Nothing to debug; expression is optimized'. + ^self]. + debugger send]! Item was removed: - ----- Method: TextEditor>>debug:receiver:in: (in category 'do-its') ----- - debug: aCompiledMethod receiver: anObject in: evalContext - - | guineaPig debugger debuggerWindow context | - guineaPig := - [aCompiledMethod - valueWithReceiver: anObject - arguments: (evalContext ifNil: [ #() ] ifNotNil: [ { evalContext } ]). - guineaPig := nil "spot the return from aCompiledMethod"] newProcess. - context := guineaPig suspendedContext. - debugger := Debugger new - process: guineaPig - controller: nil - context: context. - debuggerWindow := debugger openFullNoSuspendLabel: 'Debug it'. - "Now step into the expression. But if it is quick (is implemented as a primtiive, e.g. `0') - it will return immediately back to the block that is sent newProcess above. Guard - against that with the check for home being thisContext." - [debugger interruptedContext method == aCompiledMethod] - whileFalse: - [(guineaPig isNil - and: [debugger interruptedContext home == thisContext]) ifTrue: - [debuggerWindow delete. - UIManager default inform: 'Nothing to debug; expression is optimized'. - ^self]. - debugger send]! Item was changed: ----- Method: TextEditor>>debugIt (in category 'do-its') ----- debugIt | receiver context | self lineSelectAndEmptyCheck: [^self]. (model respondsTo: #debugExpression:) ifTrue: [^ model perform: #debugExpression: with: self selection]. receiver := (model respondsTo: #doItReceiver) ifTrue: [model doItReceiver] ifFalse: [nil]. context := (model respondsTo: #doItContext) ifTrue: [model doItContext] ifFalse: [nil]. (self compileSelectionFor: receiver in: context) ifNotNil: [:method | + ToolSet debugMethod: method forReceiver: receiver inContext: context].! - self debug: method receiver: receiver in: context].! From commits at source.squeak.org Sun Apr 17 17:56:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:56:13 2016 Subject: [squeak-dev] The Trunk: ST80-mt.203.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.203.mcz ==================== Summary ==================== Name: ST80-mt.203 Author: mt Time: 17 April 2016, 7:56:01.511544 pm UUID: 8e4ab44d-2022-c94c-bfaf-994cf5e8c08e Ancestors: ST80-mt.202 Move interrupt handling and "debug it" to project code. =============== Diff against ST80-mt.202 =============== Item was removed: - ----- Method: ControlManager>>interruptName: (in category 'scheduling') ----- - interruptName: labelString - "Create a Notifier on the active scheduling process with the given label. Make the Notifier the active controller." - - ^ self interruptName: labelString preemptedProcess: activeControllerProcess - ! Item was removed: - ----- Method: ControlManager>>interruptName:preemptedProcess: (in category 'scheduling') ----- - interruptName: labelString preemptedProcess: theInterruptedProcess - "Create a Notifier on the interrupted process with the given label. Make the Notifier the active controller." - - theInterruptedProcess suspend. - - (activeController ~~ nil and: [activeController ~~ screenController]) ifTrue: [ - theInterruptedProcess == activeControllerProcess - ifTrue: [ - "Carefully de-emphasis the current window." - activeController view topView deEmphasizeForDebugger] - ifFalse: [ - activeController controlTerminate]]. - - "This will just scheduleNoTerminate the newly built controller" - Debugger - openInterrupt: labelString - onProcess: theInterruptedProcess. - - self searchForActiveController! Item was added: + ----- Method: MVCProject>>debugMethod:forReceiver:inContext: (in category 'debugging') ----- + debugMethod: aCompiledMethod forReceiver: anObject inContext: aContextOrNil + + | guineaPig debugger debuggerWindow context | + guineaPig := + [aCompiledMethod + valueWithReceiver: anObject + arguments: (aContextOrNil ifNil: [ #() ] ifNotNil: [ { aContextOrNil } ]). + guineaPig := nil "spot the return from aCompiledMethod"] newProcess. + context := guineaPig suspendedContext. + debugger := Debugger new + process: guineaPig + controller: (world inActiveControllerProcess ifTrue: + [world activeController]) + context: context. + debuggerWindow := debugger openFullNoSuspendLabel: 'Debug it'. + "Now step into the expression. But if it is quick (is implemented as a primtiive, e.g. `0') + it will return immediately back to the block that is sent newProcess above. Guard + against that with the check for home being thisContext." + [debugger interruptedContext method == aCompiledMethod] + whileFalse: + [(guineaPig isNil + and: [debugger interruptedContext home == thisContext]) ifTrue: + [debuggerWindow controller closeAndUnschedule. + UIManager default inform: 'Nothing to debug; expression is optimized'. + ^self]. + debugger send]! Item was changed: ----- Method: MVCProject>>interruptName: (in category 'utilities') ----- interruptName: labelString + "Create a Notifier on the active scheduling process with the given label. Make the Notifier the active controller." - "Create a Notifier on the active scheduling process with the given label." + ^ self + interruptName: labelString + preemptedProcess: self uiProcess! - ^ world interruptName: labelString - ! Item was changed: ----- Method: MVCProject>>interruptName:preemptedProcess: (in category 'utilities') ----- interruptName: labelString preemptedProcess: theInterruptedProcess + "Create a Notifier on the interrupted process with the given label. Make the Notifier the active controller." - "Create a Notifier on the active scheduling process with the given label." + theInterruptedProcess suspend. + + (world activeController ~~ nil and: [world activeController ~~ world screenController]) ifTrue: [ + theInterruptedProcess == self uiProcess + ifTrue: [ + "Carefully de-emphasis the current window." + world activeController view topView deEmphasizeForDebugger] + ifFalse: [ + world activeController controlTerminate]]. + + "This will just scheduleNoTerminate the newly built controller" + Debugger + openInterrupt: labelString + onProcess: theInterruptedProcess. + + world searchForActiveController.! - ^ world interruptName: labelString preemptedProcess: theInterruptedProcess - ! From commits at source.squeak.org Sun Apr 17 17:57:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 17:57:08 2016 Subject: [squeak-dev] The Trunk: ST80Tools-mt.9.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80Tools to project The Trunk: http://source.squeak.org/trunk/ST80Tools-mt.9.mcz ==================== Summary ==================== Name: ST80Tools-mt.9 Author: mt Time: 17 April 2016, 7:57:02.055544 pm UUID: 78153c5c-bc6b-df4e-83da-a5a28bfee072 Ancestors: ST80Tools-cmm.8 Use tool set to "debug it". =============== Diff against ST80Tools-cmm.8 =============== Item was removed: - ----- Method: ParagraphEditor>>debug:receiver:in: (in category '*ST80Tools') ----- - debug: aCompiledMethod receiver: anObject in: evalContext - - | guineaPig debugger debuggerWindow context | - guineaPig := - [aCompiledMethod - valueWithReceiver: anObject - arguments: (evalContext ifNil: [ #() ] ifNotNil: [ { evalContext } ]). - guineaPig := nil "spot the return from aCompiledMethod"] newProcess. - context := guineaPig suspendedContext. - debugger := Debugger new - process: guineaPig - controller: ((Smalltalk isMorphic not and: [ScheduledControllers inActiveControllerProcess]) ifTrue: - [ScheduledControllers activeController]) - context: context. - debuggerWindow := debugger openFullNoSuspendLabel: 'Debug it'. - "Now step into the expression. But if it is quick (is implemented as a primtiive, e.g. `0') - it will return immediately back to the block that is sent newProcess above. Guard - against that with the check for home being thisContext." - [debugger interruptedContext method == aCompiledMethod] - whileFalse: - [(guineaPig isNil - and: [debugger interruptedContext home == thisContext]) ifTrue: - [debuggerWindow controller closeAndUnschedule. - UIManager default inform: 'Nothing to debug; expression is optimized'. - ^self]. - debugger send]! Item was changed: ----- Method: ParagraphEditor>>debugIt (in category '*ST80Tools') ----- debugIt + | receiver context | - | method receiver context | - (model respondsTo: #doItReceiver) - ifTrue: - [receiver := model doItReceiver. - context := model doItContext] - ifFalse: - [receiver := context := nil]. self lineSelectAndEmptyCheck: [^self]. + + (model respondsTo: #doItReceiver) + ifTrue: [receiver := model doItReceiver]. + + (model respondsTo: #doItContext) + ifTrue: [context := model doItContext]. + + (self compileSelectionFor: receiver in: context) ifNotNil: [:method | + ToolSet debugMethod: method forReceiver: receiver inContext: context].! - method := self compileSelectionFor: receiver in: context. - method notNil ifTrue: - [self debug: method receiver: receiver in: context].! From commits at source.squeak.org Sun Apr 17 18:01:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 18:01:37 2016 Subject: [squeak-dev] The Trunk: Tools-mt.692.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.692.mcz ==================== Summary ==================== Name: Tools-mt.692 Author: mt Time: 17 April 2016, 8:00:54.358544 pm UUID: 52c8594c-d718-6e46-be0f-863fdd0240bd Ancestors: Tools-mt.691 Message Set Tools (Senders/Implementors): Adds class/system category to the label to improve navigation and filter. =============== Diff against Tools-mt.691 =============== Item was changed: ----- Method: MessageSet>>initializeMessageList: (in category 'private') ----- initializeMessageList: anArray "Initialize my messageList from the given list of MethodReference or string objects. NB: special handling for uniclasses." messageList := OrderedCollection new. anArray do: [ :each | MessageSet parse: each toClassAndSelector: [ :class :sel | | s | class ifNotNil: [class isUniClass ifTrue: [s := class typicalInstanceName, ' ', sel] ifFalse: [s := class name , ' ' , sel , ' {' , + ((class organization categoryOfElement: sel) ifNil: ['']) , '}' , + ' {', class category, '}']. - ((class organization categoryOfElement: sel) ifNil: ['']) , '}']. messageList add: ( MethodReference new setClass: class methodSymbol: sel stringVersion: s)]]]. messageListIndex := messageList isEmpty ifTrue: [0] ifFalse: [1]. contents := ''! From leves at caesar.elte.hu Sun Apr 17 18:16:45 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Apr 17 18:16:48 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460911899721-4890453.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> Message-ID: On Sun, 17 Apr 2016, marcel.taeumel wrote: > Hi Eliot, > > we can distinguish between "resuming" and "quitting." For the latter, > however, we cannot know whether that quitting makes a snapshot or not. > > I think we need another argument. That would be nice. I hate when RFB nags me when I just want to quit the image. Levente > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890453.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From commits at source.squeak.org Sun Apr 17 21:55:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Apr 17 21:55:28 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160417215526.23073.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/016714.html Name: Tools-mt.690 Ancestors: Tools-cmm.689 Make the message trace tools more obvious to avoid applying a wrong user model. Regular message set and traced message set behave differently considering mouse clicks, keyboard shortcuts, etc. There is a preference traceMessage to switch between traditional senders/implementors and the traced versions. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016715.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016716.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016717.html Name: Morphic-mt.1112 Ancestors: Morphic-mt.1111 Removes some ancient compatibility code for running Morphic worlds in MVC views. This feature, however, stopped working long time ago. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016718.html Name: 51Deprecated-mt.21 Ancestors: 51Deprecated-mt.20 Removes some ancient compatibility code for running Morphic worlds in MVC views. This feature, however, stopped working long time ago. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016719.html Name: Morphic-mt.1113 Ancestors: Morphic-mt.1112 Improves robustness when facing erroneous drawing code that affects the debugger GUI. In that case, show primitive REPL instead of freezing the image. Note that there will soon be more code to recover from such serious errors. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016720.html Name: System-mt.816 Ancestors: System-mt.815 Deprecated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016721.html Name: 51Deprecated-mt.22 Ancestors: 51Deprecated-mt.21 Deprecated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016722.html Name: Morphic-mt.1114 Ancestors: Morphic-mt.1113 Deprecated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016723.html Name: 51Deprecated-mt.23 Ancestors: 51Deprecated-mt.22 Deprecated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016724.html Name: CommandLine-mt.5 Ancestors: CommandLine-cmm.4 Deprecated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016725.html Name: 51Deprecated-mt.24 Ancestors: 51Deprecated-mt.23 Deprecated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016726.html Name: System-mt.817 Ancestors: System-mt.816 Adds hook for "debug it" to tool set. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016727.html Name: Tools-mt.691 Ancestors: Tools-mt.690 Adds hook for "debug it" to tool set. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016728.html Name: System-mt.818 Ancestors: System-mt.817 Generic projects "debug it" by just executing the method. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016729.html Name: Morphic-mt.1115 Ancestors: Morphic-mt.1114 Use tool set to "debug it". ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016730.html Name: ST80-mt.203 Ancestors: ST80-mt.202 Move interrupt handling and "debug it" to project code. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016731.html Name: ST80Tools-mt.9 Ancestors: ST80Tools-cmm.8 Use tool set to "debug it". ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016732.html Name: Tools-mt.692 Ancestors: Tools-mt.691 Message Set Tools (Senders/Implementors): Adds class/system category to the label to improve navigation and filter. ============================================= From commits at source.squeak.org Mon Apr 18 00:14:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Apr 18 00:14:08 2016 Subject: [squeak-dev] The Trunk: Tools-cmm.693.mcz Message-ID: Chris Muller uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-cmm.693.mcz ==================== Summary ==================== Name: Tools-cmm.693 Author: cmm Time: 17 April 2016, 7:13:44.787279 pm UUID: beb669bc-958e-463e-8f0b-ac7c407a38e0 Ancestors: Tools-mt.692 Prefixing every MessageTrace with the word "Traced" is ambiguous and unnecessary, and clutters the browser. This is not my original vision for this browser. =============== Diff against Tools-mt.692 =============== Item was changed: ----- Method: MessageTrace>>windowLabelAt: (in category 'private accessing') ----- windowLabelAt: anInteger | str | ^(str := autoSelectStrings at: anInteger) ifNil: + [ 'Implementors of ', - [ 'Traced Implementors of ', (self class parse: self selection toClassAndSelector: [ :class :selector | selector ]) ] ifNotNil: + [ 'Senders of ', str ] - [ 'Traced Senders of ', str ] ! Item was changed: ----- Method: StandardToolSet class>>browseMessageSet:name:autoSelect: (in category 'browsing') ----- browseMessageSet: messageList name: title autoSelect: autoSelectString "Open a message set or message-trace browser, depending on the #traceMessages setting." ^ Preferences traceMessages ifTrue: [ MessageTrace openMessageList: messageList + name: title - name: 'Traced ', title autoSelect: autoSelectString ] ifFalse: [ MessageSet openMessageList: messageList name: title autoSelect: autoSelectString ]! From asqueaker at gmail.com Mon Apr 18 00:19:57 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 00:20:40 2016 Subject: [squeak-dev] The Trunk: Tools-mt.690.mcz In-Reply-To: <57135ee3.58cc370a.32959.7a11SMTPIN_ADDED_MISSING@mx.google.com> References: <57135ee3.58cc370a.32959.7a11SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: I'm sorry Marcel, but I developed the behaviors of TracingMessagesBrowser with great deliberation and care. If you wish to make alteratiuons, would you please collaborate with me? As it stands, this change to my code from Y2002 is very unwelcome and I've rolled it back. Let's talk. traceMessages is not something the user is going to be flipping on and off, so there is no need for a _constant_ indication reminder of which "mode' they're in. I don't know what you're trying to fix, but I cannot stand this new clutter. Sorry. Maybe a different color window is what you want? Even that seems unnecessary, as the system simply responds appropriately to all requests for senders and implementors by doing what the user wants for each scenario. the user doesn't need to "read", in advance, what the system will do, just not surprise them. Nothing about traceMessages does. On Sun, Apr 17, 2016 at 5:00 AM, wrote: > Marcel Taeumel uploaded a new version of Tools to project The Trunk: > http://source.squeak.org/trunk/Tools-mt.690.mcz > > ==================== Summary ==================== > > Name: Tools-mt.690 > Author: mt > Time: 17 April 2016, 12:00:40.266542 pm > UUID: d4a2a77e-d3cf-7c49-8685-096e8f7ff578 > Ancestors: Tools-cmm.689 > > Make the message trace tools more obvious to avoid applying a wrong user model. Regular message set and traced message set behave differently considering mouse clicks, keyboard shortcuts, etc. > There is a preference traceMessage to switch between traditional senders/implementors and the traced versions. > > =============== Diff against Tools-cmm.689 =============== > > Item was changed: > ----- Method: MessageTrace>>windowLabelAt: (in category 'private accessing') ----- > windowLabelAt: anInteger > > | str | > ^(str := autoSelectStrings at: anInteger) > ifNil: > + [ 'Traced Implementors of ', > - [ 'Implementors of ', > (self class > parse: self selection > toClassAndSelector: [ :class :selector | selector ]) ] > ifNotNil: > + [ 'Traced Senders of ', str ] > - [ 'Senders of ', str ] > ! > > Item was changed: > ----- Method: StandardToolSet class>>browseMessageSet:name:autoSelect: (in category 'browsing') ----- > browseMessageSet: messageList name: title autoSelect: autoSelectString > "Open a message set or message-trace browser, depending on the #traceMessages setting." > ^ Preferences traceMessages > ifTrue: > [ MessageTrace > openMessageList: messageList > + name: 'Traced ', title > - name: title > autoSelect: autoSelectString ] > ifFalse: > [ MessageSet > openMessageList: messageList > name: title > autoSelect: autoSelectString ]! > > From asqueaker at gmail.com Mon Apr 18 00:36:30 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 00:37:13 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> Message-ID: > That would be nice. I hate when RFB nags me when I just want to quit the > image. You can use the "flatline your image" desktop hot-key for that, Command+Shift+_. From eliot.miranda at gmail.com Mon Apr 18 05:23:16 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 18 05:23:23 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460911899721-4890453.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> Message-ID: <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> Hi Marcel, I don't understand. When one comes to quit the system either one saves and quits or one quits. In the example of forms, if one saves and quits compression is necessary, but if one merely quits it isn't. The argument needs to distinguish between these two cases. _,,,^..^,,,_ (phone) > On Apr 17, 2016, at 9:51 AM, marcel.taeumel wrote: > > Hi Eliot, > > we can distinguish between "resuming" and "quitting." For the latter, > however, we cannot know whether that quitting makes a snapshot or not. > > I think we need another argument. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890453.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Das.Linux at gmx.de Mon Apr 18 05:32:37 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon Apr 18 05:32:42 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> Message-ID: <25A1ABA9-2CDF-4CBA-BA91-210CE142A0B3@gmx.de> On 18.04.2016, at 07:23, Eliot Miranda wrote: > Hi Marcel, > > I don't understand. When one comes to quit the system either one saves and quits or one quits. In the example of forms, if one saves and quits compression is necessary, but if one merely quits it isn't. The argument needs to distinguish between these two cases. There's still saving and not quitting... > > _,,,^..^,,,_ (phone) > >> On Apr 17, 2016, at 9:51 AM, marcel.taeumel wrote: >> >> Hi Eliot, >> >> we can distinguish between "resuming" and "quitting." For the latter, >> however, we cannot know whether that quitting makes a snapshot or not. >> >> I think we need another argument. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890453.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Apr 18 06:36:09 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 18 07:08:43 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: References: Message-ID: <1460961369529-4890509.post@n4.nabble.com> Hi Chris, I appreciate your visions. I like it that you want to improve Squeak's tools. Please think thoroughly about Eliot's observations, confusions, and problems: http://forum.world.st/deselection-broken-in-method-list-td4770141.html Please, improve the usability of the traced message feature. If it looks like the old one, make the old user model 100% compatible. Thank you. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-690-mcz-tp4890386p4890509.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Apr 18 06:40:02 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 18 07:12:34 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> Message-ID: <1460961602163-4890510.post@n4.nabble.com> Hi there, there are three different scenarios for shutdown: 1. Save and resume 2. Save and quit 3. Quit only For general clean-up routines, 1 and 2 should clean-up, while 3 does not have to. So, one variable might be sufficient. :-) Any other ways of using shutdown? Best, Marcel -- View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890510.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From dionisiydk at gmail.com Mon Apr 18 08:07:14 2016 From: dionisiydk at gmail.com (Denis Kudriashov) Date: Mon Apr 18 08:07:36 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460961602163-4890510.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: Hi 2016-04-18 8:40 GMT+02:00 marcel.taeumel : > Hi there, > > there are three different scenarios for shutdown: > > 1. Save and resume > 2. Save and quit > 3. Quit only > > For general clean-up routines, 1 and 2 should clean-up, while 3 does not > have to. So, one variable might be sufficient. :-) > > Any other ways of using shutdown? > But good practice is to close DB connections when app is closing for example -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160418/6b1fb3a0/attachment.htm From Marcel.Taeumel at hpi.de Mon Apr 18 07:37:08 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 18 08:09:41 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: <1460965028359-4890543.post@n4.nabble.com> Oh, "save and resume" would not delete a temp folder from disk while "save and quit" would do so. Hmm... we need both variables. Best, Marcel -- View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890543.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From timfelgentreff at gmail.com Mon Apr 18 07:47:26 2016 From: timfelgentreff at gmail.com (timfelgentreff) Date: Mon Apr 18 08:20:00 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460961602163-4890510.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: <1460965646554-4890547.post@n4.nabble.com> No, you need three variables. Your scenarios are correct, I think, but 1 and 2 need to differentiate. If you're saving and quitting you want to compress forms and remove tmpdirs and such, but if you're saving and keeping the image open you want to skip the tmpdir removal, not close open sockets, maybe only set a variable for startup to re-init that stuff... marcel.taeumel wrote > Hi there, > > there are three different scenarios for shutdown: > > 1. Save and resume > 2. Save and quit > 3. Quit only > > For general clean-up routines, 1 and 2 should clean-up, while 3 does not > have to. So, one variable might be sufficient. :-) > > Any other ways of using shutdown? > > Best, > Marcel -- View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890547.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Mon Apr 18 13:00:59 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 18 13:01:06 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460965646554-4890547.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> <1460965646554-4890547.post@n4.nabble.com> Message-ID: <163B538D-8B0A-4C10-8102-403DCBF534F5@gmail.com> Hi Tim, Tobias & Marcel, > On Apr 18, 2016, at 12:47 AM, timfelgentreff wrote: > > No, you need three variables. Your scenarios are correct, I think, but 1 and > 2 need to differentiate. If you're saving and quitting you want to compress > forms and remove tmpdirs and such, but if you're saving and keeping the > image open you want to skip the tmpdir removal, not close open sockets, > maybe only set a variable for startup to re-init that stuff... Ok so perhaps there are three states, but that doesn't imply three variables. One would suffice if a symbol were used: #quit #save #saveAndQuit. But is it feasible to ignore #save and expect startUp: to deal with the deferred clean up? #save is not, and usefully /should not/ be a shut down. To exit the system, any save must be followed by either a #quit or a #saveAndQuit. So IMO #save should not shutDown:. Here are two motivating examples 1. Use of #save to produce a checkpoint, or produce an image to debug some issue at a later date. In this case the image should be as close to the running image as possible. Not shutting down in #save is required here. 2. Cleaning up C pointers. It is common enough for applications to allocate external memory and refer to it through pointer objects (IIRC, Alien & ExternalAddress in Squeak et al, CPointer in VW). These /cannot/ be released on #save, because doing so would force shutting down of external code that is using that memory. So instead very early on startUp: all such referents are visited (eg via allInstances, or by enumerating a weak set) and their references are nilled (since the memory is released implicitly on #quit). So IMO #save should /not/ run either the shutdown list or the startup list in the saving image, and should only run the startup list in the new resuming image. This may require sophistication on behalf of the programmer, but the start up and shut down lists are indeed nontrivial things to program; they're often maintaining critical infrastructure such as the delay system, and total ordering is extremely important. Good comments can help. If you look at VW, you'll see use of pragmas to provide better plug fabulist in terms of providing a priority for ordering, and IIRC for prerequisites. We could consider a similar approach. _,,,^..^,,,_ (phone) Eliot > marcel.taeumel wrote >> Hi there, >> >> there are three different scenarios for shutdown: >> >> 1. Save and resume >> 2. Save and quit >> 3. Quit only >> >> For general clean-up routines, 1 and 2 should clean-up, while 3 does not >> have to. So, one variable might be sufficient. :-) >> >> Any other ways of using shutdown? >> >> Best, >> Marcel > > > -- > View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890547.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From eliot.miranda at gmail.com Mon Apr 18 13:03:23 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 18 13:03:28 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: Hi Denis, > On Apr 18, 2016, at 1:07 AM, Denis Kudriashov wrote: > > Hi > > 2016-04-18 8:40 GMT+02:00 marcel.taeumel : >> Hi there, >> >> there are three different scenarios for shutdown: >> >> 1. Save and resume >> 2. Save and quit >> 3. Quit only >> >> For general clean-up routines, 1 and 2 should clean-up, while 3 does not >> have to. So, one variable might be sufficient. :-) >> >> Any other ways of using shutdown? > > But good practice is to close DB connections when app is closing for example Agreed. Bug do you agree that #save is not a time to close, whereas #saveAndQuit and #quit are? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160418/354f2baa/attachment.htm From eliot.miranda at gmail.com Mon Apr 18 13:12:23 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 18 13:12:28 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: <1460961369529-4890509.post@n4.nabble.com> References: <1460961369529-4890509.post@n4.nabble.com> Message-ID: <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> > On Apr 17, 2016, at 11:36 PM, marcel.taeumel wrote: > > Hi Chris, > > I appreciate your visions. I like it that you want to improve Squeak's > tools. > > Please think thoroughly about Eliot's observations, confusions, and > problems: > http://forum.world.st/deselection-broken-in-method-list-td4770141.html All I want is that if one clicks on the single selection in a message trace browser, the selection is deselected. That enables applying a function to the entire list much easier than selecting the entire list, and is consistent with the tool that the preference for message trace browsers has replaced. > Please, improve the usability of the traced message feature. If it looks > like the old one, make the old user model 100% compatible. > > Thank you. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Tools-mt-690-mcz-tp4890386p4890509.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From eliot.miranda at gmail.com Mon Apr 18 13:13:35 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 18 13:13:39 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: <1460961369529-4890509.post@n4.nabble.com> References: <1460961369529-4890509.post@n4.nabble.com> Message-ID: > On Apr 17, 2016, at 11:36 PM, marcel.taeumel wrote: > > Hi Chris, > > I appreciate your visions. I like it that you want to improve Squeak's > tools. > > Please think thoroughly about Eliot's observations, confusions, and > problems: > http://forum.world.st/deselection-broken-in-method-list-td4770141.html > > Please, improve the usability of the traced message feature. If it looks > like the old one, make the old user model 100% compatible. +1 > > Thank you. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Tools-mt-690-mcz-tp4890386p4890509.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From dionisiydk at gmail.com Mon Apr 18 14:17:08 2016 From: dionisiydk at gmail.com (Denis Kudriashov) Date: Mon Apr 18 14:17:30 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: 2016-04-18 15:03 GMT+02:00 Eliot Miranda : > Agreed. Bug do you agree that #save is not a time to close, whereas > #saveAndQuit and #quit are? Yes, exactly. I not carefully read previous mail. Sorry -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160418/56b63a7d/attachment.htm From florin.mateoc at gmail.com Mon Apr 18 14:36:26 2016 From: florin.mateoc at gmail.com (Florin Mateoc) Date: Mon Apr 18 14:36:30 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: <5714F0EA.1020208@gmail.com> Hi Eliot, On 4/18/2016 9:03 AM, Eliot Miranda wrote: > Hi Denis, > > > On Apr 18, 2016, at 1:07 AM, Denis Kudriashov > wrote: > >> Hi >> >> 2016-04-18 8:40 GMT+02:00 marcel.taeumel >: >> >> Hi there, >> >> there are three different scenarios for shutdown: >> >> 1. Save and resume >> 2. Save and quit >> 3. Quit only >> >> For general clean-up routines, 1 and 2 should clean-up, while 3 does not >> have to. So, one variable might be sufficient. :-) >> >> Any other ways of using shutdown? >> >> >> But good practice is to close DB connections when app is closing for example > > Agreed. Bug do you agree that #save is not a time to close, whereas #saveAndQuit and #quit are? > > I think this is a place where the decision might best rest with the image user. We could present them (at save time) with a list of open OS resources and ask them what to do with each. I did work on an application in VW that did not close db connections and it attempted (usually successfully) to transparently re-open them at startup. Also VA has code to recreate the OS widgets on startup. But this can only happen if specific code/effort is put into it for each kind of resource. And presumably each image, even if it did handle some situations, would not handle all possible ones, so the user, assuming they know what their image capabilities are, would be in the best position to decide. Florin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160418/358b4dd6/attachment.htm From asqueaker at gmail.com Mon Apr 18 15:59:47 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 16:00:30 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> References: <1460961369529-4890509.post@n4.nabble.com> <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> Message-ID: > All I want is that if one clicks on the single selection in a message trace browser, the selection is deselected. That enables applying a function to the entire list much easier than selecting the entire list, and is consistent with the tool that the preference for message trace browsers has replaced. The original design intent for TMB was to emulate Windows list-selection -- by using Shift to extend selection (which currently works) and Control to toggle individual selections, which currently doesn't work because Control+click is already overridden for something else I think. My intent has always been to find a way to make Control+click work. Is it possible? From asqueaker at gmail.com Mon Apr 18 16:01:56 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 16:02:38 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: References: <1460961369529-4890509.post@n4.nabble.com> <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> Message-ID: Of course, swipe-selection is required too (without dropping selections like PluggableListMOrphOfMany does). On Mon, Apr 18, 2016 at 10:59 AM, Chris Muller wrote: >> All I want is that if one clicks on the single selection in a message trace browser, the selection is deselected. That enables applying a function to the entire list much easier than selecting the entire list, and is consistent with the tool that the preference for message trace browsers has replaced. > > The original design intent for TMB was to emulate Windows > list-selection -- by using Shift to extend selection (which currently > works) and Control to toggle individual selections, which currently > doesn't work because Control+click is already overridden for something > else I think. > > My intent has always been to find a way to make Control+click work. > Is it possible? From asqueaker at gmail.com Mon Apr 18 16:11:36 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 16:12:19 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: > But good practice is to close DB connections when app is closing for example > > > Agreed. Bug do you agree that #save is not a time to close, whereas > #saveAndQuit and #quit are? Wait, I don't, for the exact reason Denis mentions above. When I save the image, regardless whether its gonna be shut down, Magma will close down, so that the state of the saved image is not with open files, sockets, etc. On a save-and-resume, it then goes ahead and Re-Opens everythiing. Sure, this forces it to go through its shutdown/startup routine on a save but... so what? Couldn't your external memory pointers re-init themselves similarly? What is the goal here, to improve performance of saving the image? From Marcel.Taeumel at hpi.de Mon Apr 18 15:59:18 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Apr 18 16:31:55 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: <1460995158457-4890685.post@n4.nabble.com> I think the goal here is to allow applications to keep their resources open if snapshotting does not entail quitting. Whatever the reasons may be. At the moment, we collected several opinions and use cases here, which suggest to provide two boolean variables, maybe "snapshotting" and "quitting", in the shutdown-interface. Then we would have three different flavors: #shutDown #shutDown: #shutDown:and: Or something like that. Classes can start using the new one if they want to. Best, Marcel -- View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890685.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Mon Apr 18 16:46:48 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Apr 18 16:46:53 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: On Mon, 18 Apr 2016, Chris Muller wrote: >> But good practice is to close DB connections when app is closing for example >> >> >> Agreed. Bug do you agree that #save is not a time to close, whereas >> #saveAndQuit and #quit are? > > Wait, I don't, for the exact reason Denis mentions above. When I save > the image, regardless whether its gonna be shut down, Magma will close > down, so that the state of the saved image is not with open files, > sockets, etc. > > On a save-and-resume, it then goes ahead and Re-Opens everythiing. > Sure, this forces it to go through its shutdown/startup routine on a > save but... so what? Couldn't your external memory pointers re-init > themselves similarly? What is the goal here, to improve performance > of saving the image? I guess it's to avoid the unnecessary downtime. Levente From tim at rowledge.org Mon Apr 18 16:54:44 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Apr 18 16:54:45 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460995158457-4890685.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> <1460995158457-4890685.post@n4.nabble.com> Message-ID: > On 18-04-2016, at 8:59 AM, marcel.taeumel wrote: > > I think the goal here is to allow applications to keep their resources open > if snapshotting does not entail quitting. Whatever the reasons may be. A generally laudable aim in my view. We should try to make it so that the minimum possible is done when saving a snapshot - I?d even stop hibernating bitmaps personally - but that does entail making the startup code able to do almost all the cleanup and restart. The problem with that is the amount of startup work is already ridiculous. We could - as a gedankenexperiment - imagine doing nothing at all before the snapshot primitive. What would we need to do on a fresh startup to cope with whatever mess that left in the saved image? Is it noticeably different to what we already do? Can that be reduced? I can see some things that would almost certainly want to be handled even on a save-and-continue; a database might very well want to do a synchronise, for example. But do sockets and file handles and stuff need to do anything? I can see value in doing a gc before the save. I think. Maybe not? A gc and deal with dead weak pointers? That would potentially close down any dormant resources, which is something we?d be wanting sorted anyway. If we?re quitting and saving then it makes sense to do all the important cleanups - close files, sockets, databases, shutdown connections to gpio deamons before the save, since that means the saved image will be cleaner and starting it up will go faster. If we?re quitting and not saving, maybe there are things that no longer need doing amongst the list. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Never do at compile-time what you can put off till run-time From tim at rowledge.org Mon Apr 18 16:57:42 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Apr 18 16:57:45 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: References: <1460961369529-4890509.post@n4.nabble.com> <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> Message-ID: <5D595526-F61A-45D1-BAEB-1FD857B664EB@rowledge.org> > On 18-04-2016, at 9:01 AM, Chris Muller wrote: > >> >> My intent has always been to find a way to make Control+click work. >> Is it possible? The problem is that ctl-click is stolen to fake other-button mouse clicks, required by all those systems that don?t insist on proper three-button mice. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim 'Profanity: the universal programming language' From eliot.miranda at gmail.com Mon Apr 18 18:50:58 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 18 18:51:01 2016 Subject: [squeak-dev] set equality has changed :-( Message-ID: Hi All, this used to work: (Set with: #module) = (IdentitySet with: #module) when did this change and why? _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160418/8871c235/attachment.htm From asqueaker at gmail.com Mon Apr 18 20:15:22 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 20:16:04 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460995158457-4890685.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> <1460995158457-4890685.post@n4.nabble.com> Message-ID: If you are willing to save a snapshot in a state in which resources were not cleaned up -- and you're okay with that -- then one of two things must be true, either: - You never intend to actaully consume that snapshot or, - you have code which is unnecessarily cleaning up resources when it doesn't need to, so just remove that code Is your use-case that you want to do a "quick save" which doesn't clean up, and then, eventually, a "save and quit" which does clean up? This assumes the image will never crash? It assumes you would never need to re-load the quick-saved image? If so, then you should either not save at all, or remove the clean up code. I think the reasons do matter. If we can't articulate WHY what we're doing is a laudable aim, then we're just adding more and more API for obscure things which no one will ever use. This does not move us toward a simpler system that anyone could fully understand. On Mon, Apr 18, 2016 at 10:59 AM, marcel.taeumel wrote: > I think the goal here is to allow applications to keep their resources open > if snapshotting does not entail quitting. Whatever the reasons may be. > > At the moment, we collected several opinions and use cases here, which > suggest to provide two boolean variables, maybe "snapshotting" and > "quitting", in the shutdown-interface. Then we would have three different > flavors: > > #shutDown > #shutDown: > #shutDown:and: > > Or something like that. Classes can start using the new one if they want to. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890685.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Mon Apr 18 20:21:40 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 20:22:22 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> Message-ID: On Mon, Apr 18, 2016 at 11:46 AM, Levente Uzonyi wrote: > On Mon, 18 Apr 2016, Chris Muller wrote: > >>> But good practice is to close DB connections when app is closing for >>> example >>> >>> >>> Agreed. Bug do you agree that #save is not a time to close, whereas >>> #saveAndQuit and #quit are? >> >> >> Wait, I don't, for the exact reason Denis mentions above. When I save >> the image, regardless whether its gonna be shut down, Magma will close >> down, so that the state of the saved image is not with open files, >> sockets, etc. >> >> On a save-and-resume, it then goes ahead and Re-Opens everythiing. >> Sure, this forces it to go through its shutdown/startup routine on a >> save but... so what? Couldn't your external memory pointers re-init >> themselves similarly? What is the goal here, to improve performance >> of saving the image? > > > I guess it's to avoid the unnecessary downtime. You mean for a server in production using image persistence? If so, is the image saved with those open resources still usable and, if so, is the expensive shutdown code needed at all then? Is what we need to just shift our focus to making things right on the startup side instead of the shutdown side? I seem to remember, the folks at... Dolphin or Smalltalk-MT made a good argument for this philosophy.. From asqueaker at gmail.com Mon Apr 18 20:30:49 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 20:31:33 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <1460965028359-4890543.post@n4.nabble.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> <1460965028359-4890543.post@n4.nabble.com> Message-ID: See ArchiveViewer class>>#shutDown:. On Mon, Apr 18, 2016 at 2:37 AM, marcel.taeumel wrote: > Oh, "save and resume" would not delete a temp folder from disk while "save > and quit" would do so. Hmm... we need both variables. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890543.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Mon Apr 18 20:46:21 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 20:47:04 2016 Subject: [squeak-dev] Re: Why do we process the shutdown list if not snapshotting? In-Reply-To: <163B538D-8B0A-4C10-8102-403DCBF534F5@gmail.com> References: <1460884825112-4890384.post@n4.nabble.com> <859237E4-8861-4BCD-98E2-F03DC6313191@gmail.com> <1460911899721-4890453.post@n4.nabble.com> <5604EA11-6239-4FC1-9304-69B5E887811D@gmail.com> <1460961602163-4890510.post@n4.nabble.com> <1460965646554-4890547.post@n4.nabble.com> <163B538D-8B0A-4C10-8102-403DCBF534F5@gmail.com> Message-ID: Saving an image in a clean state is still a requirement, but I think we can still achieve your vision, Eliot, by simply removing the shutdown code of as many things as we can -- and take care their things in their startup instead. As we get more and more of them moved, shutDown: will run faster and faster, and Save-and-Resume will be instantaneous. This approach preserves backward compatibility and the requirement that we be allowed to save-and-resume our images with a valid state. On Mon, Apr 18, 2016 at 8:00 AM, Eliot Miranda wrote: > Hi Tim, Tobias & Marcel, > >> On Apr 18, 2016, at 12:47 AM, timfelgentreff wrote: >> >> No, you need three variables. Your scenarios are correct, I think, but 1 and >> 2 need to differentiate. If you're saving and quitting you want to compress >> forms and remove tmpdirs and such, but if you're saving and keeping the >> image open you want to skip the tmpdir removal, not close open sockets, >> maybe only set a variable for startup to re-init that stuff... > > Ok so perhaps there are three states, but that doesn't imply three variables. One would suffice if a symbol were used: #quit #save #saveAndQuit. > > But is it feasible to ignore #save and expect startUp: to deal with the deferred clean up? #save is not, and usefully /should not/ be a shut down. To exit the system, any save must be followed by either a #quit or a #saveAndQuit. So IMO #save should not shutDown:. Here are two motivating examples > > 1. Use of #save to produce a checkpoint, or produce an image to debug some issue at a later date. In this case the image should be as close to the running image as possible. Not shutting down in #save is required here. > > 2. Cleaning up C pointers. It is common enough for applications to allocate external memory and refer to it through pointer objects (IIRC, Alien & ExternalAddress in Squeak et al, CPointer in VW). These /cannot/ be released on #save, because doing so would force shutting down of external code that is using that memory. So instead very early on startUp: all such referents are visited (eg via allInstances, or by enumerating a weak set) and their references are nilled (since the memory is released implicitly on #quit). > > So IMO #save should /not/ run either the shutdown list or the startup list in the saving image, and should only run the startup list in the new resuming image. > > This may require sophistication on behalf of the programmer, but the start up and shut down lists are indeed nontrivial things to program; they're often maintaining critical infrastructure such as the delay system, and total ordering is extremely important. Good comments can help. > > If you look at VW, you'll see use of pragmas to provide better plug fabulist in terms of providing a priority for ordering, and IIRC for prerequisites. We could consider a similar approach. > > > _,,,^..^,,,_ (phone) > Eliot > >> marcel.taeumel wrote >>> Hi there, >>> >>> there are three different scenarios for shutdown: >>> >>> 1. Save and resume >>> 2. Save and quit >>> 3. Quit only >>> >>> For general clean-up routines, 1 and 2 should clean-up, while 3 does not >>> have to. So, one variable might be sufficient. :-) >>> >>> Any other ways of using shutdown? >>> >>> Best, >>> Marcel >> >> >> -- >> View this message in context: http://forum.world.st/Why-do-we-process-the-shutdown-list-if-not-snapshotting-tp4890384p4890547.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> > From asqueaker at gmail.com Mon Apr 18 20:59:08 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 20:59:52 2016 Subject: [squeak-dev] set equality has changed :-( In-Reply-To: References: Message-ID: D?j? vu. I think we did make this fix last year, IIRC, you were there. We have #hasEqualElements: on SequenceableCollection, I think we should have one on Set too. On Mon, Apr 18, 2016 at 1:50 PM, Eliot Miranda wrote: > Hi All, > > this used to work: > > (Set with: #module) = (IdentitySet with: #module) > > when did this change and why? > > _,,,^..^,,,_ > best, Eliot > > > From commits at source.squeak.org Mon Apr 18 21:55:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Apr 18 21:55:27 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160418215525.31748.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/016733.html Name: Tools-cmm.693 Ancestors: Tools-mt.692 Prefixing every MessageTrace with the word "Traced" is ambiguous and unnecessary, and clutters the browser. This is not my original vision for this browser. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016734.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016735.html ============================================= From asqueaker at gmail.com Mon Apr 18 22:30:28 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 22:31:14 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1113.mcz In-Reply-To: <5713afa3.c6e38c0a.668e9.ffff9b53SMTPIN_ADDED_MISSING@mx.google.com> References: <5713afa3.c6e38c0a.668e9.ffff9b53SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Hi Marcel, it goes to Emergency Evaluator even when it doesn't lock up too, but I think this is worth it if it saves the lock up cases; EE is certainly better. How should this interplay with the big red X approach that Morphic uses? On Sun, Apr 17, 2016 at 10:44 AM, wrote: > Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-mt.1113.mcz > > ==================== Summary ==================== > > Name: Morphic-mt.1113 > Author: mt > Time: 17 April 2016, 5:44:23.036117 pm > UUID: 1b36a4fb-13d9-f04f-8552-4048b9ac0439 > Ancestors: Morphic-mt.1112 > > Improves robustness when facing erroneous drawing code that affects the debugger GUI. In that case, show primitive REPL instead of freezing the image. > > Note that there will soon be more code to recover from such serious errors. > > =============== Diff against Morphic-mt.1112 =============== > > Item was changed: > ----- Method: Debugger class>>morphicOpenOn:context:label:contents:fullView: (in category '*Morphic-opening') ----- > + morphicOpenOn: process context: context label: title contents: contentsStringOrNil fullView: full > - morphicOpenOn: process context: context label: title contents: contentsStringOrNil fullView: bool > "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger." > > | errorWasInUIProcess debugger | > + ErrorRecursion ifTrue: [ > + "self assert: process == Project current uiProcess -- DOCUMENTATION ONLY" > + ErrorRecursion := false. > + ^ Project current handleFatalDrawingError: title]. > + > + [ErrorRecursion not & Preferences logDebuggerStackToFile > - errorWasInUIProcess := Project current spawnNewProcessIfThisIsUI: process. > - [Preferences logDebuggerStackToFile > ifTrue: [Smalltalk logSqueakError: title inContext: context]] on: Error do: [:ex | ex return: nil]. > + > + ErrorRecursion := true. > + > + errorWasInUIProcess := Project current spawnNewProcessIfThisIsUI: process. > + > + "Schedule debugging in deferred UI message because > + 1) If process is the current UI process, it is already broken. > + 2) If process is some other process, it must not execute UI code" > + Project current addDeferredUIMessage: [ > + debugger := self new process: process controller: nil context: context. > + full > + ifTrue: [debugger openFullNoSuspendLabel: title] > + ifFalse: [debugger openNotifierContents: contentsStringOrNil label: title]. > + debugger errorWasInUIProcess: errorWasInUIProcess. > + > + "Try drawing the debugger tool at least once to avoid freeze." > + ActiveWorld displayWorldSafely. > + > + ErrorRecursion := false. > - WorldState addDeferredUIMessage: [ > - "schedule debugger in deferred UI message to address redraw > - problems after opening a debugger e.g. from the testrunner." > - [ > - debugger := self new process: process controller: nil context: context. > - bool > - ifTrue: [debugger openFullNoSuspendLabel: title] > - ifFalse: [debugger openNotifierContents: contentsStringOrNil label: title]. > - debugger errorWasInUIProcess: errorWasInUIProcess. > - ] on: Error do: [:ex | > - self primitiveError: > - 'Original error: ', > - title asString, '. > - Debugger error: ', > - ([ex description] on: Error do: ['a ', ex class printString]), ':' > - ] > ]. > process suspend. > ! > > From leves at caesar.elte.hu Mon Apr 18 22:43:42 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Apr 18 22:43:45 2016 Subject: [squeak-dev] set equality has changed :-( In-Reply-To: References: Message-ID: Hi Eliot, On Mon, 18 Apr 2016, Eliot Miranda wrote: > Hi All, > ? ? this used to work: > > ? ? (Set with: #module) = (IdentitySet with: #module) > > when did this change and why? I changed it in Collections-ul.669 last November, because it didn't work well. Let's see a different example: | s i | s := Set with: 'module' copy. i := IdentitySet with: 'module' copy. { s = i. i = s } The old implementation would return #(false true), while the new one evaluates to #(false false). Levente > > _,,,^..^,,,_ > best,?Eliot > > From asqueaker at gmail.com Mon Apr 18 22:46:50 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Apr 18 22:47:34 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: <5D595526-F61A-45D1-BAEB-1FD857B664EB@rowledge.org> References: <1460961369529-4890509.post@n4.nabble.com> <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> <5D595526-F61A-45D1-BAEB-1FD857B664EB@rowledge.org> Message-ID: I would like to come up with a good solution. Are you saying Mac users use Control+Click to yellow click? On Mon, Apr 18, 2016 at 11:57 AM, tim Rowledge wrote: > >> On 18-04-2016, at 9:01 AM, Chris Muller wrote: >> >>> >>> My intent has always been to find a way to make Control+click work. >>> Is it possible? > > The problem is that ctl-click is stolen to fake other-button mouse clicks, required by all those systems that don?t insist on proper three-button mice. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > 'Profanity: the universal programming language' > > > > > From eliot.miranda at gmail.com Mon Apr 18 23:29:56 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 18 23:29:59 2016 Subject: [squeak-dev] set equality has changed :-( In-Reply-To: References: Message-ID: On Mon, Apr 18, 2016 at 3:43 PM, Levente Uzonyi wrote: > Hi Eliot, > > On Mon, 18 Apr 2016, Eliot Miranda wrote: > > Hi All, >> this used to work: >> >> (Set with: #module) = (IdentitySet with: #module) >> >> when did this change and why? >> > > I changed it in Collections-ul.669 last November, because it didn't work > well. Let's see a different example: > > | s i | > s := Set with: 'module' copy. > i := IdentitySet with: 'module' copy. > { > s = i. > i = s > } > > The old implementation would return #(false true), while the new one > evaluates to #(false false). > Right. That's a pain, but fair enough. This is clumsy: (aSet size = 1 and: [aSet anyOne = #module]). This slightly less so: aSet = (aSet species with: #module). Levente > > _,,,^..^,,,_ >> best, Eliot >> > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160418/b7297b45/attachment.htm From eliot.miranda at gmail.com Mon Apr 18 23:35:46 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Apr 18 23:35:48 2016 Subject: [squeak-dev] command-E Message-ID: Hi All, the "find method with string literals containing..." command, command-E does /not/ look inside Symbol literals. Here's a case where I specifically wanted it to, I wanted to find the reference to CogSimStackEntry in instVarNamesAndTypesForTranslationDo: aBinaryBlock "enumerate aBinaryBlock with the names and C type strings for the inst vars to include in a CogSSOptStatus struct." self instVarNames do: [:ivn| aBinaryBlock value: ivn value: (ivn = 'ssEntry' ifTrue: [#'CogSimStackEntry *'] ifFalse: [#sqInt])] The method in question is SystemNavigation>>browseMethodsWithString: aString matchCase: caseSensitive "Launch a browser on all methods that contain string literals with aString as a substring. Make the search case-sensitive or insensitive as dictated by the caseSensitive boolean parameter" self browseAllSelect: [:method | method hasLiteralSuchThat: [:lit | (lit isString and: [lit isSymbol not]) and: [lit includesSubstring: aString caseSensitive: caseSensitive]]] name: 'Methods with string ', aString printString, (caseSensitive ifTrue: [' (case-sensitive)'] ifFalse: [' (case-insensitive)']) autoSelect: aString Would people object if I changed this? One way to change it is to exclude Symbol literals that are also messages in the receiver. So, e.g... browseMethodsWithString: aString matchCase: caseSensitive "Launch a browser on all methods that contain string literals with aString as a substring. Make the search case-sensitive or insensitive as dictated by the caseSensitive boolean parameter" self browseAllSelect: [:method | method hasLiteralSuchThat: [:lit | lit isString and: [(lit includesSubstring: aString caseSensitive: caseSensitive) and: [lit isSymbol ifTrue: [(method messages includes: lit) not] ifFalse: [true]]]]] name: 'Methods with string ', aString printString, (caseSensitive ifTrue: [' (case-sensitive)'] ifFalse: [' (case-insensitive)']) autoSelect: aString Would anyone object to me committing this definition? _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160418/5df631b3/attachment.htm From commits at source.squeak.org Mon Apr 18 23:39:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Apr 18 23:39:22 2016 Subject: [squeak-dev] The Inbox: Morphic-cmm.1116.mcz Message-ID: A new version of Morphic was added to project The Inbox: http://source.squeak.org/inbox/Morphic-cmm.1116.mcz ==================== Summary ==================== Name: Morphic-cmm.1116 Author: cmm Time: 18 April 2016, 6:38:47.481742 pm UUID: ae46aa73-c96e-41c2-888f-9d3fe8e1b924 Ancestors: Morphic-mt.1115 - Use the "isControlled" variable to instead indicate whether it came from a mouse move event. This proves useful to at least one model for implementing a desired UI behavior. - For vertical smart-splitters, don't let any single line complain any more than 10-characters worth of occlusion, so that extra long lines of a list will not over-dominate the adjacent widgets. =============== Diff against Morphic-mt.1115 =============== Item was changed: ----- Method: AlternatePluggableListMorphOfMany>>mouseMove: (in category 'event handling') ----- mouseMove: event "The mouse has moved, as characterized by the event provided. Adjust the scrollbar, and alter the selection as appropriate" | oldIndex oldVal row | event position y < self top ifTrue: [scrollBar scrollUp: 1. row := self rowAtLocation: scroller topLeft + (1 @ 1)] ifFalse: [row := event position y > self bottom ifTrue: [scrollBar scrollDown: 1. self rowAtLocation: scroller bottomLeft + (1 @ -1)] ifFalse: [ self rowAtLocation: event position]]. row = 0 ifTrue: [^super mouseDown: event]. model okToChange ifFalse: [^self]. "No change if model is locked" "Set meaning for subsequent dragging of selection" oldIndex := self getCurrentSelectionIndex. oldIndex ~= 0 ifTrue: [oldVal := self listSelectionAt: oldIndex]. "Need to restore the old one, due to how model works, and set new one." oldIndex ~= 0 ifTrue: [self listSelectionAt: oldIndex put: oldVal]. "Inform model of selected item and let it toggle." self changeModelSelection: (self modelIndexFor: row) shifted: true + controlled: true. - controlled: event controlKeyPressed. submorphs do: [:each | each changed]! Item was changed: ----- Method: PluggableListMorph>>charactersOccluded (in category 'geometry') ----- charactersOccluded "Answer the number of characters occluded in my #visibleList by my right edge." | listIndex | listIndex:=0. ^ self visibleList inject: 0 into: [ : sum : each | | eachString totalWidth indexOfLastVisible iconWidth | totalWidth:=0. eachString := each asString "withBlanksTrimmed". iconWidth := (self iconAt: (listIndex := listIndex+1)) ifNil:[0] ifNotNil: [ : icon | icon width+2 ]. indexOfLastVisible := ((1 to: eachString size) detect: [ : stringIndex | (totalWidth:=totalWidth+(self font widthOf: (eachString at: stringIndex))) > (self width - (scrollBar ifNil: [ 0 ] ifNotNil: [ scrollBar width ]) - iconWidth) ] ifNone: [ eachString size + 1 ]) - 1. + sum + ((eachString size - indexOfLastVisible) min: 10) ]! - sum + (eachString size - indexOfLastVisible) ]! From commits at source.squeak.org Mon Apr 18 23:40:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Apr 18 23:41:01 2016 Subject: [squeak-dev] The Inbox: Tools-cmm.694.mcz Message-ID: A new version of Tools was added to project The Inbox: http://source.squeak.org/inbox/Tools-cmm.694.mcz ==================== Summary ==================== Name: Tools-cmm.694 Author: cmm Time: 18 April 2016, 6:40:45.920095 pm UUID: 266d5d98-3fe1-424e-9786-bb3ab191b464 Ancestors: Tools-cmm.693 - Minor update to UI help element; now simply identifies itself. - When a single message is selected in a MessageTrace, clicking it now deselects it so that all methods in the trace can be filed out. =============== Diff against Tools-cmm.693 =============== Item was changed: ----- Method: Inspector>>buildValuePaneWith: (in category 'toolbuilder') ----- buildValuePaneWith: builder | textSpec | textSpec := builder pluggableTextSpec new. textSpec model: self; getText: #contents; setText: #accept:; + help: 'Selection details.'; - help: 'Select a field on the left.'; selection: #contentsSelection; menu: #codePaneMenu:shifted:. ^textSpec! Item was changed: ----- Method: MessageTrace>>addChildMessages:autoSelectString: (in category 'building') ----- addChildMessages: methodReferences autoSelectString: aString + | currentIndentionLevel addables selectables selectableString newAnchor | - | currentIndentionLevel addables selectables selectableString | selectableString := aString keywords ifEmpty: [ String empty ] ifNotEmptyDo: [ : keywords | keywords first ]. [ (messageListIndex between: 1 and: autoSelectStrings size) ] whileFalse: [ autoSelectStrings add: selectableString ]. autoSelectStrings at: messageListIndex put: selectableString. currentIndentionLevel := self currentIndentionLevel. "Don't add mulitple copies of the same method, if a method is already in the list we will merely select it." addables := methodReferences reject: [ : each | messageList includes: each ]. addables do: [ : each | each stringVersion: (self indentionPrefixOfSize: currentIndentionLevel + 1) , each asStringOrText. messageList add: each afterIndex: self messageListIndex. autoSelectStrings add: nil afterIndex: self messageListIndex. messageSelections add: false afterIndex: self messageListIndex ]. selectables := addables copy addAll: (methodReferences select: [ : each | messageList includes: each ]) ; yourself. self deselectAll. + anchorIndex := nil. selectables do: [ : each | self + messageAt: (newAnchor := messageList indexOf: each) + beSelected: true. + anchorIndex ifNil: [ anchorIndex := newAnchor ] ]. - messageAt: (messageList indexOf: each) - beSelected: true ]. self changed: #messageList. "Select the first child method." self messageListIndex: (selectables size > 0 ifTrue: [ messageList indexOf: selectables last ] ifFalse: [ messageList ifEmpty: [ 0 ] ifNotEmpty: [ 1 ] ])! Item was changed: ----- Method: MessageTrace>>toggleSelectionAt:shifted:controlled: (in category 'actions') ----- + toggleSelectionAt: anInteger shifted: isShifted controlled: isMouseDragging + anInteger = 0 ifTrue: [ ^ nil ]. + (isMouseDragging not and: [anInteger = anchorIndex and: [ (messageSelections occurrencesOf: true) = 1 ]]) + ifTrue: + [ self toggleMessageSelectionAt: anInteger. + anchorIndex := nil. + self messageListIndex: 0 ] + ifFalse: - toggleSelectionAt: currentPosition shifted: isShifted controlled: isControlled - - currentPosition = 0 ifTrue: [ ^nil ]. - isControlled - ifTrue: - [ isShifted - ifTrue: - [ self selectAllBetweenAnchorAnd: currentPosition ] - ifFalse: - [ self toggleMessageSelectionAt: currentPosition. - anchorIndex := currentPosition ] ] - ifFalse: [ self deselectAll. isShifted + ifTrue: [ self selectAllBetweenAnchorAnd: anInteger ] - ifTrue: - [ self selectAllBetweenAnchorAnd: currentPosition ] ifFalse: + [ self + messageAt: anInteger - [ self - messageAt: currentPosition beSelected: true. + anchorIndex := anInteger ]. + self messageListIndex: anInteger ]! - anchorIndex := currentPosition ] ]. - self messageListIndex: currentPosition - ! From leves at caesar.elte.hu Tue Apr 19 00:18:36 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Apr 19 00:18:40 2016 Subject: [squeak-dev] set equality has changed :-( In-Reply-To: References: Message-ID: On Mon, 18 Apr 2016, Eliot Miranda wrote: > > > On Mon, Apr 18, 2016 at 3:43 PM, Levente Uzonyi wrote: > Hi Eliot, > > On Mon, 18 Apr 2016, Eliot Miranda wrote: > > Hi All, > ? ? this used to work: > > ? ? (Set with: #module) = (IdentitySet with: #module) > > when did this change and why? > > > I changed it in Collections-ul.669 last November, because it didn't work well. Let's see a different example: > > | s i | > s := Set with: 'module' copy. > i := IdentitySet with: 'module' copy. > { > ? ? ? ? s = i. > ? ? ? ? i = s > } > > The old implementation would return #(false true), while the new one evaluates to #(false false). > > > Right.? That's a pain, but fair enough.? This is clumsy: (aSet size = 1 and: [aSet anyOne = #module]).? This slightly less so: ?aSet = (aSet > species with: #module). You could also write it as aSet asArray = #(module). or as (aSet as: Set) = (Set with: #module). Levente > > Levente > > _,,,^..^,,,_ > best,?Eliot > > > _,,,^..^,,,_ > best,?Eliot > > From asqueaker at gmail.com Tue Apr 19 00:44:01 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Apr 19 00:44:44 2016 Subject: [squeak-dev] command-E In-Reply-To: References: Message-ID: I believe this feature was intended to help humans find methods from seeing them in labels on the UI. Symbols would not normally concern that use-case. Having said that, one could argue that Symbols are Strings, and therefore a Symbol used as a literal in a method is a String used as a literal in a method, and the function is, "find a string literal". For example, even in this case, we have a Symbol is referenced which we intend to perform: selectorToPerform := someCondition ifTrue: [ #add: ] ifFalse: [ #remove: ] Then searching for the string 'add' would regard that a hit. It seems like it shouldn't be a big deal even for the first use-case.. On Mon, Apr 18, 2016 at 6:35 PM, Eliot Miranda wrote: > Hi All, > > the "find method with string literals containing..." command, command-E > does /not/ look inside Symbol literals. Here's a case where I specifically > wanted it to, I wanted to find the reference to CogSimStackEntry in > > instVarNamesAndTypesForTranslationDo: aBinaryBlock > "enumerate aBinaryBlock with the names and C type strings for the inst vars > to include in a CogSSOptStatus struct." > > self instVarNames do: > [:ivn| > aBinaryBlock > value: ivn > value: (ivn = 'ssEntry' > ifTrue: [#'CogSimStackEntry *'] > ifFalse: [#sqInt])] > > The method in question is > > SystemNavigation>>browseMethodsWithString: aString matchCase: caseSensitive > "Launch a browser on all methods that contain string literals with aString > as a substring. Make the search case-sensitive or insensitive as dictated by > the caseSensitive boolean parameter" > > self browseAllSelect: > [:method | > method hasLiteralSuchThat: [:lit | > (lit isString and: [lit isSymbol not]) and: > [lit includesSubstring: aString caseSensitive: caseSensitive]]] > name: 'Methods with string ', aString printString, (caseSensitive ifTrue: > [' (case-sensitive)'] ifFalse: [' (case-insensitive)']) > autoSelect: aString > > Would people object if I changed this? One way to change it is to exclude > Symbol literals that are also messages in the receiver. So, e.g... > > browseMethodsWithString: aString matchCase: caseSensitive > "Launch a browser on all methods that contain string literals with aString > as a substring. Make the search case-sensitive or insensitive as dictated by > the caseSensitive boolean parameter" > > self browseAllSelect: > [:method | > method hasLiteralSuchThat: > [:lit | > lit isString > and: [(lit includesSubstring: aString caseSensitive: caseSensitive) > and: [lit isSymbol > ifTrue: [(method messages includes: lit) not] > ifFalse: [true]]]]] > name: 'Methods with string ', aString printString, (caseSensitive ifTrue: > [' (case-sensitive)'] ifFalse: [' (case-insensitive)']) > autoSelect: aString > > Would anyone object to me committing this definition? > > _,,,^..^,,,_ > best, Eliot > > > From asqueaker at gmail.com Tue Apr 19 00:50:07 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Apr 19 00:50:49 2016 Subject: Fwd: [squeak-dev] The Inbox: Morphic-cmm.1116.mcz In-Reply-To: <5715702d.84cb8c0a.88c2.0e5dSMTPIN_ADDED_MISSING@mx.google.com> References: <5715702d.84cb8c0a.88c2.0e5dSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Hi Eliot, if you would like to merge this as well as Tools-cmm.694, I hope it will be satisfactory for your de-select + file-out all use case. I'll run with it for a few days too, to make sure, before I commit it. ---------- Forwarded message ---------- From: Date: Mon, Apr 18, 2016 at 6:39 PM Subject: [squeak-dev] The Inbox: Morphic-cmm.1116.mcz To: squeak-dev@lists.squeakfoundation.org A new version of Morphic was added to project The Inbox: http://source.squeak.org/inbox/Morphic-cmm.1116.mcz ==================== Summary ==================== Name: Morphic-cmm.1116 Author: cmm Time: 18 April 2016, 6:38:47.481742 pm UUID: ae46aa73-c96e-41c2-888f-9d3fe8e1b924 Ancestors: Morphic-mt.1115 - Use the "isControlled" variable to instead indicate whether it came from a mouse move event. This proves useful to at least one model for implementing a desired UI behavior. - For vertical smart-splitters, don't let any single line complain any more than 10-characters worth of occlusion, so that extra long lines of a list will not over-dominate the adjacent widgets. =============== Diff against Morphic-mt.1115 =============== Item was changed: ----- Method: AlternatePluggableListMorphOfMany>>mouseMove: (in category 'event handling') ----- mouseMove: event "The mouse has moved, as characterized by the event provided. Adjust the scrollbar, and alter the selection as appropriate" | oldIndex oldVal row | event position y < self top ifTrue: [scrollBar scrollUp: 1. row := self rowAtLocation: scroller topLeft + (1 @ 1)] ifFalse: [row := event position y > self bottom ifTrue: [scrollBar scrollDown: 1. self rowAtLocation: scroller bottomLeft + (1 @ -1)] ifFalse: [ self rowAtLocation: event position]]. row = 0 ifTrue: [^super mouseDown: event]. model okToChange ifFalse: [^self]. "No change if model is locked" "Set meaning for subsequent dragging of selection" oldIndex := self getCurrentSelectionIndex. oldIndex ~= 0 ifTrue: [oldVal := self listSelectionAt: oldIndex]. "Need to restore the old one, due to how model works, and set new one." oldIndex ~= 0 ifTrue: [self listSelectionAt: oldIndex put: oldVal]. "Inform model of selected item and let it toggle." self changeModelSelection: (self modelIndexFor: row) shifted: true + controlled: true. - controlled: event controlKeyPressed. submorphs do: [:each | each changed]! Item was changed: ----- Method: PluggableListMorph>>charactersOccluded (in category 'geometry') ----- charactersOccluded "Answer the number of characters occluded in my #visibleList by my right edge." | listIndex | listIndex:=0. ^ self visibleList inject: 0 into: [ : sum : each | | eachString totalWidth indexOfLastVisible iconWidth | totalWidth:=0. eachString := each asString "withBlanksTrimmed". iconWidth := (self iconAt: (listIndex := listIndex+1)) ifNil:[0] ifNotNil: [ : icon | icon width+2 ]. indexOfLastVisible := ((1 to: eachString size) detect: [ : stringIndex | (totalWidth:=totalWidth+(self font widthOf: (eachString at: stringIndex))) > (self width - (scrollBar ifNil: [ 0 ] ifNotNil: [ scrollBar width ]) - iconWidth) ] ifNone: [ eachString size + 1 ]) - 1. + sum + ((eachString size - indexOfLastVisible) min: 10) ]! - sum + (eachString size - indexOfLastVisible) ]! From tim at rowledge.org Tue Apr 19 02:46:09 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Apr 19 02:46:10 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: References: <1460961369529-4890509.post@n4.nabble.com> <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> <5D595526-F61A-45D1-BAEB-1FD857B664EB@rowledge.org> Message-ID: > On 18-04-2016, at 3:46 PM, Chris Muller wrote: > > I would like to come up with a good solution. > > Are you saying Mac users use Control+Click to yellow click? Not especially Mac users; after all Mac desktop machines have come with a three button mouse for decades now. Some PC mice are only two-button though (and of course there is the wrong-way-round issue too) but the most widespread problem machines are laptops with touchpads. Some Pc laptops have one or modifier buttons directly associated with the touchpad, some don?t. MacBooks don?t and you have to use the ctl/cmd keys. Or option. Or something. If only they had all copied the Acorn RISC OS UI properly :-( tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: BOZO: Use Multics operating system From stephan at stack.nl Tue Apr 19 05:45:27 2016 From: stephan at stack.nl (Stephan Eggermont) Date: Tue Apr 19 05:45:37 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: References: <1460961369529-4890509.post@n4.nabble.com> <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> <5D595526-F61A-45D1-BAEB-1FD857B664EB@rowledge.org> Message-ID: On 19-04-16 04:46, tim Rowledge wrote: > MacBooks don?t and you have to use the ctl/cmd keys. Or option. Or > something. Something, for quite some time now. Two-finger click has been standard since 2008 AFAIK. Stephan From Marcel.Taeumel at hpi.de Tue Apr 19 06:10:18 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 19 06:42:59 2016 Subject: [squeak-dev] Re: command-E In-Reply-To: References: Message-ID: <1461046218682-4890747.post@n4.nabble.com> Hi Eliot, just search "method source containing...". In VMMaker, searching for "CogSimStackEntry" only yields 25 results. :-) There is no keyboard shortcut for that. Best, Marcel -- View this message in context: http://forum.world.st/command-E-tp4890728p4890747.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Apr 19 06:23:13 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 19 06:55:53 2016 Subject: [squeak-dev] Re: set equality has changed :-( In-Reply-To: References: Message-ID: <1461046993306-4890748.post@n4.nabble.com> Hi Eliot, try this: (Set with: #module) includesAllOf: (IdentitySet with: #module). This is "hasEqualElements:" for all kinds of collections. Best, Marcel -- View this message in context: http://forum.world.st/set-equality-has-changed-tp4890704p4890748.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Tue Apr 19 07:22:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 07:22:36 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1116.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1116.mcz ==================== Summary ==================== Name: Morphic-mt.1116 Author: mt Time: 19 April 2016, 9:21:38.183868 am UUID: e4b5b353-a769-2744-9fca-6552c4c25e52 Ancestors: Morphic-mt.1115 Adds preference to enclose a selection with brackets etc. to bypass the respective (shift)cmd-key shortcuts, which actually do not work on German keyboard layouts. Updates wording and preference categorization for other text editing preferences. =============== Diff against Morphic-mt.1115 =============== Item was changed: Editor subclass: #TextEditor instanceVariableNames: 'model paragraph markBlock pointBlock beginTypeInIndex emphasisHere lastParenLocation otherInterval oldInterval typeAhead history' + classVariableNames: 'AutoEnclose AutoIndent ChangeText EncloseSelection FindText' - classVariableNames: 'AutoEnclose AutoIndent ChangeText FindText' poolDictionaries: '' category: 'Morphic-Text Support'! TextEditor class instanceVariableNames: 'cmdActions shiftCmdActions yellowButtonMenu shiftedYellowButtonMenu'! !TextEditor commentStamp: '' prior: 0! See comment in Editor. My instances edit Text, this is, they support multiple lines and TextAttributes. They have no specific facilities for editing Smalltalk code. Those are found in SmalltalkEditor.! TextEditor class instanceVariableNames: 'cmdActions shiftCmdActions yellowButtonMenu shiftedYellowButtonMenu'! Item was changed: + ----- Method: TextEditor class>>autoEnclose (in category 'preferences') ----- - ----- Method: TextEditor class>>autoEnclose (in category 'accessing') ----- autoEnclose + + ^ AutoEnclose ifNil: [ false ]! Item was changed: + ----- Method: TextEditor class>>autoEnclose: (in category 'preferences') ----- - ----- Method: TextEditor class>>autoEnclose: (in category 'accessing') ----- autoEnclose: aBoolean AutoEnclose := aBoolean! Item was changed: + ----- Method: TextEditor class>>autoIndent (in category 'preferences') ----- - ----- Method: TextEditor class>>autoIndent (in category 'accessing') ----- autoIndent + ^ AutoIndent ifNil: [ true ]! Item was changed: + ----- Method: TextEditor class>>autoIndent: (in category 'preferences') ----- - ----- Method: TextEditor class>>autoIndent: (in category 'accessing') ----- autoIndent: aBoolean AutoIndent := aBoolean! Item was added: + ----- Method: TextEditor class>>encloseSelection (in category 'preferences') ----- + encloseSelection + ' + categoryList: #('Morphic' 'editing') + description: 'When true, selecting text and typing an opening parenthesis, bracket, square-bracket, single quote, or double quote will add corresponding character around the selection.' + type: #Boolean> + + ^ EncloseSelection ifNil: [ false ]! Item was added: + ----- Method: TextEditor class>>encloseSelection: (in category 'preferences') ----- + encloseSelection: boolean + + EncloseSelection := boolean.! Item was changed: ----- Method: TextEditor>>dispatchOnKeyboardEvent: (in category 'typing support') ----- dispatchOnKeyboardEvent: aKeyboardEvent "Carry out the action associated with this character, if any. Type-ahead is passed so some routines can flush or use it." | honorCommandKeys typedChar | typedChar := aKeyboardEvent keyCharacter. "Handle one-line input fields." (typedChar == Character cr and: [morph acceptOnCR]) ifTrue: [^ true]. "Clear highlight for last opened parenthesis." self clearParens. "Handle line breaks and auto indent." typedChar == Character cr ifTrue: [ aKeyboardEvent controlKeyPressed ifTrue: [^ self normalCharacter: aKeyboardEvent]. aKeyboardEvent shiftPressed ifTrue: [^ self lf: aKeyboardEvent]. aKeyboardEvent commandKeyPressed ifTrue: [^ self crlf: aKeyboardEvent]. ^ self crWithIndent: aKeyboardEvent]. "Handle indent/outdent with selected text block." typedChar == Character tab ifTrue: [ aKeyboardEvent shiftPressed ifTrue: [self outdent: aKeyboardEvent. ^ true] ifFalse: [self hasMultipleLinesSelected ifTrue: [self indent: aKeyboardEvent. ^ true]]]. honorCommandKeys := Preferences cmdKeysInText. (honorCommandKeys and: [typedChar == Character enter]) ifTrue: [^ self dispatchOnEnterWith: aKeyboardEvent]. "Special keys overwrite crtl+key combinations - at least on Windows. To resolve this conflict, assume that keys other than cursor keys aren't used together with Crtl." ((self class specialShiftCmdKeys includes: aKeyboardEvent keyValue) and: [aKeyboardEvent keyValue < 27]) ifTrue: [^ aKeyboardEvent controlKeyPressed ifTrue: [self perform: (self class shiftCmdActions at: aKeyboardEvent keyValue + 1) with: aKeyboardEvent] ifFalse: [self perform: (self class cmdActions at: aKeyboardEvent keyValue + 1) with: aKeyboardEvent]]. "backspace, and escape keys (ascii 8 and 27) are command keys" ((honorCommandKeys and: [aKeyboardEvent commandKeyPressed]) or: [self class specialShiftCmdKeys includes: aKeyboardEvent keyValue]) ifTrue: [ ^ aKeyboardEvent shiftPressed ifTrue: [self perform: (self class shiftCmdActions at: aKeyboardEvent keyValue + 1) with: aKeyboardEvent] ifFalse: [self perform: (self class cmdActions at: aKeyboardEvent keyValue + 1) with: aKeyboardEvent]]. "the control key can be used to invoke shift-cmd shortcuts" (honorCommandKeys and: [ aKeyboardEvent controlKeyPressed ]) ifTrue: [^ self perform: (self class shiftCmdActions at: aKeyboardEvent keyValue + 1) with: aKeyboardEvent]. + "Enclose selection with brackets etc." + ((self class encloseSelection and: [self hasSelection]) and: [self enclose: aKeyboardEvent]) + ifTrue: [^ true]. + "Automatically enclose paired characters such as brackets." (self class autoEnclose and: [self autoEncloseFor: typedChar]) ifTrue: [^ true]. self normalCharacter: aKeyboardEvent. ^ false! From Das.Linux at gmx.de Tue Apr 19 07:32:56 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Apr 19 07:33:00 2016 Subject: [squeak-dev] set equality has changed :-( In-Reply-To: <1461046993306-4890748.post@n4.nabble.com> References: <1461046993306-4890748.post@n4.nabble.com> Message-ID: <8F081C90-0CE5-4276-9FD3-40766238760E@gmx.de> On 19.04.2016, at 08:23, marcel.taeumel wrote: > Hi Eliot, > > try this: > (Set with: #module) includesAllOf: (IdentitySet with: #module). > > This is "hasEqualElements:" for all kinds of collections. But this is not reflexive, right? (Set withAll: #(module moep)) includesAllOf: (IdentitySet with: #module) > > Best, > Marcel From Das.Linux at gmx.de Tue Apr 19 07:39:47 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Apr 19 07:39:51 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.690.mcz In-Reply-To: References: <1460961369529-4890509.post@n4.nabble.com> <629447ED-EED0-422C-9851-FF2354C74C38@gmail.com> <5D595526-F61A-45D1-BAEB-1FD857B664EB@rowledge.org> Message-ID: On 19.04.2016, at 07:45, Stephan Eggermont wrote: > On 19-04-16 04:46, tim Rowledge wrote: >> MacBooks don?t and you have to use the ctl/cmd keys. Or option. Or something. > Something, for quite some time now. Two-finger click has been standard since > 2008 AFAIK. > Works quirky. But there's no third button whatsoever? Best -Tobias > Stephan From commits at source.squeak.org Tue Apr 19 09:44:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 09:44:07 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1117.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1117.mcz ==================== Summary ==================== Name: Morphic-mt.1117 Author: mt Time: 19 April 2016, 11:43:17.879049 am UUID: dfe3d794-df51-2f47-abef-00885c576f46 Ancestors: Morphic-mt.1116 Fixes return values of enclose feature. Only return true if you perfomed an edit operation. =============== Diff against Morphic-mt.1116 =============== Item was changed: ----- Method: TextEditor>>enclose: (in category 'editing keys') ----- enclose: aKeyboardEvent "Insert or remove bracket characters around the current selection." | character left right startIndex stopIndex oldSelection which t | character := aKeyboardEvent shiftPressed ifTrue: ['{}|"<>' at: ('[]\'',.' indexOf: aKeyboardEvent keyCharacter) ifAbsent: [aKeyboardEvent keyCharacter]] ifFalse: [aKeyboardEvent keyCharacter]. self closeTypeIn. startIndex := self startIndex. stopIndex := self stopIndex. oldSelection := self selection. + which := '([<{|"''9' indexOf: character ifAbsent: [ ^ false ]. - which := '([<{|"''9' indexOf: character ifAbsent: [ ^false ]. "Allow Control key in lieu of Alt+Shift for (, {, and double-quote." left := ((Preferences cmdKeysInText and: [ aKeyboardEvent controlKeyPressed ]) ifTrue: [ '({<{|""(' ] ifFalse: ['([<{|"''(']) at: which. right := ((Preferences cmdKeysInText and: [ aKeyboardEvent controlKeyPressed ]) ifTrue: [ ')}>}|"")' ] ifFalse: [')]>}|"'')']) at: which. t := self text. ((startIndex > 1 and: [stopIndex <= t size]) and: [ (t at: startIndex-1) = left and: [(t at: stopIndex) = right]]) ifTrue: [ "already enclosed; strip off brackets" self selectFrom: startIndex-1 to: stopIndex. + self replaceSelectionWith: oldSelection. + ^ true] - self replaceSelectionWith: oldSelection] ifFalse: [ "not enclosed; enclose by matching brackets" self replaceSelectionWith: (Text string: (String with: left), oldSelection string, (String with: right) attributes: emphasisHere). + self selectFrom: startIndex+1 to: stopIndex. + ^ true]. + ^ false! - self selectFrom: startIndex+1 to: stopIndex]. - ^true! From commits at source.squeak.org Tue Apr 19 10:20:57 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 10:20:59 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1118.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1118.mcz ==================== Summary ==================== Name: Morphic-mt.1118 Author: mt Time: 19 April 2016, 12:19:58.032049 pm UUID: 1b5b0494-89bc-aa46-a621-403a2aaf6cd3 Ancestors: Morphic-mt.1117 Improves documentation and usage of #refreshWorld to avoid direct calls to #displayWorldSafely, which requires a check whether the morph in in a world or not. =============== Diff against Morphic-mt.1117 =============== Item was changed: ----- Method: Morph>>flash (in category 'macpal') ----- flash | originalColor | originalColor := self color. [ self color: (originalColor ifNil: [ Color black ] ifNotNil: [( (originalColor alpha: 1) adjustSaturation: 0.8 brightness: 0) negated ]) ] ensure: + [ self refreshWorld. - [ self world ifNotNil: [ : w | w displayWorldSafely ]. self color: originalColor ]! Item was changed: ----- Method: Morph>>refreshWorld (in category 'drawing') ----- refreshWorld + "If this morph is in a world, refresh the world. This can be used to immediately redraw a morph after it changed. Note that you should use this call rather sparsely because it bypasses Morphics damage recording mechanism." + + self world ifNotNil: [:w | w displayWorldSafely].! - | aWorld | - (aWorld := self world) ifNotNil: [aWorld displayWorldSafely] - ! Item was changed: ----- Method: PluggableListMorph>>changeModelSelection: (in category 'model access') ----- changeModelSelection: anInteger " Change the model's selected item index to be anInteger. Enable the pre selection highlight. Step the World forward to let the pre selection highlight take effect. " self rowAboutToBecomeSelected: (self uiIndexFor: anInteger). + self refreshWorld. - World displayWorldSafely. setIndexSelector ifNotNil: [ model perform: setIndexSelector with: anInteger ].! Item was changed: ----- Method: SVColorSelectorMorph>>hideLocation (in category 'as yet unclassified') ----- hideLocation "Hide the location morph and update the display." self locationMorph visible: false. + self refreshWorld.! - World displayWorldSafely.! Item was changed: ----- Method: SVColorSelectorMorph>>showLocation (in category 'as yet unclassified') ----- showLocation "Show the location morph and update the display." self locationMorph visible: true. + self refreshWorld.! - World displayWorldSafely.! From commits at source.squeak.org Tue Apr 19 10:22:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 10:22:32 2016 Subject: [squeak-dev] The Trunk: EToys-mt.134.mcz Message-ID: Marcel Taeumel uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-mt.134.mcz ==================== Summary ==================== Name: EToys-mt.134 Author: mt Time: 19 April 2016, 12:22:02.288049 pm UUID: e2ced620-3a65-1f48-a57d-65709f3e2656 Ancestors: EToys-mt.133 Improves usage of #refreshWorld to avoid direct calls to #displayWorldSafely, which requires a check whether the morph in in a world or not. =============== Diff against EToys-mt.133 =============== Item was changed: ----- Method: EToyCommunicatorMorph>>resetIndicator: (in category 'as yet unclassified') ----- resetIndicator: aSymbol | indicator firstColor | indicator := fields at: aSymbol ifAbsent: [^self]. firstColor := indicator valueOfProperty: #firstColor ifAbsent: [^self]. indicator color: firstColor. + self refreshWorld. - self world displayWorldSafely. ! Item was changed: ----- Method: EToyCommunicatorMorph>>trulyFlashIndicator: (in category 'as yet unclassified') ----- trulyFlashIndicator: aSymbol | indicator firstColor | indicator := fields at: aSymbol ifAbsent: [^self]. firstColor := indicator valueOfProperty: #firstColor ifAbsent: [ indicator setProperty: #firstColor toValue: indicator color. indicator color ]. indicator color: (indicator color = firstColor ifTrue: [Color white] ifFalse: [firstColor]). + self refreshWorld. - self world displayWorldSafely. ! Item was changed: ----- Method: EToyProjectHistoryMorph>>closeMyFlapIfAny (in category 'as yet unclassified') ----- closeMyFlapIfAny | myFlap allTabs myTab myWorld | myWorld := self world. myFlap := self nearestOwnerThat: [ :each | each isFlap]. myFlap ifNil: [^self]. allTabs := myWorld submorphs select: [ :each | each isFlapTab]. myTab := allTabs detect: [ :each | each referent == myFlap] ifNone: [^self]. myTab hideFlap. + self refreshWorld. - myWorld displayWorldSafely. ! From commits at source.squeak.org Tue Apr 19 10:24:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 10:25:04 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-mt.170.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-mt.170.mcz ==================== Summary ==================== Name: MorphicExtras-mt.170 Author: mt Time: 19 April 2016, 12:24:14.689049 pm UUID: bca00572-fc6d-074f-8275-88d0c221c2d1 Ancestors: MorphicExtras-cmm.169 Improves usage of #refreshWorld to avoid direct calls to #displayWorldSafely, which requires a check whether the morph in in a world or not. =============== Diff against MorphicExtras-cmm.169 =============== Item was changed: ----- Method: GrabPatchMorph>>justDroppedInto:event: (in category 'dropping') ----- justDroppedInto: aPasteUpMorph event: anEvent "This message is sent to a dropped morph after it has been dropped on--and been accepted by--a drop-sensitive morph" + super justDroppedInto: aPasteUpMorph event: anEvent. + + aPasteUpMorph isPartsBin ifFalse: [ + "Do not show this morph in the screenshot." + self hide. + anEvent hand hide. + self refreshWorld. + + [aPasteUpMorph grabDrawingFromScreen: anEvent] + ensure: [anEvent hand show]]. + + "Just needed for this operation. Remove." + self delete.! - aPasteUpMorph isPartsBin ifFalse: - [self delete. - ActiveWorld displayWorldSafely; runStepMethods. "But the HW cursor stays up still ???" - ^ aPasteUpMorph grabDrawingFromScreen: anEvent]. - ^ super justDroppedInto: aPasteUpMorph event: anEvent! Item was changed: ----- Method: LassoPatchMorph>>justDroppedInto:event: (in category 'dropping') ----- justDroppedInto: aPasteUpMorph event: anEvent "This message is sent to a dropped morph after it has been dropped on--and been accepted by--a drop-sensitive morph" + super justDroppedInto: aPasteUpMorph event: anEvent. + + aPasteUpMorph isPartsBin ifFalse: [ + "Do not show this morph in the screenshot." + self hide. + anEvent hand hide. + self refreshWorld. + + [aPasteUpMorph grabLassoFromScreen: anEvent] + ensure: [anEvent hand show]]. + + "Just needed for this operation. Remove." + self delete.! - aPasteUpMorph isPartsBin ifFalse: - [self delete. - ActiveWorld displayWorldSafely; runStepMethods. - ^ aPasteUpMorph grabLassoFromScreen: anEvent]. - ^ super justDroppedInto: aPasteUpMorph event: anEvent! From commits at source.squeak.org Tue Apr 19 11:06:35 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 11:06:37 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-mt.171.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-mt.171.mcz ==================== Summary ==================== Name: MorphicExtras-mt.171 Author: mt Time: 19 April 2016, 1:06:17.613134 pm UUID: 5f029570-c24b-9f4b-b371-0f70d4f9fcbb Ancestors: MorphicExtras-mt.170 Improves usage of #refreshWorld to avoid direct calls to #displayWorldSafely, which requires a check whether the morph in in a world or not. =============== Diff against MorphicExtras-mt.170 =============== Item was changed: ----- Method: PaintBoxMorph>>eyedropper:action:cursor:evt: (in category 'actions') ----- eyedropper: aButton action: aSelector cursor: aCursor evt: evt "Take total control and pick up a color!!!!" | pt feedbackColor delay | delay := Delay forMilliseconds: 10. aButton state: #on. tool ifNotNil: [tool state: #off]. currentCursor := aCursor. evt hand showTemporaryCursor: currentCursor hotSpotOffset: 6 negated @ 4 negated. "<<<< the form was changed a bit??" feedbackColor := Display colorAt: Sensor cursorPoint. colorMemory align: colorMemory bounds topRight with: colorMemoryThin bounds topRight. self addMorphFront: colorMemory. "Full color picker" [Sensor anyButtonPressed] whileFalse: [pt := Sensor cursorPoint. "deal with the fact that 32 bit displays may have garbage in the alpha bits" feedbackColor := Display depth = 32 ifTrue: [Color colorFromPixelValue: ((Display pixelValueAt: pt) bitOr: 16rFF000000) depth: 32] ifFalse: [Display colorAt: pt]. "the hand needs to be drawn" evt hand position: pt. currentColor ~= feedbackColor ifTrue: [ currentColor := feedbackColor. self showColor ]. + self refreshWorld. - self world displayWorldSafely. delay wait]. "Now wait for the button to be released." [Sensor anyButtonPressed] whileTrue: [ pt := Sensor cursorPoint. "the hand needs to be drawn" evt hand position: pt. + self refreshWorld. - self world displayWorldSafely. delay wait]. evt hand showTemporaryCursor: nil hotSpotOffset: 0 @ 0. self currentColor: feedbackColor evt: evt. colorMemory delete. tool ifNotNil: [tool state: #on. currentCursor := tool arguments third]. aButton state: #off ! From commits at source.squeak.org Tue Apr 19 14:03:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 14:03:45 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1119.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1119.mcz ==================== Summary ==================== Name: Morphic-mt.1119 Author: mt Time: 19 April 2016, 4:03:07.333016 pm UUID: 920dd0b6-e2ab-da4d-81d3-530e1d7ff81b Ancestors: Morphic-mt.1118 Improves stability of filter in lists: 1) Restore prior selection on filter clear 2) Restore prior selection if there are matches (again) 3) Update prior selection of you make a new selection in a filtered list Note that this will still not be propagated between connected lists in, for example, the code browser. While you now will enjoy more stability when filtering the list of methods, filtering the list of system categories might still update/clear all other lists. =============== Diff against Morphic-mt.1118 =============== Item was changed: ----- Method: PluggableListMorph>>basicKeyPressed: (in category 'model access') ----- basicKeyPressed: aChar + | milliseconds slowKeyStroke listSize newSelectionIndex oldSelectionIndex startIndex newPriorSelection | - | milliseconds slowKeyStroke listSize newSelectionIndex oldSelectionIndex startIndex | oldSelectionIndex := newSelectionIndex := self getCurrentSelectionIndex. + + "keep across matches that do not have current selection" + newPriorSelection := priorSelection ifNil: [oldSelectionIndex] ifNotNil: [oldSelectionIndex = 0 ifTrue: [priorSelection] ifFalse: [oldSelectionIndex]]. + listSize := self getListSize. listSize = 0 ifTrue: [ ^self flash ]. milliseconds := Time millisecondClockValue. slowKeyStroke := (Time milliseconds: milliseconds since: lastKeystrokeTime) > (self class filterableLists ifTrue: [500] ifFalse: [ 300 ]). lastKeystrokeTime := milliseconds. slowKeyStroke ifTrue: + [ self class filterableLists ifTrue: [ self hasFilter ifFalse: [ priorSelection := newPriorSelection ] ]. - [ self class filterableLists ifTrue: [ self hasFilter ifFalse: [ priorSelection := self modelIndexFor: self selectionIndex] ]. "forget previous keystrokes and search in following elements" lastKeystrokes := aChar asLowercase asString. newSelectionIndex := newSelectionIndex \\ listSize + 1. self class filterableLists ifTrue: [ list := self getFullList ] ] ifFalse: [ "append quick keystrokes but don't move selection if it still matches" lastKeystrokes := lastKeystrokes , aChar asLowercase asString. newSelectionIndex := newSelectionIndex max: 1 ]. "No change if model is locked" model okToChange ifFalse: [ ^ self ]. self class filterableLists ifTrue: [ self filterList ; updateList. + newSelectionIndex := ((self uiIndexFor: newPriorSelection) > 0) + ifTrue: [newPriorSelection] + ifFalse: [0] ] - newSelectionIndex := self modelIndexFor: 1 ] ifFalse: [ startIndex := newSelectionIndex. listSize := self getListSize. [ (self getListItem: newSelectionIndex) asString withBlanksTrimmed asLowercase beginsWith: lastKeystrokes ] whileFalse: [ (newSelectionIndex := newSelectionIndex \\ listSize + 1) = startIndex ifTrue: [ ^ self flash"Not in list." ] ]. newSelectionIndex = oldSelectionIndex ifTrue: [ ^ self flash ] ]. (self hasFilter and: [(self getCurrentSelectionIndex = newSelectionIndex) not]) ifTrue: + [self changeModelSelection: newSelectionIndex. priorSelection := newPriorSelection "Probably 0 for filterable lists. Preserve old selection."]! - [self changeModelSelection: newSelectionIndex]! Item was changed: ----- Method: PluggableListMorph>>changeModelSelection: (in category 'model access') ----- changeModelSelection: anInteger " Change the model's selected item index to be anInteger. Enable the pre selection highlight. Step the World forward to let the pre selection highlight take effect. " self rowAboutToBecomeSelected: (self uiIndexFor: anInteger). self refreshWorld. setIndexSelector ifNotNil: [ + model perform: setIndexSelector with: anInteger ]. + priorSelection := anInteger. "Preserve new selection when clearing the filter now."! - model perform: setIndexSelector with: anInteger ].! From commits at source.squeak.org Tue Apr 19 15:33:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 15:34:16 2016 Subject: [squeak-dev] The Trunk: Morphic-cmm.1120.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1120.mcz ==================== Summary ==================== Name: Morphic-cmm.1120 Author: cmm Time: 19 April 2016, 10:33:09.002758 am UUID: b0dd74f2-189a-4b77-baed-280740462474 Ancestors: Morphic-mt.1119 Undo Morphic-mt.1119 because it totally broke the filtering function. - It broke navigation by filtering. - It broke toggling between two selections with the backspace key. Filtering is its own isolated feature that works on texts of lists, it was never meant to interact with the model or user selections made outside the filtering feature. =============== Diff against Morphic-mt.1119 =============== Item was changed: ----- Method: PluggableListMorph>>basicKeyPressed: (in category 'model access') ----- basicKeyPressed: aChar + | milliseconds slowKeyStroke listSize newSelectionIndex oldSelectionIndex startIndex | - | milliseconds slowKeyStroke listSize newSelectionIndex oldSelectionIndex startIndex newPriorSelection | oldSelectionIndex := newSelectionIndex := self getCurrentSelectionIndex. - - "keep across matches that do not have current selection" - newPriorSelection := priorSelection ifNil: [oldSelectionIndex] ifNotNil: [oldSelectionIndex = 0 ifTrue: [priorSelection] ifFalse: [oldSelectionIndex]]. - listSize := self getListSize. listSize = 0 ifTrue: [ ^self flash ]. milliseconds := Time millisecondClockValue. slowKeyStroke := (Time milliseconds: milliseconds since: lastKeystrokeTime) > (self class filterableLists ifTrue: [500] ifFalse: [ 300 ]). lastKeystrokeTime := milliseconds. slowKeyStroke ifTrue: + [ self class filterableLists ifTrue: [ self hasFilter ifFalse: [ priorSelection := self modelIndexFor: self selectionIndex] ]. - [ self class filterableLists ifTrue: [ self hasFilter ifFalse: [ priorSelection := newPriorSelection ] ]. "forget previous keystrokes and search in following elements" lastKeystrokes := aChar asLowercase asString. newSelectionIndex := newSelectionIndex \\ listSize + 1. self class filterableLists ifTrue: [ list := self getFullList ] ] ifFalse: [ "append quick keystrokes but don't move selection if it still matches" lastKeystrokes := lastKeystrokes , aChar asLowercase asString. newSelectionIndex := newSelectionIndex max: 1 ]. "No change if model is locked" model okToChange ifFalse: [ ^ self ]. self class filterableLists ifTrue: [ self filterList ; updateList. + newSelectionIndex := self modelIndexFor: 1 ] - newSelectionIndex := ((self uiIndexFor: newPriorSelection) > 0) - ifTrue: [newPriorSelection] - ifFalse: [0] ] ifFalse: [ startIndex := newSelectionIndex. listSize := self getListSize. [ (self getListItem: newSelectionIndex) asString withBlanksTrimmed asLowercase beginsWith: lastKeystrokes ] whileFalse: [ (newSelectionIndex := newSelectionIndex \\ listSize + 1) = startIndex ifTrue: [ ^ self flash"Not in list." ] ]. newSelectionIndex = oldSelectionIndex ifTrue: [ ^ self flash ] ]. (self hasFilter and: [(self getCurrentSelectionIndex = newSelectionIndex) not]) ifTrue: + [self changeModelSelection: newSelectionIndex]! - [self changeModelSelection: newSelectionIndex. priorSelection := newPriorSelection "Probably 0 for filterable lists. Preserve old selection."]! Item was changed: ----- Method: PluggableListMorph>>changeModelSelection: (in category 'model access') ----- changeModelSelection: anInteger " Change the model's selected item index to be anInteger. Enable the pre selection highlight. Step the World forward to let the pre selection highlight take effect. " self rowAboutToBecomeSelected: (self uiIndexFor: anInteger). self refreshWorld. setIndexSelector ifNotNil: [ + model perform: setIndexSelector with: anInteger ].! - model perform: setIndexSelector with: anInteger ]. - priorSelection := anInteger. "Preserve new selection when clearing the filter now."! From eliot.miranda at gmail.com Tue Apr 19 16:08:50 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Apr 19 16:08:53 2016 Subject: [squeak-dev] set equality has changed :-( In-Reply-To: References: Message-ID: On Mon, Apr 18, 2016 at 5:18 PM, Levente Uzonyi wrote: > On Mon, 18 Apr 2016, Eliot Miranda wrote: > > >> >> On Mon, Apr 18, 2016 at 3:43 PM, Levente Uzonyi >> wrote: >> Hi Eliot, >> >> On Mon, 18 Apr 2016, Eliot Miranda wrote: >> >> Hi All, >> this used to work: >> >> (Set with: #module) = (IdentitySet with: #module) >> >> when did this change and why? >> >> >> I changed it in Collections-ul.669 last November, because it didn't >> work well. Let's see a different example: >> >> | s i | >> s := Set with: 'module' copy. >> i := IdentitySet with: 'module' copy. >> { >> s = i. >> i = s >> } >> >> The old implementation would return #(false true), while the new >> one evaluates to #(false false). >> >> >> Right. That's a pain, but fair enough. This is clumsy: (aSet size = 1 >> and: [aSet anyOne = #module]). This slightly less so: aSet = (aSet >> species with: #module). >> > > You could also write it as > > aSet asArray = #(module). > > or as > > (aSet as: Set) = (Set with: #module). Expensive when aSet is large. I've gone with the anyOne form. > Levente > > > >> Levente >> >> _,,,^..^,,,_ >> best, Eliot >> >> >> _,,,^..^,,,_ >> best, Eliot >> > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160419/89748714/attachment.htm From eliot.miranda at gmail.com Tue Apr 19 16:11:57 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Apr 19 16:11:59 2016 Subject: [squeak-dev] set equality has changed :-( In-Reply-To: <8F081C90-0CE5-4276-9FD3-40766238760E@gmx.de> References: <1461046993306-4890748.post@n4.nabble.com> <8F081C90-0CE5-4276-9FD3-40766238760E@gmx.de> Message-ID: Hi Marcel, On Tue, Apr 19, 2016 at 12:32 AM, Tobias Pape wrote: > > On 19.04.2016, at 08:23, marcel.taeumel wrote: > > > Hi Eliot, > > > > try this: > > (Set with: #module) includesAllOf: (IdentitySet with: #module). > > > > This is "hasEqualElements:" for all kinds of collections. > > But this is not reflexive, right? > > (Set withAll: #(module moep)) includesAllOf: (IdentitySet with: #module) > How about Set>>hasEqualElements: aCollection ^aCollection size = self size and: [aCollection noneSatisfy: [:element| (self includes: element) not] Again it's not reflexive with sequenceable collections, but unlike includesAllOf: it meets the specification ;-). > > > > Best, > > Marcel > > > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160419/d9b85aa7/attachment.htm From Das.Linux at gmx.de Tue Apr 19 16:52:12 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Apr 19 16:52:16 2016 Subject: [squeak-dev] set equality has changed :-( In-Reply-To: References: <1461046993306-4890748.post@n4.nabble.com> <8F081C90-0CE5-4276-9FD3-40766238760E@gmx.de> Message-ID: On 19.04.2016, at 18:11, Eliot Miranda wrote: > Hi Marcel, > > On Tue, Apr 19, 2016 at 12:32 AM, Tobias Pape wrote: > > On 19.04.2016, at 08:23, marcel.taeumel wrote: > > > Hi Eliot, > > > > try this: > > (Set with: #module) includesAllOf: (IdentitySet with: #module). > > > > This is "hasEqualElements:" for all kinds of collections. > > But this is not reflexive, right? > > (Set withAll: #(module moep)) includesAllOf: (IdentitySet with: #module) > > How about > > Set>>hasEqualElements: aCollection > ^aCollection size = self size and: [aCollection noneSatisfy: [:element| (self includes: element) not] > > > Again it's not reflexive with sequenceable collections, but unlike includesAllOf: it meets the specification ;-). I think I was incorrect, I think what I meant is commutative. Best -Tobias > > > > > > > Best, > > Marcel From Marcel.Taeumel at hpi.de Tue Apr 19 16:22:37 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Apr 19 16:55:20 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-cmm.1120.mcz In-Reply-To: References: Message-ID: <1461082957904-4890868.post@n4.nabble.com> Sorry, I will re-think that. Can you elaborate what broke and what not? I do not understand your explanation. - "toggle between two selections"? --- this seems to be a bug you got used to - "navigation by filtering"? --- ??? - "interact with model selections"? --- It already destroys the selection to 1. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-cmm-1120-mcz-tp4890853p4890868.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Tue Apr 19 21:55:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 19 21:55:28 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160419215526.24639.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/016736.html Name: Morphic-mt.1116 Ancestors: Morphic-mt.1115 Adds preference to enclose a selection with brackets etc. to bypass the respective (shift)cmd-key shortcuts, which actually do not work on German keyboard layouts. Updates wording and preference categorization for other text editing preferences. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016737.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016738.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016739.html Name: Morphic-mt.1117 Ancestors: Morphic-mt.1116 Fixes return values of enclose feature. Only return true if you perfomed an edit operation. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016740.html Name: Morphic-mt.1118 Ancestors: Morphic-mt.1117 Improves documentation and usage of #refreshWorld to avoid direct calls to #displayWorldSafely, which requires a check whether the morph in in a world or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016741.html Name: EToys-mt.134 Ancestors: EToys-mt.133 Improves usage of #refreshWorld to avoid direct calls to #displayWorldSafely, which requires a check whether the morph in in a world or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016742.html Name: MorphicExtras-mt.170 Ancestors: MorphicExtras-cmm.169 Improves usage of #refreshWorld to avoid direct calls to #displayWorldSafely, which requires a check whether the morph in in a world or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016743.html Name: MorphicExtras-mt.171 Ancestors: MorphicExtras-mt.170 Improves usage of #refreshWorld to avoid direct calls to #displayWorldSafely, which requires a check whether the morph in in a world or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016744.html Name: Morphic-mt.1119 Ancestors: Morphic-mt.1118 Improves stability of filter in lists: 1) Restore prior selection on filter clear 2) Restore prior selection if there are matches (again) 3) Update prior selection of you make a new selection in a filtered list Note that this will still not be propagated between connected lists in, for example, the code browser. While you now will enjoy more stability when filtering the list of methods, filtering the list of system categories might still update/clear all other lists. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/016745.html Name: Morphic-cmm.1120 Ancestors: Morphic-mt.1119 Undo Morphic-mt.1119 because it totally broke the filtering function. - It broke navigation by filtering. - It broke toggling between two selections with the backspace key. Filtering is its own isolated feature that works on texts of lists, it was never meant to interact with the model or user selections made outside the filtering feature. ============================================= From ma.chris.m at gmail.com Wed Apr 20 00:01:12 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Wed Apr 20 00:01:55 2016 Subject: [squeak-dev] Squeak IDE videos Message-ID: In order to communicate and document some of Squeak's IDE capabilities, I made some videos today which describe some of my favorite features of its IDE. The pinch-zoom-and-resize feature: https://youtu.be/_aMmeNZ39Io The Tracing Messages Browser: https://youtu.be/y96IvSwfXxg The list-filtering feature: https://youtu.be/11CLNKl5334 The Smart-Splitters feature: https://youtu.be/JPQrDMIpjis Focus Follows Mouse feature (old): https://youtu.be/q0WqBjtIbK0 From tim at rowledge.org Wed Apr 20 03:08:35 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Apr 20 03:08:35 2016 Subject: [squeak-dev] Squeak IDE videos In-Reply-To: References: Message-ID: <1418D078-9D74-4832-BDB8-9AA1C3CDB789@rowledge.org> Thanks for these videos Chris. > On 19-04-2016, at 5:01 PM, Chris Muller wrote: > The pinch-zoom-and-resize feature: I can?t make this work anything like what your video shows. A blue-button press and drag will move a window, though it stays at the same level in the stack (which I quite like as a concept since it is like RISC OS), but I can?t find any action or modifier to make the resize happen. What is it? > > https://youtu.be/_aMmeNZ39Io > > The Tracing Messages Browser: > > https://youtu.be/y96IvSwfXxg That one was very informative; I had no idea about the removing items etc. How can we make it more easily discoverable. > > The list-filtering feature: > > https://youtu.be/11CLNKl5334 Similarly I had no idea about using backspace to escape from filtering. You have no idea how often I've cursed .. > > The Smart-Splitters feature: > > https://youtu.be/JPQrDMIpjis I?m sorry but there?s no way I can cope with those. They are an Abomination Unto Nuggan? > > Focus Follows Mouse feature (old): > > https://youtu.be/q0WqBjtIbK0 > I can see value in some of these options; again, you could almost get it to work like RISC OS. What concerns me (with a lot of stuff in Squeak actually, not just this specific ui stuff) is how hard we are making it to find out options and follow what is going on. You mentioned in your first video that the blue-button window-drag stuff doesn?t work if the buttons are swapped. I can?t see any way of finding out why! It?s abstracted and factored so much we just get lost almost immediately! tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- An early example of the Peter Principle. From Marcel.Taeumel at hpi.de Wed Apr 20 06:12:05 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 20 06:44:53 2016 Subject: [squeak-dev] Re: Squeak IDE videos In-Reply-To: References: Message-ID: <1461132725374-4890917.post@n4.nabble.com> Nice! :) Best, Marcel -- View this message in context: http://forum.world.st/Squeak-IDE-videos-tp4890897p4890917.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Apr 20 06:36:51 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 20 07:09:38 2016 Subject: [squeak-dev] List filtering stability issues and how to solve them Message-ID: <1461134211072-4890920.post@n4.nabble.com> Hi, there. After my somewhat unlucky attempt to improve the list filtering feature in Squeak: http://forum.world.st/The-Trunk-Morphic-mt-1119-mcz-tp4890816.html http://forum.world.st/The-Trunk-Morphic-cmm-1120-mcz-tp4890853.html And the great explanation of the status quo by Chris: http://forum.world.st/Squeak-IDE-videos-td4890897.html https://youtu.be/11CLNKl5334 I want to explain a little bit more, what the issues with the list filtering is at the moment. ----------- Here are the *good *things: - You can just start typing and the filter results appear. - Matches that have the search term at the beginning come first, other matches follow alphabetically. - The parts that matched in an item are highlighted. - Hitting backspace or losing focus (controlled by preference) clears the filter. - Re-typing after some timeout describes a new filter. - If there are 0 matches, the new filter is not applied at all to not have an empty list. Here are the *challenging *things considering stability in interactive, graphical tools: - If there is no selection in the list, the first filter result will be selected automatically. - If the current selection is not included in the filter result, the first filter result will be selected automatically. - If the user makes a selection in the filtered list, removing the filter will revert the selection to the one that used to be there before starting to filter. (Which can be several minutes, days, hours, days, ago) Here is a *change set*, which preserves the good things and fixes the issues: list-filtering-stability-fix.cs Here is a feature which -- in my opinion -- was not intended by the original idea of filtering lists and which -- unfortunately -- cannot be retained: - Repeatedly hitting toggles between the last selection in a filtered list and the last selection in an unfiltered list. However, I think that such a workflow is difficult to discover and should have a lower priority than the challenges described above. It might be added with a preference, though. For example, "Use two-level selection in lists with filters". How about it? :-) Best, Marcel -- View this message in context: http://forum.world.st/List-filtering-stability-issues-and-how-to-solve-them-tp4890920.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From stephan at stack.nl Wed Apr 20 07:58:27 2016 From: stephan at stack.nl (Stephan Eggermont) Date: Wed Apr 20 07:58:39 2016 Subject: [squeak-dev] Re: Squeak IDE videos In-Reply-To: References: Message-ID: On 20/04/16 02:01, Chris Muller wrote: > In order to communicate and document some of Squeak's IDE > capabilities, I made some videos today which describe some of my > favorite features of its IDE. Thanks Chris! Lots of powerful details I didn't know about Stephan From Marcel.Taeumel at hpi.de Wed Apr 20 07:26:03 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Apr 20 07:58:52 2016 Subject: [squeak-dev] Re: List filtering stability issues and how to solve them In-Reply-To: <1461134211072-4890920.post@n4.nabble.com> References: <1461134211072-4890920.post@n4.nabble.com> Message-ID: <1461137163920-4890926.post@n4.nabble.com> Hi, there. I like backwards compatibility. :-) And I like to retain existing users' workflows as much as possible. Hence, here is a change set, which also retains the "two-level selection": list-filtering-stability-fix.3.cs I couldn't resist but also restore the filter where the second-level selection was made to help the user recall the decision-making and avoid confusion. ;-) Best, Marcel -- View this message in context: http://forum.world.st/List-filtering-stability-issues-and-how-to-solve-them-tp4890920p4890926.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bernhard at pieber.com Wed Apr 20 11:30:17 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Wed Apr 20 11:30:24 2016 Subject: [squeak-dev] ftp down? In-Reply-To: <365CC8D7-DF0D-47CF-B71A-4174EAC3C27A@gmail.com> References: <365CC8D7-DF0D-47CF-B71A-4174EAC3C27A@gmail.com> Message-ID: <56A4BED9-8A0B-4150-BA38-65DA8F730EB6@pieber.com> Dear Squeakers, I have the same problem as Max last year. I can ping ftp.squeak.org but if I try to open it I get the following: MacBookProRetina:~ bernhard$ ftp ftp> open ftp.squeak.org Connected to ftp.squeak.org. 421 Service not available, remote server has closed connection. Was there some change I missed? Can others reach it? Cheers, Bernhard > Am 11.12.2015 um 17:25 schrieb Max Leske : > > Hi > > I?m trying to get the Fuel build set up for 5.0 but I can?t seem to connect to ftp.squeak.org. It?s available via http but not via ftp. > > Alternatively, how do you access that server for the Squeak builds? Should I use a different protocol? > > Cheers, > Max From bert at freudenbergs.de Wed Apr 20 11:38:10 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Apr 20 11:38:15 2016 Subject: [squeak-dev] ftp down? In-Reply-To: <56A4BED9-8A0B-4150-BA38-65DA8F730EB6@pieber.com> References: <365CC8D7-DF0D-47CF-B71A-4174EAC3C27A@gmail.com> <56A4BED9-8A0B-4150-BA38-65DA8F730EB6@pieber.com> Message-ID: <2FECD79E-1769-4D22-819C-001112982A98@freudenbergs.de> Try http://ftp.squeak.org/ I don?t think we?re running an ftp server anymore. We really should rename the service to files.squeak.org. - Bert - > On 20.04.2016, at 13:30, Bernhard Pieber wrote: > > Dear Squeakers, > > I have the same problem as Max last year. I can ping ftp.squeak.org but if I try to open it I get the following: > > MacBookProRetina:~ bernhard$ ftp > ftp> open ftp.squeak.org > Connected to ftp.squeak.org. > 421 Service not available, remote server has closed connection. > > Was there some change I missed? Can others reach it? > > Cheers, > Bernhard > >> Am 11.12.2015 um 17:25 schrieb Max Leske : >> >> Hi >> >> I?m trying to get the Fuel build set up for 5.0 but I can?t seem to connect to ftp.squeak.org. It?s available via http but not via ftp. >> >> Alternatively, how do you access that server for the Squeak builds? Should I use a different protocol? >> >> Cheers, >> Max > > -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160420/b37babd0/smime.bin From commits at source.squeak.org Wed Apr 20 11:46:29 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 20 11:46:31 2016 Subject: [squeak-dev] The Trunk: Morphic-tfel.1121.mcz Message-ID: Tim Felgentreff uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tfel.1121.mcz ==================== Summary ==================== Name: Morphic-tfel.1121 Author: tfel Time: 20 April 2016, 1:45:24.733021 pm UUID: 796c4fe3-21f2-fd4e-a4f9-ccc9905b3503 Ancestors: Morphic-cmm.1120 fix incorrect use of Canvas>>isVisible:. Needs to get a rectangle (but accidentally worked for morphs too *only* on FormCanvas) =============== Diff against Morphic-cmm.1120 =============== Item was changed: ----- Method: SimpleHierarchicalListMorph>>drawLinesOn: (in category 'drawing') ----- drawLinesOn: aCanvas | lColor | lColor := self lineColor. aCanvas transformBy: scroller transform clippingTo: scroller innerBounds during:[:clippedCanvas | scroller submorphs select: [:submorph | submorph visible] thenDo: [ :submorph | ((submorph isExpanded or: [clippedCanvas isVisible: submorph fullBounds] ) + or: [ submorph nextSibling notNil and: [clippedCanvas isVisible: submorph nextSibling bounds]]) - or: [ submorph nextSibling notNil and: [clippedCanvas isVisible: submorph nextSibling]]) ifTrue: [submorph drawLinesOn: clippedCanvas lineColor: lColor indentThreshold: 0] ] ] smoothing: scroller smoothing. ! From Das.Linux at gmx.de Wed Apr 20 12:14:47 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Apr 20 12:15:12 2016 Subject: [squeak-dev] ftp down? In-Reply-To: <2FECD79E-1769-4D22-819C-001112982A98@freudenbergs.de> References: <365CC8D7-DF0D-47CF-B71A-4174EAC3C27A@gmail.com> <56A4BED9-8A0B-4150-BA38-65DA8F730EB6@pieber.com> <2FECD79E-1769-4D22-819C-001112982A98@freudenbergs.de> Message-ID: <903A91AE-828A-450B-A643-DBD69496BF29@gmx.de> On 20.04.2016, at 13:38, Bert Freudenberg wrote: > Try > > http://ftp.squeak.org/ > > I don?t think we?re running an ftp server anymore. We really should rename the service to files.squeak.org. > ACK. > - Bert - > >> On 20.04.2016, at 13:30, Bernhard Pieber wrote: >> >> Dear Squeakers, >> >> I have the same problem as Max last year. I can ping ftp.squeak.org but if I try to open it I get the following: >> >> MacBookProRetina:~ bernhard$ ftp >> ftp> open ftp.squeak.org >> Connected to ftp.squeak.org. >> 421 Service not available, remote server has closed connection. >> >> Was there some change I missed? Can others reach it? >> >> Cheers, >> Bernhard >> >>> Am 11.12.2015 um 17:25 schrieb Max Leske : >>> >>> Hi >>> >>> I?m trying to get the Fuel build set up for 5.0 but I can?t seem to connect to ftp.squeak.org. It?s available via http but not via ftp. >>> >>> Alternatively, how do you access that server for the Squeak builds? Should I use a different protocol? >>> >>> Cheers, >>> Max -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 1656 bytes Desc: Message signed with OpenPGP using GPGMail Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160420/39a97223/signature.pgp From commits at source.squeak.org Wed Apr 20 12:25:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 20 12:26:17 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-tfel.172.mcz Message-ID: Tim Felgentreff uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-tfel.172.mcz ==================== Summary ==================== Name: MorphicExtras-tfel.172 Author: tfel Time: 20 April 2016, 2:25:18.788021 pm UUID: cd9fb2c0-84a9-ee4c-a244-98522b2ac822 Ancestors: MorphicExtras-mt.171 make postscript printing work again with current default fonts =============== Diff against MorphicExtras-mt.171 =============== Item was added: + ----- Method: PostscriptCanvas class>>fontsForDejaVuSans (in category 'font mapping') ----- + fontsForDejaVuSans + + | d | + + "Bold = 1, Ital = 2, Under = 4, Narrow = 8, Struckout = 16" + d := Dictionary new. + d + at: 0 put: #('Helvetica-Bold' 1.0); + at: 1 put: #('Helvetica-Bold' 1.0); + at: 2 put: #('Helvetica-Oblique' 1.0); + at: 3 put: #('Helvetica-BoldOblique' 1.0). + ^d! Item was changed: ----- Method: PostscriptCanvas class>>initializeFontMap (in category 'font mapping') ----- initializeFontMap "Initialize the dictionary mapping font names to substitutions for Postscript code generation." "PostscriptCanvas initializeFontMap" | f | FontMap := Dictionary new. FontMap at: 'NewYork' put: (f := self fontsForNewYork); at: 'Accuny' put: f; at: 'Helvetica' put: (f := self fontsForHelvetica); at: 'Accujen' put: f; at: 'Palatino' put: self fontsForPalatino; at: 'ComicBold' put: (f := self fontsForComicBold); at: 'Accuat' put: self fontsForAccuAt; + at: 'Bitmap DejaVu Sans' put: self fontsForDejaVuSans; + at: 'ComicPlain' put: self fontsForComicPlain! Item was changed: ----- Method: PostscriptCanvas class>>postscriptFontInfoForFont: (in category 'font mapping') ----- postscriptFontInfoForFont: font | decoded decodedName keys match fontName | fontName := font textStyleName asString. decoded := TextStyle decodeStyleName: fontName. decodedName := decoded second. keys := self fontMap keys asArray sort: [ :a :b | a size > b size ]. - match := keys select: [ :k | decoded first = k or: [ fontName = k ] ]. match do: [ :key | | subD desired mask | subD := self fontMap at: key. desired := font emphasis. mask := 31. [ desired := desired bitAnd: mask. subD at: desired ifPresent: [ :answer | ^answer]. mask := mask bitShift: -1. desired > 0 ] whileTrue. ]. "No explicit lookup found; try to convert the style name into the canonical Postscript name. This name will probably still be wrong." fontName := String streamContents: [ :s | s nextPutAll: decodedName. decoded third do: [ :nm | s nextPut: $-; nextPutAll: nm ]. (font emphasis = 0 and: [ (decoded last includes: 0) not ]) ifTrue: [ s nextPutAll: '-Regular' ]. (font emphasis = 1 and: [ (decoded first anyMask: 1) not ]) ifTrue: [ s nextPutAll: '-Bold' ]. (font emphasis = 2 and: [ (decoded first anyMask: 2) not ]) ifTrue: [ s nextPutAll: '-Italic' ]. (font emphasis = 3 and: [ (decoded first anyMask: 3) not ]) ifTrue: [ s nextPutAll: '-BoldItalic' ]. ]. + ^ {'(', fontName, ') cvn'. 1.0} - ^ {fontName. 1.0} ! Item was changed: ----- Method: PostscriptCanvas>>image:at:sourceRect:rule: (in category 'private') ----- + image: form at: aPoint sourceRect: sourceRect rule: rule + | aForm | - image: aForm at: aPoint sourceRect: sourceRect rule: rule self preserveStateDuring: [:inner | inner translate: aPoint + self origin. + aForm := form depth <= 8 ifTrue: [form asFormOfDepth: 32] ifFalse: [form]. + target write: ((aForm colorsUsed includes: Color transparent) + ifTrue: [| top f2 c2 offset | + "tfel: This was taken from SketchMorph, but is actually needed for all + forms that use transparency" + offset := currentTransformation ifNil: [0@0] ifNotNilDo: [:t | t offset]. + top := self topLevelMorph. + f2 := Form extent: aForm extent depth: self depth. + c2 := f2 getCanvas. + c2 fillColor: Color white. + c2 + translateBy: offset - self origin - aPoint + clippingTo: f2 boundingBox + during: [:c | top fullDrawOn: c]. + f2] + ifFalse: [aForm])]. - target write: aForm] ! Item was removed: - ----- Method: SketchMorph>>drawPostscriptOn: (in category '*MorphicExtras-*morphic-Postscript Canvases') ----- - drawPostscriptOn: aCanvas - - | top f2 c2 tfx clrs | - - tfx := self transformFrom: self world. - tfx angle = 0.0 ifFalse: [^super drawPostscriptOn: aCanvas]. "can't do rotated yet" - clrs := self rotatedForm colorsUsed. - (clrs includes: Color transparent) - ifFalse: [^super drawPostscriptOn: aCanvas]. "no need for this, then" - - "Smalltalk at: #Q put: OrderedCollection new" - "Q add: {self. tfx. clrs}." - "(self hasProperty: #BOB) ifTrue: [self halt]." - - top := aCanvas topLevelMorph. - f2 := Form extent: self extent depth: self rotatedForm depth. - c2 := f2 getCanvas. - c2 fillColor: Color white. - c2 translateBy: bounds origin negated clippingTo: f2 boundingBox during: [ :c | - top fullDrawOn: c - ]. - aCanvas paintImage: f2 at: bounds origin - - ! From commits at source.squeak.org Wed Apr 20 16:10:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 20 16:11:02 2016 Subject: [squeak-dev] The Trunk: Morphic-bf.1122.mcz Message-ID: Bert Freudenberg uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-bf.1122.mcz ==================== Summary ==================== Name: Morphic-bf.1122 Author: bf Time: 20 April 2016, 6:09:34.906493 pm UUID: a3dac7ab-cefe-4c77-9a8f-2d45f7f0dd9e Ancestors: Morphic-tfel.1121 Prevent DNU when keystroke event causes text editor to get closed (owner is nil) =============== Diff against Morphic-tfel.1121 =============== Item was changed: ----- Method: StringMorphEditor>>keyStroke: (in category 'event handling') ----- keyStroke: evt "This is hugely inefficient, but it seems to work, and it's unlikely it will ever need to be any more efficient -- it's only intended to edit single-line strings." | char priorEditor newSel | (((char := evt keyCharacter) = Character enter) or: [(char = Character cr) or: [char = $s and: [evt commandKeyPressed]]]) ifTrue: [owner doneWithEdits; acceptContents. self flag: #arNote. "Probably unnecessary" evt hand releaseKeyboardFocus. ^ self delete]. (char = $l and: [evt commandKeyPressed]) ifTrue: "cancel" [owner cancelEdits. evt hand releaseKeyboardFocus. ^ self delete]. super keyStroke: evt. + + owner ifNil: [^self]. owner interimContents: self contents asString. newSel := self editor selectionInterval. priorEditor := self editor. "Save editor state" self releaseParagraph. "Release paragraph so it will grow with selection." self paragraph. "Re-instantiate to set new bounds" self installEditorToReplace: priorEditor. "restore editor state" self editor selectFrom: newSel first to: newSel last. ! From commits at source.squeak.org Wed Apr 20 16:25:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 20 16:26:03 2016 Subject: [squeak-dev] The Trunk: Tools-bf.694.mcz Message-ID: Bert Freudenberg uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-bf.694.mcz ==================== Summary ==================== Name: Tools-bf.694 Author: bf Time: 20 April 2016, 6:24:57.82409 pm UUID: b13d8848-e0bb-479f-b9b5-a243e111cea2 Ancestors: Tools-cmm.693 Always accept dropped variable references in a workspace. =============== Diff against Tools-cmm.693 =============== Item was changed: ----- Method: Workspace>>acceptDroppingMorph:event:inMorph: (in category 'drag and drop') ----- acceptDroppingMorph: dropee event: evt inMorph: targetMorph "Return the dropee to its old position, and add a reference to it at the cursor point." | bindingName externalName reference | (dropee isKindOf: TransferMorph) ifTrue: [reference := dropee passenger. externalName := dropee passenger className] ifFalse: [reference := dropee. dropee externalName]. externalName := externalName isOctetString ifTrue: [externalName] ifFalse: ['a' , externalName]. bindingName := externalName withFirstCharacterDownshifted , reference identityHash printString. targetMorph correctSelectionWithString: bindingName , ' '. (self bindingOf: bindingName) value: reference. + (dropee isKindOf: TransferMorph) + ifFalse: [dropee rejectDropMorphEvent: evt]. - dropee rejectDropMorphEvent: evt. ^ true"success"! Item was changed: ----- Method: Workspace>>wantsDroppedMorph:event:inMorph: (in category 'drag and drop') ----- wantsDroppedMorph: dropee event: evt inMorph: target + ^ acceptDroppedMorphs or: [dropee isKindOf: TransferMorph] - ^ acceptDroppedMorphs ! From Marcel.Taeumel at hpi.de Thu Apr 21 09:48:56 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Apr 21 10:21:51 2016 Subject: [squeak-dev] Who breaks it, fixes it -- A Question about our Development Model Message-ID: <1461232136656-4891134.post@n4.nabble.com> Hey Squeak Community, according to our development model here: https://squeakboard.wordpress.com/2009/07/02/a-new-community-development-model/ If I break something, I am responsible for fixing it. So, if I meant to fix a bug such as here: http://forum.world.st/The-Trunk-Morphic-mt-1119-mcz-td4890816.html And somebody raises an issue about new bugs added or some use case missed, is there a general need to revert that before further disscussions? More importantly, wouldn't I be in charge of reverting it? And not somebody else... Note that we all assume that any trunk committer thoroughly investigates the changes made and fixes yet discusses obvious issues --- before committing such changes. This fundamental level of trust comes with being allowed to commit to trunk in the first place. Nevertheless, remaining issues can easily discussed on the mailing list and the responsible committer can fix/revert them right away -- or delegate it to someone else if time is rare. At least, this is what I expect from every trunk committer. :-) It seems* to work pretty well: http://forum.world.st/The-Trunk-ToolBuilder-Morphic-kfr-159-mcz-td4879754.html http://forum.world.st/The-Trunk-Collections-mt-688-mcz-td4889675.html http://forum.world.st/The-Trunk-Monticello-mt-629-mcz-td4887731.html http://forum.world.st/The-Trunk-Morphic-cmm-615-mcz-td4524250.html http://forum.world.st/The-Trunk-Graphics-tfel-327-mcz-td4880035.html Sometimes, it seems* to not work: http://forum.world.st/The-Trunk-Morphic-cmm-1052-mcz-td4862408.htm http://forum.world.st/The-Trunk-SMLoader-cmm-85-mcz-td4850418.html http://forum.world.st/The-Trunk-Morphic-cmm-1120-mcz-td4890853.html http://forum.world.st/The-Trunk-Tools-cmm-693-mcz-td4890497.html What is your opinion? Best, Marcel * No limit or warranty. Off-list discussions not considered. Just exemplified. -- View this message in context: http://forum.world.st/Who-breaks-it-fixes-it-A-Question-about-our-Development-Model-tp4891134.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lewis at mail.msen.com Thu Apr 21 11:49:20 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Apr 21 11:49:22 2016 Subject: [squeak-dev] Who breaks it, fixes it -- A Question about our Development Model In-Reply-To: <1461232136656-4891134.post@n4.nabble.com> References: <1461232136656-4891134.post@n4.nabble.com> Message-ID: <20160421114920.GA30340@shell.msen.com> I think that the intention of the "you break it, you fix it" rule is that we must take responsibility for the changes that we make, and that we should not intentionally cause problems and then expect someone else to clean up the mess. All of the trunk contributors have been doing their best to respect this rule, and it works very well. Sometimes a change is made to trunk that causes a serious problem that affects all of us, such as breaking the update stream (and I have been guilty of this myself). The problem may not be immediately obvious to the person making the change, or that person may not be able to quickly fix the issue. In those cases, I would expect that anyone who is able to fix it should do so as quickly as possible. For other kinds of concerns, I think that as a matter of courtesy it is good practice to give the person who caused the problem the first opportunity to revert the change or fix the problem. Dave On Thu, Apr 21, 2016 at 02:48:56AM -0700, marcel.taeumel wrote: > Hey Squeak Community, > > according to our development model here: > https://squeakboard.wordpress.com/2009/07/02/a-new-community-development-model/ > > If I break something, I am responsible for fixing it. > > So, if I meant to fix a bug such as here: > http://forum.world.st/The-Trunk-Morphic-mt-1119-mcz-td4890816.html > > And somebody raises an issue about new bugs added or some use case missed, > is there a general need to revert that before further disscussions? More > importantly, wouldn't I be in charge of reverting it? And not somebody > else... > > Note that we all assume that any trunk committer thoroughly investigates the > changes made and fixes yet discusses obvious issues --- before committing > such changes. This fundamental level of trust comes with being allowed to > commit to trunk in the first place. Nevertheless, remaining issues can > easily discussed on the mailing list and the responsible committer can > fix/revert them right away -- or delegate it to someone else if time is > rare. > > At least, this is what I expect from every trunk committer. :-) > > It seems* to work pretty well: > http://forum.world.st/The-Trunk-ToolBuilder-Morphic-kfr-159-mcz-td4879754.html > http://forum.world.st/The-Trunk-Collections-mt-688-mcz-td4889675.html > http://forum.world.st/The-Trunk-Monticello-mt-629-mcz-td4887731.html > http://forum.world.st/The-Trunk-Morphic-cmm-615-mcz-td4524250.html > http://forum.world.st/The-Trunk-Graphics-tfel-327-mcz-td4880035.html > > Sometimes, it seems* to not work: > http://forum.world.st/The-Trunk-Morphic-cmm-1052-mcz-td4862408.htm > http://forum.world.st/The-Trunk-SMLoader-cmm-85-mcz-td4850418.html > http://forum.world.st/The-Trunk-Morphic-cmm-1120-mcz-td4890853.html > http://forum.world.st/The-Trunk-Tools-cmm-693-mcz-td4890497.html > > What is your opinion? > > Best, > Marcel > > * No limit or warranty. Off-list discussions not considered. Just > exemplified. > > > > -- > View this message in context: http://forum.world.st/Who-breaks-it-fixes-it-A-Question-about-our-Development-Model-tp4891134.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Thu Apr 21 17:03:05 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Apr 21 17:03:12 2016 Subject: [squeak-dev] Who breaks it, fixes it -- A Question about our Development Model In-Reply-To: <20160421114920.GA30340@shell.msen.com> References: <1461232136656-4891134.post@n4.nabble.com> <20160421114920.GA30340@shell.msen.com> Message-ID: Hi All, > On Apr 21, 2016, at 4:49 AM, David T. Lewis wrote: > > I think that the intention of the "you break it, you fix it" rule is > that we must take responsibility for the changes that we make, and that > we should not intentionally cause problems and then expect someone else > to clean up the mess. All of the trunk contributors have been doing their > best to respect this rule, and it works very well. > > Sometimes a change is made to trunk that causes a serious problem that > affects all of us, such as breaking the update stream (and I have been > guilty of this myself). The problem may not be immediately obvious to > the person making the change, or that person may not be able to quickly > fix the issue. In those cases, I would expect that anyone who is able > to fix it should do so as quickly as possible. > > For other kinds of concerns, I think that as a matter of courtesy it > is good practice to give the person who caused the problem the first > opportunity to revert the change or fix the problem. +1. (I presume) no one wants to slow down our rate of progress or make people afraid to make mistakes. Simply that one can't expect others to pick up the pieces. There are obvious safe guards; run unit tests, read the mailing list, ask for help, offer to help if this is your area of expertise and you can find the time. And if you break it, make a timely effort to fix it. There's another aspect to this. If you want to change something and there's a good chance it will impact other users negatively, discuss it in the mailing list first, and/or commit prototypes to inbox for others to try/review/alter. > Dave > > >> On Thu, Apr 21, 2016 at 02:48:56AM -0700, marcel.taeumel wrote: >> Hey Squeak Community, >> >> according to our development model here: >> https://squeakboard.wordpress.com/2009/07/02/a-new-community-development-model/ >> >> If I break something, I am responsible for fixing it. >> >> So, if I meant to fix a bug such as here: >> http://forum.world.st/The-Trunk-Morphic-mt-1119-mcz-td4890816.html >> >> And somebody raises an issue about new bugs added or some use case missed, >> is there a general need to revert that before further disscussions? More >> importantly, wouldn't I be in charge of reverting it? And not somebody >> else... >> >> Note that we all assume that any trunk committer thoroughly investigates the >> changes made and fixes yet discusses obvious issues --- before committing >> such changes. This fundamental level of trust comes with being allowed to >> commit to trunk in the first place. Nevertheless, remaining issues can >> easily discussed on the mailing list and the responsible committer can >> fix/revert them right away -- or delegate it to someone else if time is >> rare. >> >> At least, this is what I expect from every trunk committer. :-) >> >> It seems* to work pretty well: >> http://forum.world.st/The-Trunk-ToolBuilder-Morphic-kfr-159-mcz-td4879754.html >> http://forum.world.st/The-Trunk-Collections-mt-688-mcz-td4889675.html >> http://forum.world.st/The-Trunk-Monticello-mt-629-mcz-td4887731.html >> http://forum.world.st/The-Trunk-Morphic-cmm-615-mcz-td4524250.html >> http://forum.world.st/The-Trunk-Graphics-tfel-327-mcz-td4880035.html >> >> Sometimes, it seems* to not work: >> http://forum.world.st/The-Trunk-Morphic-cmm-1052-mcz-td4862408.htm >> http://forum.world.st/The-Trunk-SMLoader-cmm-85-mcz-td4850418.html >> http://forum.world.st/The-Trunk-Morphic-cmm-1120-mcz-td4890853.html >> http://forum.world.st/The-Trunk-Tools-cmm-693-mcz-td4890497.html >> >> What is your opinion? >> >> Best, >> Marcel >> >> * No limit or warranty. Off-list discussions not considered. Just >> exemplified. >> >> >> >> -- >> View this message in context: http://forum.world.st/Who-breaks-it-fixes-it-A-Question-about-our-Development-Model-tp4891134.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Thu Apr 21 17:26:10 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Apr 21 17:26:55 2016 Subject: [squeak-dev] Who breaks it, fixes it -- A Question about our Development Model In-Reply-To: <1461232136656-4891134.post@n4.nabble.com> References: <1461232136656-4891134.post@n4.nabble.com> Message-ID: I literally spent weeks developing and refining and doing usability-testing of the filtering function before presenting it to the community **five years** ago. Now someone came along in one afternoon this week and deleted features that were purposefully designed that way. They also fundamentally changed the way list widgets respond to keyboard input since Squeak 3.x more than a decade ago! The date of the methods of these breakages matches the date of the commit. Here is what our development process says about this: * Exercise caution. This is a running system and breaking it needlessly is generally frowned upon. * Restrain yourself. Getting developer access doesn?t mean you are free to put in every pet extension you always wanted to have without discussion. * If in doubt, ask. This is the corollary to the restrain yourself rule. You?re not under pressure to ship a product, so you have the time to send a note saying ?hey, I?m planning to fix this old issue and it may have some side effect here or there. Anyone having a problem with that?? I don't think someone who causes such a fundamental breakage with no discussion should be offended when someone fixes it with no discussion. They should just acknowledge their commit was premature like when the situation was reversed earlier this year when they needed to revert my code: http://forum.world.st/The-Trunk-Morphic-cmm-1074-mcz-td4877176.html#a4877196 Our development model does not specify any rules about how fixes should be made, whether typing new code or reverting code, nor who should do it. Maybe this is just an exceptional week this week? I have no desire to revert anyones code, I've always preferred that we simply follow our process as written, above, like Eliot did the other day. Slapping needless graffitti on the Tracing Messages Browser which I developed in VA, VW and Squeak in the 1990's was just offensive to me. I stand my these two reverts. If someone is truly open to an impartial discussion, they will be willing to begin the discussion as a proposed improvement to the status-quo, with such proposals that make these kinds of fundamental UI changes, beginning in the Inbox, not trunk. Best, Chris On Thu, Apr 21, 2016 at 4:48 AM, marcel.taeumel wrote: > Hey Squeak Community, > > according to our development model here: > https://squeakboard.wordpress.com/2009/07/02/a-new-community-development-model/ > > If I break something, I am responsible for fixing it. > > So, if I meant to fix a bug such as here: > http://forum.world.st/The-Trunk-Morphic-mt-1119-mcz-td4890816.html > > And somebody raises an issue about new bugs added or some use case missed, > is there a general need to revert that before further disscussions? More > importantly, wouldn't I be in charge of reverting it? And not somebody > else... > > Note that we all assume that any trunk committer thoroughly investigates the > changes made and fixes yet discusses obvious issues --- before committing > such changes. This fundamental level of trust comes with being allowed to > commit to trunk in the first place. Nevertheless, remaining issues can > easily discussed on the mailing list and the responsible committer can > fix/revert them right away -- or delegate it to someone else if time is > rare. > > At least, this is what I expect from every trunk committer. :-) > > It seems* to work pretty well: > http://forum.world.st/The-Trunk-ToolBuilder-Morphic-kfr-159-mcz-td4879754.html > http://forum.world.st/The-Trunk-Collections-mt-688-mcz-td4889675.html > http://forum.world.st/The-Trunk-Monticello-mt-629-mcz-td4887731.html > http://forum.world.st/The-Trunk-Morphic-cmm-615-mcz-td4524250.html > http://forum.world.st/The-Trunk-Graphics-tfel-327-mcz-td4880035.html > > Sometimes, it seems* to not work: > http://forum.world.st/The-Trunk-Morphic-cmm-1052-mcz-td4862408.htm > http://forum.world.st/The-Trunk-SMLoader-cmm-85-mcz-td4850418.html > http://forum.world.st/The-Trunk-Morphic-cmm-1120-mcz-td4890853.html > http://forum.world.st/The-Trunk-Tools-cmm-693-mcz-td4890497.html > > What is your opinion? > > Best, > Marcel > > * No limit or warranty. Off-list discussions not considered. Just > exemplified. > > > > -- > View this message in context: http://forum.world.st/Who-breaks-it-fixes-it-A-Question-about-our-Development-Model-tp4891134.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From tim at rowledge.org Thu Apr 21 17:41:28 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Apr 21 17:41:34 2016 Subject: [squeak-dev] Who breaks it, fixes it -- A Question about our Development Model In-Reply-To: References: <1461232136656-4891134.post@n4.nabble.com> Message-ID: <5D034A34-9BE3-45A8-983D-87ECAEDA8BE6@rowledge.org> Whilst rules are useful (assuming they?re well thought out, sensibly applied, understood and modified when needed) nothing beats simply getting on Skype or facetime or the phone or even walking down the corridor and simply talking about a problem. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim "How many Grogs does it take to change a lightbulb?? "One. Something with manipulatory appendages will be along eventually." From robert.w.withers at gmail.com Sat Apr 23 19:01:33 2016 From: robert.w.withers at gmail.com (Robert Withers) Date: Sat Apr 23 19:01:42 2016 Subject: [squeak-dev] looking for help: frame definitions in SecureSession Message-ID: <571BC68D.6060504@gmail.com> Hi All, I've been working in SecureSession (http://www.squeaksource.com/Cryptography) and I have worked on redefining the Vintage message definitions over these past months to a new frame specification that may be good to use across uses: internet, telecomm, multicore and with 4 tag bits, hoping that's helpful in some way with the vm. I have been thinking more about whether what I came up with could be improved. My apologies for fomenting such change in the spec. This spec can be found here: http://jmp.sh/zASyHlK. The issue I face with the vintage protocol is there is no identifying information compared to the frame messageVersion to differentiate it as a vintage msg. I had not looked at the ASN1DER encoding of those vintage messages critically; on a quick look it looks like the "timeSent" field lines up with the messageVersion of the frame definition. This would be great if we could repurpose the timeSent as a msgVersion then send vintage traffic along with frame traffic, together. On the frame definition of the 8 byte msgSpec, I think perhaps some changes would be good. In analysis, we don't need 6 bits for msgVersion, perhaps only 3 bits, so the multicast could go to 9 bits. The 8 bits of hash could be recast as the channel, or circuit, so we can multiplex traffic. This still leaves 64 different header type values for differentiation and allows 256 channels and 512 multicasts. What do you think? Are these good changes? Old frame msgSpec definition: 8 bytes bit encoded * 1st word, 4 bytes o 4 bits : tags o 6 bits : multicast o 6 bits : messageVersion o 2 bits : priority o 6 bits : headerType o 8 bits : hash * 2nd word, 4 bytes o 32 bits : messageSize (payload bytes = (messageSize - headerSize - 8 bytes msgSpec)) Proposed msgSpec definition: 8 bytes bit encoded * 1st word, 4 bytes o 4 bits : tags o 9 bits : multicast o 3 bits : messageVersion o 2 bits : priority o 6 bits : headerType o 8 bits : channel * 2nd word, 4 bytes * 32 bits : messageSize (payload bytes = (messageSize - headerSize - 8 bytes msgSpec)) Best, Robert -- Robert . .. ... ^,^ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160423/8ff5cbf2/attachment.htm From eliot.miranda at gmail.com Sat Apr 23 19:48:56 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Apr 23 19:48:59 2016 Subject: [squeak-dev] New Cog VMs available Message-ID: ... at http://www.mirandabanda.org/files/Cog/VM/VM.r3684 CogVM binaries as per VMMaker.oscog-eem.1834/r3684 General: Correct undue sign extension wile promoting 32 to 64 bits int in fetchLong64:ofObject: This was causing trouble in non spur object memory (V3). Fix slowdown of update on 64-bit x64 by using int variables for the tides in sqExternalSemaphores.c and inline assembler for the sqCompareAndSwap in sqAtomicOps.h. Fix slips in offset time primitives. They need to pop argumentCount + 1, not argumentCount. Define an optional primitive as the fast primitive fail code so that unselected optional primitives are in the prmitiveTable as fast primitive fails. Spur: Have WideString>>at: fail to answer an out-of-range character in the interpreter primitive (as well as in the JIT). Fix bug in following state on primitive failure. The old code would always follow to depth 1, even if the accessor depth was 0. Hard-code primitiveSize's depth to 0 (accessing length in at:[put:] and size causes the stack depth computation to answer 1 instead of 0 for these primitives. Fix assert and dequeueMourner for case where mournQueue is nil. - fixed a bug in receiver accessing in immutability primitive for mirror primitive. - change primitiveSetOrHasIdentityHash to patch the class table if the new hash is set to a behavior (the primitive knows it's a behavior if the second (optional) argument is true) For example: FullBlockClosure tryPrimitive: 161 withArgs: {38.true} No longer follow the method and context fields in a closure in activateNewClosureMethod:numArgs:mayContextSwitch:; the caller will have failed if these are forwarders, so no need to check again. Cogit: Add a primitive that answers pc map data for methods which can be used to better decorate methods in the VM Profiler. Refactor the pc map enumeration facilities so that the Sista pic data primitive can share the same enumerator. Do this by collapsing the isBackwardBranch and annotation parameters into a single parameter. Follow selectors in the openPICList post Spur become. Fix the ARM's caller-saved register mask now that we can name all the actual registers. Reworked machine code generation of immutability so for common stores it uses a single trampoline for both store checks and immutability checks. - improved support for register allocation: branch merge successfully compiled with register moved instead of spilling. Sista Cogit: Don't bother to add counters to conditional jumps implementing and: and or:. Added the remote inst var access bytecode in sista V1 bytecode set without interfering with existing code. Plugins: Upgrade LargeIntegersPlugin to v2.0 LargeInteger primitives now deal with 32-bits digits. No change to image code. Memory is 8 bytes aligned on Spur. When storing 32/64 bits large integers values, allways fill the eight bytes whatever the effectivily used size, rather than bother with dissertion of size. Generate integer type checking as C macros rather than direct/indirect interpreterProxy function call in plugins. This, and 32-bit accessing mean singificantly faster large integer arithmetic. Fix primAlienReplace to use positiveMachineIntegerValueOf: instead of positive32BitValueOf:. BitBltPlugin operates on 32bit word units, therefore it's better to declare its operands as 'unsigned int' rather than sqInt. On 32bit VM, this doesn't change anything, but on 64bits spur, it makes this snippet work: | wideString source pos blt expectedWideString | source := #[1 64 255 14 1 64 48 251]. expectedWideString := WideString fromByteArray: source. wideString := WideString new: source size // 4. pos := 0. blt := (BitBlt toForm: (Form new hackBits: wideString)) sourceForm: (Form new hackBits: source). blt combinationRule: Form over; sourceX: 0; sourceY: pos // 4; height: wideString byteSize // 4; width: 4; destX: 0; destY: 0; copyBits. wideString restoreEndianness. self assert: wideString = expectedWideString Hence it fixes loading/diffing MCZ with wide character. Mac OS Builds: Don't link with -fvisibility=hidden; it breaks external plugins. Use -fvisibility=default instead. This fixes e.g. UnixOSProcessPlugin on Mac OS X. Windows Builds: The Windows VMs are no longer "dpiAware". If you want one-to-one pixel mapping check the README for ins ructions. It's a simple edit. _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160423/4964fbb0/attachment.htm From robert.w.withers at gmail.com Sat Apr 23 20:53:08 2016 From: robert.w.withers at gmail.com (Robert Withers) Date: Sat Apr 23 20:53:13 2016 Subject: [squeak-dev] Re: looking for help: frame definitions in SecureSession In-Reply-To: <571BC68D.6060504@gmail.com> References: <571BC68D.6060504@gmail.com> Message-ID: <571BE0B4.4060908@gmail.com> I decided to change the msgSpec fields as described below, with some reordering and size/purpose changes. I published this as package version 100, and it is a major change. To make sure this basic 8-byte spec layout keeps forward, I've needed to redefine version 1. I am all ears if you think this is a good change or not. Published msgSpec definition: 8 bytes bit encoded * 1st word, 4 bytes o 4 bits : tags o 4 bits : frameVersion o 2 bits : priority o 6 bits : headerType o 8 bits : multicast o 8 bits : channel * 2nd word, 4 bytes o 32 bits : messageSize (payload bytes = (messageSize - headerSize - 8 bytes msgSpec)) thank you, Robert On 04/23/2016 03:01 PM, Robert Withers wrote: > Hi All, > > I've been working in SecureSession > (http://www.squeaksource.com/Cryptography) and I have worked on > redefining the Vintage message definitions over these past months to a > new frame specification that may be good to use across uses: internet, > telecomm, multicore and with 4 tag bits, hoping that's helpful in some > way with the vm. I have been thinking more about whether what I came > up with could be improved. My apologies for fomenting such change in > the spec. This spec can be found here: http://jmp.sh/zASyHlK. > > The issue I face with the vintage protocol is there is no identifying > information compared to the frame messageVersion to differentiate it > as a vintage msg. I had not looked at the ASN1DER encoding of those > vintage messages critically; on a quick look it looks like the > "timeSent" field lines up with the messageVersion of the frame > definition. This would be great if we could repurpose the timeSent as > a msgVersion then send vintage traffic along with frame traffic, together. > > On the frame definition of the 8 byte msgSpec, I think perhaps some > changes would be good. In analysis, we don't need 6 bits for > msgVersion, perhaps only 3 bits, so the multicast could go to 9 bits. > The 8 bits of hash could be recast as the channel, or circuit, so we > can multiplex traffic. This still leaves 64 different header type > values for differentiation and allows 256 channels and 512 multicasts. > What do you think? Are these good changes? > > Old frame msgSpec definition: 8 bytes bit encoded > > * 1st word, 4 bytes > o 4 bits : tags > o 6 bits : multicast > o 6 bits : messageVersion > > o 2 bits : priority > o 6 bits : headerType > o 8 bits : hash > * 2nd word, 4 bytes > o 32 bits : messageSize (payload bytes = (messageSize - > headerSize - 8 bytes msgSpec)) > > > Proposed msgSpec definition: 8 bytes bit encoded > > * 1st word, 4 bytes > o 4 bits : tags > o 9 bits : multicast > o 3 bits : messageVersion > > o 2 bits : priority > o 6 bits : headerType > o 8 bits : channel > * 2nd word, 4 bytes > * 32 bits : messageSize (payload bytes = (messageSize - headerSize - > 8 bytes msgSpec)) > > > Best, > Robert > > -- > Robert > . .. ... ^,^ -- Robert . .. ... ^,^ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160423/47e2682f/attachment.htm From commits at source.squeak.org Sat Apr 23 21:34:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 23 21:34:42 2016 Subject: [squeak-dev] The Trunk: Kernel-nice.939.mcz Message-ID: Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.939.mcz ==================== Summary ==================== Name: Kernel-nice.939 Author: nice Time: 23 April 2016, 11:32:52.246 pm UUID: 4bdcd7ec-9c52-4b77-94e1-cf87a2ee35d5 Ancestors: Kernel-mt.938 Accelerate bitAnd: in case of negative small integer receiver and LargePositiveInteger operand. The timings before and after are: [(-1234 bitAnd: 5678)] bench. 161,000,000 per second. 6.22 nanoseconds per run. 161,000,000 per second. 6.2 nanoseconds per run. [(-1234 bitAnd: 5678125641253)] bench. 1,120,000 per second. 892 nanoseconds per run. 5,020,000 per second. 199 nanoseconds per run. [(-1234 bitAnd: -5678125641253)] bench. 1,830,000 per second. 547 nanoseconds per run. 1,790,000 per second. 557 nanoseconds per run. [(-1234 bitAnd: 567812564128976768553)] bench. 984,000 per second. 1.02 microseconds per run. 2,320,000 per second. 431 nanoseconds per run. [(-1234 bitAnd: -567812564128976768553)] bench. 1,790,000 per second. 559 nanoseconds per run. 1,690,000 per second. 593 nanoseconds per run. =============== Diff against Kernel-cmm.937 =============== Item was changed: ----- Method: Process>>stepToHome: (in category 'changing suspended state') ----- stepToHome: aContext "Resume self until the home of top context is aContext. Top context may be a block context. Catch any UnhandledErrors that are created while stepping, answering the relevant signalerContext if so. Note that this will cause weird effects if using through to step through UnhandledError code, but as the doctor ordered, don't do that; use over or into instead." ^Processor activeProcess evaluate: [| home anError | home := aContext home. [suspendedContext := suspendedContext step. home == suspendedContext home or: [home isDead]] whileFalse: [(suspendedContext selector == #signalForException: + and: [(suspendedContext receiver isBehavior and: [ + suspendedContext receiver includesBehavior: UnhandledError]) - and: [suspendedContext receiver == UnhandledError and: [anError := suspendedContext tempAt: 1. ((suspendedContext objectClass: anError) includesBehavior: Exception) and: [anError canSearchForSignalerContext]]]) ifTrue: [anError signalerContext ifNotNil: [:unhandledErrorSignalerContext| [unhandledErrorSignalerContext == suspendedContext] whileFalse: [self completeStep: suspendedContext]. "Give a debugger a chance to update its title to reflect the new exception" Notification new tag: {unhandledErrorSignalerContext. anError}; signal. ^unhandledErrorSignalerContext]]]. suspendedContext] onBehalfOf: self! Item was changed: ----- Method: SmallInteger>>bitAnd: (in category 'bit manipulation') ----- bitAnd: arg "Primitive. Answer an Integer whose bits are the logical OR of the receiver's bits and those of the argument, arg. Numbers are interpreted as having 2's-complement representation. Essential. See Object documentation whatIsAPrimitive." self >= 0 ifTrue: [^ arg bitAnd: self]. + ^ arg < 0 + ifTrue: [(arg bitInvert bitOr: self bitInvert) bitInvert] + ifFalse: [arg bitClear: self bitInvert]! - ^ (self bitInvert bitOr: arg bitInvert) bitInvert! Item was changed: Exception subclass: #UnhandledError instanceVariableNames: 'exception' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Exceptions'! + + !UnhandledError commentStamp: 'mt 8/25/2015 14:42' prior: 0! + This is a wrapper for an unhandled error. Having this, process stepping is able to correctly fire other unhandled errors. See Process >> #stepToHome: for further explanations.! Item was changed: ----- Method: UnhandledError class>>signalForException: (in category 'as yet unclassified') ----- signalForException: anError + "Very important entry point for analysis stack when stepping in a debugging session. See Process >> #stepToHome: for further explanations." + - ^ self new exception: anError; signal! Item was changed: + ----- Method: UnhandledError>>exception (in category 'accessing') ----- - ----- Method: UnhandledError>>exception (in category 'as yet unclassified') ----- exception ^ exception! Item was changed: + ----- Method: UnhandledError>>exception: (in category 'accessing') ----- - ----- Method: UnhandledError>>exception: (in category 'as yet unclassified') ----- exception: anError exception := anError! Item was added: + UnhandledError subclass: #UnhandledWarning + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Kernel-Exceptions'! From nicolas.cellier.aka.nice at gmail.com Sat Apr 23 21:39:03 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sat Apr 23 21:39:05 2016 Subject: [squeak-dev] The Trunk: Kernel-nice.939.mcz In-Reply-To: <571bea61.d44c370a.7f584.ffffb1c3SMTPIN_ADDED_MISSING@mx.google.com> References: <571bea61.d44c370a.7f584.ffffb1c3SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Oops ! It seems that I updated from 5.0 repository rather than trunk. I've been away too long, let me redo it... 2016-04-23 23:34 GMT+02:00 : > Nicolas Cellier uploaded a new version of Kernel to project The Trunk: > http://source.squeak.org/trunk/Kernel-nice.939.mcz > > ==================== Summary ==================== > > Name: Kernel-nice.939 > Author: nice > Time: 23 April 2016, 11:32:52.246 pm > UUID: 4bdcd7ec-9c52-4b77-94e1-cf87a2ee35d5 > Ancestors: Kernel-mt.938 > > Accelerate bitAnd: in case of negative small integer receiver and > LargePositiveInteger operand. > > The timings before and after are: > > [(-1234 bitAnd: 5678)] bench. > 161,000,000 per second. 6.22 nanoseconds per run. > 161,000,000 per second. 6.2 nanoseconds per run. > [(-1234 bitAnd: 5678125641253)] bench. > 1,120,000 per second. 892 nanoseconds per run. > 5,020,000 per second. 199 nanoseconds per run. > [(-1234 bitAnd: -5678125641253)] bench. > 1,830,000 per second. 547 nanoseconds per run. > 1,790,000 per second. 557 nanoseconds per run. > [(-1234 bitAnd: 567812564128976768553)] bench. > 984,000 per second. 1.02 microseconds per run. > 2,320,000 per second. 431 nanoseconds per run. > [(-1234 bitAnd: -567812564128976768553)] bench. > 1,790,000 per second. 559 nanoseconds per run. > 1,690,000 per second. 593 nanoseconds per run. > > =============== Diff against Kernel-cmm.937 =============== > > Item was changed: > ----- Method: Process>>stepToHome: (in category 'changing suspended > state') ----- > stepToHome: aContext > "Resume self until the home of top context is aContext. Top > context may be a block context. > Catch any UnhandledErrors that are created while stepping, > answering the relevant signalerContext > if so. Note that this will cause weird effects if using through > to step through UnhandledError > code, but as the doctor ordered, don't do that; use over or into > instead." > > ^Processor activeProcess > evaluate: > [| home anError | > home := aContext home. > [suspendedContext := suspendedContext step. > home == suspendedContext home or: [home isDead]] > whileFalse: > [(suspendedContext selector == > #signalForException: > + and: [(suspendedContext receiver > isBehavior and: [ > + suspendedContext receiver > includesBehavior: UnhandledError]) > - and: [suspendedContext receiver == > UnhandledError > and: [anError := suspendedContext tempAt: > 1. > ((suspendedContext objectClass: > anError) includesBehavior: Exception) > and: [anError > canSearchForSignalerContext]]]) ifTrue: > [anError signalerContext ifNotNil: > > [:unhandledErrorSignalerContext| > > [unhandledErrorSignalerContext == suspendedContext] whileFalse: > [self > completeStep: suspendedContext]. > "Give a debugger a chance > to update its title to reflect the new exception" > Notification new > tag: > {unhandledErrorSignalerContext. anError}; > signal. > > ^unhandledErrorSignalerContext]]]. > suspendedContext] > onBehalfOf: self! > > Item was changed: > ----- Method: SmallInteger>>bitAnd: (in category 'bit manipulation') > ----- > bitAnd: arg > "Primitive. Answer an Integer whose bits are the logical OR of the > receiver's bits and those of the argument, arg. > Numbers are interpreted as having 2's-complement representation. > Essential. See Object documentation whatIsAPrimitive." > > > self >= 0 ifTrue: [^ arg bitAnd: self]. > + ^ arg < 0 > + ifTrue: [(arg bitInvert bitOr: self bitInvert) bitInvert] > + ifFalse: [arg bitClear: self bitInvert]! > - ^ (self bitInvert bitOr: arg bitInvert) bitInvert! > > Item was changed: > Exception subclass: #UnhandledError > instanceVariableNames: 'exception' > classVariableNames: '' > poolDictionaries: '' > category: 'Kernel-Exceptions'! > + > + !UnhandledError commentStamp: 'mt 8/25/2015 14:42' prior: 0! > + This is a wrapper for an unhandled error. Having this, process stepping > is able to correctly fire other unhandled errors. See Process >> > #stepToHome: for further explanations.! > > Item was changed: > ----- Method: UnhandledError class>>signalForException: (in category 'as > yet unclassified') ----- > signalForException: anError > + "Very important entry point for analysis stack when stepping in a > debugging session. See Process >> #stepToHome: for further explanations." > + > - > ^ self new > exception: anError; > signal! > > Item was changed: > + ----- Method: UnhandledError>>exception (in category 'accessing') ----- > - ----- Method: UnhandledError>>exception (in category 'as yet > unclassified') ----- > exception > > ^ exception! > > Item was changed: > + ----- Method: UnhandledError>>exception: (in category 'accessing') ----- > - ----- Method: UnhandledError>>exception: (in category 'as yet > unclassified') ----- > exception: anError > > exception := anError! > > Item was added: > + UnhandledError subclass: #UnhandledWarning > + instanceVariableNames: '' > + classVariableNames: '' > + poolDictionaries: '' > + category: 'Kernel-Exceptions'! > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160423/11f870c5/attachment.htm From commits at source.squeak.org Sat Apr 23 21:55:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 23 21:55:39 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160423215537.23548.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/019263.html Name: Kernel-nice.939 Ancestors: Kernel-mt.938 Accelerate bitAnd: in case of negative small integer receiver and LargePositiveInteger operand. The timings before and after are: [(-1234 bitAnd: 5678)] bench. 161,000,000 per second. 6.22 nanoseconds per run. 161,000,000 per second. 6.2 nanoseconds per run. [(-1234 bitAnd: 5678125641253)] bench. 1,120,000 per second. 892 nanoseconds per run. 5,020,000 per second. 199 nanoseconds per run. [(-1234 bitAnd: -5678125641253)] bench. 1,830,000 per second. 547 nanoseconds per run. 1,790,000 per second. 557 nanoseconds per run. [(-1234 bitAnd: 567812564128976768553)] bench. 984,000 per second. 1.02 microseconds per run. 2,320,000 per second. 431 nanoseconds per run. [(-1234 bitAnd: -567812564128976768553)] bench. 1,790,000 per second. 559 nanoseconds per run. 1,690,000 per second. 593 nanoseconds per run. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019264.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019265.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019266.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019267.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019268.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019269.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019270.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019271.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019272.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019273.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019274.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019275.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019276.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019277.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019278.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019279.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019280.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019281.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019282.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019283.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019284.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/019285.html ============================================= From commits at source.squeak.org Sat Apr 23 22:02:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 23 22:02:31 2016 Subject: [squeak-dev] The Trunk: Kernel-nice.1015.mcz Message-ID: Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.1015.mcz ==================== Summary ==================== Name: Kernel-nice.1015 Author: nice Time: 24 April 2016, 12:01:32.68707 am UUID: e62fa41e-9258-4cf7-a855-fd85b2070131 Ancestors: Kernel-mt.1014 Accelerate bitAnd: in case of negative small integer receiver and LargePositiveInteger operand. The timings on CogSpur32 r3684 before and after the change are: [(-1234 bitAnd: 5678)] bench. 161,000,000 per second. 6.22 nanoseconds per run. 161,000,000 per second. 6.2 nanoseconds per run. [(-1234 bitAnd: 5678125641253)] bench. 1,120,000 per second. 892 nanoseconds per run. 5,020,000 per second. 199 nanoseconds per run. [(-1234 bitAnd: -5678125641253)] bench. 1,830,000 per second. 547 nanoseconds per run. 1,790,000 per second. 557 nanoseconds per run. [(-1234 bitAnd: 567812564128976768553)] bench. 984,000 per second. 1.02 microseconds per run. 2,320,000 per second. 431 nanoseconds per run. [(-1234 bitAnd: -567812564128976768553)] bench. 1,790,000 per second. 559 nanoseconds per run. 1,690,000 per second. 593 nanoseconds per run. =============== Diff against Kernel-mt.1014 =============== Item was changed: ----- Method: SmallInteger>>bitAnd: (in category 'bit manipulation') ----- bitAnd: arg "Primitive. Answer an Integer whose bits are the logical OR of the receiver's bits and those of the argument, arg. Numbers are interpreted as having 2's-complement representation. Essential. See Object documentation whatIsAPrimitive." self >= 0 ifTrue: [^ arg bitAnd: self]. + ^ arg < 0 + ifTrue: [(arg bitInvert bitOr: self bitInvert) bitInvert] + ifFalse: [arg bitClear: self bitInvert]! - ^ (self bitInvert bitOr: arg bitInvert) bitInvert! From nicolas.cellier.aka.nice at gmail.com Sat Apr 23 22:14:26 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sat Apr 23 22:14:47 2016 Subject: [squeak-dev] The Trunk: Kernel-nice.939.mcz In-Reply-To: References: <571bea61.d44c370a.7f584.ffffb1c3SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Done. Could an admin remove this version, it does not really make sense to merge it. Thanks 2016-04-23 23:39 GMT+02:00 Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com>: > Oops ! > It seems that I updated from 5.0 repository rather than trunk. > I've been away too long, let me redo it... > > 2016-04-23 23:34 GMT+02:00 : > >> Nicolas Cellier uploaded a new version of Kernel to project The Trunk: >> http://source.squeak.org/trunk/Kernel-nice.939.mcz >> >> ==================== Summary ==================== >> >> Name: Kernel-nice.939 >> Author: nice >> Time: 23 April 2016, 11:32:52.246 pm >> UUID: 4bdcd7ec-9c52-4b77-94e1-cf87a2ee35d5 >> Ancestors: Kernel-mt.938 >> >> Accelerate bitAnd: in case of negative small integer receiver and >> LargePositiveInteger operand. >> >> The timings before and after are: >> >> [(-1234 bitAnd: 5678)] bench. >> 161,000,000 per second. 6.22 nanoseconds per run. >> 161,000,000 per second. 6.2 nanoseconds per run. >> [(-1234 bitAnd: 5678125641253)] bench. >> 1,120,000 per second. 892 nanoseconds per run. >> 5,020,000 per second. 199 nanoseconds per run. >> [(-1234 bitAnd: -5678125641253)] bench. >> 1,830,000 per second. 547 nanoseconds per run. >> 1,790,000 per second. 557 nanoseconds per run. >> [(-1234 bitAnd: 567812564128976768553)] bench. >> 984,000 per second. 1.02 microseconds per run. >> 2,320,000 per second. 431 nanoseconds per run. >> [(-1234 bitAnd: -567812564128976768553)] bench. >> 1,790,000 per second. 559 nanoseconds per run. >> 1,690,000 per second. 593 nanoseconds per run. >> >> =============== Diff against Kernel-cmm.937 =============== >> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160424/e2a73b39/attachment.htm From lewis at mail.msen.com Sat Apr 23 22:28:07 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Apr 23 22:28:22 2016 Subject: [squeak-dev] The Trunk: Kernel-nice.939.mcz In-Reply-To: References: <571bea61.d44c370a.7f584.ffffb1c3SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <20160423222807.GA86823@shell.msen.com> On Sun, Apr 24, 2016 at 12:14:26AM +0200, Nicolas Cellier wrote: > Done. > Could an admin remove this version, it does not really make sense to merge it. > Thanks I deleted Kernel-nice.939.mcz Dave From leves at caesar.elte.hu Sun Apr 24 00:50:00 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Apr 24 00:50:17 2016 Subject: [squeak-dev] The Trunk: Kernel-nice.939.mcz In-Reply-To: References: <571bea61.d44c370a.7f584.ffffb1c3SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: On Sun, 24 Apr 2016, Nicolas Cellier wrote: > Done. > Could an admin remove this version, it does not really make sense to merge it. While only admins can delete packages from the Trunk, you can still move them to the Treated Inbox. Levente From nicolas.cellier.aka.nice at gmail.com Sun Apr 24 06:57:32 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sun Apr 24 06:57:35 2016 Subject: [squeak-dev] The Trunk: Kernel-nice.939.mcz In-Reply-To: References: <571bea61.d44c370a.7f584.ffffb1c3SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: 2016-04-24 2:50 GMT+02:00 Levente Uzonyi : > On Sun, 24 Apr 2016, Nicolas Cellier wrote: > > Done. >> Could an admin remove this version, it does not really make sense to >> merge it. >> > > While only admins can delete packages from the Trunk, you can still move > them to the Treated Inbox. > > Levente > > > Hi Levente, yes i can when they are in the inbox, but apparently not when already in trunk (or I missed something). That sounds reasonnable IMO. Nicolas -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160424/60e84942/attachment.htm From bernhard at pieber.com Sun Apr 24 12:17:00 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Sun Apr 24 12:17:05 2016 Subject: [squeak-dev] Running headless on a Mac In-Reply-To: <89BB0552-672C-401B-9864-4A96CCD8EDEA@gmail.com> References: <89BB0552-672C-401B-9864-4A96CCD8EDEA@gmail.com> Message-ID: <41B24826-B16A-4B4A-9CE6-5C5F7C23BE1C@pieber.com> Dear Squeakers, Should this work with current CogSpur VMs? I can?t make it work. I can run this and it opens a window shortly, and prints ?test" on the console: CogSpur.r3684.app/Contents/MacOS/Squeak Squeak5.1-15113.image test.st My test.st looks like this: Smalltalk runAndQuit: [FileStream stdout nextPutAll: ?test?; cr] However, if I run the following CogSpur.r3684.app/Contents/MacOS/Squeak -headless my Squeak5.1-15113.image test.st I get ?Error: No content to install? I also tried this: CogSpur.r3684.app/Contents/MacOS/Squeak -headless Squeak5.1-15113.image test.st I get ?Syntax Error: UndefinedObject y?, <<>> y@`Argument expected The same happens with an up-to-date trunk image. Any tips? Cheers, Bernhard > Am 01.02.2014 um 20:04 schrieb Eliot Miranda : > > Hi Frank, > > from the command line say e.g. > > /Applications/Cog.app/Contents/MacOs/Squeak -headless my image.image > > I'll email my startup script, which makes this much more convenient, real soon now. > > Eliot (phone) From lists at fniephaus.com Sun Apr 24 12:37:08 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Sun Apr 24 12:37:21 2016 Subject: [squeak-dev] Running headless on a Mac In-Reply-To: <41B24826-B16A-4B4A-9CE6-5C5F7C23BE1C@pieber.com> References: <89BB0552-672C-401B-9864-4A96CCD8EDEA@gmail.com> <41B24826-B16A-4B4A-9CE6-5C5F7C23BE1C@pieber.com> Message-ID: Hi Bernhard, The error message indicates that Squeak couldn't find your st file. You have to supply the full path to your test.st, e.g.: CogSpur.r3684.app/Contents/MacOS/Squeak -headless Squeak5.1-15113.image $(pwd)/test.st Hope this helps. Best, Fabio -- On Sun, Apr 24, 2016 at 2:17 PM Bernhard Pieber wrote: > Dear Squeakers, > > Should this work with current CogSpur VMs? I can?t make it work. > > I can run this and it opens a window shortly, and prints ?test" on the > console: > CogSpur.r3684.app/Contents/MacOS/Squeak Squeak5.1-15113.image test.st > > My test.st looks like this: > Smalltalk runAndQuit: [FileStream stdout nextPutAll: ?test?; cr] > > However, if I run the following > CogSpur.r3684.app/Contents/MacOS/Squeak -headless my Squeak5.1-15113.image > test.st > I get ?Error: No content to install? > > I also tried this: > CogSpur.r3684.app/Contents/MacOS/Squeak -headless Squeak5.1-15113.image > test.st > > I get ?Syntax Error: UndefinedObject y?, << character (ascii value 25) that is not normally used in code>>> y @ > `Argument expected > > The same happens with an up-to-date trunk image. > > Any tips? > > Cheers, > Bernhard > > > Am 01.02.2014 um 20:04 schrieb Eliot Miranda : > > > > Hi Frank, > > > > from the command line say e.g. > > > > /Applications/Cog.app/Contents/MacOs/Squeak -headless my image.image > > > > I'll email my startup script, which makes this much more convenient, > real soon now. > > > > Eliot (phone) > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160424/ce81b624/attachment.htm From bernhard at pieber.com Sun Apr 24 13:19:44 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Sun Apr 24 13:19:49 2016 Subject: [squeak-dev] Running headless on a Mac In-Reply-To: References: <89BB0552-672C-401B-9864-4A96CCD8EDEA@gmail.com> <41B24826-B16A-4B4A-9CE6-5C5F7C23BE1C@pieber.com> Message-ID: <6C01AC18-C02A-458C-9AA6-2FB7BDA9139D@pieber.com> Hi Fabio, Thanks for the tip. However, it does not change the behavior. A window always shows and I still get the same errors. Does -headless on OS X work for you? Cheers, Bernhard > Am 24.04.2016 um 14:37 schrieb Fabio Niephaus : > > Hi Bernhard, > > The error message indicates that Squeak couldn't find your st file. > You have to supply the full path to your test.st, e.g.: > > CogSpur.r3684.app/Contents/MacOS/Squeak -headless Squeak5.1-15113.image $(pwd)/test.st > > Hope this helps. > > Best, > Fabio > > -- > > On Sun, Apr 24, 2016 at 2:17 PM Bernhard Pieber wrote: > Dear Squeakers, > > Should this work with current CogSpur VMs? I can?t make it work. > > I can run this and it opens a window shortly, and prints ?test" on the console: > CogSpur.r3684.app/Contents/MacOS/Squeak Squeak5.1-15113.image test.st > > My test.st looks like this: > Smalltalk runAndQuit: [FileStream stdout nextPutAll: ?test?; cr] > > However, if I run the following > CogSpur.r3684.app/Contents/MacOS/Squeak -headless my Squeak5.1-15113.image test.st > I get ?Error: No content to install? > > I also tried this: > CogSpur.r3684.app/Contents/MacOS/Squeak -headless Squeak5.1-15113.image test.st > > I get ?Syntax Error: UndefinedObject y?, <<>> y @ `Argument expected > > The same happens with an up-to-date trunk image. > > Any tips? > > Cheers, > Bernhard > > > Am 01.02.2014 um 20:04 schrieb Eliot Miranda : > > > > Hi Frank, > > > > from the command line say e.g. > > > > /Applications/Cog.app/Contents/MacOs/Squeak -headless my image.image > > > > I'll email my startup script, which makes this much more convenient, real soon now. > > > > Eliot (phone) > > > From leves at caesar.elte.hu Sun Apr 24 13:43:48 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Apr 24 13:43:53 2016 Subject: [squeak-dev] The Trunk: Kernel-nice.939.mcz In-Reply-To: References: <571bea61.d44c370a.7f584.ffffb1c3SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: On Sun, 24 Apr 2016, Nicolas Cellier wrote: > Hi Levente, > yes i can when they are in the inbox, but apparently not when already in trunk (or I missed something). > That sounds reasonnable IMO. It seems to be an Admin-only feature as well. Levente > > Nicolas > > > From bernhard at pieber.com Sun Apr 24 13:45:32 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Sun Apr 24 13:45:37 2016 Subject: [squeak-dev] Re: Crash Dump on OS X (was: New Cog VMs available) In-Reply-To: <74D8C530-AE68-4252-B638-331897BF2EA6@pieber.com> References: <74D8C530-AE68-4252-B638-331897BF2EA6@pieber.com> Message-ID: Hi Eliot, I just found a way to reproduce it: Maximise the window by holding alt and click the green window button. Cheers, Bernhard > Am 24.04.2016 um 10:38 schrieb Bernhard Pieber : > > Hi Eliot, > > Thanks for your VMs. > > I just had a crash on OS X 10.11.4. Maybe it?s helpful: > > > Cheers, > Bernhard > >> Am 23.04.2016 um 21:48 schrieb Eliot Miranda : >> >> ... at http://www.mirandabanda.org/files/Cog/VM/VM.r3684 >> >> CogVM binaries as per VMMaker.oscog-eem.1834/r3684 >> >> General: >> Correct undue sign extension wile promoting 32 to 64 bits int in >> fetchLong64:ofObject: This was causing trouble in non spur object memory (V3). >> >> Fix slowdown of update on 64-bit x64 by using int variables for the tides in >> sqExternalSemaphores.c and inline assembler for the sqCompareAndSwap in >> sqAtomicOps.h. >> >> Fix slips in offset time primitives. They need to pop argumentCount + 1, not >> argumentCount. >> >> Define an optional primitive as the fast primitive fail code so that unselected >> optional primitives are in the prmitiveTable as fast primitive fails. >> >> >> Spur: >> Have WideString>>at: fail to answer an out-of-range character in the >> interpreter primitive (as well as in the JIT). >> >> Fix bug in following state on primitive failure. The old code would >> always follow to depth 1, even if the accessor depth was 0. >> Hard-code primitiveSize's depth to 0 (accessing length in at:[put:] >> and size causes the stack depth computation to answer 1 instead of >> 0 for these primitives. >> >> Fix assert and dequeueMourner for case where mournQueue is nil. >> >> - fixed a bug in receiver accessing in immutability primitive for >> mirror primitive. >> >> - change primitiveSetOrHasIdentityHash to patch the class table if >> the new hash is set to a behavior (the primitive knows it's a >> behavior if the second (optional) argument is true) >> For example: >> FullBlockClosure tryPrimitive: 161 withArgs: {38.true} >> >> No longer follow the method and context fields in a closure in >> activateNewClosureMethod:numArgs:mayContextSwitch:; the caller will >> have failed if these are forwarders, so no need to check again. >> >> >> Cogit: >> Add a primitive that answers pc map data for methods which can be >> used to better decorate methods in the VM Profiler. Refactor the pc >> map enumeration facilities so that the Sista pic data primitive can >> share the same enumerator. Do this by collapsing the >> isBackwardBranch and annotation parameters into a single parameter. >> >> Follow selectors in the openPICList post Spur become. >> >> Fix the ARM's caller-saved register mask now that we can name all the actual >> registers. >> >> Reworked machine code generation of immutability so for common stores it >> uses a single trampoline for both store checks and immutability checks. >> >> - improved support for register allocation: branch merge >> successfully compiled with register moved instead of spilling. >> >> Sista Cogit: >> Don't bother to add counters to conditional jumps implementing and: >> and or:. Added the remote inst var access bytecode in sista V1 >> bytecode set without interfering with existing code. >> >> >> Plugins: >> Upgrade LargeIntegersPlugin to v2.0 >> LargeInteger primitives now deal with 32-bits digits. No change to image code. >> >> Memory is 8 bytes aligned on Spur. When storing 32/64 bits large >> integers values, allways fill the eight bytes whatever the >> effectivily used size, rather than bother with dissertion of size. >> >> Generate integer type checking as C macros rather than direct/indirect >> interpreterProxy function call in plugins. This, and 32-bit accessing mean >> singificantly faster large integer arithmetic. >> >> Fix primAlienReplace to use positiveMachineIntegerValueOf: instead of >> positive32BitValueOf:. >> >> BitBltPlugin operates on 32bit word units, therefore it's better to declare its >> operands as 'unsigned int' rather than sqInt. On 32bit VM, this doesn't change >> anything, but on 64bits spur, it makes this snippet work: >> >> | wideString source pos blt expectedWideString | >> source := #[1 64 255 14 1 64 48 251]. >> expectedWideString := WideString fromByteArray: source. >> wideString := WideString new: source size // 4. >> pos := 0. >> blt := (BitBlt >> toForm: (Form new hackBits: wideString)) >> sourceForm: (Form new hackBits: source). >> blt >> combinationRule: Form over; >> sourceX: 0; >> sourceY: pos // 4; >> height: wideString byteSize // 4; >> width: 4; >> destX: 0; >> destY: 0; >> copyBits. >> wideString restoreEndianness. >> self assert: wideString = expectedWideString >> >> Hence it fixes loading/diffing MCZ with wide character. >> >> >> Mac OS Builds: >> Don't link with -fvisibility=hidden; it breaks external plugins. Use >> -fvisibility=default instead. This fixes e.g. UnixOSProcessPlugin on Mac OS X. >> >> >> Windows Builds: >> The Windows VMs are no longer "dpiAware". If you want one-to-one pixel mapping check the README for ins ructions. It's a simple edit. >> _,,,^..^,,,_ >> best, Eliot > From bernhard at pieber.com Sun Apr 24 14:34:51 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Sun Apr 24 14:34:56 2016 Subject: [squeak-dev] trunk update broken cuz there's an empty diffy version In-Reply-To: References: Message-ID: <8C0F572C-7DD7-49CC-97C9-6D90D33738F6@pieber.com> Dear fellow Squeakers, Here we go again. When I try to update the latest Squeak5.1-15113.image from http://ftp.squeak.org/5.1alpha using the latest CogSpur.r3684 on OS X with an empty package-cache I run into the Warning "About to serialize an empty diffy version.? This time with SMLoader-cmm.85(ul.83).mcd. I wonder if I am the only one. Cheers, Bernhard > Am 07.08.2014 um 19:52 schrieb Eliot Miranda : > > Hi Guys, > > source.squeak.org/trunk's Morphic-eem.740(cmm.739).mcd is empty. How do we fix it? > > On a related note is there any way to get the updater to download full packages, avoiding the diffy versions? e.g a preference? > -- > best, > Eliot > From leves at caesar.elte.hu Sun Apr 24 15:12:37 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Apr 24 15:12:40 2016 Subject: [squeak-dev] trunk update broken cuz there's an empty diffy version In-Reply-To: <8C0F572C-7DD7-49CC-97C9-6D90D33738F6@pieber.com> References: <8C0F572C-7DD7-49CC-97C9-6D90D33738F6@pieber.com> Message-ID: In this case the code in ul-83 and cmm-85 is the same, so the diff is expected to be empty. I wonder why is there a warning in such cases. Levente On Sun, 24 Apr 2016, Bernhard Pieber wrote: > Dear fellow Squeakers, > > Here we go again. When I try to update the latest Squeak5.1-15113.image from http://ftp.squeak.org/5.1alpha using the latest CogSpur.r3684 on OS X with an empty package-cache I run into the Warning "About to serialize an empty diffy version.? This time with SMLoader-cmm.85(ul.83).mcd. I wonder if I am the only one. > > Cheers, > Bernhard > >> Am 07.08.2014 um 19:52 schrieb Eliot Miranda : >> >> Hi Guys, >> >> source.squeak.org/trunk's Morphic-eem.740(cmm.739).mcd is empty. How do we fix it? >> >> On a related note is there any way to get the updater to download full packages, avoiding the diffy versions? e.g a preference? >> -- >> best, >> Eliot >> > > > From asqueaker at gmail.com Sun Apr 24 17:57:01 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Apr 24 17:57:44 2016 Subject: [squeak-dev] trunk update broken cuz there's an empty diffy version In-Reply-To: References: <8C0F572C-7DD7-49CC-97C9-6D90D33738F6@pieber.com> Message-ID: ul.83 is not a direct ancestor of cmm.85, so I would like to know what code is creating a mcd between those two and why.. The warning about serializing empty mcz is there because we never found the bug which was serializing empty mcz's. This warning is help us identify when and why it occurs, and also to prevent the bug from silently storing an empty mcz into the repository, possibly losing code and/or causing harm to trunk. On Sun, Apr 24, 2016 at 10:12 AM, Levente Uzonyi wrote: > In this case the code in ul-83 and cmm-85 is the same, so the diff is > expected to be empty. > I wonder why is there a warning in such cases. > > Levente > > > On Sun, 24 Apr 2016, Bernhard Pieber wrote: > >> Dear fellow Squeakers, >> >> Here we go again. When I try to update the latest Squeak5.1-15113.image >> from http://ftp.squeak.org/5.1alpha using the latest CogSpur.r3684 on OS X >> with an empty package-cache I run into the Warning "About to serialize an >> empty diffy version.? This time with SMLoader-cmm.85(ul.83).mcd. I wonder if >> I am the only one. >> >> Cheers, >> Bernhard >> >>> Am 07.08.2014 um 19:52 schrieb Eliot Miranda : >>> >>> Hi Guys, >>> >>> source.squeak.org/trunk's Morphic-eem.740(cmm.739).mcd is empty. How >>> do we fix it? >>> >>> On a related note is there any way to get the updater to download full >>> packages, avoiding the diffy versions? e.g a preference? >>> -- >>> best, >>> Eliot >>> >> >> > > > From leves at caesar.elte.hu Sun Apr 24 18:36:03 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Apr 24 18:36:08 2016 Subject: [squeak-dev] trunk update broken cuz there's an empty diffy version In-Reply-To: References: <8C0F572C-7DD7-49CC-97C9-6D90D33738F6@pieber.com> Message-ID: On Sun, 24 Apr 2016, Chris Muller wrote: > ul.83 is not a direct ancestor of cmm.85, so I would like to know what > code is creating a mcd between those two and why.. It's like that because you reverted the changes of dtl.84. > > The warning about serializing empty mcz is there because we never > found the bug which was serializing empty mcz's. This warning is help > us identify when and why it occurs, and also to prevent the bug from > silently storing an empty mcz into the repository, possibly losing > code and/or causing harm to trunk. But in this case the mcd has to be empty, because the code is identical, so the warning is nothing but noise and a thing to block the automatic update. Levente > > On Sun, Apr 24, 2016 at 10:12 AM, Levente Uzonyi wrote: >> In this case the code in ul-83 and cmm-85 is the same, so the diff is >> expected to be empty. >> I wonder why is there a warning in such cases. >> >> Levente >> >> >> On Sun, 24 Apr 2016, Bernhard Pieber wrote: >> >>> Dear fellow Squeakers, >>> >>> Here we go again. When I try to update the latest Squeak5.1-15113.image >>> from http://ftp.squeak.org/5.1alpha using the latest CogSpur.r3684 on OS X >>> with an empty package-cache I run into the Warning "About to serialize an >>> empty diffy version.? This time with SMLoader-cmm.85(ul.83).mcd. I wonder if >>> I am the only one. >>> >>> Cheers, >>> Bernhard >>> >>>> Am 07.08.2014 um 19:52 schrieb Eliot Miranda : >>>> >>>> Hi Guys, >>>> >>>> source.squeak.org/trunk's Morphic-eem.740(cmm.739).mcd is empty. How >>>> do we fix it? >>>> >>>> On a related note is there any way to get the updater to download full >>>> packages, avoiding the diffy versions? e.g a preference? >>>> -- >>>> best, >>>> Eliot >>>> >>> >>> >> >> >> > > From tim at rowledge.org Sun Apr 24 19:13:34 2016 From: tim at rowledge.org (tim Rowledge) Date: Sun Apr 24 19:13:37 2016 Subject: [squeak-dev] Scratch/Squeak on RaspberryPi.org front page Message-ID: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> (For those of you not on G+) Take a look at www.raspberrypi.org for the latest blog about Pi Squeak progress. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Spero nos familiares mansuros. = I hope we'll still be friends. From peter at ozzard.org Sun Apr 24 19:40:00 2016 From: peter at ozzard.org (Peter Crowther) Date: Sun Apr 24 19:40:03 2016 Subject: [squeak-dev] Scratch/Squeak on RaspberryPi.org front page In-Reply-To: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> References: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> Message-ID: Most impressive - thanks, Tim! - Peter On 24 April 2016 at 20:13, tim Rowledge wrote: > (For those of you not on G+) Take a look at www.raspberrypi.org for the > latest blog about Pi Squeak progress. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Useful Latin Phrases:- Spero nos familiares mansuros. = I hope we'll still > be friends. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160424/1fbb0c98/attachment.htm From bert at freudenbergs.de Sun Apr 24 19:51:23 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Sun Apr 24 19:51:27 2016 Subject: [squeak-dev] Scratch/Squeak on RaspberryPi.org front page In-Reply-To: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> References: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> Message-ID: <647AD7C0-FC3E-457C-8207-965971BE9A21@freudenbergs.de> > On 24.04.2016, at 21:13, tim Rowledge wrote: > > (For those of you not on G+) Take a look at www.raspberrypi.org for the latest blog about Pi Squeak progress. More specifically (once it falls off the main page), https://www.raspberrypi.org/blog/scratch-performance-raspberry-pi/ Congrats! - Bert - -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4207 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160424/9ccc6ea9/smime.bin From lewis at mail.msen.com Sun Apr 24 20:31:28 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Apr 24 20:31:31 2016 Subject: [squeak-dev] Scratch/Squeak on RaspberryPi.org front page In-Reply-To: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> References: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> Message-ID: <20160424203128.GA11342@shell.msen.com> On Sun, Apr 24, 2016 at 12:13:34PM -0700, tim Rowledge wrote: > (For those of you not on G+) Take a look at www.raspberrypi.org for the latest blog about Pi Squeak progress. > > tim That's really quite impressive! Dave From asqueaker at gmail.com Sun Apr 24 21:06:54 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Apr 24 21:07:36 2016 Subject: [squeak-dev] trunk update broken cuz there's an empty diffy version In-Reply-To: References: <8C0F572C-7DD7-49CC-97C9-6D90D33738F6@pieber.com> Message-ID: I fixed this case by replacing update-eem.333 with update-cmm.333 which loads dtl.84 in the interim. This should resolve Bernards issue. On Sun, Apr 24, 2016 at 1:36 PM, Levente Uzonyi wrote: > On Sun, 24 Apr 2016, Chris Muller wrote: > >> ul.83 is not a direct ancestor of cmm.85, so I would like to know what >> code is creating a mcd between those two and why.. > > > It's like that because you reverted the changes of dtl.84. > >> >> The warning about serializing empty mcz is there because we never >> found the bug which was serializing empty mcz's. This warning is help >> us identify when and why it occurs, and also to prevent the bug from >> silently storing an empty mcz into the repository, possibly losing >> code and/or causing harm to trunk. > > > But in this case the mcd has to be empty, because the code is identical, so > the warning is nothing but noise and a thing to block the automatic update. > > Levente > > >> >> On Sun, Apr 24, 2016 at 10:12 AM, Levente Uzonyi >> wrote: >>> >>> In this case the code in ul-83 and cmm-85 is the same, so the diff is >>> expected to be empty. >>> I wonder why is there a warning in such cases. >>> >>> Levente >>> >>> >>> On Sun, 24 Apr 2016, Bernhard Pieber wrote: >>> >>>> Dear fellow Squeakers, >>>> >>>> Here we go again. When I try to update the latest Squeak5.1-15113.image >>>> from http://ftp.squeak.org/5.1alpha using the latest CogSpur.r3684 on OS >>>> X >>>> with an empty package-cache I run into the Warning "About to serialize >>>> an >>>> empty diffy version.? This time with SMLoader-cmm.85(ul.83).mcd. I >>>> wonder if >>>> I am the only one. >>>> >>>> Cheers, >>>> Bernhard >>>> >>>>> Am 07.08.2014 um 19:52 schrieb Eliot Miranda : >>>>> >>>>> Hi Guys, >>>>> >>>>> source.squeak.org/trunk's Morphic-eem.740(cmm.739).mcd is empty. >>>>> How >>>>> do we fix it? >>>>> >>>>> On a related note is there any way to get the updater to download full >>>>> packages, avoiding the diffy versions? e.g a preference? >>>>> -- >>>>> best, >>>>> Eliot >>>>> >>>> >>>> >>> >>> >>> >> > > > From tim at rowledge.org Sun Apr 24 22:03:52 2016 From: tim at rowledge.org (tim Rowledge) Date: Sun Apr 24 22:03:57 2016 Subject: [squeak-dev] Scratch/Squeak on RaspberryPi.org front page In-Reply-To: <20160424203128.GA11342@shell.msen.com> References: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> <20160424203128.GA11342@shell.msen.com> Message-ID: > On 24-04-2016, at 1:31 PM, David T. Lewis wrote: > > That's really quite impressive! I think it shows just how much can be done to improve software with clever people and decent engineering and determination. The Pi/Scratch work has involved - lots of rewriting Squeak code to be more effective - lots of rewriting poorly chosen algorithms in the Scratch code - porting forward to the 4.5 system so we could use the stack VM - much detective work to dig out what used to happen so the new system can be made to do the same where needed (for example a current problem stems from a tiny change in how Warpblt reports a rotation center) - writing a Cog for ARM (which obviously relies immensely on Eliot?s work of many years) - a new ARM specific bitblt core - and not shown in those videos a new Pi GPIO pin driver to make it easy to make LEDs explode, buzzers to shriek, motors rev to catastrophe and nuclear power plants to melt down Lots of people on this list have contributed advice, bug fixes and improvements over the years. Thank you all - not just from me, but from the approximately 2.5 million kids that apparently regularly use Scratch on Pis in places from New York to York to Beirut to Euxton to rural India, China and Africa. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Immune from any serious head injury. From lecteur at zogotounga.net Mon Apr 25 14:45:39 2016 From: lecteur at zogotounga.net (=?UTF-8?Q?St=c3=a9phane_Rollandin?=) Date: Mon Apr 25 14:45:36 2016 Subject: [squeak-dev] Scratch/Squeak on RaspberryPi.org front page In-Reply-To: References: <94C7D17A-4C0F-4CE0-A2EF-A5733E27C8E0@rowledge.org> <20160424203128.GA11342@shell.msen.com> Message-ID: <571E2D93.2020504@zogotounga.net> So, can we load this Scratch in a trunk image ? Stef From commits at source.squeak.org Tue Apr 26 00:15:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 26 00:15:09 2016 Subject: [squeak-dev] The Trunk: Collections-ul.690.mcz Message-ID: Levente Uzonyi uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-ul.690.mcz ==================== Summary ==================== Name: Collections-ul.690 Author: ul Time: 26 April 2016, 2:03:24.991845 am UUID: a58318cb-049e-4741-b337-541b33eb99e7 Ancestors: Collections-cbc.689 - use #basicAt: for string access in the remaining misc primitives - give up on the nil matchTable in ByteString >> #findSubstring:in:startingAt:matchTable: - slightly faster ReadStream >> #upTo: for strings - optimized version of ReadStream >> #skipTo: (this may break #skipTo: for its subclasses, but those shouldn't really exist in the first place) =============== Diff against Collections-cbc.689 =============== Item was changed: ----- Method: ByteString class>>findFirstInString:inSet:startingAt: (in category 'primitives') ----- findFirstInString: aString inSet: inclusionMap startingAt: start | i stringSize | inclusionMap size ~= 256 ifTrue: [ ^0 ]. i := start. stringSize := aString size. + [ i <= stringSize and: [ (inclusionMap at: (aString basicAt: i) + 1) = 0 ] ] whileTrue: [ - [ i <= stringSize and: [ (inclusionMap at: (aString at: i) asciiValue+1) = 0 ] ] whileTrue: [ i := i + 1 ]. i > stringSize ifTrue: [ ^0 ]. ^i! Item was changed: ----- Method: ByteString class>>indexOfAscii:inString:startingAt: (in category 'primitives') ----- indexOfAscii: anInteger inString: aString startingAt: start | stringSize | stringSize := aString size. start to: stringSize do: [:pos | + (aString basicAt: pos) = anInteger ifTrue: [^ pos]]. - (aString at: pos) asciiValue = anInteger ifTrue: [^ pos]]. ^ 0 ! Item was changed: ----- Method: ByteString class>>stringHash:initialHash: (in category 'primitives') ----- stringHash: aString initialHash: speciesHash | stringSize hash low | stringSize := aString size. hash := speciesHash bitAnd: 16rFFFFFFF. 1 to: stringSize do: [:pos | + hash := hash + (aString basicAt: pos). - hash := hash + (aString at: pos) asciiValue. "Begin hashMultiply" low := hash bitAnd: 16383. hash := (16r260D * low + ((16r260D * (hash bitShift: -14) + (16r0065 * low) bitAnd: 16383) * 16384)) bitAnd: 16r0FFFFFFF. ]. ^ hash! Item was changed: ----- Method: ByteString class>>translate:from:to:table: (in category 'primitives') ----- translate: aString from: start to: stop table: table "translate the characters in the string by the given table, in place" start to: stop do: [ :i | + aString at: i put: (table at: (aString basicAt: i) + 1) ]! - aString at: i put: (table at: (aString at: i) asciiValue+1) ]! Item was changed: ----- Method: ByteString>>findSubstring:in:startingAt:matchTable: (in category 'comparing') ----- findSubstring: key in: body startingAt: start matchTable: matchTable "Answer the index in the string body at which the substring key first occurs, at or beyond start. The match is determined using matchTable, which can be used to effect, eg, case-insensitive matches. If no match is found, zero will be returned. The algorithm below is not optimum -- it is intended to be translated to C which will go so fast that it wont matter." | index | key size = 0 ifTrue: [^ 0]. - matchTable ifNil: [ - start to: body size - key size + 1 do: [ :startIndex | - index := 0. - [ (body at: startIndex + index) == (key at: (index := index + 1)) ] whileTrue: [ - index = key size ifTrue: [ ^startIndex ] ] ]. - ^0 ]. (start max: 1) to: body size - key size + 1 do: [:startIndex | index := 1. + [(matchTable at: (body basicAt: startIndex+index-1) + 1) + = (matchTable at: (key basicAt: index) + 1)] - [(matchTable at: (body at: startIndex+index-1) asciiValue + 1) - = (matchTable at: (key at: index) asciiValue + 1)] whileTrue: [index = key size ifTrue: [^ startIndex]. index := index+1]]. ^ 0 " ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 1 matchTable: CaseSensitiveOrder 1 ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 2 matchTable: CaseSensitiveOrder 7 ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 8 matchTable: CaseSensitiveOrder 0 ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseSensitiveOrder 0 ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseInsensitiveOrder 7 "! Item was added: + ----- Method: ReadStream>>skipTo: (in category 'accessing') ----- + skipTo: anObject + "fast version using indexOf:" + + (position := collection indexOf: anObject startingAt: position + 1) = 0 ifTrue: [ + "not present. consume all characters" + position := readLimit. + ^false ]. + ^true! Item was changed: ----- Method: ReadStream>>upTo: (in category 'accessing') ----- upTo: anObject "fast version using indexOf:" | start end | start := position+1. + end := collection indexOf: anObject startingAt: start. - end := collection indexOf: anObject startingAt: start ifAbsent: [ 0 ]. "not present--return rest of the collection" (end = 0 or: [end > readLimit]) ifTrue: [ ^self upToEnd ]. "skip to the end and return the data passed over" position := end. ^collection copyFrom: start to: (end-1)! From commits at source.squeak.org Tue Apr 26 00:15:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 26 00:16:02 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Tests-ul.18.mcz Message-ID: Levente Uzonyi uploaded a new version of HelpSystem-Tests to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Tests-ul.18.mcz ==================== Summary ==================== Name: HelpSystem-Tests-ul.18 Author: ul Time: 26 April 2016, 2:13:51.893987 am UUID: 332f327a-0a72-45fb-98e1-5c7c1b5758d7 Ancestors: HelpSystem-Tests-kfr.17 Don't leave the window open after running HelpBrowserTest >> #testOpen. =============== Diff against HelpSystem-Tests-kfr.17 =============== Item was changed: ----- Method: HelpBrowserTest>>testOpen (in category 'testing') ----- testOpen + + | browser | + [ + "This should not throw an exception." + browser := self defaultTestClass open. + World doOneCycleNow ] + ensure: [ + browser ifNotNil: [ browser delete ] ]! - |browser| - "This should not throw an exception." - browser := self defaultTestClass open. - World doOneCycleNow. - browser changed: #close.! From commits at source.squeak.org Tue Apr 26 00:16:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Apr 26 00:16:57 2016 Subject: [squeak-dev] The Trunk: System-ul.819.mcz Message-ID: Levente Uzonyi uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-ul.819.mcz ==================== Summary ==================== Name: System-ul.819 Author: ul Time: 26 April 2016, 2:01:42.418403 am UUID: 0bfbfa2e-33dc-438d-90c1-813150917dac Ancestors: System-mt.818 Added DummyStream >> #next:putAll:startingAt:. =============== Diff against System-mt.818 =============== Item was added: + ----- Method: DummyStream>>next:putAll:startingAt: (in category 'accessing') ----- + next: anInteger putAll: aCollection startingAt: anInteger3 + + ^aCollection! From ma.chris.m at gmail.com Tue Apr 26 19:03:39 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Tue Apr 26 19:04:40 2016 Subject: [squeak-dev] Explorer colors question Message-ID: Smalltalk explore "do it" Explorer appears, the selection is on the top line. Now press up arrow. The selection turns yellow / blue. What does it mean? From karlramberg at gmail.com Tue Apr 26 19:25:33 2016 From: karlramberg at gmail.com (karl ramberg) Date: Tue Apr 26 19:25:57 2016 Subject: [squeak-dev] Explorer colors question In-Reply-To: References: Message-ID: It's monitoring changes to the selection. See bottom context menu item Best, Karl On Tue, Apr 26, 2016 at 9:03 PM, Chris Muller wrote: > Smalltalk explore "do it" > > Explorer appears, the selection is on the top line. > > Now press up arrow. The selection turns yellow / blue. > > What does it mean? > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160426/4a9745e0/attachment.htm From asqueaker at gmail.com Tue Apr 26 20:53:45 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Apr 26 20:54:28 2016 Subject: [squeak-dev] Explorer colors question In-Reply-To: References: Message-ID: I didn't select that menu item, but in any case, what "change" would happen to the Smalltalk global just by navigating it; even just the up-arrow does not modify Smalltalk at all, so why does it think it changed? It happens all the time in normal navigation usage and its kind of distracting. If it worked it might be nice but... is it working? When I do select "monitor changes" then if I try to expand the tree ('globals' inst var), it keeps collapsing it... On Tue, Apr 26, 2016 at 2:25 PM, karl ramberg wrote: > It's monitoring changes to the selection. > See bottom context menu item > > Best, > Karl > > On Tue, Apr 26, 2016 at 9:03 PM, Chris Muller wrote: >> >> Smalltalk explore "do it" >> >> Explorer appears, the selection is on the top line. >> >> Now press up arrow. The selection turns yellow / blue. >> >> What does it mean? >> > > > > From asqueaker at gmail.com Tue Apr 26 20:59:37 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Apr 26 21:00:22 2016 Subject: [squeak-dev] Explorer colors question In-Reply-To: References: Message-ID: 'hello'->'world' "explore it" Press up arrow. Changes to yellow. Press down arrow three times, 'world' change to yellow/blue. Now close that one and explore it again. This time, execute in the explorer: self value: 'there' No change of colors or anything in the explorer, unless you click the bottom one, and then press down-arrow. But that's just the same behavior in all cases, whether it changed or not... On Tue, Apr 26, 2016 at 2:25 PM, karl ramberg wrote: > It's monitoring changes to the selection. > See bottom context menu item > > Best, > Karl > > On Tue, Apr 26, 2016 at 9:03 PM, Chris Muller wrote: >> >> Smalltalk explore "do it" >> >> Explorer appears, the selection is on the top line. >> >> Now press up arrow. The selection turns yellow / blue. >> >> What does it mean? >> > > > > From leves at caesar.elte.hu Tue Apr 26 22:37:48 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Apr 26 22:37:54 2016 Subject: [squeak-dev] Re: [Vm-dev] New Cog VMs available In-Reply-To: References: Message-ID: Hi Holger, I ran the Shootout benchmarks[1] which I'd recently updated on cogspurlinuxht 3397 and 3648 using the latest Squeak Trunk image, and the latter performed better in three benchmarks: reverseComplement (-20%), pidigits (-30%) and fasta (-40%). For the rest, the performance of the two VMs were the same. So, I suspect there's an area not covered by these benchmarks where you experience the slowdown. Or there's some other difference responsible for the slowdown. Can you tell us more about your benchmark? Have you tried profiling it? Levente [1] http://leves.web.elte.hu/squeak/Shootout-ul.19.mcz From commits at source.squeak.org Wed Apr 27 18:24:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 27 18:24:03 2016 Subject: [squeak-dev] The Trunk: Morphic-cmm.1123.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1123.mcz ==================== Summary ==================== Name: Morphic-cmm.1123 Author: cmm Time: 27 April 2016, 1:22:50.860329 pm UUID: cecf8344-3af9-4811-a7da-39bb25d305d1 Ancestors: Morphic-cmm.1116, Morphic-bf.1122 Merge cmm.1116. =============== Diff against Morphic-bf.1122 =============== Item was changed: ----- Method: AlternatePluggableListMorphOfMany>>mouseMove: (in category 'event handling') ----- mouseMove: event "The mouse has moved, as characterized by the event provided. Adjust the scrollbar, and alter the selection as appropriate" | oldIndex oldVal row | event position y < self top ifTrue: [scrollBar scrollUp: 1. row := self rowAtLocation: scroller topLeft + (1 @ 1)] ifFalse: [row := event position y > self bottom ifTrue: [scrollBar scrollDown: 1. self rowAtLocation: scroller bottomLeft + (1 @ -1)] ifFalse: [ self rowAtLocation: event position]]. row = 0 ifTrue: [^super mouseDown: event]. model okToChange ifFalse: [^self]. "No change if model is locked" "Set meaning for subsequent dragging of selection" oldIndex := self getCurrentSelectionIndex. oldIndex ~= 0 ifTrue: [oldVal := self listSelectionAt: oldIndex]. "Need to restore the old one, due to how model works, and set new one." oldIndex ~= 0 ifTrue: [self listSelectionAt: oldIndex put: oldVal]. "Inform model of selected item and let it toggle." self changeModelSelection: (self modelIndexFor: row) shifted: true + controlled: true. - controlled: event controlKeyPressed. submorphs do: [:each | each changed]! Item was changed: ----- Method: PluggableListMorph>>charactersOccluded (in category 'geometry') ----- charactersOccluded "Answer the number of characters occluded in my #visibleList by my right edge." | listIndex | listIndex:=0. ^ self visibleList inject: 0 into: [ : sum : each | | eachString totalWidth indexOfLastVisible iconWidth | totalWidth:=0. eachString := each asString "withBlanksTrimmed". iconWidth := (self iconAt: (listIndex := listIndex+1)) ifNil:[0] ifNotNil: [ : icon | icon width+2 ]. indexOfLastVisible := ((1 to: eachString size) detect: [ : stringIndex | (totalWidth:=totalWidth+(self font widthOf: (eachString at: stringIndex))) > (self width - (scrollBar ifNil: [ 0 ] ifNotNil: [ scrollBar width ]) - iconWidth) ] ifNone: [ eachString size + 1 ]) - 1. + sum + ((eachString size - indexOfLastVisible) min: 10) ]! - sum + (eachString size - indexOfLastVisible) ]! From commits at source.squeak.org Wed Apr 27 18:24:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 27 18:26:05 2016 Subject: [squeak-dev] The Trunk: Morphic-cmm.1116.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1116.mcz ==================== Summary ==================== Name: Morphic-cmm.1116 Author: cmm Time: 18 April 2016, 6:38:47.481742 pm UUID: ae46aa73-c96e-41c2-888f-9d3fe8e1b924 Ancestors: Morphic-mt.1115 - Use the "isControlled" variable to instead indicate whether it came from a mouse move event. This proves useful to at least one model for implementing a desired UI behavior. - For vertical smart-splitters, don't let any single line complain any more than 10-characters worth of occlusion, so that extra long lines of a list will not over-dominate the adjacent widgets. =============== Diff against Morphic-mt.1115 =============== Item was changed: ----- Method: AlternatePluggableListMorphOfMany>>mouseMove: (in category 'event handling') ----- mouseMove: event "The mouse has moved, as characterized by the event provided. Adjust the scrollbar, and alter the selection as appropriate" | oldIndex oldVal row | event position y < self top ifTrue: [scrollBar scrollUp: 1. row := self rowAtLocation: scroller topLeft + (1 @ 1)] ifFalse: [row := event position y > self bottom ifTrue: [scrollBar scrollDown: 1. self rowAtLocation: scroller bottomLeft + (1 @ -1)] ifFalse: [ self rowAtLocation: event position]]. row = 0 ifTrue: [^super mouseDown: event]. model okToChange ifFalse: [^self]. "No change if model is locked" "Set meaning for subsequent dragging of selection" oldIndex := self getCurrentSelectionIndex. oldIndex ~= 0 ifTrue: [oldVal := self listSelectionAt: oldIndex]. "Need to restore the old one, due to how model works, and set new one." oldIndex ~= 0 ifTrue: [self listSelectionAt: oldIndex put: oldVal]. "Inform model of selected item and let it toggle." self changeModelSelection: (self modelIndexFor: row) shifted: true + controlled: true. - controlled: event controlKeyPressed. submorphs do: [:each | each changed]! Item was changed: ----- Method: PluggableListMorph>>charactersOccluded (in category 'geometry') ----- charactersOccluded "Answer the number of characters occluded in my #visibleList by my right edge." | listIndex | listIndex:=0. ^ self visibleList inject: 0 into: [ : sum : each | | eachString totalWidth indexOfLastVisible iconWidth | totalWidth:=0. eachString := each asString "withBlanksTrimmed". iconWidth := (self iconAt: (listIndex := listIndex+1)) ifNil:[0] ifNotNil: [ : icon | icon width+2 ]. indexOfLastVisible := ((1 to: eachString size) detect: [ : stringIndex | (totalWidth:=totalWidth+(self font widthOf: (eachString at: stringIndex))) > (self width - (scrollBar ifNil: [ 0 ] ifNotNil: [ scrollBar width ]) - iconWidth) ] ifNone: [ eachString size + 1 ]) - 1. + sum + ((eachString size - indexOfLastVisible) min: 10) ]! - sum + (eachString size - indexOfLastVisible) ]! From commits at source.squeak.org Wed Apr 27 18:28:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 27 18:30:03 2016 Subject: [squeak-dev] The Trunk: Tools-cmm.694.mcz Message-ID: Chris Muller uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-cmm.694.mcz ==================== Summary ==================== Name: Tools-cmm.694 Author: cmm Time: 18 April 2016, 6:40:45.920095 pm UUID: 266d5d98-3fe1-424e-9786-bb3ab191b464 Ancestors: Tools-cmm.693 - Minor update to UI help element; now simply identifies itself. - When a single message is selected in a MessageTrace, clicking it now deselects it so that all methods in the trace can be filed out. =============== Diff against Tools-cmm.693 =============== Item was changed: ----- Method: Inspector>>buildValuePaneWith: (in category 'toolbuilder') ----- buildValuePaneWith: builder | textSpec | textSpec := builder pluggableTextSpec new. textSpec model: self; getText: #contents; setText: #accept:; + help: 'Selection details.'; - help: 'Select a field on the left.'; selection: #contentsSelection; menu: #codePaneMenu:shifted:. ^textSpec! Item was changed: ----- Method: MessageTrace>>addChildMessages:autoSelectString: (in category 'building') ----- addChildMessages: methodReferences autoSelectString: aString + | currentIndentionLevel addables selectables selectableString newAnchor | - | currentIndentionLevel addables selectables selectableString | selectableString := aString keywords ifEmpty: [ String empty ] ifNotEmptyDo: [ : keywords | keywords first ]. [ (messageListIndex between: 1 and: autoSelectStrings size) ] whileFalse: [ autoSelectStrings add: selectableString ]. autoSelectStrings at: messageListIndex put: selectableString. currentIndentionLevel := self currentIndentionLevel. "Don't add mulitple copies of the same method, if a method is already in the list we will merely select it." addables := methodReferences reject: [ : each | messageList includes: each ]. addables do: [ : each | each stringVersion: (self indentionPrefixOfSize: currentIndentionLevel + 1) , each asStringOrText. messageList add: each afterIndex: self messageListIndex. autoSelectStrings add: nil afterIndex: self messageListIndex. messageSelections add: false afterIndex: self messageListIndex ]. selectables := addables copy addAll: (methodReferences select: [ : each | messageList includes: each ]) ; yourself. self deselectAll. + anchorIndex := nil. selectables do: [ : each | self + messageAt: (newAnchor := messageList indexOf: each) + beSelected: true. + anchorIndex ifNil: [ anchorIndex := newAnchor ] ]. - messageAt: (messageList indexOf: each) - beSelected: true ]. self changed: #messageList. "Select the first child method." self messageListIndex: (selectables size > 0 ifTrue: [ messageList indexOf: selectables last ] ifFalse: [ messageList ifEmpty: [ 0 ] ifNotEmpty: [ 1 ] ])! Item was changed: ----- Method: MessageTrace>>toggleSelectionAt:shifted:controlled: (in category 'actions') ----- + toggleSelectionAt: anInteger shifted: isShifted controlled: isMouseDragging + anInteger = 0 ifTrue: [ ^ nil ]. + (isMouseDragging not and: [anInteger = anchorIndex and: [ (messageSelections occurrencesOf: true) = 1 ]]) + ifTrue: + [ self toggleMessageSelectionAt: anInteger. + anchorIndex := nil. + self messageListIndex: 0 ] + ifFalse: - toggleSelectionAt: currentPosition shifted: isShifted controlled: isControlled - - currentPosition = 0 ifTrue: [ ^nil ]. - isControlled - ifTrue: - [ isShifted - ifTrue: - [ self selectAllBetweenAnchorAnd: currentPosition ] - ifFalse: - [ self toggleMessageSelectionAt: currentPosition. - anchorIndex := currentPosition ] ] - ifFalse: [ self deselectAll. isShifted + ifTrue: [ self selectAllBetweenAnchorAnd: anInteger ] - ifTrue: - [ self selectAllBetweenAnchorAnd: currentPosition ] ifFalse: + [ self + messageAt: anInteger - [ self - messageAt: currentPosition beSelected: true. + anchorIndex := anInteger ]. + self messageListIndex: anInteger ]! - anchorIndex := currentPosition ] ]. - self messageListIndex: currentPosition - ! From commits at source.squeak.org Wed Apr 27 18:29:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 27 18:30:29 2016 Subject: [squeak-dev] The Trunk: Tools-cmm.695.mcz Message-ID: Chris Muller uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-cmm.695.mcz ==================== Summary ==================== Name: Tools-cmm.695 Author: cmm Time: 27 April 2016, 1:28:48.62735 pm UUID: 526018d5-a5c7-48a5-832b-aedc6a3ffd1d Ancestors: Tools-cmm.694, Tools-bf.694 Merge cmm.694. =============== Diff against Tools-cmm.694 =============== Item was changed: ----- Method: Workspace>>acceptDroppingMorph:event:inMorph: (in category 'drag and drop') ----- acceptDroppingMorph: dropee event: evt inMorph: targetMorph "Return the dropee to its old position, and add a reference to it at the cursor point." | bindingName externalName reference | (dropee isKindOf: TransferMorph) ifTrue: [reference := dropee passenger. externalName := dropee passenger className] ifFalse: [reference := dropee. dropee externalName]. externalName := externalName isOctetString ifTrue: [externalName] ifFalse: ['a' , externalName]. bindingName := externalName withFirstCharacterDownshifted , reference identityHash printString. targetMorph correctSelectionWithString: bindingName , ' '. (self bindingOf: bindingName) value: reference. + (dropee isKindOf: TransferMorph) + ifFalse: [dropee rejectDropMorphEvent: evt]. - dropee rejectDropMorphEvent: evt. ^ true"success"! Item was changed: ----- Method: Workspace>>wantsDroppedMorph:event:inMorph: (in category 'drag and drop') ----- wantsDroppedMorph: dropee event: evt inMorph: target + ^ acceptDroppedMorphs or: [dropee isKindOf: TransferMorph] - ^ acceptDroppedMorphs ! From commits at source.squeak.org Wed Apr 27 18:47:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 27 18:47:46 2016 Subject: [squeak-dev] The Trunk: System-cmm.820.mcz Message-ID: Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.820.mcz ==================== Summary ==================== Name: System-cmm.820 Author: cmm Time: 27 April 2016, 1:46:21.665246 pm UUID: a30bc5d7-68d0-4c48-a929-6fe8c5e3a32e Ancestors: System-ul.819 - Make reference to the new automaticTimezone preference from the useLocal preference description. - Guard from error after the "There is no inheritance of someSelector" popup. =============== Diff against System-ul.819 =============== Item was changed: ----- Method: Locale class>>initialize (in category 'class initialization') ----- initialize "Locale initialize" - Smalltalk addToStartUpList: Locale. + Preferences + addPreference: #useLocale + categories: #('general' ) + default: false + balloonHelp: 'Use the system locale to set the system language, etc., at startup. For time-zone handling, see automaticTimezone.'! - Preferences addPreference: #useLocale - categories: #('general') default: false - balloonHelp: 'Use the system locale to set the system language etc at startup'.! Item was changed: ----- Method: SystemNavigation>>methodHierarchyBrowserForClass:selector: (in category 'browse') ----- methodHierarchyBrowserForClass: aClass selector: selectorSymbol "Create and schedule a message set browser on all implementors of the currently selected message selector. Do nothing if no message is selected." "SystemNavigation default methodHierarchyBrowserForClass: ParagraphEditor selector: #isControlActive" + | list aClassNonMeta isMeta tab compiledMethod window | - | list aClassNonMeta isMeta tab | aClass ifNil: [^ self]. aClass isTrait ifTrue: [^ self]. selectorSymbol ifNil: [^ self]. aClassNonMeta := aClass theNonMetaClass. isMeta := aClassNonMeta ~~ aClass. list := OrderedCollection new. tab := ''. aClass allSuperclasses reverseDo: [:cl | (cl includesSelector: selectorSymbol) ifTrue: [list addLast: tab , cl name, ' ', selectorSymbol]. tab := tab , ' ']. aClassNonMeta allSubclassesWithLevelDo: [:cl :level | | theClassOrMeta stab | theClassOrMeta := isMeta ifTrue: [cl class] ifFalse: [cl]. (theClassOrMeta includesSelector: selectorSymbol) ifTrue: [stab := ''. 1 to: level do: [:i | stab := stab , ' ']. list addLast: tab , stab , theClassOrMeta name, ' ', selectorSymbol]] startingLevel: 0. + window := self browseMessageList: list name: 'Inheritance of ' , selectorSymbol. + window isSystemWindow ifTrue: + [ window model + deselectAll ; + yourself. + compiledMethod := aClass compiledMethodAt: selectorSymbol ifAbsent:[nil]. + compiledMethod ifNotNil: [ window model selectReference: compiledMethod methodReference ] ]! - (self browseMessageList: list name: 'Inheritance of ' , selectorSymbol - ) model - deselectAll ; - selectReference: (aClass>>selectorSymbol) methodReference! From lists at fniephaus.com Wed Apr 27 19:32:11 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Apr 27 19:32:23 2016 Subject: [squeak-dev] Running headless on a Mac In-Reply-To: <6C01AC18-C02A-458C-9AA6-2FB7BDA9139D@pieber.com> References: <89BB0552-672C-401B-9864-4A96CCD8EDEA@gmail.com> <41B24826-B16A-4B4A-9CE6-5C5F7C23BE1C@pieber.com> <6C01AC18-C02A-458C-9AA6-2FB7BDA9139D@pieber.com> Message-ID: What window is still showing up? Are you sure your absolute path to your .st is correct? Cheers, Fabio -- On Sun, Apr 24, 2016 at 3:19 PM Bernhard Pieber wrote: > Hi Fabio, > > Thanks for the tip. However, it does not change the behavior. A window > always shows and I still get the same errors. Does -headless on OS X work > for you? > > Cheers, > Bernhard > > > Am 24.04.2016 um 14:37 schrieb Fabio Niephaus : > > > > Hi Bernhard, > > > > The error message indicates that Squeak couldn't find your st file. > > You have to supply the full path to your test.st, e.g.: > > > > CogSpur.r3684.app/Contents/MacOS/Squeak -headless Squeak5.1-15113.image > $(pwd)/test.st > > > > Hope this helps. > > > > Best, > > Fabio > > > > -- > > > > On Sun, Apr 24, 2016 at 2:17 PM Bernhard Pieber > wrote: > > Dear Squeakers, > > > > Should this work with current CogSpur VMs? I can?t make it work. > > > > I can run this and it opens a window shortly, and prints ?test" on the > console: > > CogSpur.r3684.app/Contents/MacOS/Squeak Squeak5.1-15113.image test.st > > > > My test.st looks like this: > > Smalltalk runAndQuit: [FileStream stdout nextPutAll: ?test?; cr] > > > > However, if I run the following > > CogSpur.r3684.app/Contents/MacOS/Squeak -headless my > Squeak5.1-15113.image test.st > > I get ?Error: No content to install? > > > > I also tried this: > > CogSpur.r3684.app/Contents/MacOS/Squeak -headless Squeak5.1-15113.image > test.st > > > > I get ?Syntax Error: UndefinedObject y?, << character (ascii value 25) that is not normally used in code>>> y @ > `Argument expected > > > > The same happens with an up-to-date trunk image. > > > > Any tips? > > > > Cheers, > > Bernhard > > > > > Am 01.02.2014 um 20:04 schrieb Eliot Miranda >: > > > > > > Hi Frank, > > > > > > from the command line say e.g. > > > > > > /Applications/Cog.app/Contents/MacOs/Squeak -headless my image.image > > > > > > I'll email my startup script, which makes this much more convenient, > real soon now. > > > > > > Eliot (phone) > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160427/a9b7ca70/attachment.htm From timfelgentreff at gmail.com Wed Apr 27 19:37:29 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Wed Apr 27 19:37:52 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? Message-ID: Hi, We have a proposal for a tool that we think might be useful to have in trunk. We spent some time pulling together benchmarks from various sources (papers, the mailinglist, projects on squeaksource, ...) and combining them with an extended version of Stefan Marr's implementation of a benchmarking framework SMark. The tool and framework are modeled after SUnit, and include different execution suites and code to figure out confidence variations over multiple runs and such. Also, it draws graphs over multiple runs so you can look at things like warmup and GC behavior, and see how much time is spent doing incremental GCs and full GCs vs plain execution. As a part of this I fixed the EPS export so these graphs can be exported in a scalable format. Here is a picture of the tool: https://dl.dropboxusercontent.com/u/26242153/screenshot.jpg As I said, it's modeled after TestRunner and SUnit, benchmarks subclass from the "Benchmark" class, any method starting with "bench" is a benchmark, and you can have setUp and tearDown methods as usual. By default the benchmarks are run under an Autosize runner that re-executes each benchmark until the combined runtime reaches 600ms (to smooth out any noise). Beyond that, you can specify a number of iterations that the runner will re-do that to see multiple averaged runs. The graph shows the execution times split between running code (gray) incremental GCs (yellow) and full GCs (red). There are popups and you can scroll to zoom in and out. There is also a history of benchmark runs stored on the class side of benchmark classes for later reference. The code currently lives here: http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/BenchmarkRunner Considering we are every so often discussing benchmark results here, I think it might be useful to share an execution framework for those. cheers, Tim -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160427/c91f0a28/attachment.htm From commits at source.squeak.org Wed Apr 27 21:55:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Apr 27 21:55:54 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160427215553.24435.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/025187.html Name: Morphic-cmm.1123 Ancestors: Morphic-cmm.1116, Morphic-bf.1122 Merge cmm.1116. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025188.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025189.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025190.html Name: Morphic-cmm.1116 Ancestors: Morphic-mt.1115 - Use the "isControlled" variable to instead indicate whether it came from a mouse move event. This proves useful to at least one model for implementing a desired UI behavior. - For vertical smart-splitters, don't let any single line complain any more than 10-characters worth of occlusion, so that extra long lines of a list will not over-dominate the adjacent widgets. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025191.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025192.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025193.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025194.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025195.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025196.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025197.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025198.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025199.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025200.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025201.html Name: Tools-cmm.694 Ancestors: Tools-cmm.693 - Minor update to UI help element; now simply identifies itself. - When a single message is selected in a MessageTrace, clicking it now deselects it so that all methods in the trace can be filed out. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025202.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025203.html Name: Tools-cmm.695 Ancestors: Tools-cmm.694, Tools-bf.694 Merge cmm.694. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025204.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025205.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025206.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025207.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025208.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025209.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025210.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025211.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025212.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025213.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025214.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025215.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025216.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025217.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025218.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025219.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025220.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025221.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025222.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025223.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025224.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025225.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025226.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025227.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025228.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025229.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025230.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025231.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025232.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025233.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025234.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025235.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025236.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025237.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025238.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025239.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025240.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025241.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025242.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025243.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025244.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025245.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025246.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025247.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025248.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025249.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025250.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025251.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025252.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025253.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025254.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025255.html Name: System-cmm.820 Ancestors: System-ul.819 - Make reference to the new automaticTimezone preference from the useLocal preference description. - Guard from error after the "There is no inheritance of someSelector" popup. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025256.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025257.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025258.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025259.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025260.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025261.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025262.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025263.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025264.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025265.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025266.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025267.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025268.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025269.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025270.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025271.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025272.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025273.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025274.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025275.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025276.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025277.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025278.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025279.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025280.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025281.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025282.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025283.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025284.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025285.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025286.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025287.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025288.html ============================================= From eliot.miranda at gmail.com Wed Apr 27 22:44:28 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Apr 27 22:44:34 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: Hi Tim, > On Apr 27, 2016, at 12:37 PM, Tim Felgentreff wrote: > > Hi, > > We have a proposal for a tool that we think might be useful to have in trunk. > > We spent some time pulling together benchmarks from various sources (papers, the mailinglist, projects on squeaksource, ...) and combining them with an extended version of Stefan Marr's implementation of a benchmarking framework SMark. The tool and framework are modeled after SUnit, and include different execution suites and code to figure out confidence variations over multiple runs and such. Also, it draws graphs over multiple runs so you can look at things like warmup and GC behavior, and see how much time is spent doing incremental GCs and full GCs vs plain execution. As a part of this I fixed the EPS export so these graphs can be exported in a scalable format. > > Here is a picture of the tool: https://dl.dropboxusercontent.com/u/26242153/screenshot.jpg > > As I said, it's modeled after TestRunner and SUnit, benchmarks subclass from the "Benchmark" class, any method starting with "bench" is a benchmark, and you can have setUp and tearDown methods as usual. By default the benchmarks are run under an Autosize runner that re-executes each benchmark until the combined runtime reaches 600ms (to smooth out any noise). Beyond that, you can specify a number of iterations that the runner will re-do that to see multiple averaged runs. The graph shows the execution times split between running code (gray) incremental GCs (yellow) and full GCs (red). There are popups and you can scroll to zoom in and out. There is also a history of benchmark runs stored on the class side of benchmark classes for later reference. IMO 600ms is about 500 times too short ;-). Is this parameterised? > > The code currently lives here: http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/BenchmarkRunner > > Considering we are every so often discussing benchmark results here, I think it might be useful to share an execution framework for those. That would be fabulous. Hence - can it be controlled from the command line? - is it portable to Pharo? > > cheers, > Tim > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160427/f80801de/attachment.htm From lewis at mail.msen.com Wed Apr 27 23:59:46 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Apr 27 23:59:49 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: <20160427235946.GA93622@shell.msen.com> On Wed, Apr 27, 2016 at 09:37:29PM +0200, Tim Felgentreff wrote: > Hi, > > We have a proposal for a tool that we think might be useful to have in > trunk. This looks very nice! May I suggest that you (or we) create a SqueakMap entry for this, so that it can be easily located and loaded in Squeak 5.0 and trunk images? If it also works in Pharo, someone will probably volunteer to make a ConfigurationOfBenchmark also. There are lots of advantages to maintaining a package like this as an external package, just as long as the package is easy to find and easy to load. It seems to me that this would be especially important for a benchmarking suite, because we would want to encourage people to use the same suite in Cuis, Pharo, and other images in the Squeak family. Dave > > We spent some time pulling together benchmarks from various sources > (papers, the mailinglist, projects on squeaksource, ...) and combining them > with an extended version of Stefan Marr's implementation of a benchmarking > framework SMark. The tool and framework are modeled after SUnit, and > include different execution suites and code to figure out confidence > variations over multiple runs and such. Also, it draws graphs over multiple > runs so you can look at things like warmup and GC behavior, and see how > much time is spent doing incremental GCs and full GCs vs plain execution. > As a part of this I fixed the EPS export so these graphs can be exported in > a scalable format. > > Here is a picture of the tool: > https://dl.dropboxusercontent.com/u/26242153/screenshot.jpg > > As I said, it's modeled after TestRunner and SUnit, benchmarks subclass > from the "Benchmark" class, any method starting with "bench" is a > benchmark, and you can have setUp and tearDown methods as usual. By default > the benchmarks are run under an Autosize runner that re-executes each > benchmark until the combined runtime reaches 600ms (to smooth out any > noise). Beyond that, you can specify a number of iterations that the runner > will re-do that to see multiple averaged runs. The graph shows the > execution times split between running code (gray) incremental GCs (yellow) > and full GCs (red). There are popups and you can scroll to zoom in and out. > There is also a history of benchmark runs stored on the class side of > benchmark classes for later reference. > > The code currently lives here: > http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/BenchmarkRunner > > Considering we are every so often discussing benchmark results here, I > think it might be useful to share an execution framework for those. > > cheers, > Tim > From timfelgentreff at gmail.com Thu Apr 28 11:01:16 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Thu Apr 28 11:01:39 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: Hi Eliot, On 28 April 2016 at 00:44, Eliot Miranda wrote: > > IMO 600ms is about 500 times too short ;-). Is this parameterised? > This is parameterised, but let me elaborate on why I think this is ok. There are three levels to each benchmark: 1. Problem size. This depends on the benchmark, e.g. a linear progression in BinaryTrees will give you exponentially growing runtime. This should be chosen by the benchmark implementer to be reasonably small while still providing reasonable results. For example, the fibonacci benchmark shouldn't set it's problem size only to 4 or 5, because e.g. on RSqueak the JIT could simply unroll this completely and generate machine code that just checks that the relevant method dicts haven't changed and return the constant. So the problem size should be large enough for that. 2. Autosize iterations These are dynamically chosen per machine to execute a benchmark with a fixed problem size repeatedly to average any noise from e.g. OS-level scheduling and such. I think this is usually fine with 500-1000ms, because OS-level interruptions are then distributed fairly evenly. The autosizer simply finds a small number of iterations to run the inner benchmarks and then averages the runs to get rid of the small noise. 3. Benchmark iterations This is something that you choose when you use the tool, to actually do enough runs to warmup the JIT and such. With an autosize time of about 600ms, I usually choose 100 Benchmark iterations, so that the overall benchmarking time the benchmark runs will be about 60 seconds. In the tool, we measure times and GC stats between these iterations to get the bar chart. All three of these levels are configurable, but the UI just asks you for the third. > - can it be controlled from the command line? Yes, provided you mean "use a .st file argument". To run a benchmark you can write e.g. - BenchmarkAutosizeSuite run: {'BenchmarkSimpleStatisticsReporter'. 'SMarkShootout'. 100}. # runs all shootout benchmarks for 100 outer iterations, reporting statistics in the autosize suite - BenchmarkCogSuite run: {'BenchmarkSimpleStatisticsReporter'. 'SMarkShootout.benchBinaryTrees'. 100}. # runs the binarytrees benchmarks for 100 outer iterations without autosizing, but with one extra iteration for warmup ... Output is printed to stdout. > - is it portable to Pharo? I don't see why it shouldn't work immediately, unless they don't have the tool builder anymore. Might be that they removed the Postscript Canvas, then you cannot export your benchmarks as easily. > > cheers, > Tim > > > > > From smalltalk at stefan-marr.de Thu Apr 28 12:19:40 2016 From: smalltalk at stefan-marr.de (Stefan Marr) Date: Thu Apr 28 12:19:44 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: Hi Tim: > On 28 Apr 2016, at 13:01, Tim Felgentreff wrote: > >> - can it be controlled from the command line? > > Yes, provided you mean "use a .st file argument". To run a benchmark > you can write e.g. > - BenchmarkAutosizeSuite run: {'BenchmarkSimpleStatisticsReporter'. > 'SMarkShootout'. 100}. # runs all shootout benchmarks for 100 outer > iterations, reporting statistics in the autosize suite > - BenchmarkCogSuite run: {'BenchmarkSimpleStatisticsReporter'. > 'SMarkShootout.benchBinaryTrees'. 100}. # runs the binarytrees > benchmarks for 100 outer iterations without autosizing, but with one > extra iteration for warmup I look at your changes to the code, but if you didn?t remove any SMark features, there is also a proper command-line interface. See: http://forum.world.st/Convention-to-build-cmd-line-interfaces-with-Pharo-td3524056.html $ squeak-vm.sh Pharo-1.2.image --help SMark Benchmark Framework, version: SMark-StefanMarr.12 Usage: SMarkHarness [runner] [reporter] [iterations [processes [problemSize]]] Arguments: runner optional, a SMarkRunner class that executes the benchmarks reporter optional, a SMarkReporter class that processes and displays the results suiteOrBenchmark required, either a SMarkSuite with benchmarks, or a benchmark denoted by Suite.benchName iterations optional, number of times the benchmarks are repeated processes optional, number of processes/threads used by the benchmarks problemSize optional, depending on benchmark for instance number of inner iterations or size of used data set Best regards Stefan -- Stefan Marr Johannes Kepler Universit?t Linz http://stefan-marr.de/research/ From commits at source.squeak.org Thu Apr 28 12:34:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 28 12:34:38 2016 Subject: [squeak-dev] The Trunk: Sound-mt.56.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.56.mcz ==================== Summary ==================== Name: Sound-mt.56 Author: mt Time: 28 April 2016, 2:34:02.190031 pm UUID: 24fb4170-db03-d446-88d6-bc68d542761c Ancestors: Sound-mt.55 Due to excessive use of the shut-down-mechanism in sound code, fix all the places where #shutDown was called but nowadays #shutDown: is implemented. Now, you can safely to this again: SoundPlayer stopReverb. "revert with #startReverb" TrashCanMorph playDeleteSound. =============== Diff against Sound-mt.55 =============== Item was changed: ----- Method: AbstractSound class>>testFMInteractively (in category 'examples') ----- testFMInteractively "Experiment with different settings of the FM modulation and multiplier settings interactively by moving the mouse. The top-left corner of the screen is 0 for both parameters. Stop when the mouse is pressed." "AbstractSound testFMInteractively" | s mousePt lastVal status mod ratio | SoundPlayer startPlayerProcessBufferSize: 1100 rate: 11025 stereo: false. s := FMSound pitch: 440.0 dur: 200.0 loudness: 0.2. SoundPlayer playSound: s. lastVal := nil. [Sensor anyButtonPressed] whileFalse: [ mousePt := Sensor cursorPoint. mousePt ~= lastVal ifTrue: [ mod := mousePt x asFloat / 20.0. ratio := mousePt y asFloat / 20.0. s modulation: mod ratio: ratio. lastVal := mousePt. status := 'mod: ', mod printString, ' ratio: ', ratio printString. status displayOn: Display at: 10@10]]. + SoundPlayer shutDown: true. - SoundPlayer shutDown. ! Item was changed: ----- Method: MIDISynth class>>example (in category 'examples') ----- example "Here's one way to run the MIDI synth. It will get a nice Morphic UI later. Click the mouse to stop running it. (Mac users note: be sure you have MIDI interface adaptor plugged in, or Squeak will hang waiting for the external clock signal.)." "MIDISynth example" | portNum synth | portNum := SimpleMIDIPort inputPortNumFromUser. portNum ifNil: [^ self]. SoundPlayer useShortBuffer. synth := MIDISynth new midiPort: (SimpleMIDIPort openOnPortNumber: portNum). synth midiParser ignoreCommand: 224. "filter out pitch bends" 1 to: 16 do: [:i | (synth channel: i) instrument: (AbstractSound soundNamed: 'oboe1')]. 1 to: 16 do: [:ch | synth volumeForChannel: ch put: 0.2]. synth processMIDIUntilMouseDown. + SoundPlayer shutDown: true; initialize. "revert to normal buffer size" - SoundPlayer shutDown; initialize. "revert to normal buffer size" ! Item was changed: ----- Method: MIDISynth>>stopMIDITracking (in category 'as yet unclassified') ----- stopMIDITracking process ifNotNil: [ process terminate. process := nil]. + SoundPlayer shutDown: true; initialize. "revert to normal buffer size" - SoundPlayer shutDown; initialize. "revert to normal buffer size" ! Item was changed: ----- Method: SoundPlayer class>>boinkScale (in category 'primitive test') ----- boinkScale "Tests the sound output primitives by playing a scale." "SoundPlayer boinkScale" | sineTable pan | + self shutDown: true. - self shutDown. SamplingRate := 11025. Stereo := true. sineTable := self sineTable: 1000. Buffer := SoundBuffer newStereoSampleCount: 1000. BufferIndex := 1. self primSoundStartBufferSize: Buffer stereoSampleCount rate: SamplingRate stereo: Stereo. pan := 0. #(261.626 293.665 329.628 349.229 391.996 440.001 493.884 523.252) do: [:p | self boinkPitch: p dur: 0.3 loudness: 300 waveTable: sineTable pan: pan. pan := pan + 125]. self boinkPitch: 261.626 dur: 1.0 loudness: 300 waveTable: sineTable pan: 500. self primSoundStop. + self shutDown: true. - self shutDown. SoundPlayer initialize. "reset sampling rate, buffer size, and stereo flag" ! Item was changed: ----- Method: SoundPlayer class>>playLoop (in category 'player process') ----- playLoop "The sound player process loop." | bytesPerSlice count willStop mayStop | mayStop := self stopSoundWhenDone. bytesPerSlice := Stereo ifTrue: [4] ifFalse: [2]. [ [(count := self primSoundAvailableBytes // bytesPerSlice) > 100] whileFalse: [ReadyForBuffer wait]. count := count min: Buffer stereoSampleCount. PlayerSemaphore critical: [ ActiveSounds := ActiveSounds select: [:snd | snd samplesRemaining > 0]. ActiveSounds do: [:snd | snd ~~ SoundJustStarted ifTrue: [ snd playSampleCount: count into: Buffer startingAt: 1]]. ReverbState == nil ifFalse: [ ReverbState applyReverbTo: Buffer startingAt: 1 count: count]. self primSoundPlaySamples: count from: Buffer startingAt: 1. willStop := mayStop and:[ (ActiveSounds size = 0) and:[ self isAllSilence: Buffer size: count]]. LastBuffer ifNotNil:[ LastBuffer replaceFrom: 1 to: LastBuffer size with: Buffer startingAt: 1. ]. willStop + ifTrue:[self shutDown: true. PlayerProcess := nil] - ifTrue:[self shutDown. PlayerProcess := nil] ifFalse:[Buffer primFill: 0]. SoundJustStarted := nil]. willStop ifTrue:[^self] ] repeat ! Item was changed: ----- Method: SoundPlayer class>>useShortBuffer (in category 'initialization') ----- useShortBuffer "Experimental support for real-time MIDI input. This only works on platforms whose hardware allows very short buffer sizes. It has been tested on a Macintosh Powerbook G3." "SoundPlayer useShortBuffer" + self shutDown: true. - self shutDown. BufferMSecs := 15. SoundPlayer startPlayerProcessBufferSize: (BufferMSecs * SamplingRate) // 1000 rate: SamplingRate stereo: Stereo. ! Item was changed: ----- Method: SoundRecorder>>startRecording (in category 'recording controls') ----- startRecording "Turn on the sound input driver and start the recording process. Initially, recording is paused. If the primStartRecordingDesiredSampleRate:... fails it almost certainly means we have no usable sound input device. Rather than having the prim raise a failure error we let it quietly do nothing (since I hate trying to debug errors inside a critical block) and check the actual sampling rate later. If the sampling rate is 0 we know the startup failed and raise an application level Signal to let any user code know about the problem. You might think we should also use the stopRecording message to close things down cleanly but that simply results in astorm of attempts to start recording so it is simpler to let it be deluded. An attempts to start recording will repeat the test and thereby handle any plug-in hardware etc." recordLevel ifNil: [recordLevel := 0.5]. "lazy initialization" + CanRecordWhilePlaying ifFalse: [SoundPlayer shutDown: true]. - CanRecordWhilePlaying ifFalse: [SoundPlayer shutDown]. recordProcess ifNotNil: [self stopRecording]. paused := true. meteringBuffer := SoundBuffer newMonoSampleCount: 1024. meterLevel := 0. self allocateBuffer. Smalltalk newExternalSemaphoreDo: [ :semaphore :index | bufferAvailableSema := semaphore. self primStartRecordingDesiredSampleRate: samplingRate asInteger stereo: stereo semaIndex: index ]. RecorderActive := true. samplingRate := self primGetActualRecordingSampleRate. samplingRate = 0 ifTrue: [ Warning signal: 'SoundRecorder: unable to connect to sound input device']. self primSetRecordLevel: (1000.0 * recordLevel) asInteger. recordProcess := [self recordLoop] newProcess. recordProcess priority: Processor userInterruptPriority. recordProcess resume! From eliot.miranda at gmail.com Thu Apr 28 13:52:36 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Apr 28 13:52:44 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: <8478C08B-353F-4EEB-8428-32CEF438F605@gmail.com> Hi Tim, the below is lovely and makes it easy to run from the command line. Please can we keep it? The Mac VM's command line support is broken (but being fixed) so test in Windows using a console VM and/or in Linux. One more request, it would be great if the package was load able and runnable in VW in some form so that at least one can gather a complete baseline set of results from VW. _,,,^..^,,,_ (phone) > On Apr 28, 2016, at 5:19 AM, Stefan Marr wrote: > > Hi Tim: > >>> On 28 Apr 2016, at 13:01, Tim Felgentreff wrote: >>> >>> - can it be controlled from the command line? >> >> Yes, provided you mean "use a .st file argument". To run a benchmark >> you can write e.g. >> - BenchmarkAutosizeSuite run: {'BenchmarkSimpleStatisticsReporter'. >> 'SMarkShootout'. 100}. # runs all shootout benchmarks for 100 outer >> iterations, reporting statistics in the autosize suite >> - BenchmarkCogSuite run: {'BenchmarkSimpleStatisticsReporter'. >> 'SMarkShootout.benchBinaryTrees'. 100}. # runs the binarytrees >> benchmarks for 100 outer iterations without autosizing, but with one >> extra iteration for warmup > > I look at your changes to the code, but if you didn?t remove any SMark features, there is also a proper command-line interface. > > See: http://forum.world.st/Convention-to-build-cmd-line-interfaces-with-Pharo-td3524056.html > > $ squeak-vm.sh Pharo-1.2.image --help > SMark Benchmark Framework, version: SMark-StefanMarr.12 > > Usage: SMarkHarness [runner] [reporter] > [iterations [processes [problemSize]]] > > Arguments: > runner optional, a SMarkRunner class that executes the benchmarks > reporter optional, a SMarkReporter class that processes > and displays the results > suiteOrBenchmark required, either a SMarkSuite with benchmarks, > or a benchmark denoted by Suite.benchName > iterations optional, number of times the benchmarks are repeated > processes optional, number of processes/threads used by the benchmarks > problemSize optional, depending on benchmark for instance number of > inner iterations or size of used data set > > > Best regards > Stefan > > -- > Stefan Marr > Johannes Kepler Universit?t Linz > http://stefan-marr.de/research/ > > > > From Marcel.Taeumel at hpi.de Thu Apr 28 14:10:01 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Apr 28 14:43:48 2016 Subject: [squeak-dev] #perform:withArguments: not working with WeakArray Message-ID: <1461852601152-4892693.post@n4.nabble.com> Hey, there! This does not work (i.e. primitive failed): m := Morph new. c := Color white. m perform: #color: withArguments: (WeakArray with: c). Is this primitive-fail okay? If yes, we have a bug in WeakMessageSend >> #collectArguments: because it will always return a WeakArray if the arg sizes does not match. Usually a normal array otherwise. I observed this kind of bug when using our object events like this: m1 := Morph new. m2 := Morph new. m1 when: #baz send: #color: to: m2 with: Color black. m1 triggerEvent: #baz withArguments: {Color white. #blubb}. "fails due to weak array" m1 triggerEvent: #baz withArguments: {Color white}. "works due to normal array" Best, Marcel -- View this message in context: http://forum.world.st/perform-withArguments-not-working-with-WeakArray-tp4892693.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Thu Apr 28 15:31:07 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Apr 28 15:31:14 2016 Subject: [squeak-dev] #perform:withArguments: not working with WeakArray In-Reply-To: <1461852601152-4892693.post@n4.nabble.com> References: <1461852601152-4892693.post@n4.nabble.com> Message-ID: <85735F3B-4AEC-4F52-8DB9-EBD68DD7D967@gmail.com> Hi Marcel, > On Apr 28, 2016, at 7:10 AM, marcel.taeumel wrote: > > Hey, there! > > This does not work (i.e. primitive failed): > > m := Morph new. > c := Color white. > m perform: #color: withArguments: (WeakArray with: c). > > Is this primitive-fail okay? Yes. The primitive is specified to require an Array instance, not merely an indexable pointers object. > If yes, we have a bug in WeakMessageSend >> > #collectArguments: because it will always return a WeakArray if the arg > sizes does not match. Usually a normal array otherwise. That's the bug. > I observed this kind of bug when using our object events like this: > > m1 := Morph new. > m2 := Morph new. > > m1 when: #baz send: #color: to: m2 with: Color black. > m1 triggerEvent: #baz withArguments: {Color white. #blubb}. "fails due to > weak array" > m1 triggerEvent: #baz withArguments: {Color white}. "works due to normal > array" > > Best, > Marcel _,,,^..^,,,_ (phone) From commits at source.squeak.org Thu Apr 28 16:18:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 28 16:18:21 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1016.mcz Message-ID: Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.1016.mcz ==================== Summary ==================== Name: Kernel-mt.1016 Author: mt Time: 28 April 2016, 6:17:59.607373 pm UUID: 9f54ad71-44a3-d248-8811-44bd57be0327 Ancestors: Kernel-nice.1015 Fixes a bug in weak message sends where the internal weak array structure for arguments was not put into a real array and hence made the perform-primitive fail. I suspect an old copy-paste mistake because MessageSend and WeakMessageSend share some code. =============== Diff against Kernel-nice.1015 =============== Item was changed: ----- Method: WeakMessageSend>>collectArguments: (in category 'private') ----- collectArguments: anArgArray "Private" | staticArgs | staticArgs := self arguments. ^(anArgArray size = staticArgs size) ifTrue: [anArgArray] ifFalse: [(staticArgs isEmpty ifTrue: [ staticArgs := Array new: selector numArgs] + ifFalse: [Array withAll: staticArgs] ) - ifFalse: [staticArgs copy] ) replaceFrom: 1 to: (anArgArray size min: staticArgs size) with: anArgArray startingAt: 1] ! From leves at caesar.elte.hu Thu Apr 28 20:29:41 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu Apr 28 20:29:47 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: On Wed, 27 Apr 2016, Tim Felgentreff wrote: > Hi, > > We have a proposal for a tool that?we think might be useful to have in trunk. > > We spent some time pulling together benchmarks from various sources (papers, the mailinglist, projects on squeaksource, ...) and combining them > with an extended version of Stefan Marr's implementation of a benchmarking framework SMark. The tool and framework are modeled after SUnit, and > include different execution suites and code to figure out confidence variations over multiple runs and such. Also, it draws graphs over multiple > runs so you can look at things like warmup and GC behavior, and see how much time is spent doing incremental GCs and full GCs vs plain execution. > As a part of this I fixed the EPS export so these graphs can be exported in a scalable format. > > Here is a picture of the tool: https://dl.dropboxusercontent.com/u/26242153/screenshot.jpg > > As I said, it's modeled after TestRunner and SUnit, benchmarks subclass from the "Benchmark" class, any method starting with?"bench" is a > benchmark, and you can have setUp and tearDown methods as usual. By default the benchmarks are run under an Autosize runner that re-executes each > benchmark until the combined runtime reaches 600ms (to smooth out any noise). Beyond that, you can specify a number of iterations that the runner > will re-do that to see multiple averaged runs. The graph shows the execution times split between running code (gray) incremental GCs (yellow) and > full GCs (red). There are popups and you can scroll to zoom in and out. There is also a history of benchmark runs stored on the class side of > benchmark classes for later reference. > > The code currently lives here: http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/BenchmarkRunner The link seems to be broken. Levente > > Considering we are every so often discussing benchmark results here, I think it might be useful to share an execution?framework for those. > > cheers, > Tim > > From Das.Linux at gmx.de Thu Apr 28 20:56:07 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Apr 28 20:56:06 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: On 28.04.2016, at 22:29, Levente Uzonyi wrote: > On Wed, 27 Apr 2016, Tim Felgentreff wrote: > >> Hi, >> We have a proposal for a tool that we think might be useful to have in trunk. >> We spent some time pulling together benchmarks from various sources (papers, the mailinglist, projects on squeaksource, ...) and combining them >> with an extended version of Stefan Marr's implementation of a benchmarking framework SMark. The tool and framework are modeled after SUnit, and >> include different execution suites and code to figure out confidence variations over multiple runs and such. Also, it draws graphs over multiple >> runs so you can look at things like warmup and GC behavior, and see how much time is spent doing incremental GCs and full GCs vs plain execution. >> As a part of this I fixed the EPS export so these graphs can be exported in a scalable format. >> Here is a picture of the tool: https://dl.dropboxusercontent.com/u/26242153/screenshot.jpg >> As I said, it's modeled after TestRunner and SUnit, benchmarks subclass from the "Benchmark" class, any method starting with "bench" is a >> benchmark, and you can have setUp and tearDown methods as usual. By default the benchmarks are run under an Autosize runner that re-executes each >> benchmark until the combined runtime reaches 600ms (to smooth out any noise). Beyond that, you can specify a number of iterations that the runner >> will re-do that to see multiple averaged runs. The graph shows the execution times split between running code (gray) incremental GCs (yellow) and >> full GCs (red). There are popups and you can scroll to zoom in and out. There is also a history of benchmark runs stored on the class side of >> benchmark classes for later reference. >> The code currently lives here: http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/BenchmarkRunner > > The link seems to be broken. > In how far? It works from here :) > Levente > >> Considering we are every so often discussing benchmark results here, I think it might be useful to share an execution framework for those. >> cheers, >> Tim From stephan at stack.nl Thu Apr 28 21:03:03 2016 From: stephan at stack.nl (Stephan Eggermont) Date: Thu Apr 28 21:03:12 2016 Subject: [squeak-dev] Re: A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: On 28/04/16 00:44, Eliot Miranda wrote: > That would be fabulous. Hence > - is it portable to Pharo? Pharo has a class BenchmarkResult in Kernel-Chronology Pharo has no DummyStream Pharo has no asOop TimeStamp now -> DateAndTime now no , for numbers, use asString Smalltalk getVMParameters -> Smalltalk vm getParameters Where is BenchmarkTestRunnerSuite? Stephan From commits at source.squeak.org Thu Apr 28 21:55:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Apr 28 21:55:57 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160428215555.27308.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-April/025289.html Name: Sound-mt.56 Ancestors: Sound-mt.55 Due to excessive use of the shut-down-mechanism in sound code, fix all the places where #shutDown was called but nowadays #shutDown: is implemented. Now, you can safely to this again: SoundPlayer stopReverb. "revert with #startReverb" TrashCanMorph playDeleteSound. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025290.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025291.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025292.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025293.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025294.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025295.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025296.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025297.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025298.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025299.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025300.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025301.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025302.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025303.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025304.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025305.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025306.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025307.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025308.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025309.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025310.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025311.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025312.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025313.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025314.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025315.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025316.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025317.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025318.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025319.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025320.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025321.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025322.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025323.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025324.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025325.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025326.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025327.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025328.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025329.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025330.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025331.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025332.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025333.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025334.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025335.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025336.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025337.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025338.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025339.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025340.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025341.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025342.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025343.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025344.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025345.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025346.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025347.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025348.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025349.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025350.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025351.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025352.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025353.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025354.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025355.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025356.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025357.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025358.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025359.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025360.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025361.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025362.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025363.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025364.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025365.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025366.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025367.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025368.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025369.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025370.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025371.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025372.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025373.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025374.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025375.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025376.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025377.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025378.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025379.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025380.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025381.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025382.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025383.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025384.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025385.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025386.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025387.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025388.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025389.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025390.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025391.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025392.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025393.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025394.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025395.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025396.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025397.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025398.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025399.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025400.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025401.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025402.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025403.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025404.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025405.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025406.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025407.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025408.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025409.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025410.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025411.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025412.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025413.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025414.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025415.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025416.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025417.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025418.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025419.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025420.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025421.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025422.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025423.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025424.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025425.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025426.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025427.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025428.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025429.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025430.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025431.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025432.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025433.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025434.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025435.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025436.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025437.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025438.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025439.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025440.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025441.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025442.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025443.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025444.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025445.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025446.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025447.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025448.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025449.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025450.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025451.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025452.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025453.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025454.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025455.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025456.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025457.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025458.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025459.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025460.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025461.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025462.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025463.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025464.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025465.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025466.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025467.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025468.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025469.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025470.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025471.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025472.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025473.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025474.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025475.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025476.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025477.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025478.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025479.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025480.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025481.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025482.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025483.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025484.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025485.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025486.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025487.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025488.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025489.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025490.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025491.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025492.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025493.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025494.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025495.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025496.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025497.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025498.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025499.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025500.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025501.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025502.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025503.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025504.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025505.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025506.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025507.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025508.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025509.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025510.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025511.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025512.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025513.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025514.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025515.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025516.html ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-April/025517.html Name: Kernel-mt.1016 Ancestors: Kernel-nice.1015 Fixes a bug in weak message sends where the internal weak array structure for arguments was not put into a real array and hence made the perform-primitive fail. I suspect an old copy-paste mistake because MessageSend and WeakMessageSend share some code. ============================================= From leves at caesar.elte.hu Thu Apr 28 22:02:14 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu Apr 28 22:02:19 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: On Thu, 28 Apr 2016, Tobias Pape wrote: > > On 28.04.2016, at 22:29, Levente Uzonyi wrote: > >> On Wed, 27 Apr 2016, Tim Felgentreff wrote: >> >>> Hi, >>> We have a proposal for a tool that we think might be useful to have in trunk. >>> We spent some time pulling together benchmarks from various sources (papers, the mailinglist, projects on squeaksource, ...) and combining them >>> with an extended version of Stefan Marr's implementation of a benchmarking framework SMark. The tool and framework are modeled after SUnit, and >>> include different execution suites and code to figure out confidence variations over multiple runs and such. Also, it draws graphs over multiple >>> runs so you can look at things like warmup and GC behavior, and see how much time is spent doing incremental GCs and full GCs vs plain execution. >>> As a part of this I fixed the EPS export so these graphs can be exported in a scalable format. >>> Here is a picture of the tool: https://dl.dropboxusercontent.com/u/26242153/screenshot.jpg >>> As I said, it's modeled after TestRunner and SUnit, benchmarks subclass from the "Benchmark" class, any method starting with "bench" is a >>> benchmark, and you can have setUp and tearDown methods as usual. By default the benchmarks are run under an Autosize runner that re-executes each >>> benchmark until the combined runtime reaches 600ms (to smooth out any noise). Beyond that, you can specify a number of iterations that the runner >>> will re-do that to see multiple averaged runs. The graph shows the execution times split between running code (gray) incremental GCs (yellow) and >>> full GCs (red). There are popups and you can scroll to zoom in and out. There is also a history of benchmark runs stored on the class side of >>> benchmark classes for later reference. >>> The code currently lives here: http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/BenchmarkRunner >> >> The link seems to be broken. >> > > In how far? > It works from here :) HTTPS Everywhere turns it into an https URL, but that's a 404. It works via http though. Levente > >> Levente >> >>> Considering we are every so often discussing benchmark results here, I think it might be useful to share an execution framework for those. >>> cheers, >>> Tim > > > > From Das.Linux at gmx.de Thu Apr 28 22:42:32 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Apr 28 22:42:31 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: <73C1A120-E662-4BAF-A8C5-A8E9427E118E@gmx.de> On 29.04.2016, at 00:02, Levente Uzonyi wrote: > On Thu, 28 Apr 2016, Tobias Pape wrote: > >> >> On 28.04.2016, at 22:29, Levente Uzonyi wrote: >> >>> On Wed, 27 Apr 2016, Tim Felgentreff wrote: >>> >>>> Hi, >>>> We have a proposal for a tool that we think might be useful to have in trunk. >>>> We spent some time pulling together benchmarks from various sources (papers, the mailinglist, projects on squeaksource, ...) and combining them >>>> with an extended version of Stefan Marr's implementation of a benchmarking framework SMark. The tool and framework are modeled after SUnit, and >>>> include different execution suites and code to figure out confidence variations over multiple runs and such. Also, it draws graphs over multiple >>>> runs so you can look at things like warmup and GC behavior, and see how much time is spent doing incremental GCs and full GCs vs plain execution. >>>> As a part of this I fixed the EPS export so these graphs can be exported in a scalable format. >>>> Here is a picture of the tool: https://dl.dropboxusercontent.com/u/26242153/screenshot.jpg >>>> As I said, it's modeled after TestRunner and SUnit, benchmarks subclass from the "Benchmark" class, any method starting with "bench" is a >>>> benchmark, and you can have setUp and tearDown methods as usual. By default the benchmarks are run under an Autosize runner that re-executes each >>>> benchmark until the combined runtime reaches 600ms (to smooth out any noise). Beyond that, you can specify a number of iterations that the runner >>>> will re-do that to see multiple averaged runs. The graph shows the execution times split between running code (gray) incremental GCs (yellow) and >>>> full GCs (red). There are popups and you can scroll to zoom in and out. There is also a history of benchmark runs stored on the class side of >>>> benchmark classes for later reference. >>>> The code currently lives here: http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/BenchmarkRunner >>> >>> The link seems to be broken. >>> >> >> In how far? >> It works from here :) > > HTTPS Everywhere turns it into an https URL, but that's a 404. It works via http though. Yeah sorry for that. But since we're not HTTPS-ready with Monticello, this probably has to wait a tiny bit more... Best regards -Tobias > > Levente > >> >>> Levente >>> >>>> Considering we are every so often discussing benchmark results here, I think it might be useful to share an execution framework for those. >>>> cheers, >>>> Tim From eliot.miranda at gmail.com Fri Apr 29 05:03:13 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Apr 29 05:03:16 2016 Subject: [squeak-dev] regarding the updated SpurTrunkImage Message-ID: Hi All, concerning http://build.squeak.org/job/Trunk/default/lastSuccessfulBuild/artifact/target/TrunkImage.zip Is it possible a) that the original Squeak windows (Welcome workspace, et al) are /not/ deleted? b) that the artefact be tagged with the update number, e.g. SpurTrunk-15857 c) that at least we drop "Image" from the name; SpurTrunk.image is ok; SpurTrunkImage.image is redundant. ? And thanks very much for the artifact; it will save a lot of effort in the VMMasker image building scripts once I get round to using it. _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160428/f7c4ad9b/attachment.htm From Marcel.Taeumel at hpi.de Fri Apr 29 10:04:16 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 29 10:38:09 2016 Subject: [squeak-dev] Re: regarding the updated SpurTrunkImage In-Reply-To: References: Message-ID: <1461924256150-4892863.post@n4.nabble.com> Hi Eliot, agreed. There are image and changes in the archive. The file name should be "SpurTrunk.zip" resp. "SpurTrunk-12345.zip". Maybe even "SqueakSpurTrunk-12345.zip". We might also want open some tools/windows for other reasons. This would be closer to the way people update their image having already some content on screen. You can get the welcome workspace via "ReleaseBuilder openWelcomeWorkspaces". Maybe we could also spawn more stuff and remove that after the tests ran: ToolSet browseClass: String; inspect: Morph; explore: Rectangle. SystemNavigation default browseAllCallsOn: #size; browseAllImplementorsOf: #size. Then update the image. Then let the latest tests run. :-) Best, Marcel -- View this message in context: http://forum.world.st/regarding-the-updated-SpurTrunkImage-tp4892774p4892863.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Apr 29 10:06:15 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 29 10:40:07 2016 Subject: [squeak-dev] Re: The Trunk: Tools-cmm.694.mcz In-Reply-To: References: Message-ID: <1461924375569-4892864.post@n4.nabble.com> +1 We might also want to update the help text in the debugger-inspectors at the bottom. For consistency. :-) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-cmm-694-mcz-tp4892438p4892864.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From timfelgentreff at gmail.com Fri Apr 29 10:10:02 2016 From: timfelgentreff at gmail.com (timfelgentreff) Date: Fri Apr 29 10:43:54 2016 Subject: [squeak-dev] Re: A Benchmarking tool for the trunk? In-Reply-To: References: Message-ID: <1461924602498-4892865.post@n4.nabble.com> Hi Stefan, what does your squeak-vm.sh script do? Because on Squeak, I cannot simply type --help and get output. The mailing list thread you linked refers to something Pharo specific that I don't think we have in Squeak. Stefan Marr-3 wrote > Hi Tim: > >> On 28 Apr 2016, at 13:01, Tim Felgentreff < > timfelgentreff@ > > wrote: >> >>> - can it be controlled from the command line? >> >> Yes, provided you mean "use a .st file argument". To run a benchmark >> you can write e.g. >> - BenchmarkAutosizeSuite run: {'BenchmarkSimpleStatisticsReporter'. >> 'SMarkShootout'. 100}. # runs all shootout benchmarks for 100 outer >> iterations, reporting statistics in the autosize suite >> - BenchmarkCogSuite run: {'BenchmarkSimpleStatisticsReporter'. >> 'SMarkShootout.benchBinaryTrees'. 100}. # runs the binarytrees >> benchmarks for 100 outer iterations without autosizing, but with one >> extra iteration for warmup > > I look at your changes to the code, but if you didn?t remove any SMark > features, there is also a proper command-line interface. > > See: > http://forum.world.st/Convention-to-build-cmd-line-interfaces-with-Pharo-td3524056.html > > $ squeak-vm.sh Pharo-1.2.image --help > SMark Benchmark Framework, version: SMark-StefanMarr.12 > > Usage: <vm+image> SMarkHarness [runner] [reporter] > > > [iterations [processes [problemSize]]] > > Arguments: > runner optional, a SMarkRunner class that executes the > benchmarks > reporter optional, a SMarkReporter class that processes > and displays the results > suiteOrBenchmark required, either a SMarkSuite with benchmarks, > or a benchmark denoted by Suite.benchName > iterations optional, number of times the benchmarks are repeated > processes optional, number of processes/threads used by the > benchmarks > problemSize optional, depending on benchmark for instance number > of > inner iterations or size of used data set > > > Best regards > Stefan > > -- > Stefan Marr > Johannes Kepler Universit?t Linz > http://stefan-marr.de/research/ -- View this message in context: http://forum.world.st/A-Benchmarking-tool-for-the-trunk-tp4892463p4892865.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Apr 29 10:12:23 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 29 10:46:15 2016 Subject: [squeak-dev] Re: Explorer colors question In-Reply-To: References: Message-ID: <1461924743180-4892866.post@n4.nabble.com> Hi Chris, if you re-select the current selection, you update it. Key-up at the top happens to do exactly that. Since a single update renders the whole tree display inconsistent, we want to indicate those updated nodes with the color blue. http://forum.world.st/The-Trunk-Tools-mt-668-mcz-td4875137.html#a4875215 Note that we did get rid of that pop-up mentioned: http://forum.world.st/The-Trunk-Tools-mt-670-mcz-td4875650.html Best, Marcel -- View this message in context: http://forum.world.st/Explorer-colors-question-tp4892311p4892866.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Apr 29 11:05:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Apr 29 11:05:49 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1124.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1124.mcz ==================== Summary ==================== Name: Morphic-mt.1124 Author: mt Time: 29 April 2016, 1:04:05.656719 pm UUID: 20b80e2e-df90-fa43-bf17-339878efb46a Ancestors: Morphic-cmm.1123 Speeds up drawing of large tree morphs by introducing a cache for the width of each column. Invalidate that cache each time the nodes in the tree are re-layouted. Try out "CompiledMethod allInstances explore" before and after this change. Have "PluggableListMorph highlightHoveredRow: true". Why? Computation of largest item in a column is O(n) at the moment. Drawing code needs width of column to position the strings in each row. Each row is a (string) morph and the columns are "faked". =============== Diff against Morphic-cmm.1123 =============== Item was changed: ----- Method: IndentingListItemMorph>>widthOfColumn: (in category 'accessing - columns') ----- widthOfColumn: columnIndex | widthOrSpec | container columns ifNil: [ ^ self width ]. + (container columnsCache at: columnIndex) + ifNotNil: [ :cachedWidth | ^ cachedWidth ]. widthOrSpec := container columns at: columnIndex. + container columnsCache at: columnIndex put: (widthOrSpec isNumber - ^ widthOrSpec isNumber ifTrue: [ widthOrSpec ] ifFalse: [ widthOrSpec isBlock ifTrue: [ widthOrSpec cull: container cull: self ] ifFalse: [ widthOrSpec ifNil: [ self width ] ifNotNil: [ "Fall back" + 50 ] ] ]). + ^ container columnsCache at: columnIndex! - 50 ] ] ]! Item was changed: ScrollPane subclass: #SimpleHierarchicalListMorph + instanceVariableNames: 'selectedMorph hoveredMorph getListSelector keystrokeActionSelector autoDeselect columns columnsCache sortingSelector getSelectionSelector setSelectionSelector potentialDropMorph lineColor' - instanceVariableNames: 'selectedMorph hoveredMorph getListSelector keystrokeActionSelector autoDeselect columns sortingSelector getSelectionSelector setSelectionSelector potentialDropMorph lineColor' classVariableNames: 'WrappedNavigation' poolDictionaries: '' category: 'Morphic-Explorer'! SimpleHierarchicalListMorph class instanceVariableNames: 'expandedForm notExpandedForm'! !SimpleHierarchicalListMorph commentStamp: 'ls 3/1/2004 12:15' prior: 0! Display a hierarchical list of items. Each item should be wrapped with a ListItemWrapper. For a simple example, look at submorphsExample. For beefier examples, look at ObjectExplorer or FileList2.! SimpleHierarchicalListMorph class instanceVariableNames: 'expandedForm notExpandedForm'! Item was changed: ----- Method: SimpleHierarchicalListMorph>>adjustSubmorphPositions (in category 'private') ----- adjustSubmorphPositions | p | p := 0@0. scroller submorphsDo: [ :each | | h | each visible ifTrue: [ h := each height. each privateBounds: (p extent: self preferredSubmorphWidth@h). p := p + (0@h) ]]. self + clearColumnsCache; changed; layoutChanged; setScrollDeltas. ! Item was added: + ----- Method: SimpleHierarchicalListMorph>>clearColumnsCache (in category 'private - caching') ----- + clearColumnsCache + + columnsCache := self columns + ifNil: [Array empty] + ifNotNil: [:c | Array new: c size].! Item was added: + ----- Method: SimpleHierarchicalListMorph>>columnsCache (in category 'private - caching') ----- + columnsCache + columnsCache ifNil: [self clearColumnsCache]. + ^ columnsCache! Item was changed: ----- Method: SimpleHierarchicalListMorph>>drawLinesOn: (in category 'drawing') ----- drawLinesOn: aCanvas | lColor | lColor := self lineColor. aCanvas transformBy: scroller transform clippingTo: scroller innerBounds during:[:clippedCanvas | + scroller submorphsDo: [ :submorph | + (submorph visible and: [(submorph isExpanded + or: [clippedCanvas isVisible: submorph fullBounds] ) + or: [ submorph nextSibling notNil and: [clippedCanvas isVisible: submorph nextSibling fullBounds]]]) + ifTrue: [submorph drawLinesOn: clippedCanvas lineColor: lColor indentThreshold: 0] ] ] - scroller submorphs - select: [:submorph | submorph visible] - thenDo: [ :submorph | - ((submorph isExpanded - or: [clippedCanvas isVisible: submorph fullBounds] ) - or: [ submorph nextSibling notNil and: [clippedCanvas isVisible: submorph nextSibling bounds]]) - ifTrue: [submorph drawLinesOn: clippedCanvas lineColor: lColor indentThreshold: 0] ] ] smoothing: scroller smoothing. ! From smalltalk at stefan-marr.de Fri Apr 29 13:45:16 2016 From: smalltalk at stefan-marr.de (Stefan Marr) Date: Fri Apr 29 13:46:20 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: <1461924602498-4892865.post@n4.nabble.com> References: <1461924602498-4892865.post@n4.nabble.com> Message-ID: <04C1532A-346C-4FEB-97C9-50050F2EBF48@stefan-marr.de> Hi Tim: > On 29 Apr 2016, at 12:10, timfelgentreff wrote: > > what does your squeak-vm.sh script do? Because on Squeak, I cannot simply > type --help and get output. The mailing list thread you linked refers to > something Pharo specific that I don?t think we have in Squeak. At least in Pharo there was/is a way to register a handler for the startup. SMark used to do that. It then will process the command line arguments. I don?t remember the details, sorry, and currently don?t have access to the code to check. Best regards Stefan > > > Stefan Marr-3 wrote >> Hi Tim: >> >>> On 28 Apr 2016, at 13:01, Tim Felgentreff < > >> timfelgentreff@ > >> > wrote: >>> >>>> - can it be controlled from the command line? >>> >>> Yes, provided you mean "use a .st file argument". To run a benchmark >>> you can write e.g. >>> - BenchmarkAutosizeSuite run: {'BenchmarkSimpleStatisticsReporter'. >>> 'SMarkShootout'. 100}. # runs all shootout benchmarks for 100 outer >>> iterations, reporting statistics in the autosize suite >>> - BenchmarkCogSuite run: {'BenchmarkSimpleStatisticsReporter'. >>> 'SMarkShootout.benchBinaryTrees'. 100}. # runs the binarytrees >>> benchmarks for 100 outer iterations without autosizing, but with one >>> extra iteration for warmup >> >> I look at your changes to the code, but if you didn?t remove any SMark >> features, there is also a proper command-line interface. >> >> See: >> http://forum.world.st/Convention-to-build-cmd-line-interfaces-with-Pharo-td3524056.html >> >> $ squeak-vm.sh Pharo-1.2.image --help >> SMark Benchmark Framework, version: SMark-StefanMarr.12 >> >> Usage: <vm+image> SMarkHarness [runner] [reporter] >> >> >> [iterations [processes [problemSize]]] >> >> Arguments: >> runner optional, a SMarkRunner class that executes the >> benchmarks >> reporter optional, a SMarkReporter class that processes >> and displays the results >> suiteOrBenchmark required, either a SMarkSuite with benchmarks, >> or a benchmark denoted by Suite.benchName >> iterations optional, number of times the benchmarks are repeated >> processes optional, number of processes/threads used by the >> benchmarks >> problemSize optional, depending on benchmark for instance number >> of >> inner iterations or size of used data set >> >> >> Best regards >> Stefan >> >> -- >> Stefan Marr >> Johannes Kepler Universit?t Linz >> http://stefan-marr.de/research/ > > > > > > -- > View this message in context: http://forum.world.st/A-Benchmarking-tool-for-the-trunk-tp4892463p4892865.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. From digit at sonic.net Fri Apr 29 15:00:08 2016 From: digit at sonic.net (Tim Johnson) Date: Fri Apr 29 15:00:55 2016 Subject: [squeak-dev] Cog's Date today = 8 January 1608? Message-ID: <52CD7423-42F8-4550-A62D-81287B7396C7@sonic.net> Hello Squeakers, I have seen a few cases now where I load up an older Squeak image with a newer Cog VM, and "Date today" returns a date like '8 January 1608'. I used to regularly (and safely, I thought) use newer VMs to open older images, but that was more in the days when the Carbon VM was still being updated. This has happened to me on both Windows and OS X. A Cog version which still works is #3390. A Cog version which does not is #3663. Should I not use any Squeak image version below a certain cutoff when using new Cog VMs? Is that documented anywhere? (Q: "Why would you want to use older images anyway?" A: "They were laying around from older projects" or A: "I take them from inside older 'All-in-one' packages so I can quickly have a functioning Seaside/WAKom-or-WebClient setup") Thanks! Tim From digit at sonic.net Fri Apr 29 15:07:37 2016 From: digit at sonic.net (Tim Johnson) Date: Fri Apr 29 15:08:16 2016 Subject: [squeak-dev] Cog's Date today = 8 January 1608? In-Reply-To: <52CD7423-42F8-4550-A62D-81287B7396C7@sonic.net> References: <52CD7423-42F8-4550-A62D-81287B7396C7@sonic.net> Message-ID: <1A7F4F04-3261-44B4-A054-778A453EC732@sonic.net> Nevermind! I thought I was using the April 23rd Cog VM but was not. The newest VM #3684 does not have this problem (as suggested in the ChangeLog!) Please disregard! Thanks again, Tim On Apr 29, 2016, at 8:00 AM, Tim Johnson wrote: > Hello Squeakers, > > I have seen a few cases now where I load up an older Squeak image with a newer Cog VM, and "Date today" returns a date like '8 January 1608'. > > I used to regularly (and safely, I thought) use newer VMs to open older images, but that was more in the days when the Carbon VM was still being updated. > > This has happened to me on both Windows and OS X. > > A Cog version which still works is #3390. A Cog version which does not is #3663. > > Should I not use any Squeak image version below a certain cutoff when using new Cog VMs? Is that documented anywhere? > > (Q: "Why would you want to use older images anyway?" A: "They were laying around from older projects" or A: "I take them from inside older 'All-in-one' packages so I can quickly have a functioning Seaside/WAKom-or-WebClient setup") > > Thanks! > Tim > > > From leves at caesar.elte.hu Fri Apr 29 16:46:02 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri Apr 29 16:46:51 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1124.mcz In-Reply-To: References: Message-ID: On Fri, 29 Apr 2016, commits@source.squeak.org wrote: > Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-mt.1124.mcz > > ==================== Summary ==================== > > Name: Morphic-mt.1124 > Author: mt > Time: 29 April 2016, 1:04:05.656719 pm > UUID: 20b80e2e-df90-fa43-bf17-339878efb46a > Ancestors: Morphic-cmm.1123 > > Speeds up drawing of large tree morphs by introducing a cache for the width of each column. Invalidate that cache each time the nodes in the tree are re-layouted. > > Try out "CompiledMethod allInstances explore" before and after this change. Have "PluggableListMorph highlightHoveredRow: true". > > Why? Computation of largest item in a column is O(n) at the moment. Drawing code needs width of column to position the strings in each row. Each row is a (string) morph and the columns are "faked". > > =============== Diff against Morphic-cmm.1123 =============== > > Item was changed: > ----- Method: IndentingListItemMorph>>widthOfColumn: (in category 'accessing - columns') ----- > widthOfColumn: columnIndex > | widthOrSpec | > container columns ifNil: [ ^ self width ]. > + (container columnsCache at: columnIndex) > + ifNotNil: [ :cachedWidth | ^ cachedWidth ]. > widthOrSpec := container columns at: columnIndex. > + container columnsCache at: columnIndex put: (widthOrSpec isNumber > - ^ widthOrSpec isNumber > ifTrue: [ widthOrSpec ] > ifFalse: > [ widthOrSpec isBlock > ifTrue: > [ widthOrSpec > cull: container > cull: self ] > ifFalse: > [ widthOrSpec > ifNil: [ self width ] > ifNotNil: [ "Fall back" > + 50 ] ] ]). > + ^ container columnsCache at: columnIndex! Why do a lookup when the previous expression returns the same value? Levente From Marcel.Taeumel at hpi.de Fri Apr 29 18:49:22 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Apr 29 19:24:08 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1124.mcz In-Reply-To: References: Message-ID: <1461955762558-4892991.post@n4.nabble.com> Hi Levente, what do you refer to? The width for a column will be computed only once now and then accessed only. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1124-mcz-tp4892867p4892991.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From nicolas.cellier.aka.nice at gmail.com Fri Apr 29 19:27:04 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Fri Apr 29 19:28:02 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1124.mcz In-Reply-To: <1461955762558-4892991.post@n4.nabble.com> References: <1461955762558-4892991.post@n4.nabble.com> Message-ID: 2016-04-29 20:49 GMT+02:00 marcel.taeumel : > Hi Levente, > > what do you refer to? The width for a column will be computed only once now > and then accessed only. > > Best, > Marcel > > > Hi Marcel, at:put: will answer the put object. So rather than self at: key put: value. ^self at: key you can ^self at: key put: value > > -- > View this message in context: > http://forum.world.st/The-Trunk-Morphic-mt-1124-mcz-tp4892867p4892991.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160429/75f276e8/attachment-0001.htm From Marcel.Taeumel at hpi.de Sat Apr 30 10:40:34 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Apr 30 11:17:37 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1124.mcz In-Reply-To: References: <1461955762558-4892991.post@n4.nabble.com> Message-ID: <1462012834241-4893032.post@n4.nabble.com> Ah, of course. Thanks for the pointer. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1124-mcz-tp4892867p4893032.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Apr 30 11:26:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 30 11:31:12 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1125.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1125.mcz ==================== Summary ==================== Name: Morphic-mt.1125 Author: mt Time: 30 April 2016, 1:25:26.55802 pm UUID: a37cda7d-4db4-b844-a7d1-5efc7a252908 Ancestors: Morphic-mt.1124 We can directly return at:put: because it returns the stored value. No additional lookup necessary. =============== Diff against Morphic-mt.1124 =============== Item was changed: ----- Method: IndentingListItemMorph>>widthOfColumn: (in category 'accessing - columns') ----- widthOfColumn: columnIndex | widthOrSpec | container columns ifNil: [ ^ self width ]. (container columnsCache at: columnIndex) ifNotNil: [ :cachedWidth | ^ cachedWidth ]. widthOrSpec := container columns at: columnIndex. + ^ container columnsCache at: columnIndex put: (widthOrSpec isNumber - container columnsCache at: columnIndex put: (widthOrSpec isNumber ifTrue: [ widthOrSpec ] ifFalse: [ widthOrSpec isBlock ifTrue: [ widthOrSpec cull: container cull: self ] ifFalse: [ widthOrSpec ifNil: [ self width ] ifNotNil: [ "Fall back" + 50 ] ] ])! - 50 ] ] ]). - ^ container columnsCache at: columnIndex! From asqueaker at gmail.com Sat Apr 30 16:12:26 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sat Apr 30 16:16:06 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: <04C1532A-346C-4FEB-97C9-50050F2EBF48@stefan-marr.de> References: <1461924602498-4892865.post@n4.nabble.com> <04C1532A-346C-4FEB-97C9-50050F2EBF48@stefan-marr.de> Message-ID: Squeak always processes command-line arguments. If the #readDocumentAtStartup Preference in the image is set (the default), it will treat the first image argument as a URL referring to a Smalltalk script to execute, and the subsequent ones as arguments to that script: squeak -vm [vmArgs] myImage.image [urlToSmalltalkScript] [scriptArg1 scriptArg2 ...] There's a convenience method provides easy access to those arguments and basic error handling for headless running via "This code goes in a text file and referred to by the urlToSmalltalkScript" Smalltalk run: [ :scriptArg1 :scriptArg2 | "... your script..." ] If readDocumentAtStartup is not set, then each image argument is simply passed in as an Array of Strings. squeak -vm [vmArgs] myImage.image [imageArg1 imageArg2 imageArg3 ...] On Fri, Apr 29, 2016 at 8:45 AM, Stefan Marr wrote: > Hi Tim: > >> On 29 Apr 2016, at 12:10, timfelgentreff wrote: >> >> what does your squeak-vm.sh script do? Because on Squeak, I cannot simply >> type --help and get output. The mailing list thread you linked refers to >> something Pharo specific that I don?t think we have in Squeak. > > At least in Pharo there was/is a way to register a handler for the startup. > SMark used to do that. It then will process the command line arguments. > > I don?t remember the details, sorry, and currently don?t have access to the code to check. > > Best regards > Stefan > >> >> >> Stefan Marr-3 wrote >>> Hi Tim: >>> >>>> On 28 Apr 2016, at 13:01, Tim Felgentreff < >> >>> timfelgentreff@ >> >>> > wrote: >>>> >>>>> - can it be controlled from the command line? >>>> >>>> Yes, provided you mean "use a .st file argument". To run a benchmark >>>> you can write e.g. >>>> - BenchmarkAutosizeSuite run: {'BenchmarkSimpleStatisticsReporter'. >>>> 'SMarkShootout'. 100}. # runs all shootout benchmarks for 100 outer >>>> iterations, reporting statistics in the autosize suite >>>> - BenchmarkCogSuite run: {'BenchmarkSimpleStatisticsReporter'. >>>> 'SMarkShootout.benchBinaryTrees'. 100}. # runs the binarytrees >>>> benchmarks for 100 outer iterations without autosizing, but with one >>>> extra iteration for warmup >>> >>> I look at your changes to the code, but if you didn?t remove any SMark >>> features, there is also a proper command-line interface. >>> >>> See: >>> http://forum.world.st/Convention-to-build-cmd-line-interfaces-with-Pharo-td3524056.html >>> >>> $ squeak-vm.sh Pharo-1.2.image --help >>> SMark Benchmark Framework, version: SMark-StefanMarr.12 >>> >>> Usage: <vm+image> SMarkHarness [runner] [reporter] >>> >>> >>> [iterations [processes [problemSize]]] >>> >>> Arguments: >>> runner optional, a SMarkRunner class that executes the >>> benchmarks >>> reporter optional, a SMarkReporter class that processes >>> and displays the results >>> suiteOrBenchmark required, either a SMarkSuite with benchmarks, >>> or a benchmark denoted by Suite.benchName >>> iterations optional, number of times the benchmarks are repeated >>> processes optional, number of processes/threads used by the >>> benchmarks >>> problemSize optional, depending on benchmark for instance number >>> of >>> inner iterations or size of used data set >>> >>> >>> Best regards >>> Stefan >>> >>> -- >>> Stefan Marr >>> Johannes Kepler Universit?t Linz >>> http://stefan-marr.de/research/ >> >> >> >> >> >> -- >> View this message in context: http://forum.world.st/A-Benchmarking-tool-for-the-trunk-tp4892463p4892865.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From commits at source.squeak.org Sat Apr 30 19:20:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 30 19:23:40 2016 Subject: [squeak-dev] The Trunk: ST80-dtl.204.mcz Message-ID: David T. Lewis uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-dtl.204.mcz ==================== Summary ==================== Name: ST80-dtl.204 Author: dtl Time: 30 April 2016, 3:19:53.457686 pm UUID: acbcf1f1-f922-49b2-a551-cc7bcec09d61 Ancestors: ST80-mt.203 Simplify unloading and reloading MVC. Originally described circa Squeak 4.1: http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-February/144305.html The original SystemImage>>zapMVCProjects method is reimplemented as MVCProject class>>removeProjectsFromSystem. To completely remove MVC: "MVCProject unloadMVC". To reinstall MVC, load packages ST80, ST880Tools, ST80Tests, and ToolBuild-MVC from the trunk repository. Note - unloading MVC when the current project is MVC should work, but does not. =============== Diff against ST80-mt.203 =============== Item was added: + ----- Method: MVCProject class>>removeProjectsFromSystem (in category 'shrinking') ----- + removeProjectsFromSystem + "Remove all MVC projects from the system, reorganizing the project hierarchy as needed. + This method was originally implemented as SmalltalkImage>>zapMVCProjects in earlier + versions of Squeak." + + "MVCProject removeProjectsFromSystem" + + Smalltalk garbageCollect. "So allInstances is precise" + Project + allSubInstancesDo: [:proj | | window | proj isTopProject + ifTrue: [(proj isKindOf: self) + ifTrue: ["Root project is MVC -- we must become the root" + Project current setParent: Project current.]] + ifFalse: [(proj parent isKindOf: self) + ifTrue: [(proj isKindOf: self) + ifFalse: ["Remove Morphic projects from MVC views " + "... and add them back here." + window := (SystemWindow labelled: proj name) + model: proj. + window + addMorph: (ProjectViewMorph on: proj) + frame: (0 @ 0 corner: 1.0 @ 1.0). + window openInWorld. + proj setParent: Project current]]. + (proj isKindOf: self) + ifTrue: ["Remove MVC projects from Morphic views" + Project deletingProject: proj]]]! Item was added: + ----- Method: MVCProject class>>unloadMVC (in category 'shrinking') ----- + unloadMVC + "Completely remove MVC from the system. All MVC projects will be destroyed. + To reinstall MVC, load all of the ST80 and MVCToolbuilder packages." + + "MVCProject unloadMVC" + + self removeProjectsFromSystem. + ScheduledControllers := nil. + { 'ToolBuilder-MVC' . 'ST80Tests' . 'ST80Tools' . 'ST80' } + do: [ :package | (MCPackage named: package) unload ]. + + ! From askoh at askoh.com Sat Apr 30 18:48:46 2016 From: askoh at askoh.com (askoh) Date: Sat Apr 30 19:27:04 2016 Subject: [squeak-dev] CODE GLADIATORS 2016 competition Message-ID: <1462042126473-4893064.post@n4.nabble.com> This competition is a good place for Smalltalk to shine. Although held in India it is fast drawing international participation. Go Smalltalk. Be the best out there. http://www.prnewswire.co.in/news-releases/indias-biggest-coding-arena-is-back---techgig-code-gladiators-2016-577381961.html http://www.techgig.com/codegladiators -- View this message in context: http://forum.world.st/CODE-GLADIATORS-2016-competition-tp4893064.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From timfelgentreff at gmail.com Sat Apr 30 22:24:25 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Sat Apr 30 22:28:37 2016 Subject: [squeak-dev] A Benchmarking tool for the trunk? In-Reply-To: References: <1461924602498-4892865.post@n4.nabble.com> <04C1532A-346C-4FEB-97C9-50050F2EBF48@stefan-marr.de> Message-ID: Hi Chris and Stefan yes, the Squeak cmdline arg processing through a file is what I'm using, but Pharo supports different ( more 'traditional looking') stuff afaict. If there was code specific to the Pharo way of doing it, I'm SMark, I don't know about it, since I haven't used Pharo for a few years (and RSqueak doesn't work with it, because they removed some of the fallback code for primitives that we don't implement). I can look at the code, but I would be against a command line interface that doesn't work the same across different Smalltalk distributions. But we can certainly think about how to improve it. cheers, Tim On 30 April 2016 at 18:12, Chris Muller wrote: > Squeak always processes command-line arguments. If the > #readDocumentAtStartup Preference in the image is set (the default), > it will treat the first image argument as a URL referring to a > Smalltalk script to execute, and the subsequent ones as arguments to > that script: > > squeak -vm [vmArgs] myImage.image [urlToSmalltalkScript] > [scriptArg1 scriptArg2 ...] > > There's a convenience method provides easy access to those arguments > and basic error handling for headless running via > > "This code goes in a text file and referred to by the > urlToSmalltalkScript" > Smalltalk run: [ :scriptArg1 :scriptArg2 | "... your script..." ] > > If readDocumentAtStartup is not set, then each image argument is > simply passed in as an Array of Strings. > > squeak -vm [vmArgs] myImage.image [imageArg1 imageArg2 imageArg3 ...] > > On Fri, Apr 29, 2016 at 8:45 AM, Stefan Marr wrote: >> Hi Tim: >> >>> On 29 Apr 2016, at 12:10, timfelgentreff wrote: >>> >>> what does your squeak-vm.sh script do? Because on Squeak, I cannot simply >>> type --help and get output. The mailing list thread you linked refers to >>> something Pharo specific that I don?t think we have in Squeak. >> >> At least in Pharo there was/is a way to register a handler for the startup. >> SMark used to do that. It then will process the command line arguments. >> >> I don?t remember the details, sorry, and currently don?t have access to the code to check. >> >> Best regards >> Stefan >> >>> >>> >>> Stefan Marr-3 wrote >>>> Hi Tim: >>>> >>>>> On 28 Apr 2016, at 13:01, Tim Felgentreff < >>> >>>> timfelgentreff@ >>> >>>> > wrote: >>>>> >>>>>> - can it be controlled from the command line? >>>>> >>>>> Yes, provided you mean "use a .st file argument". To run a benchmark >>>>> you can write e.g. >>>>> - BenchmarkAutosizeSuite run: {'BenchmarkSimpleStatisticsReporter'. >>>>> 'SMarkShootout'. 100}. # runs all shootout benchmarks for 100 outer >>>>> iterations, reporting statistics in the autosize suite >>>>> - BenchmarkCogSuite run: {'BenchmarkSimpleStatisticsReporter'. >>>>> 'SMarkShootout.benchBinaryTrees'. 100}. # runs the binarytrees >>>>> benchmarks for 100 outer iterations without autosizing, but with one >>>>> extra iteration for warmup >>>> >>>> I look at your changes to the code, but if you didn?t remove any SMark >>>> features, there is also a proper command-line interface. >>>> >>>> See: >>>> http://forum.world.st/Convention-to-build-cmd-line-interfaces-with-Pharo-td3524056.html >>>> >>>> $ squeak-vm.sh Pharo-1.2.image --help >>>> SMark Benchmark Framework, version: SMark-StefanMarr.12 >>>> >>>> Usage: <vm+image> SMarkHarness [runner] [reporter] >>>> >>>> >>>> [iterations [processes [problemSize]]] >>>> >>>> Arguments: >>>> runner optional, a SMarkRunner class that executes the >>>> benchmarks >>>> reporter optional, a SMarkReporter class that processes >>>> and displays the results >>>> suiteOrBenchmark required, either a SMarkSuite with benchmarks, >>>> or a benchmark denoted by Suite.benchName >>>> iterations optional, number of times the benchmarks are repeated >>>> processes optional, number of processes/threads used by the >>>> benchmarks >>>> problemSize optional, depending on benchmark for instance number >>>> of >>>> inner iterations or size of used data set >>>> >>>> >>>> Best regards >>>> Stefan >>>> >>>> -- >>>> Stefan Marr >>>> Johannes Kepler Universit?t Linz >>>> http://stefan-marr.de/research/ >>> >>> >>> >>> >>> >>> -- >>> View this message in context: http://forum.world.st/A-Benchmarking-tool-for-the-trunk-tp4892463p4892865.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160501/4f2b0abe/attachment.htm From commits at source.squeak.org Sat Apr 30 23:43:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Apr 30 23:47:59 2016 Subject: [squeak-dev] The Trunk: ST80-dtl.205.mcz Message-ID: David T. Lewis uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-dtl.205.mcz ==================== Summary ==================== Name: ST80-dtl.205 Author: dtl Time: 30 April 2016, 7:43:03.419677 pm UUID: a7614348-9803-4259-a013-05b00b1022a5 Ancestors: ST80-dtl.204 Class comment for ProjectView =============== Diff against ST80-dtl.204 =============== Item was changed: StandardSystemView subclass: #ProjectView instanceVariableNames: '' classVariableNames: 'ArmsLengthCmd' poolDictionaries: '' category: 'ST80-Support'! + + !ProjectView commentStamp: 'dtl 4/30/2016 18:32' prior: 0! + I am a view of a project. I display a scaled version of the project's thumbnail, which itself is a scaled-down snapshot of the screen taken when the project was last exited. + ! From commits at source.squeak.org Sat Apr 30 23:57:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun May 1 00:00:51 2016 Subject: [squeak-dev] The Trunk: System-dtl.821.mcz Message-ID: David T. Lewis uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-dtl.821.mcz ==================== Summary ==================== Name: System-dtl.821 Author: dtl Time: 30 April 2016, 7:56:17.264854 pm UUID: d67cc3f2-58db-4b26-8926-c28b9faf67ac Ancestors: System-cmm.820 Let SmalltalkImage>>zapMVCprojects delegate to MVCProject. Let SmalltalkImage>>zapAllOtherProjects delegate to Project current. Add Project>>removeAllOtherProjects based on zapAllOtherProjects, and make it work for images containing various combinations of MVC and Morphic projects. Change Project class>>deletingProject: to look for project views (child projects) that need to be closed in MVC projects. This method could do with some additional refactoring to remove the Smalltalk at:ifAbsent: tests. =============== Diff against System-cmm.820 =============== Item was changed: ----- Method: Project class>>deletingProject: (in category 'utilities') ----- deletingProject: outgoingProject + | pvmClass pvControllerClass | - | pvmClass | pvmClass := Smalltalk at: #ProjectViewMorph ifAbsent: [nil]. + pvControllerClass := Smalltalk at: #ProjectController ifAbsent: [nil]. ImageSegment allSubInstancesDo: [:seg | seg ifOutPointer: outgoingProject thenAllObjectsDo: [:obj | (obj isKindOf: pvmClass) ifTrue: [obj deletingProject: outgoingProject. obj abandon]. (obj isKindOf: Project) ifTrue: [obj deletingProject: outgoingProject]]]. self allProjects do: [:p | p deletingProject: outgoingProject]. "ones that are in" pvmClass ifNotNil: [ pvmClass allSubInstancesDo: [:p | p deletingProject: outgoingProject. p project == outgoingProject ifTrue: [p abandon]]]. + pvControllerClass ifNotNil: [ + pvControllerClass allInstancesDo: [ :pvc | + ((pvc model parent isNil or: [pvc model parent == Project current]) and: [pvc model == outgoingProject]) + ifTrue: [ pvc closeAndUnscheduleNoTerminate ]]]. AllProjects := self allProjects copyWithout: outgoingProject.! Item was added: + ----- Method: Project>>removeAllOtherProjects (in category 'shrinking') ----- + removeAllOtherProjects + "Remove all other projects from the system, and set the current project as the root + project. This method was originally implemented as SmalltalkImage>>zapAllOtherProjects + in earlier versions of Squeak." + + "Project current removeAllOtherProjects" + + Project allSubInstancesDo: [:p | p setParent: nil]. + Project current setParent: Project current. + ScheduledControllers == Project current world ifFalse: [ScheduledControllers := nil]. + TheWorldMenu allInstancesDo: [:m | 1 to: m class instSize do: [:i | m instVarAt: i put: nil]]. + ChangeSet classPool at: #AllChangeSets put: nil. + Project classPool at: #AllProjects put: nil. + ProjectHistory currentHistory initialize. + CommandHistory resetAllHistory. + ChangeSet initialize. + Project rebuildAllProjects. "Does a GC" + Project allSubInstancesDo: [:p | + p == Project current ifFalse: [Project deletingProject: p]]. + ^Project current. + ! Item was changed: ----- Method: SmalltalkImage>>zapAllOtherProjects (in category 'shrinking') ----- zapAllOtherProjects "Smalltalk zapAllOtherProjects" - "Note: as of this writing, the only reliable way to get rid of all but the current project is te execute the following, one line at a time... - Smalltalk zapAllOtherProjects. - ProjectHistory currentHistory initialize. - Smalltalk garbageCollect. - Project rebuildAllProjects. - " + Project current removeAllOtherProjects + ! - - Project allInstancesDo: [:p | p setParent: nil]. - Project current setParent: Project current. - Project current isMorphic ifTrue: [ScheduledControllers := nil]. - TheWorldMenu allInstancesDo: [:m | 1 to: m class instSize do: [:i | m instVarAt: i put: nil]]. - ChangeSet classPool at: #AllChangeSets put: nil. - Project classPool at: #AllProjects put: nil. - ProjectHistory currentHistory initialize. - CommandHistory resetAllHistory. - ChangeSet initialize. - Project rebuildAllProjects. "Does a GC" - Project allProjects size > 1 ifTrue: [Project allProjects inspect]! Item was changed: ----- Method: SmalltalkImage>>zapMVCprojects (in category 'shrinking') ----- zapMVCprojects "Smalltalk zapMVCprojects" - + (Smalltalk classNamed: #MVCProject) + ifNotNilDo: [:mvc | mvc removeProjectsFromSystem] + ! - self flag: #bob. "zapping projects" - - Smalltalk garbageCollect. - "So allInstances is precise" - Project - allSubInstancesDo: [:proj | | window | proj isTopProject - ifTrue: [proj isMorphic - ifFalse: ["Root project is MVC -- we must become the root" - Project current setParent: Project current.]] - ifFalse: [proj parent isMorphic - ifFalse: [proj isMorphic - ifTrue: ["Remove Morphic projects from MVC - views " - "... and add them back here." - window := (SystemWindow labelled: proj name) - model: proj. - window - addMorph: (ProjectViewMorph on: proj) - frame: (0 @ 0 corner: 1.0 @ 1.0). - window openInWorld. - proj setParent: Project current]]. - proj isMorphic - ifFalse: ["Remove MVC projects from Morphic views" - Project deletingProject: proj]]]!