From Marcel.Taeumel at hpi.de Fri Jan 1 13:06:42 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Jan 1 13:26:41 2016 Subject: [squeak-dev] Re: The Inbox: Collections-cmm.673.mcz In-Reply-To: References: Message-ID: <1451653602537-4868959.post@n4.nabble.com> Hi Chris, what about using the idea of HashedCollection >> #growSize? It is "self class goodPrimeAtLeast: array size * 3 // 2 + 2". Is it specific to hashing that a prime number is used there? Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Collections-cmm-673-mcz-tp4868946p4868959.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Jan 1 13:43:11 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Jan 1 14:03:09 2016 Subject: [squeak-dev] Re: Delayed preference color updating In-Reply-To: References: Message-ID: <1451655791841-4868960.post@n4.nabble.com> Hi Karl. I like it the non-modal way. It feels more immediate/direct. The button "close" does not suggest a "save operation." If we would make it modal, we would have to add another button to have "Save" and "Cancel". I don't like the way that the button/morph is used as a value holder for the color because we rely on that the button does not modify the color internally. To solve this problem, I would rather directly invoke the color picker in PBColorPreferenceView >> #changeColor:. For the new color picker, I would add some processing block for the target as an alternative to the hard-coded #color: message send. Like this: (NewColorPickerMorph with: [:newColor | aButton color: newColor. self preference preferenceValue: newColor. aButton label: newColor asString. self adjustLabelColor]) openInWorld. The color picker can evaluate the block with the new color as needed. The block closures the button and the preference view. Best, Marcel -- View this message in context: http://forum.world.st/Delayed-preference-color-updating-tp4868940p4868960.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Fri Jan 1 15:30:51 2016 From: karlramberg at gmail.com (karl ramberg) Date: Fri Jan 1 15:30:53 2016 Subject: [squeak-dev] Re: Delayed preference color updating In-Reply-To: <1451655791841-4868960.post@n4.nabble.com> References: <1451655791841-4868960.post@n4.nabble.com> Message-ID: Hi, Thanks for reply. I was thinking of using a block, but I was unsure how to use it :-) I will see what I can come up with. The functionality must work according to what color picker i selected in the preference for color picker also ;-) Happy new year Best, Karl On Fri, Jan 1, 2016 at 2:43 PM, marcel.taeumel wrote: > Hi Karl. > > I like it the non-modal way. It feels more immediate/direct. The button > "close" does not suggest a "save operation." If we would make it modal, we > would have to add another button to have "Save" and "Cancel". > > I don't like the way that the button/morph is used as a value holder for > the > color because we rely on that the button does not modify the color > internally. > > To solve this problem, I would rather directly invoke the color picker in > PBColorPreferenceView >> #changeColor:. For the new color picker, I would > add some processing block for the target as an alternative to the > hard-coded > #color: message send. Like this: > > (NewColorPickerMorph with: [:newColor | > aButton color: newColor. > self preference preferenceValue: newColor. > aButton label: newColor asString. > self adjustLabelColor]) openInWorld. > > The color picker can evaluate the block with the new color as needed. The > block closures the button and the preference view. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Delayed-preference-color-updating-tp4868940p4868960.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/20160101/e5957beb/attachment.htm From Marcel.Taeumel at hpi.de Fri Jan 1 20:23:16 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Jan 1 20:43:16 2016 Subject: [squeak-dev] Re: Delayed preference color updating In-Reply-To: References: <1451655791841-4868960.post@n4.nabble.com> Message-ID: <1451679796870-4868982.post@n4.nabble.com> Well, I think there is a trade-off and you might want to just duplicate the code from Morph >> #changeColor into PBColorPreferenceView >> #changeColor: to call the different versions of color picker accordingly. I guess there is no need to over-engineer something here. Maybe we should get rid of the old color picker and add a "modal mode" for the the new one. Best, Marcel -- View this message in context: http://forum.world.st/Delayed-preference-color-updating-tp4868940p4868982.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Fri Jan 1 21:24:46 2016 From: karlramberg at gmail.com (karl ramberg) Date: Fri Jan 1 21:24:49 2016 Subject: [squeak-dev] Re: Delayed preference color updating In-Reply-To: <1451679796870-4868982.post@n4.nabble.com> References: <1451655791841-4868960.post@n4.nabble.com> <1451679796870-4868982.post@n4.nabble.com> Message-ID: The new color picker i mostly nice. That you can not pick up colors outside of it is not good. I'm not successful in writing this code though. I can not get the block to work like I want to... Best, Karl On Fri, Jan 1, 2016 at 9:23 PM, marcel.taeumel wrote: > Well, I think there is a trade-off and you might want to just duplicate the > code from Morph >> #changeColor into PBColorPreferenceView >> #changeColor: > to call the different versions of color picker accordingly. > > I guess there is no need to over-engineer something here. Maybe we should > get rid of the old color picker and add a "modal mode" for the the new one. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Delayed-preference-color-updating-tp4868940p4868982.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/20160101/024b75ec/attachment.htm From commits at source.squeak.org Fri Jan 1 21:43:35 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 1 21:43:36 2016 Subject: [squeak-dev] The Trunk: Collections-cmm.674.mcz Message-ID: Chris Muller uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-cmm.674.mcz ==================== Summary ==================== Name: Collections-cmm.674 Author: cmm Time: 1 January 2016, 3:43:14.755 pm UUID: 452abff3-64a7-416c-bea5-05d143213289 Ancestors: Collections-eem.672 Don't convert FinalizationDependents to a strongly-referencing Array when growing it, leave it weak. =============== Diff against Collections-eem.672 =============== Item was changed: ----- Method: WeakArray class>>addWeakDependent: (in category 'accessing') ----- addWeakDependent: anObject FinalizationLock critical: [ | emptySlotIndex | emptySlotIndex := FinalizationDependents identityIndexOf: nil ifAbsent: [ | newIndex | newIndex := FinalizationDependents size + 1. "Grow linearly" + FinalizationDependents := (FinalizationDependents grownBy: 10) as: WeakArray. - FinalizationDependents := FinalizationDependents grownBy: 10. newIndex ]. FinalizationDependents at: emptySlotIndex put: anObject ] ifError: [ :msg :rcvr | rcvr error: msg ]! Item was changed: + (PackageInfo named: 'Collections') postscript: 'WeakArray restartFinalizationProcess'! - (PackageInfo named: 'Collections') postscript: 'CharacterSet allInstancesDo: #size'! From asqueaker at gmail.com Fri Jan 1 21:45:04 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Jan 1 21:45:47 2016 Subject: [squeak-dev] Re: The Inbox: Collections-cmm.673.mcz In-Reply-To: <1451653602537-4868959.post@n4.nabble.com> References: <1451653602537-4868959.post@n4.nabble.com> Message-ID: > what about using the idea of HashedCollection >> #growSize? It is "self > class goodPrimeAtLeast: array size * 3 // 2 + 2". Is it specific to hashing > that a prime number is used there? Yes.. and now I understand why it grows linearly; because its a linearly-searched Array. The elements are not interspersed as in a HashedCollection, we don't "need" the extra room for that purpose, it was just to reduce the number of times it needs to grwo by a factor of 10. My change simply reduces the number of times it must grow even more, however, since it appears we have nothing to ever shrink it back down, we should not be growing by double right now, because that would waste too many slots. This way, a max of 10 slots is wasted. Still, we need the as: WeakArray fix.. From lists at fniephaus.com Fri Jan 1 22:08:36 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Fri Jan 1 22:08:50 2016 Subject: [squeak-dev] OT: Convince me github is a wise choice In-Reply-To: References: Message-ID: "Python moves to GitHub": https://mail.python.org/pipermail/core-workflow/2016-January/000345.html On Mon, Dec 21, 2015 at 10:52 AM Fabio Niephaus wrote: > On Mon, Dec 21, 2015 at 7:17 AM Colin Putney wrote: > >> On Thu, Dec 17, 2015 at 9:29 AM, Eliot Miranda >> wrote: >> >> >>> Ah, that's interesting. So my concern is whether github is a safe >>> long-term bet. Specifically what is there to prevent some third party from >>> buying github, or of github going public and the board taking the decision, >>> or github on its own, deciding to charge for hosting, keeping the data >>> hostage to extract payment? What safeguards are in place to prevent this? >>> I'm not interested in "this will never happen" arguments. I'm interested >>> in hard data please. >>> >> >> This sounds like a risk management problem. We want to minimize the risk >> that we lose access to the source code and it's history, right? Is there >> other data that you are concerned about? >> >> With regard to GitHub, I think these are the interesting questions: >> >> >> 1. What are the chances that GitHub will stop providing free hosting >> to open source projects? >> 2. What are the consequences if #1 occurs? >> 3. What can we do about it? >> >> First, let's look at #1. This sort of thing does happen. Holding data >> hostage is unusual, but free online services get shut down all the time. >> What might cause *Github* to do it? >> >> Could they be forced to cut expenses? Github has been around for almost 8 >> years, and have stuck with their model of "free public repositories, pay >> for privacy" throughout that time. It seems to be working for them. Three >> years ago one of their investors said they've been profitable over most of >> their life, and are growing revenue at 300% per year[1]. This summer, they >> raised $250 million more, with the company valued at $2 billion[2]. That >> indicates that they're still growing quickly, and think they'll be able to >> expand into new markets. So running out of money and dropping free hosting >> as a way to cut costs seems unlikely. >> >> How about a change in control? Maybe Oracle will buy them and squeeze as >> much profit out of them as possible before tossing the dry husk away. For >> that to happen, the offer would have to be spectacular. Github's investors >> need at least a 10x return, and probably more, to make money for their >> funds. If they were worth $2 billion this summer, the acquisition price >> would have to be something like $20-50 billion. That just doesn't allow the >> buyer much room to maneuver. There's no special technology behind Github >> that would make sense to to acquire at that price. Github's value is >> entirely in market position, customer relationships, goodwill etc. To make >> back the money, the buyer would need to keep running Github and keep >> earning revenue from it. >> >> Going public? Even less likely. Because of regulatory changes, tech >> companies have been waiting longer to go public and doing so at a much >> higher valuation. (Lots of different takes on this, but see eg. [3]) If >> Github went public, it would be because its valuation was so high that >> employees and investors wanted to (more easily) sell some shares and enjoy >> their wealth. That would be a huge endorsement of the business model and >> current management team. With few investors?only five so far[4]?the >> founders would undoubtedly retain control, similar to the IPOs of Google >> and Facebook. Messing with the business model would be unthinkable at that >> point. >> >> What if Github decided to change strategies without some sort of external >> impetus? That seems unlikely as well. The economics underlying the freemium >> strategy are getting more and more compelling over time. Disks are cheap, >> and the cost of storage keeps going down. I just ran across a new cloud >> storage service that charges half-a-cent per GB per month[5]. Computing >> power is also getting cheaper, and with cluster managers like Mesos and >> Kubernetes, we're using it more efficiently as well. The "burden" of >> providing free hosting is low and will be getting lower as time goes on. >> >> On the other hand, Github is *the* go-to place for hosting source code. >> There are millions of users that have both free public repositories and >> paid private ones. (Github reports 12 million users[6], and I bet a large >> fraction of them at least have access to both public and private >> repositories.) Taking away the free repositories would alienate a LOT of >> customers, and hurt revenue. >> >> So, without saying "this will never happen," I will say that Github >> shutting down free hosting would be unlikely. >> >> Alright, let's look at #2. If the unlikely did happen, what would be the >> consequences? >> >> As others have mentioned, the architecture of git makes it impossible to >> hold the source code and history hostage. Everyone who clones a git >> repository has a complete copy of the data. If they decided to lock >> everyone out of the repositories we'd just get another server and do this: >> >> cd coggit remote add origin git://git.squeak.org/cog.git >> git push origin master >> >> At the same time, we'd be in good company. Github currently has 30 >> million repositories[6]. Let's be really generous and say that half of >> those are private, and thus paid-for and exempt from hostage-taking. That >> means 15 million repositories are now subject to extortion from Github. >> Sure, most of those are personal forks with no significant changes. But >> even if there were only, say, 100,000 "real" repositories, that would be a >> *cataclysm* for the open source world. Alternate hosting would be popping >> up all over the place, and whatever inconvenience we might have about >> moving would be quickly solved by larger and richer open source projects. >> It wouldn't take much more than "here's our new git hosting" posted on the >> mailing list and squeak.org to make the change, because *everybody* >> would know about the problem. >> >> Finally, #3, what can we do about it? >> >> Well, in terms of influencing Github's business model, nothing. We have >> no leverage. So #1 is out of our control. >> >> But, there are a few things we can do to improve #2. First, we could >> mirror all commits to another repository. That could be a Github >> competitor, like BitBucket, or just a server that we host with Rackspace or >> whatever, or even "offline" storage like S3. I believe the Pharo folks are >> already mirroring the VM source, from the current hosting, so that helps >> reduce the risk as well. >> >> Second, we could move more of the VM source into Smalltalk. That might >> mean generating more of the source files with VM maker, running builds from >> within the image instead of using CMake etc. It probably wouldn't be worth >> it to make *all* the platform sources versioned in MC, but we could go >> further in that direction from where we are now. >> >> Finally, if it really did come down to Github holding the sources hostage >> and we had no other copies, we could just pay up. Currently, their cheapest >> plan is $7/month for 5 private repositories, which ought to cover our >> needs. Even with the meager donations that Squeak attracts today, surely we >> could raise $85 to get a year of paid hosting, and use that time to figure >> out what to do for the long term. Github might raise their prices (Why not? >> This scenario already has them being suicidally irrational.), but I can't >> see them exceeding our fundraising capabilities. What's the point of >> extortion if the victim can't pay? >> >> (As a side note, I would be shocked if hosting squeakvm.org currently >> costs less than $7/month. No idea who's paying for it, but how confident >> are we that they'll continue to do so?) >> >> In summary, Github is a very safe bet. Your nightmare scenario involves a >> series of very improbable events: Github would have to stop offering free >> hosting. They'd have to actively alienate their paying customers by holding >> their source code hostage. There would have to be sudden disk failures on >> dozens of laptops and servers where the repository is cloned. And to top it >> all off, the larger Squeak community, including Pharo, Cuis, Newspeak, >> Scratch and Croquet would have to be unable to come up with a few dozen >> dollars to pay for the hosting. >> >> This will never happen. >> >> Colin >> >> >> [1] http://peter.a16z.com/2012/07/09/software-eats-software-development/ >> [2] >> http://fortune.com/2015/07/29/github-raises-250-million-in-new-funding-now-valued-at-2-billion/ >> [3] >> http://www.forbes.com/sites/samanthasharf/2014/12/24/is-the-ipo-outmoded-why-venture-backed-companies-are-waiting-longer-to-go-public/ >> [4] https://www.crunchbase.com/organization/github/investors >> [5] https://www.backblaze.com/b2/cloud-storage.html >> [6] https://github.com/about/ >> >> > There's not much I can add to Colin's great write-up except that others > must > have asked themselves the same questions as well. If moving to GitHub was a > big risk, many companies wouldn't have done it already including the big > ones > (e.g. Microsoft , Google > and now even Apple > has even released Swift on GitHub). > > I am also +1 for GitHub. We have been successfully using it as a hosting > platform for student projects [1]. IMHO, it is very convenient to not > having to worry > about solved problems including infrastructure. Also, mirroring a git > repository > can be done with a simple cronjob. However, I must admit, that there's > still > potential to improve client-side tooling (git + Filetree), but at least I > don't have to > worry about running a server and maintaining a SqueakSource/SqueakMap > instance anymore. > > Lastly, we have been working on bringing Smalltalk support to Travis CI > which > will hopefully make it very easy to enable CI for any Smalltalk project on > GitHub. > An announcement will follow very soon. > > Happy holidays, > Fabio > > [1] https://github.com/hpi-swa-teaching > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160101/f9f59342/attachment.htm From commits at source.squeak.org Fri Jan 1 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 1 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160101225502.27211.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-January/009221.html Name: Collections-cmm.674 Ancestors: Collections-eem.672 Don't convert FinalizationDependents to a strongly-referencing Array when growing it, leave it weak. ============================================= From Marcel.Taeumel at hpi.de Sat Jan 2 08:18:18 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Jan 2 08:38:21 2016 Subject: [squeak-dev] Re: The Inbox: Collections-cmm.673.mcz In-Reply-To: References: <1451653602537-4868959.post@n4.nabble.com> Message-ID: <1451722698960-4869002.post@n4.nabble.com> +1 :) Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Collections-cmm-673-mcz-tp4868946p4869002.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Sat Jan 2 11:35:56 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Jan 2 11:36:01 2016 Subject: [squeak-dev] [OT] Open source everything Message-ID: Happy new year! http://gu.com/p/3q95q _,,,^..^,,,_ (phone) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160102/67d75937/attachment-0001.htm From btc at openinworld.com Sat Jan 2 13:39:52 2016 From: btc at openinworld.com (Ben Coman) Date: Sat Jan 2 13:40:15 2016 Subject: [squeak-dev] [OT] Open source everything In-Reply-To: References: Message-ID: On Sat, Jan 2, 2016 at 10:35 PM, Eliot Miranda wrote: > Happy new year! > > http://gu.com/p/3q95q insightful. happy new year. cheers -ben From lists at fniephaus.com Sat Jan 2 17:47:16 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Sat Jan 2 17:47:18 2016 Subject: [squeak-dev] [ANN] Squeak/Smalltalk on Travis-CI Message-ID: Happy New Year Everyone, We are excited to announce that Squeak is now officially supported on Travis-CI . This means you can finally set "language: smalltalk" in your *.travis.yml* in order to run tests for your GitHub-hosted Squeak/Smalltalk projects on Travis-CI. Builds will start in less than 10 seconds, because they run on Travis' new container-based infrastructure. The new build process comes with some great features such as faster build times, Linux and OS X support, and more [1]. We are currently discussing how to configure Smalltalk builds in the future (see [2]), but in the meantime, [3] should get you started. If you have any bug reports or feature requests, please file an issue at [4]. Also, feel free to contribute to the smalltalkCI framework that we are maintaining and that Travis uses to build your Smalltalk projects. Happy testing! Steffen, Jonas, Lennard, Christopher and Fabio (HPI students) [1] https://github.com/hpi-swa/smalltalkCI#features [2] https://github.com/hpi-swa/smalltalkCI/issues/20 [3] https://github.com/hpi-swa/smalltalkCI#how-to-use [4] https://github.com/hpi-swa/smalltalkCI/issues -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160102/ac586250/attachment.htm From frank.shearar at gmail.com Sat Jan 2 22:41:56 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Sat Jan 2 22:41:59 2016 Subject: [squeak-dev] [ANN] Squeak/Smalltalk on Travis-CI In-Reply-To: References: Message-ID: On 2 January 2016 at 17:47, Fabio Niephaus wrote: > Happy New Year Everyone, > > We are excited to announce that Squeak is now officially supported on > Travis-CI. > This means you can finally set "language: smalltalk" in your .travis.yml in > order to run tests for your GitHub-hosted Squeak/Smalltalk projects on > Travis-CI. I hadn't quite realised, until now, that you'd collaborated with Travis CI on getting them to bake Smalltalk support into their infrastructure! Nice one! frank From lewis at mail.msen.com Sat Jan 2 23:39:57 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Jan 2 23:40:00 2016 Subject: [squeak-dev] WeakArray>>grownBy: question (was: The Inbox: Collections-cmm.673.mcz) In-Reply-To: References: <1451653602537-4868959.post@n4.nabble.com> Message-ID: <20160102233957.GA8607@shell.msen.com> On Fri, Jan 01, 2016 at 03:45:04PM -0600, Chris Muller wrote: > > what about using the idea of HashedCollection >> #growSize? It is "self > > class goodPrimeAtLeast: array size * 3 // 2 + 2". Is it specific to hashing > > that a prime number is used there? > > Yes.. and now I understand why it grows linearly; because its a > linearly-searched Array. The elements are not interspersed as in a > HashedCollection, we don't "need" the extra room for that purpose, it > was just to reduce the number of times it needs to grwo by a factor of > 10. My change simply reduces the number of times it must grow even > more, however, since it appears we have nothing to ever shrink it back > down, we should not be growing by double right now, because that would > waste too many slots. This way, a max of 10 slots is wasted. > > Still, we need the as: WeakArray fix.. I have a feeling this has been discussed before, but I am curious. If I have a WeakArray and I send #grownBy:, and if the method comment for SequenceableCollection>>grownBy: says this: "Answer a copy of receiver collection with size grown by length" Then why is it acceptable to answer an Array rather than a WeakArray? I think the answer has to do with this: WeakArray>>species "More useful to have strongly-referenced results of #select: and #collect:." ^ Array So if WeakArray>>species should answer an Array, then should #grownBy: be reimplemented in WeakArray so that it behaves as advertised? Or perhaps SequenceableCollection>>grownBy: should use #class rather than #species to figure out what kind of thing to answer? Dave From colin at wiresong.com Sun Jan 3 00:29:40 2016 From: colin at wiresong.com (Colin Putney) Date: Sun Jan 3 00:29:42 2016 Subject: [squeak-dev] [ANN] Squeak/Smalltalk on Travis-CI In-Reply-To: References: Message-ID: On Sat, Jan 2, 2016 at 9:47 AM, Fabio Niephaus wrote: > Happy New Year Everyone, > > We are excited to announce that Squeak is now officially supported on > Travis-CI . > That's wonderful! Thanks. Colin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160102/9be73a70/attachment.htm From leves at caesar.elte.hu Sun Jan 3 03:19:48 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Jan 3 03:19:52 2016 Subject: [squeak-dev] WeakArray>>grownBy: question (was: The Inbox: Collections-cmm.673.mcz) In-Reply-To: <20160102233957.GA8607@shell.msen.com> References: <1451653602537-4868959.post@n4.nabble.com> <20160102233957.GA8607@shell.msen.com> Message-ID: On Sat, 2 Jan 2016, David T. Lewis wrote: > On Fri, Jan 01, 2016 at 03:45:04PM -0600, Chris Muller wrote: >>> what about using the idea of HashedCollection >> #growSize? It is "self >>> class goodPrimeAtLeast: array size * 3 // 2 + 2". Is it specific to hashing >>> that a prime number is used there? >> >> Yes.. and now I understand why it grows linearly; because its a >> linearly-searched Array. The elements are not interspersed as in a >> HashedCollection, we don't "need" the extra room for that purpose, it >> was just to reduce the number of times it needs to grwo by a factor of >> 10. My change simply reduces the number of times it must grow even >> more, however, since it appears we have nothing to ever shrink it back >> down, we should not be growing by double right now, because that would >> waste too many slots. This way, a max of 10 slots is wasted. >> >> Still, we need the as: WeakArray fix.. > > I have a feeling this has been discussed before, but I am curious. If I > have a WeakArray and I send #grownBy:, and if the method comment for > SequenceableCollection>>grownBy: says this: > > "Answer a copy of receiver collection with size grown by length" > > Then why is it acceptable to answer an Array rather than a WeakArray? > > I think the answer has to do with this: > > WeakArray>>species > "More useful to have strongly-referenced results of #select: and #collect:." > ^ Array > > So if WeakArray>>species should answer an Array, then should #grownBy: > be reimplemented in WeakArray so that it behaves as advertised? Or > perhaps SequenceableCollection>>grownBy: should use #class rather than > #species to figure out what kind of thing to answer? This is yet another overloaded use of #species. Since the comment of #grownBy: says it's a copy, and #copy doesn't use #species, therefore I think #grownBy: should use #class instead of #species. The question is, what will break if we change it? Levente > > Dave > > From lewis at mail.msen.com Sun Jan 3 06:06:30 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Jan 3 06:06:32 2016 Subject: [squeak-dev] The Inbox: Compression-jdr.48.mcz In-Reply-To: <201512312314.tBVNE5Er079428@shell.msen.com> References: <201512312314.tBVNE5Er079428@shell.msen.com> Message-ID: <20160103060630.GA5252@shell.msen.com> This looks like a good fix that should go into trunk, but who posted it? On squeaksource.com, 'jdr' is Javier Diaz Reinoso, but I cannot connect it to a user on source.squeak.org ??? Dave On Thu, Dec 31, 2015 at 11:14:01PM +0000, commits@source.squeak.org wrote: > A new version of Compression was added to project The Inbox: > http://source.squeak.org/inbox/Compression-jdr.48.mcz > > ==================== Summary ==================== > > Name: Compression-jdr.48 > Author: jdr > Time: 31 December 2015, 6:13:59.974 pm > UUID: 7798d7c6-8f39-45cc-a3cc-e0887130a62d > Ancestors: Compression-dtl.47 > > It solves a problem compressing a zipfile with many files (> 200), previously all files to be processed remained open, now only the file being processed is opened. > > =============== Diff against Compression-dtl.47 =============== > > Item was changed: > ----- Method: ZipArchive>>writeTo: (in category 'writing') ----- > writeTo: stream > stream binary. > members do: [ :member | > member writeTo: stream. > member endRead. > + member close > ]. > writeCentralDirectoryOffset := stream position. > self writeCentralDirectoryTo: stream. > ! > > Item was changed: > ----- Method: ZipArchive>>writeTo:prepending: (in category 'writing') ----- > writeTo: stream prepending: aString > stream binary. > stream nextPutAll: aString. > members do: [ :member | > member writeTo: stream. > member endRead. > + member close > ]. > writeCentralDirectoryOffset := stream position. > self writeCentralDirectoryTo: stream. > ! > > Item was changed: > ----- Method: ZipNewFileMember>>from: (in category 'initialization') ----- > from: aFileName > | entry | > compressionMethod := CompressionStored. > "Now get the size, attributes, and timestamps, and see if the file exists" > stream := StandardFileStream readOnlyFileNamed: aFileName. > self localFileName: (externalFileName := stream name). > entry := stream directoryEntry. > compressedSize := uncompressedSize := entry fileSize. > desiredCompressionMethod := compressedSize > 0 ifTrue: [ CompressionDeflated ] ifFalse: [ CompressionStored ]. > + self setLastModFileDateTimeFrom: entry modificationTime. > + stream close > - self setLastModFileDateTimeFrom: entry modificationTime > ! > > Item was changed: > ----- Method: ZipNewFileMember>>rewindData (in category 'private-writing') ----- > rewindData > super rewindData. > + stream ensureOpen. > readDataRemaining := stream size. > stream position: 0.! > From karlramberg at gmail.com Sun Jan 3 16:22:55 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sun Jan 3 16:23:02 2016 Subject: [squeak-dev] Dark theme Message-ID: Hi, Has anybody made a dark theme for Squeak with dark window background etc. My eyes are becoming much more sensitive to the bright white background, so a dark theme would be nice to switch to :-) Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160103/921142f0/attachment.htm From javier_diaz_r at mac.com Sun Jan 3 16:33:55 2016 From: javier_diaz_r at mac.com (Javier Diaz-Reinoso) Date: Sun Jan 3 16:34:30 2016 Subject: [squeak-dev] The Inbox: Compression-jdr.48.mcz In-Reply-To: <20160103060630.GA5252@shell.msen.com> References: <201512312314.tBVNE5Er079428@shell.msen.com> <20160103060630.GA5252@shell.msen.com> Message-ID: I was not a member, now I am. > On Jan 3, 2016, at 01:06, David T. Lewis wrote: > > This looks like a good fix that should go into trunk, but who posted it? > On squeaksource.com, 'jdr' is Javier Diaz Reinoso, but I cannot connect it > to a user on source.squeak.org ??? > > Dave > > > On Thu, Dec 31, 2015 at 11:14:01PM +0000, commits@source.squeak.org wrote: >> A new version of Compression was added to project The Inbox: >> http://source.squeak.org/inbox/Compression-jdr.48.mcz >> >> ==================== Summary ==================== >> >> Name: Compression-jdr.48 >> Author: jdr >> Time: 31 December 2015, 6:13:59.974 pm >> UUID: 7798d7c6-8f39-45cc-a3cc-e0887130a62d >> Ancestors: Compression-dtl.47 >> >> It solves a problem compressing a zipfile with many files (> 200), previously all files to be processed remained open, now only the file being processed is opened. >> >> =============== Diff against Compression-dtl.47 =============== >> >> Item was changed: >> ----- Method: ZipArchive>>writeTo: (in category 'writing') ----- >> writeTo: stream >> stream binary. >> members do: [ :member | >> member writeTo: stream. >> member endRead. >> + member close >> ]. >> writeCentralDirectoryOffset := stream position. >> self writeCentralDirectoryTo: stream. >> ! >> >> Item was changed: >> ----- Method: ZipArchive>>writeTo:prepending: (in category 'writing') ----- >> writeTo: stream prepending: aString >> stream binary. >> stream nextPutAll: aString. >> members do: [ :member | >> member writeTo: stream. >> member endRead. >> + member close >> ]. >> writeCentralDirectoryOffset := stream position. >> self writeCentralDirectoryTo: stream. >> ! >> >> Item was changed: >> ----- Method: ZipNewFileMember>>from: (in category 'initialization') ----- >> from: aFileName >> | entry | >> compressionMethod := CompressionStored. >> "Now get the size, attributes, and timestamps, and see if the file exists" >> stream := StandardFileStream readOnlyFileNamed: aFileName. >> self localFileName: (externalFileName := stream name). >> entry := stream directoryEntry. >> compressedSize := uncompressedSize := entry fileSize. >> desiredCompressionMethod := compressedSize > 0 ifTrue: [ CompressionDeflated ] ifFalse: [ CompressionStored ]. >> + self setLastModFileDateTimeFrom: entry modificationTime. >> + stream close >> - self setLastModFileDateTimeFrom: entry modificationTime >> ! >> >> Item was changed: >> ----- Method: ZipNewFileMember>>rewindData (in category 'private-writing') ----- >> rewindData >> super rewindData. >> + stream ensureOpen. >> readDataRemaining := stream size. >> stream position: 0.! >> > From lewis at mail.msen.com Sun Jan 3 16:55:57 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Jan 3 16:55:59 2016 Subject: [squeak-dev] The Inbox: Compression-jdr.48.mcz In-Reply-To: References: <201512312314.tBVNE5Er079428@shell.msen.com> <20160103060630.GA5252@shell.msen.com> Message-ID: <20160103165557.GA41005@shell.msen.com> Excellent! Thank you. Dave On Sun, Jan 03, 2016 at 11:33:55AM -0500, Javier Diaz-Reinoso wrote: > I was not a member, now I am. > > > On Jan 3, 2016, at 01:06, David T. Lewis wrote: > > > > This looks like a good fix that should go into trunk, but who posted it? > > On squeaksource.com, 'jdr' is Javier Diaz Reinoso, but I cannot connect it > > to a user on source.squeak.org ??? > > > > Dave > > > > > > On Thu, Dec 31, 2015 at 11:14:01PM +0000, commits@source.squeak.org wrote: > >> A new version of Compression was added to project The Inbox: > >> http://source.squeak.org/inbox/Compression-jdr.48.mcz > >> > >> ==================== Summary ==================== > >> > >> Name: Compression-jdr.48 > >> Author: jdr > >> Time: 31 December 2015, 6:13:59.974 pm > >> UUID: 7798d7c6-8f39-45cc-a3cc-e0887130a62d > >> Ancestors: Compression-dtl.47 > >> > >> It solves a problem compressing a zipfile with many files (> 200), previously all files to be processed remained open, now only the file being processed is opened. > >> > >> =============== Diff against Compression-dtl.47 =============== > >> > >> Item was changed: > >> ----- Method: ZipArchive>>writeTo: (in category 'writing') ----- > >> writeTo: stream > >> stream binary. > >> members do: [ :member | > >> member writeTo: stream. > >> member endRead. > >> + member close > >> ]. > >> writeCentralDirectoryOffset := stream position. > >> self writeCentralDirectoryTo: stream. > >> ! > >> > >> Item was changed: > >> ----- Method: ZipArchive>>writeTo:prepending: (in category 'writing') ----- > >> writeTo: stream prepending: aString > >> stream binary. > >> stream nextPutAll: aString. > >> members do: [ :member | > >> member writeTo: stream. > >> member endRead. > >> + member close > >> ]. > >> writeCentralDirectoryOffset := stream position. > >> self writeCentralDirectoryTo: stream. > >> ! > >> > >> Item was changed: > >> ----- Method: ZipNewFileMember>>from: (in category 'initialization') ----- > >> from: aFileName > >> | entry | > >> compressionMethod := CompressionStored. > >> "Now get the size, attributes, and timestamps, and see if the file exists" > >> stream := StandardFileStream readOnlyFileNamed: aFileName. > >> self localFileName: (externalFileName := stream name). > >> entry := stream directoryEntry. > >> compressedSize := uncompressedSize := entry fileSize. > >> desiredCompressionMethod := compressedSize > 0 ifTrue: [ CompressionDeflated ] ifFalse: [ CompressionStored ]. > >> + self setLastModFileDateTimeFrom: entry modificationTime. > >> + stream close > >> - self setLastModFileDateTimeFrom: entry modificationTime > >> ! > >> > >> Item was changed: > >> ----- Method: ZipNewFileMember>>rewindData (in category 'private-writing') ----- > >> rewindData > >> super rewindData. > >> + stream ensureOpen. > >> readDataRemaining := stream size. > >> stream position: 0.! > >> > > > From lewis at mail.msen.com Sun Jan 3 17:13:12 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Jan 3 17:13:13 2016 Subject: [squeak-dev] The Inbox: Compression-jdr.48.mcz In-Reply-To: <20160103165557.GA41005@shell.msen.com> References: <201512312314.tBVNE5Er079428@shell.msen.com> <20160103060630.GA5252@shell.msen.com> <20160103165557.GA41005@shell.msen.com> Message-ID: <20160103171312.GA43504@shell.msen.com> I see now that Chris Muller has committed this change (or something very similar) in trunk as Compression-cmm.48. But the Compression-jdr.48 in the inbox has some additional changes that may be important, so I'm not sure if a merge is required. Chris, when you get a chance, can you please check this and advise? Thanks, Dave On Sun, Jan 03, 2016 at 11:55:57AM -0500, David T. Lewis wrote: > Excellent! Thank you. > > Dave > > On Sun, Jan 03, 2016 at 11:33:55AM -0500, Javier Diaz-Reinoso wrote: > > I was not a member, now I am. > > > > > On Jan 3, 2016, at 01:06, David T. Lewis wrote: > > > > > > This looks like a good fix that should go into trunk, but who posted it? > > > On squeaksource.com, 'jdr' is Javier Diaz Reinoso, but I cannot connect it > > > to a user on source.squeak.org ??? > > > > > > Dave > > > > > > > > > On Thu, Dec 31, 2015 at 11:14:01PM +0000, commits@source.squeak.org wrote: > > >> A new version of Compression was added to project The Inbox: > > >> http://source.squeak.org/inbox/Compression-jdr.48.mcz > > >> > > >> ==================== Summary ==================== > > >> > > >> Name: Compression-jdr.48 > > >> Author: jdr > > >> Time: 31 December 2015, 6:13:59.974 pm > > >> UUID: 7798d7c6-8f39-45cc-a3cc-e0887130a62d > > >> Ancestors: Compression-dtl.47 > > >> > > >> It solves a problem compressing a zipfile with many files (> 200), previously all files to be processed remained open, now only the file being processed is opened. > > >> > > >> =============== Diff against Compression-dtl.47 =============== > > >> > > >> Item was changed: > > >> ----- Method: ZipArchive>>writeTo: (in category 'writing') ----- > > >> writeTo: stream > > >> stream binary. > > >> members do: [ :member | > > >> member writeTo: stream. > > >> member endRead. > > >> + member close > > >> ]. > > >> writeCentralDirectoryOffset := stream position. > > >> self writeCentralDirectoryTo: stream. > > >> ! > > >> > > >> Item was changed: > > >> ----- Method: ZipArchive>>writeTo:prepending: (in category 'writing') ----- > > >> writeTo: stream prepending: aString > > >> stream binary. > > >> stream nextPutAll: aString. > > >> members do: [ :member | > > >> member writeTo: stream. > > >> member endRead. > > >> + member close > > >> ]. > > >> writeCentralDirectoryOffset := stream position. > > >> self writeCentralDirectoryTo: stream. > > >> ! > > >> > > >> Item was changed: > > >> ----- Method: ZipNewFileMember>>from: (in category 'initialization') ----- > > >> from: aFileName > > >> | entry | > > >> compressionMethod := CompressionStored. > > >> "Now get the size, attributes, and timestamps, and see if the file exists" > > >> stream := StandardFileStream readOnlyFileNamed: aFileName. > > >> self localFileName: (externalFileName := stream name). > > >> entry := stream directoryEntry. > > >> compressedSize := uncompressedSize := entry fileSize. > > >> desiredCompressionMethod := compressedSize > 0 ifTrue: [ CompressionDeflated ] ifFalse: [ CompressionStored ]. > > >> + self setLastModFileDateTimeFrom: entry modificationTime. > > >> + stream close > > >> - self setLastModFileDateTimeFrom: entry modificationTime > > >> ! > > >> > > >> Item was changed: > > >> ----- Method: ZipNewFileMember>>rewindData (in category 'private-writing') ----- > > >> rewindData > > >> super rewindData. > > >> + stream ensureOpen. > > >> readDataRemaining := stream size. > > >> stream position: 0.! > > >> > > > > > From commits at source.squeak.org Sun Jan 3 17:13:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 3 17:13:38 2016 Subject: [squeak-dev] The Inbox: PreferenceBrowser-kfr.58.mcz Message-ID: A new version of PreferenceBrowser was added to project The Inbox: http://source.squeak.org/inbox/PreferenceBrowser-kfr.58.mcz ==================== Summary ==================== Name: PreferenceBrowser-kfr.58 Author: kfr Time: 3 January 2016, 6:13:14.444 pm UUID: e5f58d19-2c9a-4e05-b58d-0b7ade0be73f Ancestors: PreferenceBrowser-kfr.57 Fix for updating color when using the NewColorPickerMorph =============== Diff against PreferenceBrowser-kfr.57 =============== Item was changed: ----- Method: PBColorPreferenceView>>changeColor: (in category 'user interface') ----- changeColor: aButton + NewColorPickerMorph useIt + ifTrue: + [ (NewColorPickerMorph + on: self + originalColor: aButton color + setColorSelector: #setButtonColor:) openNear: aButton fullBoundsInWorld ] + ifFalse: + [ ColorPickerMorph new + choseModalityFromPreference ; + sourceHand: aButton activeHand ; + target: self ; + selector: #setButtonColor: ; + originalColor: aButton color ; + + putUpFor: aButton + near: aButton fullBoundsInWorld ] ! - aButton changeColor. - self preference preferenceValue: aButton fillStyle. - button label: self preference preferenceValue asString. - self adjustLabelColor ! Item was added: + ----- Method: PBColorPreferenceView>>setButtonColor: (in category 'user interface') ----- + setButtonColor: aColor + button color: aColor. + self preference preferenceValue: aColor. + button label: self preference preferenceValue asString. + self adjustLabelColor + ! From dale.henrichs at gemtalksystems.com Sun Jan 3 17:17:20 2016 From: dale.henrichs at gemtalksystems.com (Dale Henrichs) Date: Sun Jan 3 17:17:24 2016 Subject: [squeak-dev] [ANN] Squeak/Smalltalk on Travis-CI In-Reply-To: References: Message-ID: <568957A0.50000@gemtalksystems.com> Fbaio, Great news! But Dang! Yet another thing to add to my todo list for GemSTone:) Dale On 1/2/16 9:47 AM, Fabio Niephaus wrote: > Happy New Year Everyone, > > We are excited to announce that Squeak is now officially supported on > Travis-CI . > This means you can finally set "language: smalltalk" in your > /.travis.yml/ in > order to run tests for your GitHub-hosted Squeak/Smalltalk projects on > Travis-CI. > Builds will start in less than 10 seconds, because they run on Travis' new > container-based infrastructure. The new build process comes with some > great > features such as faster build times, Linux and OS X support, and more [1]. > > We are currently discussing how to configure Smalltalk builds in the > future (see [2]), > but in the meantime, [3] should get you started. > > If you have any bug reports or feature requests, please file an issue > at [4]. > > Also, feel free to contribute to the smalltalkCI framework that we are > maintaining > and that Travis uses to build your Smalltalk projects. > > > Happy testing! > > Steffen, Jonas, Lennard, Christopher and Fabio (HPI students) > > > [1] https://github.com/hpi-swa/smalltalkCI#features > [2] https://github.com/hpi-swa/smalltalkCI/issues/20 > [3] https://github.com/hpi-swa/smalltalkCI#how-to-use > [4] https://github.com/hpi-swa/smalltalkCI/issues > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160103/36c2e5b2/attachment.htm From asqueaker at gmail.com Sun Jan 3 17:21:45 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Jan 3 17:22:28 2016 Subject: [squeak-dev] Dark theme In-Reply-To: References: Message-ID: Thank you! I hear you, I can hardly tolerate this black-on-white at night anymore, obliterates contrast in a room with lower light (which is how I prefer to work late at night). Back for Squeak 3.8, I made the "inverteBright" package, its on SqueakMap, but I have not tested it in 5.0. It is basically a bunch of hacks IIRC... On Sun, Jan 3, 2016 at 10:22 AM, karl ramberg wrote: > Hi, > Has anybody made a dark theme for Squeak with dark window background etc. > > My eyes are becoming much more sensitive to the bright white background, > so a dark theme would be nice to switch to :-) > > Best, > Karl > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160103/92d9eabc/attachment.htm From ma.chris.m at gmail.com Sun Jan 3 17:27:11 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Sun Jan 3 17:28:08 2016 Subject: [squeak-dev] WeakArray>>grownBy: question (was: The Inbox: Collections-cmm.673.mcz) In-Reply-To: References: <1451653602537-4868959.post@n4.nabble.com> <20160102233957.GA8607@shell.msen.com> Message-ID: We can't assume the comment is correct. That comment was written back when the #species returned a WeakArray, so it could be that the writer of the comment simply was speaking "how things were" instead of "how they should be". On Sat, Jan 2, 2016 at 9:19 PM, Levente Uzonyi wrote: > On Sat, 2 Jan 2016, David T. Lewis wrote: > >> On Fri, Jan 01, 2016 at 03:45:04PM -0600, Chris Muller wrote: >>>> >>>> what about using the idea of HashedCollection >> #growSize? It is "self >>>> class goodPrimeAtLeast: array size * 3 // 2 + 2". Is it specific to >>>> hashing >>>> that a prime number is used there? >>> >>> >>> Yes.. and now I understand why it grows linearly; because its a >>> linearly-searched Array. The elements are not interspersed as in a >>> HashedCollection, we don't "need" the extra room for that purpose, it >>> was just to reduce the number of times it needs to grwo by a factor of >>> 10. My change simply reduces the number of times it must grow even >>> more, however, since it appears we have nothing to ever shrink it back >>> down, we should not be growing by double right now, because that would >>> waste too many slots. This way, a max of 10 slots is wasted. >>> >>> Still, we need the as: WeakArray fix.. >> >> >> I have a feeling this has been discussed before, but I am curious. If I >> have a WeakArray and I send #grownBy:, and if the method comment for >> SequenceableCollection>>grownBy: says this: >> >> "Answer a copy of receiver collection with size grown by length" >> >> Then why is it acceptable to answer an Array rather than a WeakArray? >> >> I think the answer has to do with this: >> >> WeakArray>>species >> "More useful to have strongly-referenced results of #select: and >> #collect:." >> ^ Array >> >> So if WeakArray>>species should answer an Array, then should #grownBy: >> be reimplemented in WeakArray so that it behaves as advertised? Or >> perhaps SequenceableCollection>>grownBy: should use #class rather than >> #species to figure out what kind of thing to answer? > > > This is yet another overloaded use of #species. Since the comment of > #grownBy: says it's a copy, and #copy doesn't use #species, therefore I > think #grownBy: should use #class instead of #species. > The question is, what will break if we change it? > > Levente > > >> >> Dave >> >> > From lists at fniephaus.com Sun Jan 3 17:55:13 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Sun Jan 3 17:55:26 2016 Subject: [squeak-dev] [ANN] Squeak/Smalltalk on Travis-CI In-Reply-To: <568957A0.50000@gemtalksystems.com> References: <568957A0.50000@gemtalksystems.com> Message-ID: Hi Dale, You've probably seen already that smalltalkCI also supports GemStone, because it can fall back to using builderCI. BTW: Travis CI is currently moving their legacy builds to GCE [1] which might improve GemStone builds without having to do anything. Apart from that, we should also be able to set up a GemStone VM on the container-based infrastructure, but that will require some more work. I will open an issue in the smalltalkCI issue tracker for that... Best, Fabio [1] https://blog.travis-ci.com/2015-11-27-moving-to-a-more-elastic-future On Sun, Jan 3, 2016 at 5:17 PM Dale Henrichs < dale.henrichs@gemtalksystems.com> wrote: > Fbaio, > > Great news! But Dang! Yet another thing to add to my todo list for > GemSTone:) > > > Dale > > > On 1/2/16 9:47 AM, Fabio Niephaus wrote: > > Happy New Year Everyone, > > We are excited to announce that Squeak is now officially supported on > Travis-CI . > This means you can finally set "language: smalltalk" in your *.travis.yml* > in > order to run tests for your GitHub-hosted Squeak/Smalltalk projects on > Travis-CI. > Builds will start in less than 10 seconds, because they run on Travis' new > container-based infrastructure. The new build process comes with some great > features such as faster build times, Linux and OS X support, and more [1]. > > We are currently discussing how to configure Smalltalk builds in the > future (see [2]), > but in the meantime, [3] should get you started. > > If you have any bug reports or feature requests, please file an issue at > [4]. > > Also, feel free to contribute to the smalltalkCI framework that we are > maintaining > and that Travis uses to build your Smalltalk projects. > > > Happy testing! > > Steffen, Jonas, Lennard, Christopher and Fabio (HPI students) > > > [1] > https://github.com/hpi-swa/smalltalkCI#features > [2] > https://github.com/hpi-swa/smalltalkCI/issues/20 > [3] > https://github.com/hpi-swa/smalltalkCI#how-to-use > [4] > https://github.com/hpi-swa/smalltalkCI/issues > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160103/0633b3da/attachment.htm From asqueaker at gmail.com Sun Jan 3 18:04:32 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Jan 3 18:05:15 2016 Subject: [squeak-dev] WeakArray>>grownBy: question (was: The Inbox: Collections-cmm.673.mcz) In-Reply-To: References: <1451653602537-4868959.post@n4.nabble.com> <20160102233957.GA8607@shell.msen.com> Message-ID: Having said that, it seems implausible that "grownBy:" should ever return a different class than the receiver, because we want the receiver, "grown by" the specified amount... Sigh... On Sun, Jan 3, 2016 at 11:27 AM, Chris Muller wrote: > We can't assume the comment is correct. That comment was written back > when the #species returned a WeakArray, so it could be that the writer > of the comment simply was speaking "how things were" instead of "how > they should be". > > On Sat, Jan 2, 2016 at 9:19 PM, Levente Uzonyi wrote: >> On Sat, 2 Jan 2016, David T. Lewis wrote: >> >>> On Fri, Jan 01, 2016 at 03:45:04PM -0600, Chris Muller wrote: >>>>> >>>>> what about using the idea of HashedCollection >> #growSize? It is "self >>>>> class goodPrimeAtLeast: array size * 3 // 2 + 2". Is it specific to >>>>> hashing >>>>> that a prime number is used there? >>>> >>>> >>>> Yes.. and now I understand why it grows linearly; because its a >>>> linearly-searched Array. The elements are not interspersed as in a >>>> HashedCollection, we don't "need" the extra room for that purpose, it >>>> was just to reduce the number of times it needs to grwo by a factor of >>>> 10. My change simply reduces the number of times it must grow even >>>> more, however, since it appears we have nothing to ever shrink it back >>>> down, we should not be growing by double right now, because that would >>>> waste too many slots. This way, a max of 10 slots is wasted. >>>> >>>> Still, we need the as: WeakArray fix.. >>> >>> >>> I have a feeling this has been discussed before, but I am curious. If I >>> have a WeakArray and I send #grownBy:, and if the method comment for >>> SequenceableCollection>>grownBy: says this: >>> >>> "Answer a copy of receiver collection with size grown by length" >>> >>> Then why is it acceptable to answer an Array rather than a WeakArray? >>> >>> I think the answer has to do with this: >>> >>> WeakArray>>species >>> "More useful to have strongly-referenced results of #select: and >>> #collect:." >>> ^ Array >>> >>> So if WeakArray>>species should answer an Array, then should #grownBy: >>> be reimplemented in WeakArray so that it behaves as advertised? Or >>> perhaps SequenceableCollection>>grownBy: should use #class rather than >>> #species to figure out what kind of thing to answer? >> >> >> This is yet another overloaded use of #species. Since the comment of >> #grownBy: says it's a copy, and #copy doesn't use #species, therefore I >> think #grownBy: should use #class instead of #species. >> The question is, what will break if we change it? >> >> Levente >> >> >>> >>> Dave >>> >>> >> > From Marcel.Taeumel at hpi.de Sun Jan 3 17:50:18 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Jan 3 18:10:32 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: References: Message-ID: <1451843418654-4869098.post@n4.nabble.com> There is no need to change anything in Squeak for that. There is software like f.lux [1] that adapts color temperature according to the daylight. :) Alternatively: Have you tried: "Color black become: Color white"? Best, Marcel [1] https://justgetflux.com/ -- View this message in context: http://forum.world.st/Dark-theme-tp4869082p4869098.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sun Jan 3 17:51:57 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Jan 3 18:12:10 2016 Subject: [squeak-dev] Re: The Inbox: PreferenceBrowser-kfr.58.mcz In-Reply-To: References: Message-ID: <1451843517453-4869099.post@n4.nabble.com> Uh, nice. You did not have to adapt the color picker for that? Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-PreferenceBrowser-kfr-58-mcz-tp4869090p4869099.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From dale.henrichs at gemtalksystems.com Sun Jan 3 18:45:38 2016 From: dale.henrichs at gemtalksystems.com (Dale Henrichs) Date: Sun Jan 3 18:45:43 2016 Subject: [squeak-dev] [ANN] Squeak/Smalltalk on Travis-CI In-Reply-To: References: <568957A0.50000@gemtalksystems.com> Message-ID: <56896C52.2080507@gemtalksystems.com> On 1/3/16 9:55 AM, Fabio Niephaus wrote: > Hi Dale, > You've probably seen already that smalltalkCI also supports GemStone, > because it can fall back to using builderCI. Yes I saw that ... so the todo list entry was to integrate GemStone into smalltalkCI and move away from builderCI:) > BTW: Travis CI is currently moving their legacy builds to GCE [1] which > might improve GemStone builds without having to do anything. > Apart from that, we should also be able to set up a GemStone VM on the > container-based infrastructure, but that will require some more work. > I will open an issue in the smalltalkCI issue tracker for that... > Yes I saw the issue ... presumably the container itself needs to defined with the GemStone prereqs and setup (shared memory mainly) and then only GemStone needs to be installed and GsDevKit_home[1] should be used for managing the installation and creation of GemStone databases (stones) ... Dale [1] https://github.com/GsDevKit/GsDevKit_home From leves at caesar.elte.hu Sun Jan 3 18:53:17 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Jan 3 18:53:20 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: <1451843418654-4869098.post@n4.nabble.com> References: <1451843418654-4869098.post@n4.nabble.com> Message-ID: On Sun, 3 Jan 2016, marcel.taeumel wrote: > There is no need to change anything in Squeak for that. There is software > like f.lux [1] that adapts color temperature according to the daylight. :) It quickly becomes annoying seeing everything in red late in the evening. Levente > > Alternatively: Have you tried: "Color black become: Color white"? > > Best, > Marcel > > [1] https://justgetflux.com/ > > > > -- > View this message in context: http://forum.world.st/Dark-theme-tp4869082p4869098.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From kilon.alios at gmail.com Sun Jan 3 19:03:53 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Sun Jan 3 19:04:05 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: References: <1451843418654-4869098.post@n4.nabble.com> Message-ID: yeah i tried that app too, very annoying and i love dark themes. On Sun, Jan 3, 2016 at 8:53 PM Levente Uzonyi wrote: > On Sun, 3 Jan 2016, marcel.taeumel wrote: > > > There is no need to change anything in Squeak for that. There is software > > like f.lux [1] that adapts color temperature according to the daylight. > :) > > It quickly becomes annoying seeing everything in red late in the evening. > > Levente > > > > > Alternatively: Have you tried: "Color black become: Color white"? > > > > Best, > > Marcel > > > > [1] https://justgetflux.com/ > > > > > > > > -- > > View this message in context: > http://forum.world.st/Dark-theme-tp4869082p4869098.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/20160103/bd73e462/attachment.htm From asqueaker at gmail.com Sun Jan 3 19:50:12 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Jan 3 19:50:55 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: <1451843418654-4869098.post@n4.nabble.com> References: <1451843418654-4869098.post@n4.nabble.com> Message-ID: Squeak needs working Themes to serve a variety of use-cases, not just a Dark theme. I think we should move Preferences state to the instance-side, and add a #preferences accessor to PasteUpMorph and then change all the code to look up all preferences and colors through "self world". Let each PasteUpMorph have its own preferences.. And implementing a suitable Preferences>>#veryDeepInner: for deepCopy support should be trivial.. On Sun, Jan 3, 2016 at 11:50 AM, marcel.taeumel wrote: > There is no need to change anything in Squeak for that. There is software > like f.lux [1] that adapts color temperature according to the daylight. :) > > Alternatively: Have you tried: "Color black become: Color white"? > > Best, > Marcel > > [1] https://justgetflux.com/ > > > > -- > View this message in context: http://forum.world.st/Dark-theme-tp4869082p4869098.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Sun Jan 3 20:16:31 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Jan 3 20:17:13 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: <1451843418654-4869098.post@n4.nabble.com> References: <1451843418654-4869098.post@n4.nabble.com> Message-ID: Squeak needs working Themes to serve a variety of use-cases, not just a Dark theme. For example, a Presentation theme with cranked-up font sizes. I think we should move Preferences state to the instance-side, and let each PasteUpMorph have its own Preferences. On Sun, Jan 3, 2016 at 11:50 AM, marcel.taeumel wrote: > There is no need to change anything in Squeak for that. There is software > like f.lux [1] that adapts color temperature according to the daylight. :) > > Alternatively: Have you tried: "Color black become: Color white"? > > Best, > Marcel > > [1] https://justgetflux.com/ > > > > -- > View this message in context: http://forum.world.st/Dark-theme-tp4869082p4869098.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From karlramberg at gmail.com Sun Jan 3 20:50:46 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sun Jan 3 20:50:49 2016 Subject: [squeak-dev] Re: The Inbox: PreferenceBrowser-kfr.58.mcz In-Reply-To: <1451843517453-4869099.post@n4.nabble.com> References: <1451843517453-4869099.post@n4.nabble.com> Message-ID: This is copy paste from SystemWindow :-) But as for changes to NewColorPickerMorph: I think the color picker need a cancel button And ability to pick up colors from outside the color picker Best, Karl On Sun, Jan 3, 2016 at 6:51 PM, marcel.taeumel wrote: > Uh, nice. You did not have to adapt the color picker for that? > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Inbox-PreferenceBrowser-kfr-58-mcz-tp4869090p4869099.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/20160103/9fd4399d/attachment.htm From commits at source.squeak.org Sun Jan 3 21:34:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 3 21:34:03 2016 Subject: [squeak-dev] The Trunk: Collections-cmm.675.mcz Message-ID: Chris Muller uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-cmm.675.mcz ==================== Summary ==================== Name: Collections-cmm.675 Author: cmm Time: 3 January 2016, 3:33:44.302 pm UUID: d019e6cc-abbb-4077-9e3d-2f471f6fb07a Ancestors: Collections-eem.672 grownBy: should answer the same class of object asked to be grown. =============== Diff against Collections-eem.672 =============== Item was changed: ----- Method: SequenceableCollection>>grownBy: (in category 'copying') ----- + grownBy: length - grownBy: length "Answer a copy of receiver collection with size grown by length" + ^ (self class ofSize: self size + length) + replaceFrom: 1 to: self size with: self startingAt: 1 ; + yourself! - - | newCollection | - newCollection := self species ofSize: self size + length. - newCollection replaceFrom: 1 to: self size with: self startingAt: 1. - ^ newCollection! From lewis at mail.msen.com Sun Jan 3 21:42:36 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Jan 3 21:42:38 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: References: <1451843418654-4869098.post@n4.nabble.com> Message-ID: <20160103214236.GA92580@shell.msen.com> On Sun, Jan 03, 2016 at 01:50:12PM -0600, Chris Muller wrote: > Squeak needs working Themes to serve a variety of use-cases, not just > a Dark theme. > > I think we should move Preferences state to the instance-side, and add > a #preferences accessor to PasteUpMorph and then change all the code > to look up all preferences and colors through "self world". Let each > PasteUpMorph have its own preferences.. Good idea, but it would be best if you can associate the preference with either "Project current" or "Project current uiManager", not with the world. That will keep things tidy on the MVC side (where Project current world is a ControlManager). Dave > > And implementing a suitable Preferences>>#veryDeepInner: for deepCopy > support should be trivial.. > > On Sun, Jan 3, 2016 at 11:50 AM, marcel.taeumel wrote: > > There is no need to change anything in Squeak for that. There is software > > like f.lux [1] that adapts color temperature according to the daylight. :) > > > > Alternatively: Have you tried: "Color black become: Color white"? > > > > Best, > > Marcel > > > > [1] https://justgetflux.com/ > > > > > > > > -- > > View this message in context: http://forum.world.st/Dark-theme-tp4869082p4869098.html > > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From asqueaker at gmail.com Sun Jan 3 22:52:35 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Jan 3 22:53:17 2016 Subject: [squeak-dev] Re: The Inbox: PreferenceBrowser-kfr.58.mcz In-Reply-To: References: <1451843517453-4869099.post@n4.nabble.com> Message-ID: > But as for changes to NewColorPickerMorph: > > I think the color picker need a cancel button -1. Maybe an "Undo" or "Previous Color" button, but not a Cancel button. Morphic is supposed to be in-place manipulation. > And ability to pick up colors from outside the color picker +1 From asqueaker at gmail.com Sun Jan 3 22:53:02 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Jan 3 22:53:43 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: <20160103214236.GA92580@shell.msen.com> References: <1451843418654-4869098.post@n4.nabble.com> <20160103214236.GA92580@shell.msen.com> Message-ID: On Sun, Jan 3, 2016 at 3:42 PM, David T. Lewis wrote: > On Sun, Jan 03, 2016 at 01:50:12PM -0600, Chris Muller wrote: >> Squeak needs working Themes to serve a variety of use-cases, not just >> a Dark theme. >> >> I think we should move Preferences state to the instance-side, and add >> a #preferences accessor to PasteUpMorph and then change all the code >> to look up all preferences and colors through "self world". Let each >> PasteUpMorph have its own preferences.. > > Good idea, but it would be best if you can associate the preference with > either "Project current" or "Project current uiManager", not with the > world. That will keep things tidy on the MVC side (where Project current > world is a ControlManager). Fair enough. Project current, not its uiManager. From commits at source.squeak.org Sun Jan 3 22:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 3 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160103225501.11548.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-January/009222.html Name: Collections-cmm.675 Ancestors: Collections-eem.672 grownBy: should answer the same class of object asked to be grown. ============================================= From karlramberg at gmail.com Mon Jan 4 05:12:18 2016 From: karlramberg at gmail.com (karl ramberg) Date: Mon Jan 4 05:12:20 2016 Subject: [squeak-dev] Re: The Inbox: PreferenceBrowser-kfr.58.mcz In-Reply-To: References: <1451843517453-4869099.post@n4.nabble.com> Message-ID: The button need to make it clear if you what to keep the changes you have made to the color. We have 'accept'and 'cancel' for text/ code. I like these. The paint editor has 'keep' and 'toss' Toss is ambiguous, since it's unclear if I toss the whole painting or just the change I made. Best, Karl On Sun, Jan 3, 2016 at 11:52 PM, Chris Muller wrote: > > But as for changes to NewColorPickerMorph: > > > > I think the color picker need a cancel button > > -1. Maybe an "Undo" or "Previous Color" button, but not a Cancel > button. Morphic is supposed to be in-place manipulation. > > > And ability to pick up colors from outside the color picker > > +1 > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160104/996d6d94/attachment.htm From Marcel.Taeumel at hpi.de Mon Jan 4 08:16:42 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Jan 4 08:37:00 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: References: <1451843418654-4869098.post@n4.nabble.com> Message-ID: <1451895402676-4869132.post@n4.nabble.com> Changing the preferences to world level might improve switching themes but not implementing them. :-) This comes later. First, we should watch out for magic/hard-coded numbers/values and re-direct them through preferences (with caching as appropriate like ScrollPanes do.) Best, Marcel -- View this message in context: http://forum.world.st/Dark-theme-tp4869082p4869132.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Jan 4 08:26:03 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Jan 4 08:46:20 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: <1451895402676-4869132.post@n4.nabble.com> References: <1451843418654-4869098.post@n4.nabble.com> <1451895402676-4869132.post@n4.nabble.com> Message-ID: <1451895963705-4869133.post@n4.nabble.com> Then, I think, themes affect mainly fonts and colors and other preference-like things. I don't think we need to prepare for fundamentally different #drawOn: methods/implementations/behavior in various morphs. Back then, in my opinion, "Poly Morph" overdid it somehow. Programming the GUI for tools got more challenging than it had to be. Besides creating morphs according to the current preferences, we should think about how to update existing instances. For colors, there is SystemWindow class >> refreshAllWindows and TheWorldMainDockingBar class >> #updateInstances. There is also ScrollBar class >> #refreshAllScrollBars. But this is rather specific and not reusable without carefully copy-and-paste. They make use of #allSubInstances -- is this the best way of doing it? Coming back to the original problem in this thread: Yes, we should add a preference to specify the background color in lists, trees, and text fields. Should be easy. :) Best, Marcel -- View this message in context: http://forum.world.st/Dark-theme-tp4869082p4869133.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Mon Jan 4 08:55:27 2016 From: karlramberg at gmail.com (karl ramberg) Date: Mon Jan 4 08:55:29 2016 Subject: [squeak-dev] Re: Dark theme In-Reply-To: <1451895963705-4869133.post@n4.nabble.com> References: <1451843418654-4869098.post@n4.nabble.com> <1451895402676-4869132.post@n4.nabble.com> <1451895963705-4869133.post@n4.nabble.com> Message-ID: On Mon, Jan 4, 2016 at 9:26 AM, marcel.taeumel wrote: > Then, I think, themes affect mainly fonts and colors and other > preference-like things. I don't think we need to prepare for fundamentally > different #drawOn: methods/implementations/behavior in various morphs. Back > then, in my opinion, "Poly Morph" overdid it somehow. Programming the GUI > for tools got more challenging than it had to be. > > Besides creating morphs according to the current preferences, we should > think about how to update existing instances. For colors, there is > SystemWindow class >> refreshAllWindows and TheWorldMainDockingBar class >> > #updateInstances. There is also ScrollBar class >> #refreshAllScrollBars. > But this is rather specific and not reusable without carefully > copy-and-paste. They make use of #allSubInstances -- is this the best way > of > doing it? > > Coming back to the original problem in this thread: Yes, we should add a > preference to specify the background color in lists, trees, and text > fields. > Should be easy. :) > Sounds promising ;-) Best, Karl > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Dark-theme-tp4869082p4869133.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/20160104/07b56458/attachment.htm From frank.shearar at gmail.com Mon Jan 4 13:58:56 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Mon Jan 4 14:01:06 2016 Subject: [Vm-dev] Re: [squeak-dev] OT: Convince me github is a wise choice In-Reply-To: References: Message-ID: On 1 January 2016 at 22:08, Fabio Niephaus wrote: > > "Python moves to GitHub": > https://mail.python.org/pipermail/core-workflow/2016-January/000345.html > > On Mon, Dec 21, 2015 at 10:52 AM Fabio Niephaus wrote: >> >> On Mon, Dec 21, 2015 at 7:17 AM Colin Putney wrote: >>> >>> On Thu, Dec 17, 2015 at 9:29 AM, Eliot Miranda wrote: >>> >>>> >>>> Ah, that's interesting. So my concern is whether github is a safe long-term bet. Specifically what is there to prevent some third party from buying github, or of github going public and the board taking the decision, or github on its own, deciding to charge for hosting, keeping the data hostage to extract payment? What safeguards are in place to prevent this? I'm not interested in "this will never happen" arguments. I'm interested in hard data please. >>> >>> >>> This sounds like a risk management problem. We want to minimize the risk that we lose access to the source code and it's history, right? Is there other data that you are concerned about? >>> >>> With regard to GitHub, I think these are the interesting questions: >>> >>> What are the chances that GitHub will stop providing free hosting to open source projects? >>> What are the consequences if #1 occurs? >>> What can we do about it? >>> >>> First, let's look at #1. This sort of thing does happen. Holding data hostage is unusual, but free online services get shut down all the time. What might cause *Github* to do it? >>> >>> Could they be forced to cut expenses? Github has been around for almost 8 years, and have stuck with their model of "free public repositories, pay for privacy" throughout that time. It seems to be working for them. Three years ago one of their investors said they've been profitable over most of their life, and are growing revenue at 300% per year[1]. This summer, they raised $250 million more, with the company valued at $2 billion[2]. That indicates that they're still growing quickly, and think they'll be able to expand into new markets. So running out of money and dropping free hosting as a way to cut costs seems unlikely. >>> >>> How about a change in control? Maybe Oracle will buy them and squeeze as much profit out of them as possible before tossing the dry husk away. For that to happen, the offer would have to be spectacular. Github's investors need at least a 10x return, and probably more, to make money for their funds. If they were worth $2 billion this summer, the acquisition price would have to be something like $20-50 billion. That just doesn't allow the buyer much room to maneuver. There's no special technology behind Github that would make sense to to acquire at that price. Github's value is entirely in market position, customer relationships, goodwill etc. To make back the money, the buyer would need to keep running Github and keep earning revenue from it. >>> >>> Going public? Even less likely. Because of regulatory changes, tech companies have been waiting longer to go public and doing so at a much higher valuation. (Lots of different takes on this, but see eg. [3]) If Github went public, it would be because its valuation was so high that employees and investors wanted to (more easily) sell some shares and enjoy their wealth. That would be a huge endorsement of the business model and current management team. With few investors?only five so far[4]?the founders would undoubtedly retain control, similar to the IPOs of Google and Facebook. Messing with the business model would be unthinkable at that point. >>> >>> What if Github decided to change strategies without some sort of external impetus? That seems unlikely as well. The economics underlying the freemium strategy are getting more and more compelling over time. Disks are cheap, and the cost of storage keeps going down. I just ran across a new cloud storage service that charges half-a-cent per GB per month[5]. Computing power is also getting cheaper, and with cluster managers like Mesos and Kubernetes, we're using it more efficiently as well. The "burden" of providing free hosting is low and will be getting lower as time goes on. >>> >>> On the other hand, Github is *the* go-to place for hosting source code. There are millions of users that have both free public repositories and paid private ones. (Github reports 12 million users[6], and I bet a large fraction of them at least have access to both public and private repositories.) Taking away the free repositories would alienate a LOT of customers, and hurt revenue. >>> >>> So, without saying "this will never happen," I will say that Github shutting down free hosting would be unlikely. >>> >>> Alright, let's look at #2. If the unlikely did happen, what would be the consequences? >>> >>> As others have mentioned, the architecture of git makes it impossible to hold the source code and history hostage. Everyone who clones a git repository has a complete copy of the data. If they decided to lock everyone out of the repositories we'd just get another server and do this: >>> >>> cd cog >>> git remote add origin git://git.squeak.org/cog.git >>> git push origin master >>> >>> At the same time, we'd be in good company. Github currently has 30 million repositories[6]. Let's be really generous and say that half of those are private, and thus paid-for and exempt from hostage-taking. That means 15 million repositories are now subject to extortion from Github. Sure, most of those are personal forks with no significant changes. But even if there were only, say, 100,000 "real" repositories, that would be a *cataclysm* for the open source world. Alternate hosting would be popping up all over the place, and whatever inconvenience we might have about moving would be quickly solved by larger and richer open source projects. It wouldn't take much more than "here's our new git hosting" posted on the mailing list and squeak.org to make the change, because *everybody* would know about the problem. >>> >>> Finally, #3, what can we do about it? >>> >>> Well, in terms of influencing Github's business model, nothing. We have no leverage. So #1 is out of our control. >>> >>> But, there are a few things we can do to improve #2. First, we could mirror all commits to another repository. That could be a Github competitor, like BitBucket, or just a server that we host with Rackspace or whatever, or even "offline" storage like S3. I believe the Pharo folks are already mirroring the VM source, from the current hosting, so that helps reduce the risk as well. >>> >>> Second, we could move more of the VM source into Smalltalk. That might mean generating more of the source files with VM maker, running builds from within the image instead of using CMake etc. It probably wouldn't be worth it to make *all* the platform sources versioned in MC, but we could go further in that direction from where we are now. >>> >>> Finally, if it really did come down to Github holding the sources hostage and we had no other copies, we could just pay up. Currently, their cheapest plan is $7/month for 5 private repositories, which ought to cover our needs. Even with the meager donations that Squeak attracts today, surely we could raise $85 to get a year of paid hosting, and use that time to figure out what to do for the long term. Github might raise their prices (Why not? This scenario already has them being suicidally irrational.), but I can't see them exceeding our fundraising capabilities. What's the point of extortion if the victim can't pay? >>> >>> (As a side note, I would be shocked if hosting squeakvm.org currently costs less than $7/month. No idea who's paying for it, but how confident are we that they'll continue to do so?) >>> >>> In summary, Github is a very safe bet. Your nightmare scenario involves a series of very improbable events: Github would have to stop offering free hosting. They'd have to actively alienate their paying customers by holding their source code hostage. There would have to be sudden disk failures on dozens of laptops and servers where the repository is cloned. And to top it all off, the larger Squeak community, including Pharo, Cuis, Newspeak, Scratch and Croquet would have to be unable to come up with a few dozen dollars to pay for the hosting. >>> >>> This will never happen. >>> >>> Colin >>> >>> >>> [1] http://peter.a16z.com/2012/07/09/software-eats-software-development/ >>> [2] http://fortune.com/2015/07/29/github-raises-250-million-in-new-funding-now-valued-at-2-billion/ >>> [3] http://www.forbes.com/sites/samanthasharf/2014/12/24/is-the-ipo-outmoded-why-venture-backed-companies-are-waiting-longer-to-go-public/ >>> [4] https://www.crunchbase.com/organization/github/investors >>> [5] https://www.backblaze.com/b2/cloud-storage.html >>> [6] https://github.com/about/ >>> >> >> There's not much I can add to Colin's great write-up except that others must >> have asked themselves the same questions as well. If moving to GitHub was a >> big risk, many companies wouldn't have done it already including the big ones >> (e.g. Microsoft, Google and now even Apple has even released Swift on GitHub). >> >> I am also +1 for GitHub. We have been successfully using it as a hosting >> platform for student projects [1]. IMHO, it is very convenient to not having to worry >> about solved problems including infrastructure. Also, mirroring a git repository >> can be done with a simple cronjob. However, I must admit, that there's still >> potential to improve client-side tooling (git + Filetree), but at least I don't have to >> worry about running a server and maintaining a SqueakSource/SqueakMap >> instance anymore. >> >> Lastly, we have been working on bringing Smalltalk support to Travis CI which >> will hopefully make it very easy to enable CI for any Smalltalk project on GitHub. >> An announcement will follow very soon. >> >> Happy holidays, >> Fabio >> >> [1] https://github.com/hpi-swa-teaching I just stumbled across this - https://github.com/joeyh/github-backup - which will back up EVERYTHING GitHub knows about your repository - milestones, issues, forks, comments, etc etc. And with `github-backup ` you can back up an entire account (and all the repositories that account watches/has starred). For example, `github-backup squeak-smalltalk`. (There are of course some limitations - see https://github.com/joeyh/github-backup/blob/master/README.md#limitations for details. But for the most important purposes - backing up source, and bugs/wikis - the limitations won't cause inconvenience.) frank From leves at caesar.elte.hu Mon Jan 4 14:11:08 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Jan 4 14:11:14 2016 Subject: [squeak-dev] The Trunk: Collections-cmm.675.mcz In-Reply-To: References: Message-ID: Collections has two head versions now: cmm-674 and cmm-675. The should be merged. Levente On Sun, 3 Jan 2016, commits@source.squeak.org wrote: > Chris Muller uploaded a new version of Collections to project The Trunk: > http://source.squeak.org/trunk/Collections-cmm.675.mcz > > ==================== Summary ==================== > > Name: Collections-cmm.675 > Author: cmm > Time: 3 January 2016, 3:33:44.302 pm > UUID: d019e6cc-abbb-4077-9e3d-2f471f6fb07a > Ancestors: Collections-eem.672 > > grownBy: should answer the same class of object asked to be grown. > > =============== Diff against Collections-eem.672 =============== > > Item was changed: > ----- Method: SequenceableCollection>>grownBy: (in category 'copying') ----- > + grownBy: length > - grownBy: length > "Answer a copy of receiver collection with size grown by length" > + ^ (self class ofSize: self size + length) > + replaceFrom: 1 to: self size with: self startingAt: 1 ; > + yourself! > - > - | newCollection | > - newCollection := self species ofSize: self size + length. > - newCollection replaceFrom: 1 to: self size with: self startingAt: 1. > - ^ newCollection! > > > From commits at source.squeak.org Mon Jan 4 14:38:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 4 14:38:44 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-kfr.58.mcz Message-ID: Karl Ramberg uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-kfr.58.mcz ==================== Summary ==================== Name: PreferenceBrowser-kfr.58 Author: kfr Time: 3 January 2016, 6:13:14.444 pm UUID: e5f58d19-2c9a-4e05-b58d-0b7ade0be73f Ancestors: PreferenceBrowser-kfr.57 Fix for updating color when using the NewColorPickerMorph =============== Diff against PreferenceBrowser-kfr.57 =============== Item was changed: ----- Method: PBColorPreferenceView>>changeColor: (in category 'user interface') ----- changeColor: aButton + NewColorPickerMorph useIt + ifTrue: + [ (NewColorPickerMorph + on: self + originalColor: aButton color + setColorSelector: #setButtonColor:) openNear: aButton fullBoundsInWorld ] + ifFalse: + [ ColorPickerMorph new + choseModalityFromPreference ; + sourceHand: aButton activeHand ; + target: self ; + selector: #setButtonColor: ; + originalColor: aButton color ; + + putUpFor: aButton + near: aButton fullBoundsInWorld ] ! - aButton changeColor. - self preference preferenceValue: aButton fillStyle. - button label: self preference preferenceValue asString. - self adjustLabelColor ! Item was added: + ----- Method: PBColorPreferenceView>>setButtonColor: (in category 'user interface') ----- + setButtonColor: aColor + button color: aColor. + self preference preferenceValue: aColor. + button label: self preference preferenceValue asString. + self adjustLabelColor + ! From commits at source.squeak.org Mon Jan 4 14:41:15 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 4 14:41:17 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-kfr.59.mcz Message-ID: Karl Ramberg uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-kfr.59.mcz ==================== Summary ==================== Name: PreferenceBrowser-kfr.59 Author: kfr Time: 4 January 2016, 3:41:04.433 pm UUID: 54f1c76e-46a2-4dc8-adda-7e088612506e Ancestors: PreferenceBrowser-kfr.58 Adjust layout of number preference =============== Diff against PreferenceBrowser-kfr.58 =============== Item was changed: ----- Method: PBNumericPreferenceView>>representativeButtonWithColor:inPanel: (in category 'user interface') ----- representativeButtonWithColor: aColor inPanel: aPreferenceBrowser ^self horizontalPanel layoutInset: 2; color: aColor; cellInset: 20; cellPositioning: #center; addMorphBack: (StringMorph contents: self preference name); + addMorphBack: self horizontalFiller; addMorphBack: self textField; yourself.! From karlramberg at gmail.com Mon Jan 4 14:47:09 2016 From: karlramberg at gmail.com (karl ramberg) Date: Mon Jan 4 14:47:12 2016 Subject: [squeak-dev] Re: The Inbox: PreferenceBrowser-kfr.58.mcz In-Reply-To: References: <1451843517453-4869099.post@n4.nabble.com> Message-ID: Also the ObjectProperties (obtained by shift-click color handle) have 'accept' and 'cancel' Best, Karl On Mon, Jan 4, 2016 at 6:12 AM, karl ramberg wrote: > The button need to make it clear if you what to keep the changes you have > made to the color. > > We have 'accept'and 'cancel' for text/ code. > I like these. > > The paint editor has 'keep' and 'toss' > Toss is ambiguous, since it's unclear if I toss the whole painting or just > the change I made. > > Best, > Karl > > On Sun, Jan 3, 2016 at 11:52 PM, Chris Muller wrote: > >> > But as for changes to NewColorPickerMorph: >> > >> > I think the color picker need a cancel button >> >> -1. Maybe an "Undo" or "Previous Color" button, but not a Cancel >> button. Morphic is supposed to be in-place manipulation. >> >> > And ability to pick up colors from outside the color picker >> >> +1 >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160104/60bfebf6/attachment.htm From Das.Linux at gmx.de Mon Jan 4 16:01:09 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon Jan 4 16:21:29 2016 Subject: [squeak-dev] Re: I seem to get no more posts from Squeak dev In-Reply-To: References: <568276C1.9000800@gmx.net> Message-ID: <1451923269885-4869189.post@n4.nabble.com> ATTENTION: GMX users no longer receive Squeak-dev mails, their servers are more strict. I try to fix. Please contact me directly, if you can. -- View this message in context: http://forum.world.st/I-seem-to-get-no-more-posts-from-Squeak-dev-tp4868792p4869189.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From asqueaker at gmail.com Mon Jan 4 16:25:56 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Jan 4 16:26:38 2016 Subject: [squeak-dev] The Trunk: Collections-cmm.675.mcz In-Reply-To: References: Message-ID: I purposefully left 674 out of the ancestry, because I want useless commits in our ancestry. I'll remove it from the repository. On Mon, Jan 4, 2016 at 8:11 AM, Levente Uzonyi wrote: > Collections has two head versions now: cmm-674 and cmm-675. The should be > merged. > > Levente > > > On Sun, 3 Jan 2016, commits@source.squeak.org wrote: > >> Chris Muller uploaded a new version of Collections to project The Trunk: >> http://source.squeak.org/trunk/Collections-cmm.675.mcz >> >> ==================== Summary ==================== >> >> Name: Collections-cmm.675 >> Author: cmm >> Time: 3 January 2016, 3:33:44.302 pm >> UUID: d019e6cc-abbb-4077-9e3d-2f471f6fb07a >> Ancestors: Collections-eem.672 >> >> grownBy: should answer the same class of object asked to be grown. >> >> =============== Diff against Collections-eem.672 =============== >> >> Item was changed: >> ----- Method: SequenceableCollection>>grownBy: (in category 'copying') >> ----- >> + grownBy: length >> - grownBy: length >> "Answer a copy of receiver collection with size grown by length" >> + ^ (self class ofSize: self size + length) >> + replaceFrom: 1 to: self size with: self startingAt: 1 ; >> + yourself! >> - >> - | newCollection | >> - newCollection := self species ofSize: self size + length. >> - newCollection replaceFrom: 1 to: self size with: self startingAt: >> 1. >> - ^ newCollection! >> >> >> > From asqueaker at gmail.com Mon Jan 4 16:30:17 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Jan 4 16:31:00 2016 Subject: [squeak-dev] The Trunk: Collections-cmm.675.mcz In-Reply-To: References: Message-ID: On Mon, Jan 4, 2016 at 10:25 AM, Chris Muller wrote: > I purposefully left 674 out of the ancestry, because I want useless Because I DON'T want.... From commits at source.squeak.org Mon Jan 4 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 4 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160104225502.8730.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-January/009223.html Name: PreferenceBrowser-kfr.58 Ancestors: PreferenceBrowser-kfr.57 Fix for updating color when using the NewColorPickerMorph ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009224.html Name: PreferenceBrowser-kfr.59 Ancestors: PreferenceBrowser-kfr.58 Adjust layout of number preference ============================================= From commits at source.squeak.org Tue Jan 5 19:48:57 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 19:48:58 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.970.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.970.mcz ==================== Summary ==================== Name: Kernel-eem.970 Author: eem Time: 5 January 2016, 11:48:28.872258 am UUID: 95e73746-6557-49a2-af25-ce39009a57b0 Ancestors: Kernel-eem.969 Changes to Time and Delay prior to changing over to the utc microsecond clock and its use in delay scheduling. =============== Diff against Kernel-eem.969 =============== Item was changed: SharedPool subclass: #ChronologyConstants instanceVariableNames: 'seconds offset jdn nanos' + classVariableNames: 'DayNames DaysInMonth MicrosecondsInDay MonthNames NanosInMillisecond NanosInSecond OneDay SecondsInDay SecondsInHour SecondsInMinute SqueakEpoch Zero' - classVariableNames: 'DayNames DaysInMonth MonthNames NanosInMillisecond NanosInSecond OneDay SecondsInDay SecondsInHour SecondsInMinute SqueakEpoch Zero' poolDictionaries: '' category: 'Kernel-Chronology'! !ChronologyConstants commentStamp: 'brp 3/12/2004 14:34' prior: 0! ChronologyConstants is a SharedPool for the constants used by the Kernel-Chronology classes.! Item was changed: ----- Method: ChronologyConstants class>>initialize (in category 'class initialization') ----- initialize "ChronologyConstants initialize" SqueakEpoch := 2415386. "Julian day number of 1 Jan 1901" SecondsInDay := 86400. SecondsInHour := 3600. SecondsInMinute := 60. + MicrosecondsInDay := 24 * 60 * 60 * 1000000. NanosInSecond := 10 raisedTo: 9. NanosInMillisecond := 10 raisedTo: 6. DayNames := #(Sunday Monday Tuesday Wednesday Thursday Friday Saturday). + MonthNames := #( January February March April May June + July August September October November December). + DaysInMonth := #(31 28 31 30 31 30 31 31 30 31 30 31)! - MonthNames := #(January February March April May June July - August September October November December). - DaysInMonth := #(31 28 31 30 31 30 31 31 30 31 30 31) - ! Item was changed: ----- Method: DateAndTime class>>nowWithOffset: (in category 'squeak protocol') ----- nowWithOffset: aDuration + | usecs | + usecs := Time utcMicrosecondClock. + ^self basicNew + setJdn: DaysSinceEpoch + seconds: usecs // 1000000 \\ SecondsInDay + nano: usecs \\ 1000000 * 1000 + offset: aDuration! - | nanoTicks msm | - nanoTicks := (msm := self milliSecondsSinceMidnight) * 1000000. - "The following usually only executes at system startup." - ^ LastTick < nanoTicks - ifTrue: - [ LastTick := nanoTicks. - self waitForOffsets. - self basicNew - setJdn: DaysSinceEpoch - seconds: msm // 1000 - nano: msm \\ 1000 * 1000000 - offset: aDuration ] - ifFalse: - [ LastTickSemaphore critical: - [ LastTick := LastTick + 1. - self waitForOffsets. - self basicNew - setJdn: DaysSinceEpoch - seconds: LastTick // 1000000000 - nano: LastTick \\ 1000000000 - offset: aDuration ] ] - " - [ 10000 timesRepeat: [ self now. ] ] timeToRun / 10000.0 . - - If calls to DateAndTime-c-#now are within a single millisecond the semaphore code - to ensure that (self now <= self now) slows things down considerably by a factor of about 20. - - The actual speed of a single call to DateAndTime-now in milliseconds is - demonstrated by the unguarded method below. - - [ 100000 timesRepeat: [ self todayAtMilliSeconds: (self milliSecondsSinceMidnight) ] ] timeToRun / 100000.0 . 0.00494 0.00481 0.00492 0.00495 - - "! Item was added: + ----- Method: Delay class>>primSignal:atUTCMicroseconds: (in category 'primitives') ----- + primSignal: aSemaphore atUTCMicroseconds: anInteger + "Signal the semaphore when the UTC microsecond clock reaches the value of the second argument. + Fail if the first argument is neither a Semaphore nor nil, or if the second argument is not an integer. + Essential. See Object documentation whatIsAPrimitive." + + ^self primitiveFailed! Item was added: + ----- Method: Delay class>>scheduleDelay:from: (in category 'timer process') ----- + scheduleDelay: aDelay from: nowUsecs + "Private. Schedule this Delay." + + aDelay + resumptionTime: nowUsecs + aDelay microsecondDelayDuration; + beingWaitedOn: true. + ActiveDelay + ifNil: [ActiveDelay := aDelay] + ifNotNil: + [aDelay resumptionTime < ActiveDelay resumptionTime + ifTrue: [SuspendedDelays add: ActiveDelay. + ActiveDelay := aDelay] + ifFalse: [SuspendedDelays add: aDelay]]! Item was changed: ----- Method: Delay>>delayDuration (in category 'public') ----- delayDuration + "Answer the receiver's duration in milliseconds." ^delayDuration! Item was changed: ----- Method: Delay>>delayDuration: (in category 'public') ----- + delayDuration: milliseconds + "Set teh receiver's duration in milliseconds, iff it is not active." + milliseconds < 0 ifTrue: + [self error: 'Delay times cannot be negative!!']. + beingWaitedOn == true ifTrue: + [self error: 'This delay is scheduled!!']. + delayDuration := milliseconds asInteger! - delayDuration: anInteger - - anInteger < 0 ifTrue: [ self error: 'Delay times cannot be negative!!' ]. - beingWaitedOn == true ifTrue: [ self error: 'This delay is scheduled!!' ]. - delayDuration := anInteger! Item was added: + ----- Method: Delay>>microsecondDelayDuration (in category 'public') ----- + microsecondDelayDuration + "Answer the receiver's duration in microseconds." + ^delayDuration * 1000! Item was removed: - ----- Method: Delay>>scheduleEvent (in category 'private') ----- - scheduleEvent - "Schedule this delay" - resumptionTime := Time millisecondClockValue + delayDuration. - AccessProtect critical:[ - ScheduledDelay := self. - TimingSemaphore signal. - ].! Item was added: + ----- Method: Time class>>localMicrosecondClock (in category 'clock') ----- + localMicrosecondClock + "Answer the number of microseconds since the start of the 20th century in local time." + + ^0! Item was changed: ----- Method: Time class>>now (in category 'ansi protocol') ----- now "Answer a Time representing the time right now - this is a 24 hour clock." + | localUsecs localUsecsToday | + localUsecs := self localMicrosecondClock. + localUsecsToday := localUsecs \\ MicrosecondsInDay. + ^ self + seconds: localUsecsToday // 1000000 + nanoSeconds: localUsecsToday \\ 1000000 * 1000! - - | ms | - - ms := self milliSecondsSinceMidnight. - - ^ self seconds: (ms // 1000) nanoSeconds: (ms \\ 1000) * 1000000 - - - ! Item was added: + ----- Method: Time class>>utcMicrosecondClock (in category 'clock') ----- + utcMicrosecondClock + "Answer the number of microseconds since the start of the 20th century in UTC." + + ^0! From commits at source.squeak.org Tue Jan 5 20:10:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 20:10:55 2016 Subject: [squeak-dev] The Trunk: Morphic-eem.1062.mcz Message-ID: Eliot Miranda uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-eem.1062.mcz ==================== Summary ==================== Name: Morphic-eem.1062 Author: eem Time: 5 January 2016, 12:10:11.093556 pm UUID: ea1e73ed-1c23-44b1-9651-8f12c608107f Ancestors: Morphic-mt.1061 Drop SystemProgressMorph's direect access of the soon-to-be-obsolete millisecond clock. =============== Diff against Morphic-mt.1061 =============== Item was removed: - ----- Method: SystemProgressMorph>>label:min:max: (in category 'private') ----- - label: shortDescription min: minValue max: maxValue - | slot range barSize lastRefresh | - "This method is no longer used, but kept for a while longer to ensure no difficulties updating via the trunk." - ((range := maxValue - minValue) < 0 or: [(slot := self nextSlotFor: shortDescription) = 0]) - ifTrue: [^[:barVal| 0 ]]. - range <= 0 ifTrue: [self removeMorph: (bars at: slot)]. - self recenter. - self openInWorld. - barSize := -1. "Enforces a inital draw of the morph" - lastRefresh := 0. - ^[:barVal | | newBarSize | - barVal isString ifTrue: [ - self setLabel: barVal at: slot. - self currentWorld displayWorld]. - (barVal isNumber and: [range >= 1 and: [barVal between: minValue and: maxValue]]) ifTrue: [ - newBarSize := (barVal - minValue / range * BarWidth) truncated. - newBarSize = barSize ifFalse: [ - barSize := newBarSize. - (bars at: slot) barSize: barSize. - Time primMillisecondClock - lastRefresh > 25 ifTrue: [ - self currentWorld displayWorld. - lastRefresh := Time primMillisecondClock]]]. - slot] - ! Item was changed: ----- Method: SystemProgressMorph>>position:label:min:max: (in category 'private') ----- position: aPoint label: shortDescription min: minValue max: maxValue | slot range barSize lastRefresh | requestedPosition := aPoint. ((range := maxValue - minValue) < 0 or: [(slot := self nextSlotFor: shortDescription) = 0]) ifTrue: [^[:barVal| 0 ]]. range <= 0 ifTrue: [self removeMorph: (bars at: slot)]. self reposition. self openInWorld. barSize := -1. "Enforces a inital draw of the morph" lastRefresh := 0. ^[:barVal | | newBarSize | barVal isString ifTrue: [ self setLabel: barVal at: slot. self currentWorld displayWorld]. (barVal isNumber and: [range >= 1 and: [barVal between: minValue and: maxValue]]) ifTrue: [ newBarSize := (barVal - minValue / range * BarWidth) truncated. newBarSize = barSize ifFalse: [ barSize := newBarSize. (bars at: slot) barSize: barSize. + Time utcMicrosecondClock - lastRefresh > 25000 ifTrue: [ - Time primMillisecondClock - lastRefresh > 25 ifTrue: [ self currentWorld displayWorld. + lastRefresh := Time utcMicrosecondClock]]]. + slot]! - lastRefresh := Time primMillisecondClock]]]. - slot] - ! From commits at source.squeak.org Tue Jan 5 20:35:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 20:35:19 2016 Subject: [squeak-dev] The Trunk: System-eem.783.mcz Message-ID: Eliot Miranda uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-eem.783.mcz ==================== Summary ==================== Name: System-eem.783 Author: eem Time: 5 January 2016, 12:34:47.025815 pm UUID: 68f4c142-1c1c-4582-a8a5-58f7951adc48 Ancestors: System-cwp.782 Drop Utilities' dependence on the soon-to-be-obsolete primSecondClock. =============== Diff against System-cwp.782 =============== Item was changed: ----- Method: Utilities class>>dateTimeSuffix (in category 'identification') ----- dateTimeSuffix "Answer a string which indicates the date and time, intended for use in building fileout filenames, etc." "Utilities dateTimeSuffix" + ^Preferences twentyFourHourFileStamps - ^ Preferences twentyFourHourFileStamps ifFalse: + [self monthDayTimeStringFrom: Time totalSeconds] - [self monthDayTimeStringFrom: Time primSecondsClock] ifTrue: + [self monthDayTime24StringFrom: Time totalSeconds]! - [self monthDayTime24StringFrom: Time primSecondsClock]! From commits at source.squeak.org Tue Jan 5 20:38:29 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 20:38:30 2016 Subject: [squeak-dev] The Trunk: Collections-eem.676.mcz Message-ID: Eliot Miranda uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-eem.676.mcz ==================== Summary ==================== Name: Collections-eem.676 Author: eem Time: 5 January 2016, 12:38:09.288345 pm UUID: e3bea3a9-1d66-4cae-b3e3-5ed8e46d3194 Ancestors: Collections-cmm.675 Handle out-of-memory failure of elementsForwardIdentityTo:. =============== Diff against Collections-cmm.675 =============== Item was changed: ----- Method: Array>>elementsForwardIdentityTo: (in category 'converting') ----- elementsForwardIdentityTo: otherArray "This primitive performs a bulk mutation, causing all pointers to the elements of the receiver to be replaced by pointers to the corresponding elements of otherArray. The identityHashes remain with the pointers rather than with the objects so that the objects in this array should still be properly indexed in any existing hashed structures after the mutation." + ec == #'bad receiver' ifTrue: + [^self error: 'receiver must be of class Array']. + ec == #'bad argument' ifTrue: + [^self error: (otherArray class == Array + ifTrue: ['arg must be of class Array'] + ifFalse: ['receiver and argument must have the same size'])]. + ec == #'inappropriate operation' ifTrue: + [^self error: 'can''t become immediates such as SmallIntegers or Characters']. + ec == #'no modification' ifTrue: + [^self error: 'can''t become immutable objects']. + ec == #'object is pinned' ifTrue: + [^self error: 'can''t become pinned objects']. + ec == #'insufficient object memory' ifTrue: + [Smalltalk garbageCollect < 1048576 ifTrue: + [Smalltalk growMemoryByAtLeast: 1048576]. + ^self elementsForwardIdentityTo: otherArray]. self primitiveFailed! From asqueaker at gmail.com Tue Jan 5 20:46:48 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Jan 5 20:47:31 2016 Subject: [squeak-dev] Just witnessed MC do a strange double-save.. Message-ID: I just saved a new MCVersion a while ago and, after entering my notes and clicking "Accept", the MCSave dialog disappeared, there was a quick progress bar, but no Version Summary window appeared, AND my working-copy still appeared dirty, and no new file was saved in the repository. Thinking it was a problem similar to what Bert's problem workarounded with "This modal dialog was interrupted, please close it," I simply resaved (thank goodness I still carry the habit of copying my notes into teh clipboard!) and, this time, it "worked." But then, several minutes later, out of the blue, another VersionSummary window for that same Version appeared -- as if the one that had gotten "stuck" earlier finally unstuck itself. There was also a menu question asking me if I wanted to overwrite the filename. I think I chose to cancel, not overwrite. Now, the state of my ancestry is that the VersionInfo for the saved package has a different UUID id than the one in the repository. I've had to delete my working copy and re-adopt the one in the repository. So, something about the way we handle our modal dialogs, we really need to figure out a better way..! From commits at source.squeak.org Tue Jan 5 21:16:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 21:16:06 2016 Subject: [squeak-dev] The Trunk: Network-eem.170.mcz Message-ID: Eliot Miranda uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-eem.170.mcz ==================== Summary ==================== Name: Network-eem.170 Author: eem Time: 5 January 2016, 1:15:51.565662 pm UUID: 4fa7ff7a-74dd-4721-b7c7-04775d2afa03 Ancestors: Network-cmm.169 Move NetNameResolver from the old primUTCMicrosecondClock to the new utcMicrosecondClock. =============== Diff against Network-cmm.169 =============== Item was changed: ----- Method: NetNameResolver class>>addressForName:timeout: (in category 'lookups') ----- addressForName: hostName timeout: secs "Look up the given host name and return its address. Return nil if the address is not found in the given number of seconds." "NetNameResolver addressForName: 'create.ucsb.edu' timeout: 30" "NetNameResolver addressForName: '100000jobs.de' timeout: 30" "NetNameResolver addressForName: '1.7.6.4' timeout: 30" "NetNameResolver addressForName: '' timeout: 30 (This seems to return nil?)" | deadline | self initializeNetwork. self useOldNetwork ifFalse: [^self addressForName: hostName]. "check if this is a valid numeric host address (e.g. 1.2.3.4)" (self addressFromString: hostName) ifNotNil: [ :numericHostAddress | ^numericHostAddress ]. "Look up a host name, including ones that start with a digit (e.g. 100000jobs.de or squeak.org)" + deadline := Time utcMicrosecondClock + (secs * 1000000). - deadline := Time primUTCMicrosecondClock + (secs * 1000000). "Protect the execution of this block, as the ResolverSemaphore is used for both parts of the transaction." ^(self resolverMutex critical: [ (self waitForResolverReadyUntil: deadline) ifTrue: [ self primStartLookupOfName: hostName. (self waitForCompletionUntil: deadline) ifTrue: [ self primNameLookupResult. ] ] ]) ifNil: [ (NameLookupFailure hostName: hostName) signal: 'Could not resolve the server named: ', hostName ] ! Item was changed: ----- Method: NetNameResolver class>>nameForAddress:timeout: (in category 'lookups') ----- nameForAddress: hostAddress timeout: secs "Look up the given host address and return its name. Return nil if the lookup fails or is not completed in the given number of seconds. Depends on the given host address being known to the gateway, which may not be the case for dynamically allocated addresses." "NetNameResolver nameForAddress: (NetNameResolver addressFromString: '128.111.92.2') timeout: 30" | deadline | self initializeNetwork. + deadline := Time utcMicrosecondClock + (secs * 1000000). - deadline := Time primUTCMicrosecondClock + (secs * 1000000). "Protect the execution of this block, as the ResolverSemaphore is used for both parts of the transaction." ^self resolverMutex critical: [ (self waitForResolverReadyUntil: deadline) ifTrue: [ self primStartLookupOfAddress: hostAddress. (self waitForCompletionUntil: deadline) ifTrue: [ self primAddressLookupResult ] ] ]! Item was changed: ----- Method: NetNameResolver class>>waitForCompletionUntil: (in category 'private') ----- waitForCompletionUntil: deadline + "Wait until deadline for the resolver to be ready to accept a new request. + Return true if the resolver is ready, false if the network is not initialized or + the resolver has not become free within the given time period." - "Wait until deadlien for the resolver to be ready to accept a new request. Return true if the resolver is ready, false if the network is not initialized or the resolver has not become free within the given time period." | status millisecondsLeft | status := self resolverStatus. + [ status = ResolverBusy + and: [millisecondsLeft := (deadline - Time utcMicrosecondClock) // 1000. + millisecondsLeft > 0 ] ] + whileTrue: "wait for resolver to be available" + [ ResolverSemaphore waitTimeoutMSecs: millisecondsLeft. - [ status = ResolverBusy and: [ - millisecondsLeft := deadline isLarge - ifTrue: [ (deadline - Time primUTCMicrosecondClock) // 1000 ] - ifFalse: [ deadline - Time millisecondClockValue ]. - millisecondsLeft > 0 ] ] - whileTrue: [ - "wait for resolver to be available" - ResolverSemaphore waitTimeoutMSecs: millisecondsLeft. status := self resolverStatus ]. status = ResolverReady ifTrue: [ ^true ]. status = ResolverBusy ifTrue: [ self primAbortLookup ]. + ^false! - ^false - ! Item was changed: ----- Method: NetNameResolver class>>waitForResolverReadyUntil: (in category 'private') ----- waitForResolverReadyUntil: deadline "Wait until deadline for the resolver to be ready to accept a new request. Return true if the resolver is not busy, false if the network is not initialized or the resolver has not become free within the given time period." | status millisecondsLeft | (status := self resolverStatus) = ResolverUninitialized ifTrue: [ ^false ]. + [ status = ResolverBusy + and: [millisecondsLeft := (deadline - Time utcMicrosecondClock) // 1000. + millisecondsLeft > 0 ] ] + whileTrue: "wait for resolver to be available" + [ ResolverSemaphore waitTimeoutMSecs: millisecondsLeft. + status := self resolverStatus ]. - [ status = ResolverBusy and: [ - millisecondsLeft := deadline isLarge - ifTrue: [ (deadline - Time primUTCMicrosecondClock) // 1000 ] - ifFalse: [ deadline - Time millisecondClockValue ]. - millisecondsLeft > 0 ] ] - whileTrue: [ - "wait for resolver to be available" - ResolverSemaphore waitTimeoutMSecs: millisecondsLeft. - status := self resolverStatus ]. ^status ~= ResolverBusy! From commits at source.squeak.org Tue Jan 5 21:28:32 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 21:28:34 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-eem.14.mcz Message-ID: Eliot Miranda uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-eem.14.mcz ==================== Summary ==================== Name: 51Deprecated-eem.14 Author: eem Time: 5 January 2016, 1:28:26.744217 pm UUID: 9ee28680-3763-46a9-8c2c-1c81f4d6b917 Ancestors: 51Deprecated-mt.13 Deprecates obsolete time primitives and secondsWhenClockTicks. =============== Diff against 51Deprecated-mt.13 =============== Item was added: + ----- Method: Time class>>primLocalMicrosecondClock (in category '*51Deprecated-primitives') ----- + primLocalMicrosecondClock + "Answer the local microseconds since the Smalltalk epoch. The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds between the two epochs according to RFC 868, and with an offset duration corresponding to the current offset of local time from UTC." + + + ^0! Item was added: + ----- Method: Time class>>primMicrosecondClock (in category '*51Deprecated-primitives') ----- + primMicrosecondClock + "Answer the number of microseconds since the microsecond clock + was last reset or rolled over. Answer zero if the primitive fails." + + + ^ 0! Item was added: + ----- Method: Time class>>primMillisecondClock (in category '*51Deprecated-primitives') ----- + primMillisecondClock + "Primitive. Answer the number of milliseconds since the millisecond clock + was last reset or rolled over. Answer zero if the primitive fails. + Optional. See Object documentation whatIsAPrimitive." + + + ^ 0! Item was added: + ----- Method: Time class>>primMillisecondClockMask (in category '*51Deprecated-primitives') ----- + primMillisecondClockMask + "Answer the mask value used for millisecond clock rollover in the + virtual machine, or nil if the VM cannot support the request." + + + ^nil! Item was added: + ----- Method: Time class>>primSecondsClock (in category '*51Deprecated-primitives') ----- + primSecondsClock + "Answer the number of seconds since 00:00 on the morning of + January 1, 1901 (a 32-bit unsigned number). + Essential. See Object documentation whatIsAPrimitive. " + + + self primitiveFailed! Item was added: + ----- Method: Time class>>primUTCMicrosecondClock (in category '*51Deprecated-primitives') ----- + primUTCMicrosecondClock + "Answer the UTC microseconds since the Smalltalk epoch. The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds between the two epochs according to RFC 868." + + + ^0! Item was added: + ----- Method: Time class>>secondsWhenClockTicks (in category '*51Deprecated-primitives') ----- + secondsWhenClockTicks + + "waits for the moment when a new second begins" + + | lastSecond delay | + + delay := Delay forMilliseconds: 1. + lastSecond := self primSecondsClock. + [ lastSecond = self primSecondsClock ] whileTrue: [ delay wait ]. + + ^ lastSecond + 1! From commits at source.squeak.org Tue Jan 5 21:38:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 21:38:47 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.971.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.971.mcz ==================== Summary ==================== Name: Kernel-eem.971 Author: eem Time: 5 January 2016, 1:38:15.828256 pm UUID: 6dba39b2-70bb-4cb2-864e-cf149b4a3755 Ancestors: Kernel-eem.970 Move time from a basis of mixed second clock/millisecond clock primitives to a single microsecond clock basis (albeit with two primitives, one for local and one for UTC microseconds). Derive millisecond and second clocks from local microsecond clock. hence eliminate tests for millisecond clock overflow and use of the millisecond clock mask. Change Delay's resumptionTime from a millisecond clock value to a utc microsecond clock value. Eliminate unused offsets in DateAndTime and hence avoid spin loop at start-up waiting for the second clock to roll over. =============== Diff against Kernel-eem.970 =============== Item was added: + (PackageInfo named: 'Kernel') preamble: 'Delay saveResumptionTimes'! Item was changed: Magnitude subclass: #DateAndTime instanceVariableNames: 'seconds offset jdn nanos' + classVariableNames: 'ClockProvider DaysSinceEpoch LocalTimeZone' - classVariableNames: 'ClockProvider DaysSinceEpoch LastMilliSeconds LastTick LastTickSemaphore LocalTimeZone MilliSecondOffset OffsetsAreValid' poolDictionaries: 'ChronologyConstants' category: 'Kernel-Chronology'! !DateAndTime commentStamp: 'brp 5/13/2003 08:07' prior: 0! I represent a point in UTC time as defined by ISO 8601. I have zero duration. My implementation uses three SmallIntegers and a Duration: jdn - julian day number. seconds - number of seconds since midnight. nanos - the number of nanoseconds since the second. offset - duration from UTC. The nanosecond attribute is almost always zero but it defined for full ISO compliance and is suitable for timestamping. ! Item was changed: ----- Method: DateAndTime class>>initialize (in category 'initialize-release') ----- initialize super initialize. ClockProvider := Time. - LastTickSemaphore := Semaphore forMutualExclusion. - LastMilliSeconds := 0. - LastTick := 0. Smalltalk addToStartUpList: self. + self startUp: true! - self startUp: true - ! Item was removed: - ----- Method: DateAndTime class>>initializeOffsets (in category 'initialize-release') ----- - initializeOffsets - | durationSinceEpoch secondsSinceMidnight nowSecs | - LastTick := 0. - nowSecs := self clock secondsWhenClockTicks. - LastMilliSeconds := self millisecondClockValue. - durationSinceEpoch := Duration - days: SqueakEpoch - hours: 0 - minutes: 0 - seconds: nowSecs. - DaysSinceEpoch := durationSinceEpoch days. - secondsSinceMidnight := (durationSinceEpoch - - (Duration - days: DaysSinceEpoch - hours: 0 - minutes: 0 - seconds: 0)) asSeconds. - MilliSecondOffset := secondsSinceMidnight * 1000 - LastMilliSeconds! Item was changed: ----- Method: DateAndTime class>>milliSecondsSinceMidnight (in category 'squeak protocol') ----- milliSecondsSinceMidnight + ^Time milliSecondsSinceMidnight! - | msm msClock | - - "This is usually only during system startup..." - self waitForOffsets. - - msClock := self millisecondClockValue. - msClock < LastMilliSeconds ifTrue: [ "rolled over" - MilliSecondOffset := MilliSecondOffset + (SmallInteger maxVal // 2) + 1 ]. - LastMilliSeconds := msClock. - [ - msm := msClock + MilliSecondOffset. - msm >= 86400000 ] whileTrue: [ - "next day" - LastTick := -1. - DaysSinceEpoch := DaysSinceEpoch + 1. - MilliSecondOffset := MilliSecondOffset - 86400000 ]. - "day rolled over sanity check" - (LastTick = -1 and: [ - (Duration - days: SqueakEpoch - hours: 0 - minutes: 0 - seconds: self clock totalSeconds) days ~= DaysSinceEpoch ]) ifTrue: [ - self initializeOffsets. - ^ self milliSecondsSinceMidnight ]. - ^ msm.! Item was changed: ----- Method: DateAndTime class>>startUp: (in category 'initialize-release') ----- startUp: resuming + | durationSinceEpoch | + resuming ifFalse: [^self]. + durationSinceEpoch := Duration + days: SqueakEpoch + hours: 0 + minutes: 0 + seconds: self clock totalSeconds. + DaysSinceEpoch := durationSinceEpoch days! - resuming ifFalse: [ ^ self ]. - Time initializeMillisecondClockMask. - OffsetsAreValid := false. - [ - self initializeOffsets. - OffsetsAreValid := true - ] forkAt: Processor userInterruptPriority.! Item was removed: - ----- Method: DateAndTime class>>waitForOffsets (in category 'initialize-release') ----- - waitForOffsets - OffsetsAreValid ifFalse: [ - [ - (Delay forSeconds: 1) wait. - OffsetsAreValid - ] whileFalse - ]! Item was changed: Object subclass: #Delay instanceVariableNames: 'delayDuration resumptionTime delaySemaphore beingWaitedOn' + classVariableNames: 'AccessProtect ActiveDelay DelaySuspended FinishedDelay RunTimerEventLoop ScheduledDelay SuspendedDelays TimerEventLoop TimingSemaphore' - classVariableNames: 'AccessProtect ActiveDelay ActiveDelayStartTime DelaySuspended FinishedDelay RunTimerEventLoop ScheduledDelay SuspendedDelays TimerEventLoop TimingSemaphore' poolDictionaries: '' category: 'Kernel-Processes'! + !Delay commentStamp: 'eem 1/5/2016 11:58' prior: 0! - !Delay commentStamp: 'laza 9/5/2009 08:45' prior: 0! I am the main way that a process may pause for some amount of time. The simplest usage is like this: (Delay forSeconds: 5) wait. An instance of Delay responds to the message 'wait' by suspending the caller's process for a certain amount of time. The duration of the pause is specified when the Delay is created with the message forMilliseconds: or forSeconds:. A Delay can be used again when the current wait has finished. For example, a clock process might repeatedly wait on a one-second Delay. + A delay in progress when an image snapshot is saved is resumed when the snapshot is re-started. - A delay in progress when an image snapshot is saved is resumed when the snapshot is re-started. Delays work across millisecond clock roll-overs. - - For a more complex example, see #testDelayOf:for:rect: . A word of advice: This is THE highest priority code which is run in Squeak, in other words it is time-critical. The speed of this code is critical for accurate responses, it is critical for network services, it affects every last part of the system. + In short: Don't fix it if it ain't broken!! This code isn't supposed to be beautiful, it's supposed to be fast!! The reason for duplicating code is to make it fast. The reason for not using ifNil:[]ifNotNil:[] is that the compiler may not inline those. Since the effect of changes are VERY hard to predict it is best to leave things as they are for now unless there is an actual need to change anything + + + Instance Variables + beingWaitedOn: + delayDuration: + delaySemaphore: + resumptionTime: + + beingWaitedOn + - this is set when the delay is being waited on or is unscheduled. + + delayDuration + - the duration of the delay in milliseconds + + delaySemaphore + - the semaphore used to suspend process(es) waiting on this delay + + resumptionTime + - the value of the UTC miscrosecond clock at which the delay should resume processes waiting on it'! - In short: Don't fix it if it ain't broken!! This code isn't supposed to be beautiful, it's supposed to be fast!! The reason for duplicating code is to make it fast. The reason for not using ifNil:[]ifNotNil:[] is that the compiler may not inline those. Since the effect of changes are VERY hard to predict it is best to leave things as they are for now unless there is an actual need to change anything! Item was changed: ----- Method: Delay class>>handleTimerEvent (in category 'timer process') ----- handleTimerEvent "Handle a timer event; which can be either: - a schedule request (ScheduledDelay notNil) - an unschedule request (FinishedDelay notNil) - a timer signal (not explicitly specified) We check for timer expiry every time we get a signal." | nowTick nextTick | "Wait until there is work to do." TimingSemaphore wait. + nowTick := Time utcMicrosecondClock. "Process any schedule requests" + ScheduledDelay ifNotNil: + [self scheduleDelay: ScheduledDelay from: nowTick. + ScheduledDelay := nil]. - ScheduledDelay ifNotNil:[ - "Schedule the given delay" - self scheduleDelay: ScheduledDelay. - ScheduledDelay := nil. - ]. "Process any unschedule requests" + FinishedDelay ifNotNil: + [self unscheduleDelay: FinishedDelay. + FinishedDelay := nil]. - FinishedDelay ifNotNil:[ - self unscheduleDelay: FinishedDelay. - FinishedDelay := nil. - ]. - "Check for clock wrap-around." - nowTick := Time millisecondClockValue. - nowTick < ActiveDelayStartTime ifTrue: [ - "clock wrapped" - self saveResumptionTimes. - self restoreResumptionTimes. - ]. - ActiveDelayStartTime := nowTick. - "Signal any expired delays" + [ActiveDelay notNil + and: [nowTick >= ActiveDelay resumptionTime]] whileTrue: + [ActiveDelay signalWaitingProcess. + ActiveDelay := SuspendedDelays isEmpty ifFalse: + [SuspendedDelays removeFirst]]. - [ActiveDelay notNil and:[nowTick >= ActiveDelay resumptionTime]] whileTrue:[ - ActiveDelay signalWaitingProcess. - SuspendedDelays isEmpty - ifTrue: [ActiveDelay := nil] - ifFalse:[ActiveDelay := SuspendedDelays removeFirst]. - ]. "And signal when the next request is due. We sleep at most 1sec here + as a soft busy-loop so that we don't accidentally miss signals." + nextTick := nowTick + 1000000. + ActiveDelay ifNotNil: + [nextTick := nextTick min: ActiveDelay resumptionTime]. - as a soft busy-loop so that we don't accidentally miss signals." - nextTick := nowTick + 1000. - ActiveDelay ifNotNil:[nextTick := nextTick min: ActiveDelay resumptionTime]. - nextTick := nextTick min: SmallInteger maxVal. "Since we have processed all outstanding requests, reset the timing semaphore so + that only new work will wake us up again. Do this RIGHT BEFORE setting the next + wakeup call from the VM because it is only signaled once so we mustn't miss it." - that only new work will wake us up again. Do this RIGHT BEFORE setting the next - wakeup call from the VM because it is only signaled once so we mustn't miss it." TimingSemaphore initSignals. + Delay primSignal: TimingSemaphore atUTCMicroseconds: nextTick! - Delay primSignal: TimingSemaphore atMilliseconds: nextTick. - - "This last test is necessary for the obscure case that the msecs clock rolls over - after nowTick has been computed (unlikely but not impossible). In this case we'd - wait for MillisecondClockMask msecs (roughly six days) or until another delay gets - scheduled (which may not be any time soon). In any case, since handling the - condition is easy, let's just deal with it" - Time millisecondClockValue < nowTick ifTrue:[TimingSemaphore signal]. "retry" - ! Item was changed: + ----- Method: Delay class>>restoreResumptionTimes (in category 'timer process') ----- - ----- Method: Delay class>>restoreResumptionTimes (in category 'snapshotting') ----- restoreResumptionTimes + "Private!! Restore the resumption times of all scheduled Delays after a snapshot. + This method should be called only while the AccessProtect semaphore is held." - "Private!! Restore the resumption times of all scheduled Delays after a snapshot or clock roll-over. This method should be called only while the AccessProtect semaphore is held." | newBaseTime | + newBaseTime := Time utcMicrosecondClock. + SuspendedDelays do: + [:d | d adjustResumptionTimeOldBase: 0 newBase: newBaseTime]. + ActiveDelay ifNotNil: + [ActiveDelay adjustResumptionTimeOldBase: 0 newBase: newBaseTime]! - newBaseTime := Time millisecondClockValue. - SuspendedDelays do: [:d | d adjustResumptionTimeOldBase: 0 newBase: newBaseTime]. - ActiveDelay == nil ifFalse: [ - ActiveDelay adjustResumptionTimeOldBase: 0 newBase: newBaseTime. - ]. - ActiveDelayStartTime := newBaseTime. - ! Item was changed: + ----- Method: Delay class>>saveResumptionTimes (in category 'timer process') ----- - ----- Method: Delay class>>saveResumptionTimes (in category 'snapshotting') ----- saveResumptionTimes + "Private!! Record the resumption times of all Delays relative to a base time of zero. + This is done prior to snapshotting. This method should be called only while the + AccessProtect semaphore is held." - "Private!! Record the resumption times of all Delays relative to a base time of zero. This is done prior to snapshotting or adjusting the resumption times after a clock roll-over. This method should be called only while the AccessProtect semaphore is held." | oldBaseTime | + oldBaseTime := Time utcMicrosecondClock. + ActiveDelay ifNotNil: + [ActiveDelay adjustResumptionTimeOldBase: oldBaseTime newBase: 0]. - oldBaseTime := Time millisecondClockValue. - ActiveDelay == nil - ifFalse: [ - oldBaseTime < ActiveDelayStartTime - ifTrue: [oldBaseTime := ActiveDelayStartTime]. "clock rolled over" - ActiveDelay adjustResumptionTimeOldBase: oldBaseTime newBase: 0]. SuspendedDelays do: + [:d | d adjustResumptionTimeOldBase: oldBaseTime newBase: 0]! - [:d | d adjustResumptionTimeOldBase: oldBaseTime newBase: 0]. - ! Item was changed: ----- Method: Delay class>>startTimerEventLoop (in category 'timer process') ----- startTimerEventLoop "Start the timer event loop" "Delay startTimerEventLoop" self stopTimerEventLoop. AccessProtect := Semaphore forMutualExclusion. - ActiveDelayStartTime := Time millisecondClockValue. SuspendedDelays := Heap withAll: (SuspendedDelays ifNil:[#()]) sortBlock: [:d1 :d2 | d1 resumptionTime <= d2 resumptionTime]. TimingSemaphore := Semaphore new. RunTimerEventLoop := true. TimerEventLoop := [self runTimerEventLoop] newProcess. TimerEventLoop priority: Processor timingPriority. TimerEventLoop resume. + TimingSemaphore signal "get going"! - TimingSemaphore signal. "get going" - ! Item was changed: ----- Method: Random>>seed: (in category 'initialization') ----- seed: anIntegerOrNil + "Use the given integer as the seed, or generate one if it's nil." - " Use the given integer as seed, or generate one if it's nil. " | newSeed | + newSeed := anIntegerOrNil ifNil: + [(Time utcMicrosecondClock bitShift: 28) bitXor: self hash hashMultiply]. + (newSeed between: 0 and: 16rFFFFFFFF) ifFalse: + [newSeed := self hashSeed: newSeed]. - newSeed := anIntegerOrNil ifNil: [ - | now | - now := Time primUTCMicrosecondClock. - now = 0 ifTrue: [ now := Time millisecondClockValue ]. - (now bitShift: 28) bitXor: self hash hashMultiply ]. - (newSeed between: 0 and: 16rFFFFFFFF) ifFalse: [ - newSeed := self hashSeed: newSeed ]. self initializeStatesWith: newSeed; generateStates! Item was changed: Magnitude subclass: #Time instanceVariableNames: 'seconds nanos' + classVariableNames: '' - classVariableNames: 'MillisecondClockMask' poolDictionaries: 'ChronologyConstants' category: 'Kernel-Chronology'! !Time commentStamp: 'dew 10/23/2004 17:58' prior: 0! This represents a particular point in time during any given day. For example, '5:19:45 pm'. If you need a point in time on a particular day, use DateAndTime. If you need a duration of time, use Duration. ! Item was removed: - ----- Method: Time class>>initializeMillisecondClockMask (in category 'clock') ----- - initializeMillisecondClockMask - "Initialize cached value from the VM, or set to nil if VM cannot support the request" - - MillisecondClockMask := self primMillisecondClockMask - ! Item was changed: ----- Method: Time class>>localMicrosecondClock (in category 'clock') ----- localMicrosecondClock + "Answer the local microseconds since the Smalltalk epoch (January 1st 1901, the start of the 20th century). + The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds + between the two epochs according to RFC 868, and with an offset duration corresponding to the current + offset of local time from UTC." - "Answer the number of microseconds since the start of the 20th century in local time." ^0! Item was changed: ----- Method: Time class>>milliSecondsSinceMidnight (in category 'ansi protocol') ----- milliSecondsSinceMidnight + ^self localMicrosecondClock // 1000 \\ 86400000 "24 * 60 * 60 * 1000"! - - ^ DateAndTime milliSecondsSinceMidnight! Item was removed: - ----- Method: Time class>>millisecondClockMask (in category 'general inquiries') ----- - millisecondClockMask - "Answer the mask used for millisecond clock rollover in the virtual machine. - Answer a default if the VM cannot supply the value." - - ^MillisecondClockMask ifNil: [16r1FFFFFFF] - ! Item was changed: ----- Method: Time class>>millisecondClockValue (in category 'general inquiries') ----- millisecondClockValue + "Answer the value of the millisecond clock." - "Answer the number of milliseconds since the millisecond clock was last reset or rolled over. - Answer 0 if the primitive fails." + ^self localMicrosecondClock // 1000! - - ^ 0! Item was changed: ----- Method: Time class>>milliseconds:since: (in category 'squeak protocol') ----- milliseconds: currentTime since: lastTime + "Answer the elapsed time since last recorded in milliseconds (i.e. of millisecondClockValue). + Since the time basis is now a 61-bit or greater UTC microsecond clock, rollover is no longer an issue." - "Answer the elapsed time since last recorded in milliseconds. - Compensate for rollover." + ^currentTime - lastTime! - | delta | - delta := currentTime - lastTime. - ^ delta < 0 - ifTrue: [self millisecondClockMask + delta] - ifFalse: [delta]! Item was changed: ----- Method: Time class>>millisecondsToRun: (in category 'general inquiries') ----- millisecondsToRun: timedBlock "Answer the number of milliseconds timedBlock takes to return its value." + | startUsecs | + startUsecs := self utcMicrosecondClock. - | initialMilliseconds | - initialMilliseconds := self millisecondClockValue. timedBlock value. + ^self utcMicrosecondClock - startUsecs + 500 // 1000! - ^self millisecondsSince: initialMilliseconds! Item was removed: - ----- Method: Time class>>primLocalMicrosecondClock (in category 'clock') ----- - primLocalMicrosecondClock - "Answer the local microseconds since the Smalltalk epoch. The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds between the two epochs according to RFC 868, and with an offset duration corresponding to the current offset of local time from UTC." - - - ^0! Item was removed: - ----- Method: Time class>>primMicrosecondClock (in category 'clock') ----- - primMicrosecondClock - "Answer the number of microseconds since the microsecond clock - was last reset or rolled over. Answer zero if the primitive fails." - - - ^ 0! Item was removed: - ----- Method: Time class>>primMillisecondClock (in category 'smalltalk-80') ----- - primMillisecondClock - "Primitive. Answer the number of milliseconds since the millisecond clock - was last reset or rolled over. Answer zero if the primitive fails. - Optional. See Object documentation whatIsAPrimitive." - - - ^ 0! Item was removed: - ----- Method: Time class>>primMillisecondClockMask (in category 'clock') ----- - primMillisecondClockMask - "Answer the mask value used for millisecond clock rollover in the - virtual machine, or nil if the VM cannot support the request." - - - ^nil! Item was removed: - ----- Method: Time class>>primSecondsClock (in category 'smalltalk-80') ----- - primSecondsClock - "Answer the number of seconds since 00:00 on the morning of - January 1, 1901 (a 32-bit unsigned number). - Essential. See Object documentation whatIsAPrimitive. " - - - self primitiveFailed! Item was removed: - ----- Method: Time class>>primUTCMicrosecondClock (in category 'clock') ----- - primUTCMicrosecondClock - "Answer the UTC microseconds since the Smalltalk epoch. The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds between the two epochs according to RFC 868." - - - ^0! Item was removed: - ----- Method: Time class>>secondsWhenClockTicks (in category 'clock') ----- - secondsWhenClockTicks - - "waits for the moment when a new second begins" - - | lastSecond delay | - - delay := Delay forMilliseconds: 1. - lastSecond := self primSecondsClock. - [ lastSecond = self primSecondsClock ] whileTrue: [ delay wait ]. - - ^ lastSecond + 1! Item was changed: ----- Method: Time class>>totalSeconds (in category 'smalltalk-80') ----- totalSeconds + "Answer the total seconds since the Squeak epoch: 1 January 1901, in local time." - "Answer the total seconds since the Squeak epoch: 1 January 1901." + ^self localMicrosecondClock // 1000000! - ^ self primSecondsClock! Item was changed: ----- Method: Time class>>utcMicrosecondClock (in category 'clock') ----- utcMicrosecondClock + "Answer the UTC microseconds since the Smalltalk epoch (January 1st 1901, the start of the 20th century). + The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds + between the two epochs according to RFC 868." - "Answer the number of microseconds since the start of the 20th century in UTC." ^0! Item was changed: + (PackageInfo named: 'Kernel') postscript: 'Delay restoreResumptionTimes'! - (PackageInfo named: 'Kernel') postscript: '"Fix accidental non-weak arrays in ObsoleteSubclasses values" - Behavior classPool at: #ObsoleteSubclasses ifPresent: [:os | - os keysAndValuesDo: [:superclass :obsoletes | - obsoletes class isWeak ifFalse: [ - os at: superclass put: (obsoletes as: WeakArray)]]]. - "Remove spurious -- all -- category that crept into Object" - [Object organization removeCategory: #''-- all --''. - ] on: Error do: [:e| - "Category not empty, silently leave it there" - e return].'! From commits at source.squeak.org Tue Jan 5 21:45:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 21:45:02 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.972.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.972.mcz ==================== Summary ==================== Name: Kernel-eem.972 Author: eem Time: 5 January 2016, 1:44:32.826575 pm UUID: 85bfad5e-e30e-46da-b64b-e8d3d34fc960 Ancestors: Kernel-eem.971 Revert the preamble and postscript to avoid inadvertently screwing up delays with subsequent changes. =============== Diff against Kernel-eem.971 =============== Item was removed: - (PackageInfo named: 'Kernel') preamble: 'Delay saveResumptionTimes'! Item was removed: - (PackageInfo named: 'Kernel') postscript: 'Delay restoreResumptionTimes'! From eliot.miranda at gmail.com Tue Jan 5 21:49:49 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Jan 5 21:49:51 2016 Subject: [squeak-dev] URGENT: DON'T UPDATE! Message-ID: Hi All, I'm so sorry but I made a mistake with the time changes and if you update to the latest you'll likely lock up your image. I think it's as simple as needing to stop Delay's timer loop around the update. Give me a while. Hopefully those of you in Europe won't notice ;-). _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160105/c1c9d379/attachment.htm From commits at source.squeak.org Tue Jan 5 22:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 5 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160105225501.32353.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-January/009225.html Name: Kernel-eem.970 Ancestors: Kernel-eem.969 Changes to Time and Delay prior to changing over to the utc microsecond clock and its use in delay scheduling. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009226.html Name: Morphic-eem.1062 Ancestors: Morphic-mt.1061 Drop SystemProgressMorph's direect access of the soon-to-be-obsolete millisecond clock. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009227.html Name: System-eem.783 Ancestors: System-cwp.782 Drop Utilities' dependence on the soon-to-be-obsolete primSecondClock. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009228.html Name: Collections-eem.676 Ancestors: Collections-cmm.675 Handle out-of-memory failure of elementsForwardIdentityTo:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009229.html Name: Network-eem.170 Ancestors: Network-cmm.169 Move NetNameResolver from the old primUTCMicrosecondClock to the new utcMicrosecondClock. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009230.html Name: 51Deprecated-eem.14 Ancestors: 51Deprecated-mt.13 Deprecates obsolete time primitives and secondsWhenClockTicks. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009231.html Name: Kernel-eem.971 Ancestors: Kernel-eem.970 Move time from a basis of mixed second clock/millisecond clock primitives to a single microsecond clock basis (albeit with two primitives, one for local and one for UTC microseconds). Derive millisecond and second clocks from local microsecond clock. hence eliminate tests for millisecond clock overflow and use of the millisecond clock mask. Change Delay's resumptionTime from a millisecond clock value to a utc microsecond clock value. Eliminate unused offsets in DateAndTime and hence avoid spin loop at start-up waiting for the second clock to roll over. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009232.html Name: Kernel-eem.972 Ancestors: Kernel-eem.971 Revert the preamble and postscript to avoid inadvertently screwing up delays with subsequent changes. ============================================= From commits at source.squeak.org Wed Jan 6 00:28:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 6 00:28:15 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.971.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.971.mcz ==================== Summary ==================== Name: Kernel-eem.971 Author: eem Time: 5 January 2016, 4:08:44.090307 pm UUID: c93c23ad-9714-49c1-a2fd-a44b74e0bb63 Ancestors: Kernel-eem.970 Move time from a basis of mixed second clock/millisecond clock primitives to a single microsecond clock basis (albeit with two primitives, one for local and one for UTC microseconds). Derive millisecond and second clocks from local microsecond clock. Hence eliminate tests for millisecond clock overflow and use of the millisecond clock mask. Change Delay's resumptionTime from a millisecond clock value to a utc microsecond clock value. Eliminate unused offsets in DateAndTime and hence avoid spin loop at start-up waiting for the second clock to roll over. =============== Diff against Kernel-eem.970 =============== Item was added: + (PackageInfo named: 'Kernel') preamble: '"below, add code to be run before the loading of this package" + Delay stopTimerEventLoop; saveResumptionTimes'! Item was changed: Magnitude subclass: #DateAndTime instanceVariableNames: 'seconds offset jdn nanos' + classVariableNames: 'ClockProvider DaysSinceEpoch LocalTimeZone' - classVariableNames: 'ClockProvider DaysSinceEpoch LastMilliSeconds LastTick LastTickSemaphore LocalTimeZone MilliSecondOffset OffsetsAreValid' poolDictionaries: 'ChronologyConstants' category: 'Kernel-Chronology'! !DateAndTime commentStamp: 'brp 5/13/2003 08:07' prior: 0! I represent a point in UTC time as defined by ISO 8601. I have zero duration. My implementation uses three SmallIntegers and a Duration: jdn - julian day number. seconds - number of seconds since midnight. nanos - the number of nanoseconds since the second. offset - duration from UTC. The nanosecond attribute is almost always zero but it defined for full ISO compliance and is suitable for timestamping. ! Item was changed: ----- Method: DateAndTime class>>initialize (in category 'initialize-release') ----- initialize super initialize. ClockProvider := Time. - LastTickSemaphore := Semaphore forMutualExclusion. - LastMilliSeconds := 0. - LastTick := 0. Smalltalk addToStartUpList: self. + self startUp: true! - self startUp: true - ! Item was removed: - ----- Method: DateAndTime class>>initializeOffsets (in category 'initialize-release') ----- - initializeOffsets - | durationSinceEpoch secondsSinceMidnight nowSecs | - LastTick := 0. - nowSecs := self clock secondsWhenClockTicks. - LastMilliSeconds := self millisecondClockValue. - durationSinceEpoch := Duration - days: SqueakEpoch - hours: 0 - minutes: 0 - seconds: nowSecs. - DaysSinceEpoch := durationSinceEpoch days. - secondsSinceMidnight := (durationSinceEpoch - - (Duration - days: DaysSinceEpoch - hours: 0 - minutes: 0 - seconds: 0)) asSeconds. - MilliSecondOffset := secondsSinceMidnight * 1000 - LastMilliSeconds! Item was changed: ----- Method: DateAndTime class>>milliSecondsSinceMidnight (in category 'squeak protocol') ----- milliSecondsSinceMidnight + ^Time milliSecondsSinceMidnight! - | msm msClock | - - "This is usually only during system startup..." - self waitForOffsets. - - msClock := self millisecondClockValue. - msClock < LastMilliSeconds ifTrue: [ "rolled over" - MilliSecondOffset := MilliSecondOffset + (SmallInteger maxVal // 2) + 1 ]. - LastMilliSeconds := msClock. - [ - msm := msClock + MilliSecondOffset. - msm >= 86400000 ] whileTrue: [ - "next day" - LastTick := -1. - DaysSinceEpoch := DaysSinceEpoch + 1. - MilliSecondOffset := MilliSecondOffset - 86400000 ]. - "day rolled over sanity check" - (LastTick = -1 and: [ - (Duration - days: SqueakEpoch - hours: 0 - minutes: 0 - seconds: self clock totalSeconds) days ~= DaysSinceEpoch ]) ifTrue: [ - self initializeOffsets. - ^ self milliSecondsSinceMidnight ]. - ^ msm.! Item was changed: ----- Method: DateAndTime class>>startUp: (in category 'initialize-release') ----- startUp: resuming + | durationSinceEpoch | + resuming ifFalse: [^self]. + durationSinceEpoch := Duration + days: SqueakEpoch + hours: 0 + minutes: 0 + seconds: self clock totalSeconds. + DaysSinceEpoch := durationSinceEpoch days! - resuming ifFalse: [ ^ self ]. - Time initializeMillisecondClockMask. - OffsetsAreValid := false. - [ - self initializeOffsets. - OffsetsAreValid := true - ] forkAt: Processor userInterruptPriority.! Item was removed: - ----- Method: DateAndTime class>>waitForOffsets (in category 'initialize-release') ----- - waitForOffsets - OffsetsAreValid ifFalse: [ - [ - (Delay forSeconds: 1) wait. - OffsetsAreValid - ] whileFalse - ]! Item was changed: Object subclass: #Delay instanceVariableNames: 'delayDuration resumptionTime delaySemaphore beingWaitedOn' + classVariableNames: 'AccessProtect ActiveDelay DelaySuspended FinishedDelay RunTimerEventLoop ScheduledDelay SuspendedDelays TimerEventLoop TimingSemaphore' - classVariableNames: 'AccessProtect ActiveDelay ActiveDelayStartTime DelaySuspended FinishedDelay RunTimerEventLoop ScheduledDelay SuspendedDelays TimerEventLoop TimingSemaphore' poolDictionaries: '' category: 'Kernel-Processes'! + !Delay commentStamp: 'eem 1/5/2016 11:58' prior: 0! - !Delay commentStamp: 'laza 9/5/2009 08:45' prior: 0! I am the main way that a process may pause for some amount of time. The simplest usage is like this: (Delay forSeconds: 5) wait. An instance of Delay responds to the message 'wait' by suspending the caller's process for a certain amount of time. The duration of the pause is specified when the Delay is created with the message forMilliseconds: or forSeconds:. A Delay can be used again when the current wait has finished. For example, a clock process might repeatedly wait on a one-second Delay. + A delay in progress when an image snapshot is saved is resumed when the snapshot is re-started. - A delay in progress when an image snapshot is saved is resumed when the snapshot is re-started. Delays work across millisecond clock roll-overs. - - For a more complex example, see #testDelayOf:for:rect: . A word of advice: This is THE highest priority code which is run in Squeak, in other words it is time-critical. The speed of this code is critical for accurate responses, it is critical for network services, it affects every last part of the system. + In short: Don't fix it if it ain't broken!! This code isn't supposed to be beautiful, it's supposed to be fast!! The reason for duplicating code is to make it fast. The reason for not using ifNil:[]ifNotNil:[] is that the compiler may not inline those. Since the effect of changes are VERY hard to predict it is best to leave things as they are for now unless there is an actual need to change anything + + + Instance Variables + beingWaitedOn: + delayDuration: + delaySemaphore: + resumptionTime: + + beingWaitedOn + - this is set when the delay is being waited on or is unscheduled. + + delayDuration + - the duration of the delay in milliseconds + + delaySemaphore + - the semaphore used to suspend process(es) waiting on this delay + + resumptionTime + - the value of the UTC miscrosecond clock at which the delay should resume processes waiting on it'! - In short: Don't fix it if it ain't broken!! This code isn't supposed to be beautiful, it's supposed to be fast!! The reason for duplicating code is to make it fast. The reason for not using ifNil:[]ifNotNil:[] is that the compiler may not inline those. Since the effect of changes are VERY hard to predict it is best to leave things as they are for now unless there is an actual need to change anything! Item was changed: ----- Method: Delay class>>handleTimerEvent (in category 'timer process') ----- handleTimerEvent "Handle a timer event; which can be either: - a schedule request (ScheduledDelay notNil) - an unschedule request (FinishedDelay notNil) - a timer signal (not explicitly specified) We check for timer expiry every time we get a signal." | nowTick nextTick | "Wait until there is work to do." TimingSemaphore wait. + nowTick := Time utcMicrosecondClock. "Process any schedule requests" + ScheduledDelay ifNotNil: + [self scheduleDelay: ScheduledDelay from: nowTick. + ScheduledDelay := nil]. - ScheduledDelay ifNotNil:[ - "Schedule the given delay" - self scheduleDelay: ScheduledDelay. - ScheduledDelay := nil. - ]. "Process any unschedule requests" + FinishedDelay ifNotNil: + [self unscheduleDelay: FinishedDelay. + FinishedDelay := nil]. - FinishedDelay ifNotNil:[ - self unscheduleDelay: FinishedDelay. - FinishedDelay := nil. - ]. - "Check for clock wrap-around." - nowTick := Time millisecondClockValue. - nowTick < ActiveDelayStartTime ifTrue: [ - "clock wrapped" - self saveResumptionTimes. - self restoreResumptionTimes. - ]. - ActiveDelayStartTime := nowTick. - "Signal any expired delays" + [ActiveDelay notNil + and: [nowTick >= ActiveDelay resumptionTime]] whileTrue: + [ActiveDelay signalWaitingProcess. + ActiveDelay := SuspendedDelays isEmpty ifFalse: + [SuspendedDelays removeFirst]]. - [ActiveDelay notNil and:[nowTick >= ActiveDelay resumptionTime]] whileTrue:[ - ActiveDelay signalWaitingProcess. - SuspendedDelays isEmpty - ifTrue: [ActiveDelay := nil] - ifFalse:[ActiveDelay := SuspendedDelays removeFirst]. - ]. "And signal when the next request is due. We sleep at most 1sec here + as a soft busy-loop so that we don't accidentally miss signals." + nextTick := nowTick + 1000000. + ActiveDelay ifNotNil: + [nextTick := nextTick min: ActiveDelay resumptionTime]. - as a soft busy-loop so that we don't accidentally miss signals." - nextTick := nowTick + 1000. - ActiveDelay ifNotNil:[nextTick := nextTick min: ActiveDelay resumptionTime]. - nextTick := nextTick min: SmallInteger maxVal. "Since we have processed all outstanding requests, reset the timing semaphore so + that only new work will wake us up again. Do this RIGHT BEFORE setting the next + wakeup call from the VM because it is only signaled once so we mustn't miss it." - that only new work will wake us up again. Do this RIGHT BEFORE setting the next - wakeup call from the VM because it is only signaled once so we mustn't miss it." TimingSemaphore initSignals. + Delay primSignal: TimingSemaphore atUTCMicroseconds: nextTick! - Delay primSignal: TimingSemaphore atMilliseconds: nextTick. - - "This last test is necessary for the obscure case that the msecs clock rolls over - after nowTick has been computed (unlikely but not impossible). In this case we'd - wait for MillisecondClockMask msecs (roughly six days) or until another delay gets - scheduled (which may not be any time soon). In any case, since handling the - condition is easy, let's just deal with it" - Time millisecondClockValue < nowTick ifTrue:[TimingSemaphore signal]. "retry" - ! Item was changed: + ----- Method: Delay class>>restoreResumptionTimes (in category 'timer process') ----- - ----- Method: Delay class>>restoreResumptionTimes (in category 'snapshotting') ----- restoreResumptionTimes + "Private!! Restore the resumption times of all scheduled Delays after a snapshot. + This method should be called only while the AccessProtect semaphore is held." - "Private!! Restore the resumption times of all scheduled Delays after a snapshot or clock roll-over. This method should be called only while the AccessProtect semaphore is held." | newBaseTime | + newBaseTime := Time utcMicrosecondClock. + SuspendedDelays do: + [:d | d adjustResumptionTimeOldBase: 0 newBase: newBaseTime]. + ActiveDelay ifNotNil: + [ActiveDelay adjustResumptionTimeOldBase: 0 newBase: newBaseTime]! - newBaseTime := Time millisecondClockValue. - SuspendedDelays do: [:d | d adjustResumptionTimeOldBase: 0 newBase: newBaseTime]. - ActiveDelay == nil ifFalse: [ - ActiveDelay adjustResumptionTimeOldBase: 0 newBase: newBaseTime. - ]. - ActiveDelayStartTime := newBaseTime. - ! Item was changed: + ----- Method: Delay class>>saveResumptionTimes (in category 'timer process') ----- - ----- Method: Delay class>>saveResumptionTimes (in category 'snapshotting') ----- saveResumptionTimes + "Private!! Record the resumption times of all Delays relative to a base time of zero. + This is done prior to snapshotting. This method should be called only while the + AccessProtect semaphore is held." - "Private!! Record the resumption times of all Delays relative to a base time of zero. This is done prior to snapshotting or adjusting the resumption times after a clock roll-over. This method should be called only while the AccessProtect semaphore is held." | oldBaseTime | + oldBaseTime := Time utcMicrosecondClock. + ActiveDelay ifNotNil: + [ActiveDelay adjustResumptionTimeOldBase: oldBaseTime newBase: 0]. - oldBaseTime := Time millisecondClockValue. - ActiveDelay == nil - ifFalse: [ - oldBaseTime < ActiveDelayStartTime - ifTrue: [oldBaseTime := ActiveDelayStartTime]. "clock rolled over" - ActiveDelay adjustResumptionTimeOldBase: oldBaseTime newBase: 0]. SuspendedDelays do: + [:d | d adjustResumptionTimeOldBase: oldBaseTime newBase: 0]! - [:d | d adjustResumptionTimeOldBase: oldBaseTime newBase: 0]. - ! Item was changed: ----- Method: Delay class>>startTimerEventLoop (in category 'timer process') ----- startTimerEventLoop "Start the timer event loop" "Delay startTimerEventLoop" self stopTimerEventLoop. AccessProtect := Semaphore forMutualExclusion. - ActiveDelayStartTime := Time millisecondClockValue. SuspendedDelays := Heap withAll: (SuspendedDelays ifNil:[#()]) sortBlock: [:d1 :d2 | d1 resumptionTime <= d2 resumptionTime]. TimingSemaphore := Semaphore new. RunTimerEventLoop := true. TimerEventLoop := [self runTimerEventLoop] newProcess. TimerEventLoop priority: Processor timingPriority. TimerEventLoop resume. + TimingSemaphore signal "get going"! - TimingSemaphore signal. "get going" - ! Item was changed: ----- Method: Random>>seed: (in category 'initialization') ----- seed: anIntegerOrNil + "Use the given integer as the seed, or generate one if it's nil." - " Use the given integer as seed, or generate one if it's nil. " | newSeed | + newSeed := anIntegerOrNil ifNil: + [(Time utcMicrosecondClock bitShift: 28) bitXor: self hash hashMultiply]. + (newSeed between: 0 and: 16rFFFFFFFF) ifFalse: + [newSeed := self hashSeed: newSeed]. - newSeed := anIntegerOrNil ifNil: [ - | now | - now := Time primUTCMicrosecondClock. - now = 0 ifTrue: [ now := Time millisecondClockValue ]. - (now bitShift: 28) bitXor: self hash hashMultiply ]. - (newSeed between: 0 and: 16rFFFFFFFF) ifFalse: [ - newSeed := self hashSeed: newSeed ]. self initializeStatesWith: newSeed; generateStates! Item was changed: Magnitude subclass: #Time instanceVariableNames: 'seconds nanos' + classVariableNames: '' - classVariableNames: 'MillisecondClockMask' poolDictionaries: 'ChronologyConstants' category: 'Kernel-Chronology'! !Time commentStamp: 'dew 10/23/2004 17:58' prior: 0! This represents a particular point in time during any given day. For example, '5:19:45 pm'. If you need a point in time on a particular day, use DateAndTime. If you need a duration of time, use Duration. ! Item was removed: - ----- Method: Time class>>initializeMillisecondClockMask (in category 'clock') ----- - initializeMillisecondClockMask - "Initialize cached value from the VM, or set to nil if VM cannot support the request" - - MillisecondClockMask := self primMillisecondClockMask - ! Item was changed: ----- Method: Time class>>localMicrosecondClock (in category 'clock') ----- localMicrosecondClock + "Answer the local microseconds since the Smalltalk epoch (January 1st 1901, the start of the 20th century). + The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds + between the two epochs according to RFC 868, and with an offset duration corresponding to the current + offset of local time from UTC." - "Answer the number of microseconds since the start of the 20th century in local time." ^0! Item was changed: ----- Method: Time class>>milliSecondsSinceMidnight (in category 'ansi protocol') ----- milliSecondsSinceMidnight + ^self localMicrosecondClock // 1000 \\ 86400000 "24 * 60 * 60 * 1000"! - - ^ DateAndTime milliSecondsSinceMidnight! Item was removed: - ----- Method: Time class>>millisecondClockMask (in category 'general inquiries') ----- - millisecondClockMask - "Answer the mask used for millisecond clock rollover in the virtual machine. - Answer a default if the VM cannot supply the value." - - ^MillisecondClockMask ifNil: [16r1FFFFFFF] - ! Item was changed: ----- Method: Time class>>millisecondClockValue (in category 'general inquiries') ----- millisecondClockValue + "Answer the value of the millisecond clock." - "Answer the number of milliseconds since the millisecond clock was last reset or rolled over. - Answer 0 if the primitive fails." + ^self localMicrosecondClock // 1000! - - ^ 0! Item was changed: ----- Method: Time class>>milliseconds:since: (in category 'squeak protocol') ----- milliseconds: currentTime since: lastTime + "Answer the elapsed time since last recorded in milliseconds (i.e. of millisecondClockValue). + Since the time basis is now a 61-bit or greater UTC microsecond clock, rollover is no longer an issue." - "Answer the elapsed time since last recorded in milliseconds. - Compensate for rollover." + ^currentTime - lastTime! - | delta | - delta := currentTime - lastTime. - ^ delta < 0 - ifTrue: [self millisecondClockMask + delta] - ifFalse: [delta]! Item was changed: ----- Method: Time class>>millisecondsToRun: (in category 'general inquiries') ----- millisecondsToRun: timedBlock "Answer the number of milliseconds timedBlock takes to return its value." + | startUsecs | + startUsecs := self utcMicrosecondClock. - | initialMilliseconds | - initialMilliseconds := self millisecondClockValue. timedBlock value. + ^self utcMicrosecondClock - startUsecs + 500 // 1000! - ^self millisecondsSince: initialMilliseconds! Item was removed: - ----- Method: Time class>>primLocalMicrosecondClock (in category 'clock') ----- - primLocalMicrosecondClock - "Answer the local microseconds since the Smalltalk epoch. The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds between the two epochs according to RFC 868, and with an offset duration corresponding to the current offset of local time from UTC." - - - ^0! Item was removed: - ----- Method: Time class>>primMicrosecondClock (in category 'clock') ----- - primMicrosecondClock - "Answer the number of microseconds since the microsecond clock - was last reset or rolled over. Answer zero if the primitive fails." - - - ^ 0! Item was removed: - ----- Method: Time class>>primMillisecondClock (in category 'smalltalk-80') ----- - primMillisecondClock - "Primitive. Answer the number of milliseconds since the millisecond clock - was last reset or rolled over. Answer zero if the primitive fails. - Optional. See Object documentation whatIsAPrimitive." - - - ^ 0! Item was removed: - ----- Method: Time class>>primMillisecondClockMask (in category 'clock') ----- - primMillisecondClockMask - "Answer the mask value used for millisecond clock rollover in the - virtual machine, or nil if the VM cannot support the request." - - - ^nil! Item was removed: - ----- Method: Time class>>primSecondsClock (in category 'smalltalk-80') ----- - primSecondsClock - "Answer the number of seconds since 00:00 on the morning of - January 1, 1901 (a 32-bit unsigned number). - Essential. See Object documentation whatIsAPrimitive. " - - - self primitiveFailed! Item was removed: - ----- Method: Time class>>primUTCMicrosecondClock (in category 'clock') ----- - primUTCMicrosecondClock - "Answer the UTC microseconds since the Smalltalk epoch. The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds between the two epochs according to RFC 868." - - - ^0! Item was removed: - ----- Method: Time class>>secondsWhenClockTicks (in category 'clock') ----- - secondsWhenClockTicks - - "waits for the moment when a new second begins" - - | lastSecond delay | - - delay := Delay forMilliseconds: 1. - lastSecond := self primSecondsClock. - [ lastSecond = self primSecondsClock ] whileTrue: [ delay wait ]. - - ^ lastSecond + 1! Item was changed: ----- Method: Time class>>totalSeconds (in category 'smalltalk-80') ----- totalSeconds + "Answer the total seconds since the Squeak epoch: 1 January 1901, in local time." - "Answer the total seconds since the Squeak epoch: 1 January 1901." + ^self localMicrosecondClock // 1000000! - ^ self primSecondsClock! Item was changed: ----- Method: Time class>>utcMicrosecondClock (in category 'clock') ----- utcMicrosecondClock + "Answer the UTC microseconds since the Smalltalk epoch (January 1st 1901, the start of the 20th century). + The value is derived from the Posix epoch with a constant offset corresponding to elapsed microseconds + between the two epochs according to RFC 868." - "Answer the number of microseconds since the start of the 20th century in UTC." ^0! Item was changed: + (PackageInfo named: 'Kernel') postscript: '"below, add code to be run after the loading of this package" + Delay restoreResumptionTimes; startTimerEventLoop'! - (PackageInfo named: 'Kernel') postscript: '"Fix accidental non-weak arrays in ObsoleteSubclasses values" - Behavior classPool at: #ObsoleteSubclasses ifPresent: [:os | - os keysAndValuesDo: [:superclass :obsoletes | - obsoletes class isWeak ifFalse: [ - os at: superclass put: (obsoletes as: WeakArray)]]]. - "Remove spurious -- all -- category that crept into Object" - [Object organization removeCategory: #''-- all --''. - ] on: Error do: [:e| - "Category not empty, silently leave it there" - e return].'! From commits at source.squeak.org Wed Jan 6 00:28:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 6 00:28:48 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.972.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.972.mcz ==================== Summary ==================== Name: Kernel-eem.972 Author: eem Time: 5 January 2016, 4:19:47.082417 pm UUID: a02f21e0-db78-4341-a0d8-89528efffe55 Ancestors: Kernel-eem.971 Revert the preamble and postscript to avoid inadvertently screwing up delays with subsequent changes. =============== Diff against Kernel-eem.971 =============== Item was removed: - (PackageInfo named: 'Kernel') preamble: '"below, add code to be run before the loading of this package" - Delay stopTimerEventLoop; saveResumptionTimes'! Item was removed: - (PackageInfo named: 'Kernel') postscript: '"below, add code to be run after the loading of this package" - Delay restoreResumptionTimes; startTimerEventLoop'! From eliot.miranda at gmail.com Wed Jan 6 00:30:58 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Jan 6 00:31:01 2016 Subject: [squeak-dev] Re: URGENT: DON'T UPDATE! In-Reply-To: References: Message-ID: Hi All, the update stream is now fixed. Indeed I did need to stop the timing loop in Delay while loading Kernel.eem-971. New versions have been uploaded to source.squeak.org. You may need to delete Kernel.eem-971 & Kernel.eem-972 from your package-cache before updating. Sorry for the inconvenience. On Tue, Jan 5, 2016 at 1:49 PM, Eliot Miranda wrote: > Hi All, > > I'm so sorry but I made a mistake with the time changes and if you > update to the latest you'll likely lock up your image. I think it's as > simple as needing to stop Delay's timer loop around the update. Give me a > while. Hopefully those of you in Europe won't notice ;-). > _,,,^..^,,,_ > best, Eliot > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160105/5b32e8bf/attachment.htm From commits at source.squeak.org Wed Jan 6 01:36:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 6 01:36:39 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.973.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.973.mcz ==================== Summary ==================== Name: Kernel-eem.973 Author: eem Time: 5 January 2016, 5:36:08.334115 pm UUID: e6c98ae5-bd1c-4d49-b6ae-16e6d94e8c22 Ancestors: Kernel-eem.972 Fix Delay printing and nuke the unused Fix Delay printing and nuke the unused. Provide short-cuts for inteerPart and fractionPart in Integer given their use in ew.g. creating timestamps. =============== Diff against Kernel-eem.972 =============== Item was removed: - ----- Method: Delay class>>scheduleDelay: (in category 'timer process') ----- - scheduleDelay: aDelay - "Private. Schedule this Delay." - - aDelay resumptionTime: Time millisecondClockValue + aDelay delayDuration. - "Gary Chambers: do the above here, via the high priority timer process to avoid rollover bug due to process pre-emption - since the caller cannot use the AccessProtect semaphore." - aDelay beingWaitedOn: true. - ActiveDelay - ifNil: [ActiveDelay := aDelay] - ifNotNil: [aDelay resumptionTime < ActiveDelay resumptionTime - ifTrue: [SuspendedDelays add: ActiveDelay. - ActiveDelay := aDelay] - ifFalse: [SuspendedDelays add: aDelay]] - ! Item was changed: ----- Method: Delay>>printOn: (in category 'printing') ----- printOn: aStream super printOn: aStream. + aStream + nextPut: $(; + print: delayDuration; + nextPutAll: ' msecs'. + beingWaitedOn ifTrue: + [aStream + nextPutAll: '; '; + print: resumptionTime - Time utcMicrosecondClock + 500 // 1000; + nextPutAll: ' msecs remaining']. + aStream nextPut: $)! - aStream nextPutAll: '('; print: delayDuration; nextPutAll: ' msecs'. - beingWaitedOn ifTrue:[ - aStream nextPutAll: '; '; print: resumptionTime - Time millisecondClockValue; nextPutAll: ' msecs remaining'. - ]. - aStream nextPutAll: ')'.! Item was added: + ----- Method: Integer>>fractionPart (in category 'truncation and round off') ----- + fractionPart + "Added for ANSI compatibility" + ^0! Item was added: + ----- Method: Integer>>integerPart (in category 'truncation and round off') ----- + integerPart + "Added for ANSI compatibility" + ^self! From commits at source.squeak.org Wed Jan 6 01:45:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 6 01:45:32 2016 Subject: [squeak-dev] The Trunk: Morphic-eem.1063.mcz Message-ID: Eliot Miranda uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-eem.1063.mcz ==================== Summary ==================== Name: Morphic-eem.1063 Author: eem Time: 5 January 2016, 5:44:45.9636 pm UUID: 5874da4f-b659-476a-8f3f-ac77ab444305 Ancestors: Morphic-eem.1062 Avoid translating strings in MenuIcons redundantly on start-up. This is for the VM simulator, but it'll also shave a few milliseconds off start-up, even on a fast machine (e.g. my 2.2GHz Core i7 takes ~ 3.75msecs to initializeTranslations). =============== Diff against Morphic-eem.1062 =============== Item was changed: Object subclass: #MenuIcons instanceVariableNames: '' + classVariableNames: 'Icons TranslatedIcons TranslationLocale' - classVariableNames: 'Icons TranslatedIcons' poolDictionaries: '' category: 'Morphic-Menus'! !MenuIcons commentStamp: 'sd 11/9/2003 14:09' prior: 0! I represent a registry for icons. You can see the icons I contain using the following script: | dict methods | dict := Dictionary new. methods := MenuIcons class selectors select: [:each | '*Icon' match: each asString]. methods do: [:each | dict at: each put: (MenuIcons perform: each)]. GraphicalDictionaryMenu openOn: dict withLabel: 'MenuIcons'! Item was changed: ----- Method: MenuIcons class>>initializeTranslations (in category 'class initialization') ----- initializeTranslations "Initialize the dictionary of ->" + TranslationLocale := LocaleID current. TranslatedIcons := Dictionary new. + self itemsIcons do: + [:assoc| + assoc key do: + [:str| TranslatedIcons at: str translated asLowercase put: assoc value]]! - self itemsIcons do: [ :assoc | - assoc key do: [ :str | TranslatedIcons at: str translated asLowercase put: assoc value ] - ]! Item was changed: ----- Method: MenuIcons class>>startUp: (in category 'class initialization') ----- startUp: resuming + resuming ifFalse: [^self]. + TranslationLocale = LocaleID current ifTrue: + [^self]. - resuming - ifFalse: [^ self]. self initializeTranslations! From tim at rowledge.org Wed Jan 6 05:49:09 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Jan 6 05:49:13 2016 Subject: [squeak-dev] The Trunk: Morphic-eem.1063.mcz In-Reply-To: <201601060145.u061jWnf008846@mail63c0.megamailservers.com> References: <201601060145.u061jWnf008846@mail63c0.megamailservers.com> Message-ID: <418A8D2E-19D7-46CB-BF4B-D89FF3358ACA@rowledge.org> > On 06-01-2016, at 1:45 AM, commits@source.squeak.org wrote: > > Avoid translating strings in MenuIcons redundantly on start-up. This is for the VM simulator, but it'll also shave a few milliseconds off start-up, even on a fast machine (e.g. my 2.2GHz Core i7 takes ~ 3.75msecs to initializeTranslations). A related issue that took *forever* on a Pi during Scratch startup was using multibytefilestreamfile (or whatever) to read the translation file(s). Changing to use a plain old fashioned stream and handling the specifically unicodish parts via unicode made a high-factor improvement. If there are any similar cases in trunk it would be nice to improve them. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: SFA: Seek Financial Assistance From Marcel.Taeumel at hpi.de Wed Jan 6 09:08:47 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 6 09:29:20 2016 Subject: [squeak-dev] Re: Just witnessed MC do a strange double-save.. In-Reply-To: References: Message-ID: <1452071327191-4869437.post@n4.nabble.com> This is only related to the way *Monticello* handles modal dialogs. ;-) In other places, we use HandMorph >> #newMouseFocus:. For example, take a look at the Save/Quit dialog. Although our main loop in Morphic is reentrant, I dislike programming that way. One might easily call only a sub-part of that loop and the system feels responsive but, for example, omits to process step messages. That strange things occure once that inner part finishes and the regular (outer) main loop continues. Another thing is the debugger, which will just kill the UI process and hence all nested UI loops in it. Best, Marcel -- View this message in context: http://forum.world.st/Just-witnessed-MC-do-a-strange-double-save-tp4869381p4869437.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Wed Jan 6 09:53:16 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Jan 6 09:53:22 2016 Subject: [squeak-dev] Re: URGENT: DON'T UPDATE! In-Reply-To: References: Message-ID: Update seems to work fine Best, Karl On Wed, Jan 6, 2016 at 1:30 AM, Eliot Miranda wrote: > Hi All, > > the update stream is now fixed. Indeed I did need to stop the timing > loop in Delay while loading Kernel.eem-971. New versions have been > uploaded to source.squeak.org. You may need to delete Kernel.eem-971 & > Kernel.eem-972 from your package-cache before updating. Sorry for the > inconvenience. > > On Tue, Jan 5, 2016 at 1:49 PM, Eliot Miranda > wrote: > >> Hi All, >> >> I'm so sorry but I made a mistake with the time changes and if you >> update to the latest you'll likely lock up your image. I think it's as >> simple as needing to stop Delay's timer loop around the update. Give me a >> while. Hopefully those of you in Europe won't notice ;-). >> _,,,^..^,,,_ >> best, Eliot >> > > > > -- > _,,,^..^,,,_ > best, Eliot > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160106/5eac6d33/attachment-0001.htm From commits at source.squeak.org Wed Jan 6 22:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 6 22:55:02 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160106225501.30919.qmail@box4.squeakfoundation.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-January/009233.html Name: Kernel-eem.971 Ancestors: Kernel-eem.970 Move time from a basis of mixed second clock/millisecond clock primitives to a single microsecond clock basis (albeit with two primitives, one for local and one for UTC microseconds). Derive millisecond and second clocks from local microsecond clock. Hence eliminate tests for millisecond clock overflow and use of the millisecond clock mask. Change Delay's resumptionTime from a millisecond clock value to a utc microsecond clock value. Eliminate unused offsets in DateAndTime and hence avoid spin loop at start-up waiting for the second clock to roll over. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009234.html Name: Kernel-eem.972 Ancestors: Kernel-eem.971 Revert the preamble and postscript to avoid inadvertently screwing up delays with subsequent changes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009235.html Name: Kernel-eem.973 Ancestors: Kernel-eem.972 Fix Delay printing and nuke the unused Fix Delay printing and nuke the unused. Provide short-cuts for inteerPart and fractionPart in Integer given their use in ew.g. creating timestamps. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009236.html Name: Morphic-eem.1063 Ancestors: Morphic-eem.1062 Avoid translating strings in MenuIcons redundantly on start-up. This is for the VM simulator, but it'll also shave a few milliseconds off start-up, even on a fast machine (e.g. my 2.2GHz Core i7 takes ~ 3.75msecs to initializeTranslations). ============================================= From Das.Linux at gmx.de Wed Jan 6 23:42:45 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Jan 6 23:42:49 2016 Subject: [squeak-dev] [GMX TEST, IGNORE] Message-ID: <4E891BBD-9AC1-4CF8-8FC2-71EEF7A21CFE@gmx.de> [please ignore, i test gmx] From tim at rowledge.org Thu Jan 7 01:06:06 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Jan 7 01:06:11 2016 Subject: [squeak-dev] HandMorph etc #grabTransform In-Reply-To: References: <6D41EA3D-8470-4B02-B0E7-CC63CF0C4304@rowledge.org> <8746E820-9425-4960-BCAE-ADD807CA5CE3@rowledge.org> Message-ID: <3F8D19ED-8FAB-4642-9DC3-7FF32987F763@rowledge.org> A solution to at least part of my last-month problem - > > b) dropping doesn?t work the same - you have to drop the morph and then click-release again to get it to actually drop. That part really confuses me right now. It seems that the test at the top of HandMorph>dropMorph:event: fails because the default implementation of #shouldDropOnMouseUp expects a non-nil result from #formerPosition. A TransformationMorph that has been added as a flexShell has no such property and so trying to drop (as part of a mouse-up) something wrapped in one will always fail. My best suggestion is to over-ride shouldDropOnMouseUp in TransformationMorph as ^self hasProperty: #addedFlexAtGrab It seem to work for my case so far, which is nice. Now maybe I can work out why it drops the damned morph in the wrong place... Any other ideas on a good way to do this? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Talks to plants on their own level. From Marcel.Taeumel at hpi.de Thu Jan 7 10:08:51 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Jan 7 10:29:31 2016 Subject: [squeak-dev] aString intersection: anotherString Message-ID: <1452161331940-4869712.post@n4.nabble.com> Hi, there! I understand that Collection >> #intersection: works on a set basis. However, I wonder whether for string operations 'aaaxxxbbb' intersection: 'uxb' should rather return 'xb' instead of 'xxxbbb'. Best, Marcel -- View this message in context: http://forum.world.st/aString-intersection-anotherString-tp4869712.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Thu Jan 7 17:12:26 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Jan 7 17:12:32 2016 Subject: [squeak-dev] Re: [Vm-dev] Where to get Monitor implementation based on primitives? In-Reply-To: References: Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: CriticalSection.st Type: application/octet-stream Size: 3196 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160107/5edb83fd/CriticalSection.obj From eliot.miranda at gmail.com Thu Jan 7 17:20:55 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Jan 7 17:20:58 2016 Subject: [squeak-dev] Re: [Vm-dev] Where to get Monitor implementation based on primitives? In-Reply-To: References: Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: CriticalSection.st Type: application/octet-stream Size: 3441 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160107/0293be70/CriticalSection.obj From eliot.miranda at gmail.com Thu Jan 7 18:51:03 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Thu Jan 7 18:51:07 2016 Subject: [squeak-dev] Re: [Vm-dev] Where to get Monitor implementation based on primitives? In-Reply-To: References: Message-ID: Hi Ben, On Thu, Jan 7, 2016 at 10:39 AM, Ben Coman wrote: > > On Fri, Jan 8, 2016 at 1:20 AM, Eliot Miranda > wrote: > > > > and here's a version with a better class comment > > > > On Thu, Jan 7, 2016 at 9:12 AM, Eliot Miranda > wrote: > >> > >> Hi Denis, Hi Cl?ment, Hi Frank, > >> > >> On Thu, Jan 7, 2016 at 5:34 AM, Cl?ment Bera > wrote: > >>> > >>> Hello, > >>> > >>> Eliot, please, you told me you had the code and Denis is interested. > >>> > >>> It uses 3 primitives for performance. > >> > >> > >> Forgive the delay. I thought it proper to ask permission since the > code was written while I was at Qwaq. I'm attaching the code in a fairly > raw state, see the attached. The code is MIT, but copyright 3DICC. > >> > >> It is a plugin replacement for Squeak's Mutex, and with a little > ingenuity could be a replacement for Squeak's Monitor. It is quicker > because it uses three new primitives to manage entering a critical section > and setting the owner, exiting the critical section and releasing the > owner, and testing if a critical section, entering if the section is > unowned. The use of the primitives means fewer block activations and > ensure: blocks in entering and exiting the critical section, and that's the > actual cause of the speed-up. > >> > >> You can benchmark the code as is. Here are some results on 32-bit > Spur, on my 2.2GHz Core i7 > >> > >> {Mutex new. Monitor new. CriticalSection new} collect: > >> [:cs| | n | > >> n := 0. > >> [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: [n > := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. > >> cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: [n > := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. > >> n ] bench] > >> > >> {Mutex new. Monitor new. CriticalSection new} collect: > >> [:cs| | n | > >> n := 0. > >> cs class name, ' -> ', > >> [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: [n > := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. > >> cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: [n > := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. > >> n ] bench] > >> > >> #( 'Mutex -> 440,000 per second. 2.27 microseconds per run.' > >> 'Monitor -> 688,000 per second. 1.45 microseconds per run.' > >> 'CriticalSection -> 1,110,000 per second. 900 nanoseconds per run.') > >> > > This is great Eliot. Thank you and 3DICC. After loading the changeset > into Pharo-50515 (32 bit Spur) I get the following results on my > laptop i5-2520M @ 2.50GHz > > #('Mutex -> 254,047 per second' > 'Monitor -> 450,442 per second' > 'CriticalSection -> 683,393 per second') > > In a fresh Image "Mutex allInstances basicInspect" lists just two > mutexes... > 1. NetNameResolver-->ResolverMutex > 2. ThreadSafeTranscript-->accessSemaphore > I hate myself for getting distracted but I'm finding this is un. One can migrate to the new representation using normal Monticello loads by In the first version redefine Mutex and Monitor to subclass LinkedList and have their owner/ownerProcess inst var first (actually third after firstLink & lastLink), and add the primitives. In the next version check that all Mutex and Monitor instanes are unowned and then redefine to discard excess inst vars Let me test this before committing, and see that all tests are ok. > cheers -ben > > >> Replacement is probably trivial; rename Mutex to OldMutex, rename > CriticalSection to Mutex, recompile. But there are lots of mutexes in the > system and these are potentially owned. Transforming unowned ones is > trivial, but transforming owned ones is, I think, impossible. But at least > in my system there are no owned mutexes or monitors. > >> > >> Frank (or anyone else), would you be interested in creating a > replacement for Squeak's Monitor based on CriticalSection? > >> > >> > >> Here are the two business methods: > >> CriticalSection methods for mutual exclusion > >> critical: aBlock > >> "Evaluate aBlock protected by the receiver." > >> ^self primitiveEnterCriticalSection > >> ifTrue: [aBlock value] > >> ifFalse: [aBlock ensure: [self primitiveExitCriticalSection]] > >> > >> critical: aBlock ifLocked: lockedBlock > >> "Answer the evaluation of aBlock protected by the receiver. If it is > already in a critical > >> section on behalf of some other process answer the evaluation of > lockedBlock." > >> ^self primitiveTestAndSetOwnershipOfCriticalSection > >> ifNil: [lockedBlock value] > >> ifNotNil:[:alreadyOwner| > >> alreadyOwner > >> ifTrue: [aBlock value] > >> ifFalse: [aBlock ensure: [self primitiveExitCriticalSection]]] > >> > >> and the primitives: > >> CriticalSection methods for private-primitives > >> primitiveEnterCriticalSection > >> "Primitive. The receiver must be unowned or owned by the current > process to proceed. > >> Answer if the process is owned by the current process." > >> > >> self primitiveFailed > >> "In the spirit of the following" > >> "[owner ifNil: > >> [owner := Processor activeProcess. > >> ^false]. > >> owner = Processor activeProcess ifTrue: > >> [^true]. > >> self addLast: Processor activeProcess. > >> Processor activeProcess suspend] valueUnpreemptively" > >> > >> primitiveExitCriticalSection > >> "Primitive. Set te receiver to unowned and if any processes are waiting > on > >> the receiver then proceed the first one, indicating that the receiver > is unowned." > >> > >> self primitiveFailed > >> "In the spirit of the following" > >> "[owner := nil. > >> self isEmpty ifFalse: > >> [process := self removeFirst. > >> process resume]] valueUnpreemptively" > >> > >> primitiveTestAndSetOwnershipOfCriticalSection > >> "Primitive. Attempt to set the ownership of the receiver. > >> If the receiver is unowned set its owningProcess to the > >> activeProcess and answer false. If the receiver is owned > >> by the activeProcess answer true. If the receiver is owned > >> by some other process answer nil." > >> > >> self primitiveFail > >> "In the spirit of the following" > >> "[owner ifNil: > >> [owningProcess := Processor activeProcess. > >> ^false]. > >> owner = Processor activeProcess ifTrue: [^true]. > >> ^nil] valueUnpreemptively" > >> > >>> 2016-01-07 13:24 GMT+01:00 Denis Kudriashov : > >>>> > >>>> > >>>> Hello. > >>>> > >>>> I hear about new Monitor implementation based on new primitives. > >>>> Where to get it? > >> > >> > >> _,,,^..^,,,_ > >> best, Eliot > > > > > > > > > > -- > > _,,,^..^,,,_ > > best, Eliot > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160107/fa73f829/attachment.htm From commits at source.squeak.org Thu Jan 7 22:09:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 7 22:09:21 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.974.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.974.mcz ==================== Summary ==================== Name: Kernel-eem.974 Author: eem Time: 7 January 2016, 11:31:01.579217 am UUID: 3c4d15d0-4d46-4013-af15-4c930e58f6e2 Ancestors: Kernel-eem.973 Reshape Monitor and Mutex and add the critical section primitives in advance of changing over to the critical section primitives. =============== Diff against Kernel-eem.973 =============== Item was changed: + LinkedList subclass: #Monitor + instanceVariableNames: 'ownerProcess defaultQueue queueDict queuesMutex mutex nestingLevel' - Object subclass: #Monitor - instanceVariableNames: 'mutex ownerProcess nestingLevel defaultQueue queueDict queuesMutex' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Processes'! !Monitor commentStamp: 'md 3/3/2006 09:19' prior: 0! A monitor provides process synchronization that is more high level than the one provided by a Semaphore. Similar to the classical definition of a Monitor it has the following properties: 1) At any time, only one process can execute code inside a critical section of a monitor. 2) A monitor is reentrant, which means that the active process in a monitor never gets blocked when it enters a (nested) critical section of the same monitor. 3) Inside a critical section, a process can wait for an event that may be coupled to a certain condition. If the condition is not fulfilled, the process leaves the monitor temporarily (in order to let other processes enter) and waits until another process signals the event. Then, the original process checks the condition again (this is often necessary because the state of the monitor could have changed in the meantime) and continues if it is fulfilled. 4) The monitor is fair, which means that the process that is waiting on a signaled condition the longest gets activated first. 5) The monitor allows you to define timeouts after which a process gets activated automatically. Basic usage: Monitor>>critical: aBlock Critical section. Executes aBlock as a critical section. At any time, only one process can execute code in a critical section. NOTE: All the following synchronization operations are only valid inside the critical section of the monitor!! Monitor>>wait Unconditional waiting for the default event. The current process gets blocked and leaves the monitor, which means that the monitor allows another process to execute critical code. When the default event is signaled, the original process is resumed. Monitor>>waitWhile: aBlock Conditional waiting for the default event. The current process gets blocked and leaves the monitor only if the argument block evaluates to true. This means that another process can enter the monitor. When the default event is signaled, the original process is resumed, which means that the condition (argument block) is checked again. Only if it evaluates to false, does execution proceed. Otherwise, the process gets blocked and leaves the monitor again... Monitor>>waitUntil: aBlock Conditional waiting for the default event. See Monitor>>waitWhile: aBlock. Monitor>>signal One process waiting for the default event is woken up. Monitor>>signalAll All processes waiting for the default event are woken up. Using non-default (specific) events: Monitor>>waitFor: aSymbol Unconditional waiting for the non-default event represented by the argument symbol. Same as Monitor>>wait, but the process gets only reactivated by the specific event and not the default event. Monitor>>waitWhile: aBlock for: aSymbol Confitional waiting for the non-default event represented by the argument symbol. Same as Monitor>>waitWhile:for:, but the process gets only reactivated by the specific event and not the default event. Monitor>>waitUntil: aBlock for: aSymbol Confitional waiting for the non-default event represented by the argument symbol. See Monitor>>waitWhile:for: aBlock. Monitor>>signal: aSymbol One process waiting for the given event is woken up. If there is no process waiting for this specific event, a process waiting for the default event gets resumed. Monitor>>signalAll: aSymbol All process waiting for the given event or the default event are woken up. Monitor>>signalReallyAll All processes waiting for any events (default or specific) are woken up. Using timeouts Monitor>>waitMaxMilliseconds: anInteger Monitor>>waitFor: aSymbol maxMilliseconds: anInteger Same as Monitor>>wait (resp. Monitor>>waitFor:), but the process gets automatically woken up when the specified time has passed. Monitor>>waitWhile: aBlock maxMilliseconds: anInteger Monitor>>waitWhile: aBlock for: aSymbol maxMilliseconds: anInteger Same as Monitor>>waitWhile: (resp. Monitor>>waitWhile:for:), but the process gets automatically woken up when the specified time has passed. Monitor>>waitUntil: aBlock maxMilliseconds: anInteger Monitor>>waitUntil: aBlock for: aSymbol maxMilliseconds: anInteger Same as Monitor>>waitUntil: (resp. Monitor>>waitUntil:for:), but the process gets automatically woken up when the specified time has passed.! Item was added: + ----- Method: Monitor>>primitiveEnterCriticalSection (in category 'private-primitives') ----- + primitiveEnterCriticalSection + "Primitive. The receiver must be unowned or owned by the current process to proceed. + Answer if the process is owned by the current process. + + Copyright (c) 2016 - 3D Immersive Collaboration Consulting, LLC." + + self primitiveFailed + "In the spirit of the following" + "[owner ifNil: + [owner := Processor activeProcess. + ^false]. + owner = Processor activeProcess ifTrue: + [^true]. + self addLast: Processor activeProcess. + Processor activeProcess suspend] valueUnpreemptively"! Item was added: + ----- Method: Monitor>>primitiveExitCriticalSection (in category 'private-primitives') ----- + primitiveExitCriticalSection + "Primitive. Set the receiver to unowned and if any processes are waiting on + the receiver then proceed the first one, indicating that the receiver is unowned. + + Copyright (c) 2016 - 3D Immersive Collaboration Consulting, LLC." + + self primitiveFailed + "In the spirit of the following" + "[owner := nil. + self isEmpty ifFalse: + [process := self removeFirst. + process resume]] valueUnpreemptively"! Item was added: + ----- Method: Monitor>>primitiveTestAndSetOwnershipOfCriticalSection (in category 'private-primitives') ----- + primitiveTestAndSetOwnershipOfCriticalSection + "Primitive. Attempt to set the ownership of the receiver. + If the receiver is unowned set its owningProcess to the + activeProcess and answer false. If the receiver is owned + by the activeProcess answer true. If the receiver is owned + by some other process answer nil. + + Copyright (c) 2016 - 3D Immersive Collaboration Consulting, LLC." + + self primitiveFail + "In the spirit of the following" + "[owner ifNil: + [owningProcess := Processor activeProcess. + ^false]. + owner = Processor activeProcess ifTrue: [^true]. + ^nil] valueUnpreemptively"! Item was changed: + LinkedList subclass: #Mutex + instanceVariableNames: 'owner semaphore' - Object subclass: #Mutex - instanceVariableNames: 'semaphore owner' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Processes'! !Mutex commentStamp: '' prior: 0! A Mutex is a light-weight MUTual EXclusion object being used when two or more processes need to access a shared resource concurrently. A Mutex grants ownership to a single process and will suspend any other process trying to aquire the mutex while in use. Waiting processes are granted access to the mutex in the order the access was requested. Instance variables: semaphore The (primitive) semaphore used for synchronization. owner The process owning the mutex.! Item was added: + ----- Method: Mutex>>primitiveEnterCriticalSection (in category 'private-primitives') ----- + primitiveEnterCriticalSection + "Primitive. The receiver must be unowned or owned by the current process to proceed. + Answer if the process is owned by the current process. + + Copyright (c) 2016 - 3D Immersive Collaboration Consulting, LLC." + + self primitiveFailed + "In the spirit of the following" + "[owner ifNil: + [owner := Processor activeProcess. + ^false]. + owner = Processor activeProcess ifTrue: + [^true]. + self addLast: Processor activeProcess. + Processor activeProcess suspend] valueUnpreemptively"! Item was added: + ----- Method: Mutex>>primitiveExitCriticalSection (in category 'private-primitives') ----- + primitiveExitCriticalSection + "Primitive. Set the receiver to unowned and if any processes are waiting on + the receiver then proceed the first one, indicating that the receiver is unowned. + + Copyright (c) 2016 - 3D Immersive Collaboration Consulting, LLC." + + self primitiveFailed + "In the spirit of the following" + "[owner := nil. + self isEmpty ifFalse: + [process := self removeFirst. + process resume]] valueUnpreemptively"! Item was added: + ----- Method: Mutex>>primitiveTestAndSetOwnershipOfCriticalSection (in category 'private-primitives') ----- + primitiveTestAndSetOwnershipOfCriticalSection + "Primitive. Attempt to set the ownership of the receiver. + If the receiver is unowned set its owningProcess to the + activeProcess and answer false. If the receiver is owned + by the activeProcess answer true. If the receiver is owned + by some other process answer nil. + + Copyright (c) 2016 - 3D Immersive Collaboration Consulting, LLC." + + self primitiveFail + "In the spirit of the following" + "[owner ifNil: + [owningProcess := Processor activeProcess. + ^false]. + owner = Processor activeProcess ifTrue: [^true]. + ^nil] valueUnpreemptively"! From commits at source.squeak.org Thu Jan 7 22:10:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 7 22:10:55 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.975.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.975.mcz ==================== Summary ==================== Name: Kernel-eem.975 Author: eem Time: 7 January 2016, 12:32:33.854762 pm UUID: 00437240-a4b8-42ec-82fb-9c48040d7f6e Ancestors: Kernel-eem.974 Mutate Mutex and Monitor to the new representation and primitives. Modify Process>>terminate to take a generic approach to ensure blocks in critical sections vua a pragma (#criticalSection) and provide an explanatory comment, plus /not/ aborting the ensure: block if no progress has been made. =============== Diff against Kernel-eem.974 =============== Item was added: + (PackageInfo named: 'Kernel') preamble: '((Mutex allInstances allSatisfy: [:m| (m instVarNamed: ''owner'') isNil]) + and: [Monitor allInstances allSatisfy: [:m| (m instVarNamed: ''ownerProcess'') isNil]]) ifFalse: + [self error: ''Some Mutexes and/or Monitors are owned. Cannot safely mutate. ABort load and resolve this before loading for safety.'']'! Item was changed: ----- Method: MethodContext>>isClosureContext (in category 'closure support') ----- isClosureContext + ^closureOrNil ~~ nil! - - ^ self isExecutingBlock! Item was changed: ----- Method: MethodContext>>isExecutingBlock (in category 'accessing') ----- isExecutingBlock + "Is this executing a block versus a method" - "Is this executing a block versus a method? In the new closure - implemetation this is true if closureOrNil is not nil, in which case - it should be holding a BlockClosure." + ^ self method notNil and: [self method isBlockMethod]! - ^closureOrNil isClosure! Item was changed: LinkedList subclass: #Monitor instanceVariableNames: 'ownerProcess defaultQueue queueDict queuesMutex mutex nestingLevel' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Processes'! + !Monitor commentStamp: 'eem 1/7/2016 11:38' prior: 0! - !Monitor commentStamp: 'md 3/3/2006 09:19' prior: 0! A monitor provides process synchronization that is more high level than the one provided by a Semaphore. Similar to the classical definition of a Monitor it has the following properties: 1) At any time, only one process can execute code inside a critical section of a monitor. + 2) A monitor is reentrant, which means that the active process in a monitor never gets blocked when it enters a (nested) critical section of the same monitor. For example a monitor will not block when trying the following: + | m | + m := Monitor new. + m critical: [m critical: [#yes]] + whereas a Semaphore will deadlock: + | s | + s := Semaphore forMutualExclusion. + s critical: [s critical: [#no]] - 2) A monitor is reentrant, which means that the active process in a monitor never gets blocked when it enters a (nested) critical section of the same monitor. 3) Inside a critical section, a process can wait for an event that may be coupled to a certain condition. If the condition is not fulfilled, the process leaves the monitor temporarily (in order to let other processes enter) and waits until another process signals the event. Then, the original process checks the condition again (this is often necessary because the state of the monitor could have changed in the meantime) and continues if it is fulfilled. 4) The monitor is fair, which means that the process that is waiting on a signaled condition the longest gets activated first. 5) The monitor allows you to define timeouts after which a process gets activated automatically. Basic usage: Monitor>>critical: aBlock Critical section. Executes aBlock as a critical section. At any time, only one process can execute code in a critical section. NOTE: All the following synchronization operations are only valid inside the critical section of the monitor!! Monitor>>wait Unconditional waiting for the default event. The current process gets blocked and leaves the monitor, which means that the monitor allows another process to execute critical code. When the default event is signaled, the original process is resumed. Monitor>>waitWhile: aBlock Conditional waiting for the default event. The current process gets blocked and leaves the monitor only if the argument block evaluates to true. This means that another process can enter the monitor. When the default event is signaled, the original process is resumed, which means that the condition (argument block) is checked again. Only if it evaluates to false, does execution proceed. Otherwise, the process gets blocked and leaves the monitor again... Monitor>>waitUntil: aBlock Conditional waiting for the default event. See Monitor>>waitWhile: aBlock. Monitor>>signal One process waiting for the default event is woken up. Monitor>>signalAll All processes waiting for the default event are woken up. Using non-default (specific) events: Monitor>>waitFor: aSymbol Unconditional waiting for the non-default event represented by the argument symbol. Same as Monitor>>wait, but the process gets only reactivated by the specific event and not the default event. Monitor>>waitWhile: aBlock for: aSymbol Confitional waiting for the non-default event represented by the argument symbol. Same as Monitor>>waitWhile:for:, but the process gets only reactivated by the specific event and not the default event. Monitor>>waitUntil: aBlock for: aSymbol Confitional waiting for the non-default event represented by the argument symbol. See Monitor>>waitWhile:for: aBlock. Monitor>>signal: aSymbol One process waiting for the given event is woken up. If there is no process waiting for this specific event, a process waiting for the default event gets resumed. Monitor>>signalAll: aSymbol All process waiting for the given event or the default event are woken up. Monitor>>signalReallyAll All processes waiting for any events (default or specific) are woken up. Using timeouts Monitor>>waitMaxMilliseconds: anInteger Monitor>>waitFor: aSymbol maxMilliseconds: anInteger Same as Monitor>>wait (resp. Monitor>>waitFor:), but the process gets automatically woken up when the specified time has passed. Monitor>>waitWhile: aBlock maxMilliseconds: anInteger Monitor>>waitWhile: aBlock for: aSymbol maxMilliseconds: anInteger Same as Monitor>>waitWhile: (resp. Monitor>>waitWhile:for:), but the process gets automatically woken up when the specified time has passed. Monitor>>waitUntil: aBlock maxMilliseconds: anInteger Monitor>>waitUntil: aBlock for: aSymbol maxMilliseconds: anInteger Same as Monitor>>waitUntil: (resp. Monitor>>waitUntil:for:), but the process gets automatically woken up when the specified time has passed.! Item was changed: ----- Method: Monitor>>checkOwnerProcess (in category 'private') ----- checkOwnerProcess + "If the receiver is not already the owner of the section raise an error." + (self primitiveTestAndSetOwnershipOfCriticalSection + ifNil: [false] + ifNotNil: + [:alreadyOwner| + alreadyOwner + or: [self primitiveExitCriticalSection. + false]]) ifFalse: + [self error: 'Monitor access violation']! - self isOwnerProcess - ifFalse: [self error: 'Monitor access violation'].! Item was changed: + ----- Method: Monitor>>critical: (in category 'mutual exclusion') ----- - ----- Method: Monitor>>critical: (in category 'synchronization') ----- critical: aBlock + "Evaluate aBlock protected by the receiver." + + ^self primitiveEnterCriticalSection + ifTrue: [aBlock value] + ifFalse: [aBlock ensure: [self primitiveExitCriticalSection]]! - "Critical section. - Executes aBlock as a critical section. At any time, only one process can be executing code - in a critical section. - NOTE: All the following synchronization operations are only valid inside the critical section - of the monitor!!" - - ^[ - self enter. - aBlock value] - ensure: [self exit].! Item was added: + ----- Method: Monitor>>critical:ifLocked: (in category 'mutual exclusion') ----- + critical: aBlock ifLocked: lockedBlock + "Answer the evaluation of aBlock protected by the receiver. If it is already in a critical + section on behalf of some other process answer the evaluation of lockedBlock." + + ^self primitiveTestAndSetOwnershipOfCriticalSection + ifNil: [lockedBlock value] + ifNotNil: + [:alreadyOwner| + alreadyOwner + ifTrue: [aBlock value] + ifFalse: [aBlock ensure: [self primitiveExitCriticalSection]]]! Item was removed: - ----- Method: Monitor>>enter (in category 'private') ----- - enter - self isOwnerProcess ifTrue: [ - nestingLevel := nestingLevel + 1. - ] ifFalse: [ - mutex wait. - ownerProcess := Processor activeProcess. - nestingLevel := 1. - ].! Item was removed: - ----- Method: Monitor>>exit (in category 'private') ----- - exit - nestingLevel := nestingLevel - 1. - nestingLevel < 1 ifTrue: [ - ownerProcess := nil. - mutex signal - ].! Item was changed: ----- Method: Monitor>>exitAndWaitInQueue:maxMilliseconds: (in category 'private') ----- exitAndWaitInQueue: anOrderedCollection maxMilliseconds: anIntegerOrNil + [ | lock | + lock := queuesMutex critical: [ anOrderedCollection addLast: Semaphore new ]. + self primitiveExitCriticalSection. + anIntegerOrNil + ifNil: [ lock wait ] + ifNotNil: + [ | delay | + delay := MonitorDelay + signalLock: lock + afterMSecs: anIntegerOrNil + inMonitor: self + queue: anOrderedCollection. + [ lock wait ] ensure: [ delay unschedule ] ] ] + ensure: [ self primitiveEnterCriticalSection ]! - [ - | lock | - lock := queuesMutex critical: [ anOrderedCollection addLast: Semaphore new ]. - self exit. - anIntegerOrNil - ifNil: [ lock wait ] - ifNotNil: [ - | delay | - delay := MonitorDelay - signalLock: lock - afterMSecs: anIntegerOrNil - inMonitor: self - queue: anOrderedCollection. - [ lock wait ] ensure: [ delay unschedule ] ] ] - ensure: [ self enter ]! Item was changed: ----- Method: Monitor>>initialize (in category 'initialize-release') ----- initialize + queuesMutex := Semaphore forMutualExclusion! - mutex := Semaphore forMutualExclusion. - queuesMutex := Semaphore forMutualExclusion. - nestingLevel := 0.! Item was removed: - ----- Method: Monitor>>isOwnerProcess (in category 'private') ----- - isOwnerProcess - ^ Processor activeProcess == ownerProcess! Item was changed: LinkedList subclass: #Mutex + instanceVariableNames: 'owner' - instanceVariableNames: 'owner semaphore' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Processes'! + !Mutex commentStamp: 'eem 1/7/2016 11:36' prior: 0! - !Mutex commentStamp: '' prior: 0! A Mutex is a light-weight MUTual EXclusion object being used when two or more processes need to access a shared resource concurrently. A Mutex grants ownership to a single process and will suspend any other process trying to aquire the mutex while in use. Waiting processes are granted access to the mutex in the order the access was requested. + A Mutex allows the owning process to reenter as many times as desired. For example a Mutex will not block when trying the following: + | m | + m := Mutex new. + m critical: [m critical: [#yes]] + whereas a Semaphore will deadlock: + | s | + s := Semaphore forMutualExclusion. + s critical: [s critical: [#no]] + Instance variables: + owner The process owning the mutex! - semaphore The (primitive) semaphore used for synchronization. - owner The process owning the mutex.! Item was changed: ----- Method: Mutex>>critical: (in category 'mutual exclusion') ----- critical: aBlock "Evaluate aBlock protected by the receiver." + + ^self primitiveEnterCriticalSection + ifTrue: [aBlock value] + ifFalse: [aBlock ensure: [self primitiveExitCriticalSection]]! - | activeProcess | - activeProcess := Processor activeProcess. - activeProcess == owner ifTrue:[^aBlock value]. - ^semaphore critical:[ - owner := activeProcess. - aBlock ensure:[owner := nil]].! Item was added: + ----- Method: Mutex>>critical:ifLocked: (in category 'mutual exclusion') ----- + critical: aBlock ifLocked: lockedBlock + "Answer the evaluation of aBlock protected by the receiver. If it is already in a critical + section on behalf of some other process answer the evaluation of lockedBlock." + + ^self primitiveTestAndSetOwnershipOfCriticalSection + ifNil: [lockedBlock value] + ifNotNil: + [:alreadyOwner| + alreadyOwner + ifTrue: [aBlock value] + ifFalse: [aBlock ensure: [self primitiveExitCriticalSection]]]! Item was removed: - ----- Method: Mutex>>initialize (in category 'initialize') ----- - initialize - semaphore := Semaphore forMutualExclusion.! Item was changed: ----- Method: Process>>terminate (in category 'changing process state') ----- terminate "Stop the process that the receiver represents forever. Unwind to execute pending ensure:/ifCurtailed: blocks before terminating." | ctxt unwindBlock oldList | self isActiveProcess ifTrue: [ ctxt := thisContext. [ ctxt := ctxt findNextUnwindContextUpTo: nil. ctxt isNil ] whileFalse: [ (ctxt tempAt: 2) ifNil:[ ctxt tempAt: 2 put: nil. unwindBlock := ctxt tempAt: 1. thisContext terminateTo: ctxt. unwindBlock value]. ]. thisContext terminateTo: nil. self suspend. ] ifFalse:[ "Always suspend the process first so it doesn't accidentally get woken up" oldList := self suspend. suspendedContext ifNotNil:[ + "Figure out if we are terminating a process that is in the ensure: block of a critical section. + In this case, if the block has made progress, pop the suspendedContext so that we leave the + ensure: block inside the critical: without signaling the semaphore/exiting the primitive section, + since presumably this has already happened." + (suspendedContext isClosureContext + and: [(suspendedContext method pragmaAt: #criticalSection) notNil + and: [suspendedContext startpc > suspendedContext closure startpc]]) ifTrue: + [suspendedContext := suspendedContext home]. - "Figure out if we are terminating the process while waiting in Semaphore>>critical: - In this case, pop the suspendedContext so that we leave the ensure: block inside - Semaphore>>critical: without signaling the semaphore." - (oldList class == Semaphore and:[ - suspendedContext method == (Semaphore compiledMethodAt: #critical:)]) ifTrue:[ - suspendedContext := suspendedContext home. - ]. "If we are terminating a process halfways through an unwind, try to complete that unwind block first." + (suspendedContext findNextUnwindContextUpTo: nil) ifNotNil: + [:outer| + (suspendedContext findContextSuchThat:[:c| c closure == (outer tempAt: 1)]) ifNotNil: + [:inner| "This is an unwind block currently under evaluation" + suspendedContext runUntilErrorOrReturnFrom: inner]]. - (suspendedContext findNextUnwindContextUpTo: nil) ifNotNil:[:outer| - (suspendedContext findContextSuchThat:[:c| c closure == (outer tempAt: 1)]) ifNotNil:[:inner| - "This is an unwind block currently under evaluation" - suspendedContext runUntilErrorOrReturnFrom: inner. - ]. - ]. ctxt := self popTo: suspendedContext bottomContext. + ctxt == suspendedContext bottomContext ifFalse: + [self debug: ctxt title: 'Unwind error during termination']]]! - ctxt == suspendedContext bottomContext ifFalse: [ - self debug: ctxt title: 'Unwind error during termination']]. - ]. - ! Item was changed: ----- Method: Semaphore>>critical: (in category 'mutual exclusion') ----- critical: mutuallyExcludedBlock "Evaluate mutuallyExcludedBlock only if the receiver is not currently in the process of running the critical: message. If the receiver is, evaluate mutuallyExcludedBlock after the other critical: message is finished." + - | caught | "We need to catch eventual interruptions very carefully. The naive approach of just doing, e.g.,: self wait. aBlock ensure:[self signal]. will fail if the active process gets terminated while in the wait. However, the equally naive: [self wait. aBlock value] ensure:[self signal]. will fail too, since the active process may get interrupted while entering the ensured block and leave the semaphore signaled twice. To avoid both problems we make use of the fact that interrupts only occur on sends (or backward jumps) and use an assignment (bytecode) + right before we go into the wait primitive (which cannot be preempted)." - right before we go into the wait primitive (which is not a real send and - therefore not interruptable either)." caught := false. ^[ caught := true. self wait. mutuallyExcludedBlock value ] ensure: [ caught ifTrue: [self signal] ] ! From commits at source.squeak.org Thu Jan 7 22:10:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 7 22:11:00 2016 Subject: [squeak-dev] The Trunk: KernelTests-eem.300.mcz Message-ID: Eliot Miranda uploaded a new version of KernelTests to project The Trunk: http://source.squeak.org/trunk/KernelTests-eem.300.mcz ==================== Summary ==================== Name: KernelTests-eem.300 Author: eem Time: 7 January 2016, 1:02:06.763324 pm UUID: 985885d0-99e5-4abc-b27e-fc1ab7c403cb Ancestors: KernelTests-ul.299 Nuke test that can lo longer be tested for given the new Monitor implementation. =============== Diff against KernelTests-ul.299 =============== Item was removed: - ----- Method: MonitorTest>>testMonitorNotGainingUnwantedSignalsDuringUnwinding (in category 'examples') ----- - testMonitorNotGainingUnwantedSignalsDuringUnwinding - - | monitor process | - monitor := Monitor new. - process := [ monitor critical: [ monitor wait ] ] newProcess. - process resume. - 50 milliSeconds asDelay wait. - process terminate. - self assert: 1 equals: ((monitor instVarNamed: #mutex) instVarNamed: #excessSignals)! From commits at source.squeak.org Thu Jan 7 22:25:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 7 22:25:15 2016 Subject: [squeak-dev] The Trunk: KernelTests-eem.301.mcz Message-ID: Eliot Miranda uploaded a new version of KernelTests to project The Trunk: http://source.squeak.org/trunk/KernelTests-eem.301.mcz ==================== Summary ==================== Name: KernelTests-eem.301 Author: eem Time: 7 January 2016, 2:24:59.710673 pm UUID: ab71f651-ae4e-456b-b61c-109261640eb2 Ancestors: KernelTests-eem.300 Test soem more Monitor facilities =============== Diff against KernelTests-eem.300 =============== Item was added: + ----- Method: MonitorTest>>testCheckOwnerProcess (in category 'examples') ----- + testCheckOwnerProcess + self should: [Monitor new checkOwnerProcess] + raise: Error. + + self shouldnt: [| m | m := Monitor new. m critical: [m checkOwnerProcess]] + raise: Error. + + self should: [| s m | + m := Monitor new. + [m critical: [s := #in. Semaphore new wait]] fork. + Processor yield. + self assert: #in equals: s. + m checkOwnerProcess] + raise: Error! Item was added: + ----- Method: MonitorTest>>testCriticalIfLocked (in category 'examples') ----- + testCriticalIfLocked + | m s | + m := Monitor new. + self assert: #unlocked == (m critical: [#unlocked] ifLocked: [#locked]). + [m critical: [s := #in. Semaphore new wait]] fork. + Processor yield. + self assert: #in equals: s. + self assert: #locked equals: (m critical: [#unlocked] ifLocked: [#locked])! From commits at source.squeak.org Thu Jan 7 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 7 22:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160107225502.26051.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-January/009237.html Name: Kernel-eem.974 Ancestors: Kernel-eem.973 Reshape Monitor and Mutex and add the critical section primitives in advance of changing over to the critical section primitives. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009238.html Name: Kernel-eem.975 Ancestors: Kernel-eem.974 Mutate Mutex and Monitor to the new representation and primitives. Modify Process>>terminate to take a generic approach to ensure blocks in critical sections vua a pragma (#criticalSection) and provide an explanatory comment, plus /not/ aborting the ensure: block if no progress has been made. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009239.html Name: KernelTests-eem.300 Ancestors: KernelTests-ul.299 Nuke test that can lo longer be tested for given the new Monitor implementation. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009240.html Name: KernelTests-eem.301 Ancestors: KernelTests-eem.300 Test soem more Monitor facilities ============================================= From commits at source.squeak.org Thu Jan 7 23:57:57 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 7 23:58:00 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.976.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.976.mcz ==================== Summary ==================== Name: Kernel-eem.976 Author: eem Time: 7 January 2016, 3:57:18.38337 pm UUID: 77966cf5-e6cc-4da9-9236-788b1b466fe2 Ancestors: Kernel-eem.975 Fix regression due to accidental reversion . =============== Diff against Kernel-eem.975 =============== Item was changed: ----- Method: MethodContext>>isExecutingBlock (in category 'accessing') ----- isExecutingBlock + "Is this executing a block versus a method? In the new closure + implemetation this is true if closureOrNil is not nil, in which case + it should be holding a BlockClosure." - "Is this executing a block versus a method" + ^closureOrNil isClosure! - ^ self method notNil and: [self method isBlockMethod]! From btc at openinworld.com Fri Jan 8 00:40:25 2016 From: btc at openinworld.com (Ben Coman) Date: Fri Jan 8 00:40:48 2016 Subject: [squeak-dev] Re: [Vm-dev] Where to get Monitor implementation based on primitives? In-Reply-To: References: Message-ID: On Fri, Jan 8, 2016 at 2:51 AM, Eliot Miranda wrote: > Hi Ben, > > On Thu, Jan 7, 2016 at 10:39 AM, Ben Coman wrote: >> >> >> On Fri, Jan 8, 2016 at 1:20 AM, Eliot Miranda >> wrote: >> > >> > and here's a version with a better class comment >> > >> > On Thu, Jan 7, 2016 at 9:12 AM, Eliot Miranda >> > wrote: >> >> >> >> Hi Denis, Hi Cl?ment, Hi Frank, >> >> >> >> On Thu, Jan 7, 2016 at 5:34 AM, Cl?ment Bera >> >> wrote: >> >>> >> >>> Hello, >> >>> >> >>> Eliot, please, you told me you had the code and Denis is interested. >> >>> >> >>> It uses 3 primitives for performance. >> >> >> >> >> >> Forgive the delay. I thought it proper to ask permission since the >> >> code was written while I was at Qwaq. I'm attaching the code in a fairly raw >> >> state, see the attached. The code is MIT, but copyright 3DICC. >> >> >> >> It is a plugin replacement for Squeak's Mutex, and with a little >> >> ingenuity could be a replacement for Squeak's Monitor. It is quicker >> >> because it uses three new primitives to manage entering a critical section >> >> and setting the owner, exiting the critical section and releasing the owner, >> >> and testing if a critical section, entering if the section is unowned. The >> >> use of the primitives means fewer block activations and ensure: blocks in >> >> entering and exiting the critical section, and that's the actual cause of >> >> the speed-up. >> >> >> >> You can benchmark the code as is. Here are some results on 32-bit >> >> Spur, on my 2.2GHz Core i7 >> >> >> >> {Mutex new. Monitor new. CriticalSection new} collect: >> >> [:cs| | n | >> >> n := 0. >> >> [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: [n >> >> := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. >> >> cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: [n >> >> := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. >> >> n ] bench] >> >> >> >> {Mutex new. Monitor new. CriticalSection new} collect: >> >> [:cs| | n | >> >> n := 0. >> >> cs class name, ' -> ', >> >> [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: [n >> >> := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. >> >> cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: [n >> >> := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. >> >> n ] bench] >> >> >> >> #( 'Mutex -> 440,000 per second. 2.27 microseconds per run.' >> >> 'Monitor -> 688,000 per second. 1.45 microseconds per run.' >> >> 'CriticalSection -> 1,110,000 per second. 900 nanoseconds per run.') >> >> >> >> This is great Eliot. Thank you and 3DICC. After loading the changeset >> into Pharo-50515 (32 bit Spur) I get the following results on my >> laptop i5-2520M @ 2.50GHz >> >> #('Mutex -> 254,047 per second' >> 'Monitor -> 450,442 per second' >> 'CriticalSection -> 683,393 per second') >> >> In a fresh Image "Mutex allInstances basicInspect" lists just two >> mutexes... >> 1. NetNameResolver-->ResolverMutex >> 2. ThreadSafeTranscript-->accessSemaphore > > > I hate myself for getting distracted but I'm finding this is un. One can > migrate to the new representation using normal Monticello loads by > > In the first version redefine Mutex and Monitor to subclass LinkedList and > have their owner/ownerProcess inst var first (actually third after firstLink > & lastLink), and add the primitives. > > In the next version check that all Mutex and Monitor instanes are unowned > and then redefine to discard excess inst vars > > Let me test this before committing, and see that all tests are ok. Should Mutex and Monitor both directly subclass LinkedList and duplicate the primitives in each? Or should they both subclass CriticalSection which subclasses LinkedList so the primitives are only defined once? What effect would using the primitives from the superclass have on performance? If any, I'd vote to optimise for duplication rather than "nice" design, but our comments should document this. cheers -ben From eliot.miranda at gmail.com Fri Jan 8 17:31:31 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 8 17:31:34 2016 Subject: [squeak-dev] Re: [Vm-dev] Where to get Monitor implementation based on primitives? In-Reply-To: References: Message-ID: Hi Ben, On Thu, Jan 7, 2016 at 4:40 PM, Ben Coman wrote: > On Fri, Jan 8, 2016 at 2:51 AM, Eliot Miranda > wrote: > > Hi Ben, > > > > On Thu, Jan 7, 2016 at 10:39 AM, Ben Coman wrote: > >> > >> > >> On Fri, Jan 8, 2016 at 1:20 AM, Eliot Miranda > >> wrote: > >> > > >> > and here's a version with a better class comment > >> > > >> > On Thu, Jan 7, 2016 at 9:12 AM, Eliot Miranda < > eliot.miranda@gmail.com> > >> > wrote: > >> >> > >> >> Hi Denis, Hi Cl?ment, Hi Frank, > >> >> > >> >> On Thu, Jan 7, 2016 at 5:34 AM, Cl?ment Bera > > >> >> wrote: > >> >>> > >> >>> Hello, > >> >>> > >> >>> Eliot, please, you told me you had the code and Denis is interested. > >> >>> > >> >>> It uses 3 primitives for performance. > >> >> > >> >> > >> >> Forgive the delay. I thought it proper to ask permission since the > >> >> code was written while I was at Qwaq. I'm attaching the code in a > fairly raw > >> >> state, see the attached. The code is MIT, but copyright 3DICC. > >> >> > >> >> It is a plugin replacement for Squeak's Mutex, and with a little > >> >> ingenuity could be a replacement for Squeak's Monitor. It is quicker > >> >> because it uses three new primitives to manage entering a critical > section > >> >> and setting the owner, exiting the critical section and releasing > the owner, > >> >> and testing if a critical section, entering if the section is > unowned. The > >> >> use of the primitives means fewer block activations and ensure: > blocks in > >> >> entering and exiting the critical section, and that's the actual > cause of > >> >> the speed-up. > >> >> > >> >> You can benchmark the code as is. Here are some results on 32-bit > >> >> Spur, on my 2.2GHz Core i7 > >> >> > >> >> {Mutex new. Monitor new. CriticalSection new} collect: > >> >> [:cs| | n | > >> >> n := 0. > >> >> [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: > [n > >> >> := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. > >> >> cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: [n > >> >> := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. > >> >> n ] bench] > >> >> > >> >> {Mutex new. Monitor new. CriticalSection new} collect: > >> >> [:cs| | n | > >> >> n := 0. > >> >> cs class name, ' -> ', > >> >> [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: > [n > >> >> := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. > >> >> cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: [n > >> >> := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. > >> >> n ] bench] > >> >> > >> >> #( 'Mutex -> 440,000 per second. 2.27 microseconds per run.' > >> >> 'Monitor -> 688,000 per second. 1.45 microseconds per run.' > >> >> 'CriticalSection -> 1,110,000 per second. 900 nanoseconds per run.') > >> >> > >> > >> This is great Eliot. Thank you and 3DICC. After loading the changeset > >> into Pharo-50515 (32 bit Spur) I get the following results on my > >> laptop i5-2520M @ 2.50GHz > >> > >> #('Mutex -> 254,047 per second' > >> 'Monitor -> 450,442 per second' > >> 'CriticalSection -> 683,393 per second') > >> > >> In a fresh Image "Mutex allInstances basicInspect" lists just two > >> mutexes... > >> 1. NetNameResolver-->ResolverMutex > >> 2. ThreadSafeTranscript-->accessSemaphore > > > > > > I hate myself for getting distracted but I'm finding this is un. One can > > migrate to the new representation using normal Monticello loads by > > > > In the first version redefine Mutex and Monitor to subclass LinkedList > and > > have their owner/ownerProcess inst var first (actually third after > firstLink > > & lastLink), and add the primitives. > > > > In the next version check that all Mutex and Monitor instanes are unowned > > and then redefine to discard excess inst vars > > > > Let me test this before committing, and see that all tests are ok. > > Should Mutex and Monitor both directly subclass LinkedList and > duplicate the primitives in each? > > Or should they both subclass CriticalSection which subclasses > LinkedList so the primitives are only defined once? > That's a good idea. Feel free to change the code, but test that the Monticello load handles this case properly first :-). Actually, given that the default state of all the Mutex and Monitor instances in the image is unowned (owner process is nil) then it'll just work anyway. If we do that, we must make sure to include the ICC copyright in CriticalSection's class comment, and can eliminate it from the primitives. What effect would using the primitives from the superclass have on > performance? If any, I'd vote to optimise for duplication rather than > "nice" design, but our comments should document this. > Likely in the noise. The inline cacheing machinery in the VM is far cheaper than the real overheads here which are in block creation, process switch, interpreter primitive invocation. > > cheers -ben > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160108/f323c2d5/attachment.htm From dionisiydk at gmail.com Fri Jan 8 17:49:32 2016 From: dionisiydk at gmail.com (Denis Kudriashov) Date: Fri Jan 8 17:49:54 2016 Subject: [squeak-dev] Re: [Vm-dev] Where to get Monitor implementation based on primitives? In-Reply-To: References: Message-ID: Now I implement pragma approach to set up local variable during termination process. So I can write such methods: critical: aBlock "Evaluate aBlock protected by the receiver." | lockAcquired | lockAcquired := false. ^[ lockAcquired := true. lockAcquired := lock wait. aBlock value ] ensure: [lockAcquired ifTrue: [lock signal]]. And Process>>terminate detects waiting on such methods and push false to variable lockAcquired (which is 1 temp here). This approach allow me to use multiple "locks" (semaphores or whatever) in single method which I need for ReadWriteLock. 2016-01-08 18:31 GMT+01:00 Eliot Miranda : > Hi Ben, > > On Thu, Jan 7, 2016 at 4:40 PM, Ben Coman wrote: > >> On Fri, Jan 8, 2016 at 2:51 AM, Eliot Miranda >> wrote: >> > Hi Ben, >> > >> > On Thu, Jan 7, 2016 at 10:39 AM, Ben Coman wrote: >> >> >> >> >> >> On Fri, Jan 8, 2016 at 1:20 AM, Eliot Miranda > > >> >> wrote: >> >> > >> >> > and here's a version with a better class comment >> >> > >> >> > On Thu, Jan 7, 2016 at 9:12 AM, Eliot Miranda < >> eliot.miranda@gmail.com> >> >> > wrote: >> >> >> >> >> >> Hi Denis, Hi Cl?ment, Hi Frank, >> >> >> >> >> >> On Thu, Jan 7, 2016 at 5:34 AM, Cl?ment Bera < >> bera.clement@gmail.com> >> >> >> wrote: >> >> >>> >> >> >>> Hello, >> >> >>> >> >> >>> Eliot, please, you told me you had the code and Denis is >> interested. >> >> >>> >> >> >>> It uses 3 primitives for performance. >> >> >> >> >> >> >> >> >> Forgive the delay. I thought it proper to ask permission since the >> >> >> code was written while I was at Qwaq. I'm attaching the code in a >> fairly raw >> >> >> state, see the attached. The code is MIT, but copyright 3DICC. >> >> >> >> >> >> It is a plugin replacement for Squeak's Mutex, and with a little >> >> >> ingenuity could be a replacement for Squeak's Monitor. It is >> quicker >> >> >> because it uses three new primitives to manage entering a critical >> section >> >> >> and setting the owner, exiting the critical section and releasing >> the owner, >> >> >> and testing if a critical section, entering if the section is >> unowned. The >> >> >> use of the primitives means fewer block activations and ensure: >> blocks in >> >> >> entering and exiting the critical section, and that's the actual >> cause of >> >> >> the speed-up. >> >> >> >> >> >> You can benchmark the code as is. Here are some results on 32-bit >> >> >> Spur, on my 2.2GHz Core i7 >> >> >> >> >> >> {Mutex new. Monitor new. CriticalSection new} collect: >> >> >> [:cs| | n | >> >> >> n := 0. >> >> >> [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: >> [n >> >> >> := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. >> >> >> cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: >> [n >> >> >> := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. >> >> >> n ] bench] >> >> >> >> >> >> {Mutex new. Monitor new. CriticalSection new} collect: >> >> >> [:cs| | n | >> >> >> n := 0. >> >> >> cs class name, ' -> ', >> >> >> [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: >> [n >> >> >> := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. >> >> >> cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: >> [n >> >> >> := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. >> >> >> n ] bench] >> >> >> >> >> >> #( 'Mutex -> 440,000 per second. 2.27 microseconds per run.' >> >> >> 'Monitor -> 688,000 per second. 1.45 microseconds per run.' >> >> >> 'CriticalSection -> 1,110,000 per second. 900 nanoseconds per run.') >> >> >> >> >> >> >> This is great Eliot. Thank you and 3DICC. After loading the changeset >> >> into Pharo-50515 (32 bit Spur) I get the following results on my >> >> laptop i5-2520M @ 2.50GHz >> >> >> >> #('Mutex -> 254,047 per second' >> >> 'Monitor -> 450,442 per second' >> >> 'CriticalSection -> 683,393 per second') >> >> >> >> In a fresh Image "Mutex allInstances basicInspect" lists just two >> >> mutexes... >> >> 1. NetNameResolver-->ResolverMutex >> >> 2. ThreadSafeTranscript-->accessSemaphore >> > >> > >> > I hate myself for getting distracted but I'm finding this is un. One >> can >> > migrate to the new representation using normal Monticello loads by >> > >> > In the first version redefine Mutex and Monitor to subclass LinkedList >> and >> > have their owner/ownerProcess inst var first (actually third after >> firstLink >> > & lastLink), and add the primitives. >> > >> > In the next version check that all Mutex and Monitor instanes are >> unowned >> > and then redefine to discard excess inst vars >> > >> > Let me test this before committing, and see that all tests are ok. >> >> Should Mutex and Monitor both directly subclass LinkedList and >> duplicate the primitives in each? >> >> Or should they both subclass CriticalSection which subclasses >> LinkedList so the primitives are only defined once? >> > > That's a good idea. Feel free to change the code, but test that the > Monticello load handles this case properly first :-). Actually, given that > the default state of all the Mutex and Monitor instances in the image is > unowned (owner process is nil) then it'll just work anyway. If we do that, > we must make sure to include the ICC copyright in CriticalSection's class > comment, and can eliminate it from the primitives. > > What effect would using the primitives from the superclass have on >> performance? If any, I'd vote to optimise for duplication rather than >> "nice" design, but our comments should document this. >> > > Likely in the noise. The inline cacheing machinery in the VM is far > cheaper than the real overheads here which are in block creation, process > switch, interpreter primitive invocation. > > >> >> cheers -ben >> >> > > > -- > _,,,^..^,,,_ > best, Eliot > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160108/dfc6a884/attachment.htm From commits at source.squeak.org Fri Jan 8 19:34:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 8 19:34:21 2016 Subject: [squeak-dev] The Trunk: Tools-eem.660.mcz Message-ID: Eliot Miranda uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-eem.660.mcz ==================== Summary ==================== Name: Tools-eem.660 Author: eem Time: 7 January 2016, 11:33:54.290295 am UUID: 97d54108-0f23-488e-a4f7-d7468e560a7c Ancestors: Tools-pre.659 Make most uses of VersionBrowser>>browseVersionsOf:... go throguh ToolSet and make StandardToolSet search for missing methods in the current change set, avoiding having to hunt throguh the current change set when finding versions of deleted methods in mehtod lists such as Recent Submissions. =============== Diff against Tools-pre.659 =============== Item was changed: ----- Method: Debugger>>browseVersions (in category 'context stack menu') ----- browseVersions + "Create and schedule a message set browser on all versions of the currently selected message selector." + (ToolSet + browseVersionsOf: self selectedClassOrMetaClass + selector: self selectedMessageName) ifNil: [self changed: #flash]! - "Create and schedule a message set browser on all versions of the - currently selected message selector." - - | class selector | - class := self selectedClassOrMetaClass. - selector := self selectedMessageName. - VersionsBrowser - browseVersionsOf: (class compiledMethodAt: selector - ifAbsent: [^self changed: #flash]) - class: self selectedClass theNonMetaClass - meta: class isMeta - category: self selectedMessageCategoryName - selector: selector! Item was changed: ----- Method: FileContentsBrowser>>browseVersions (in category 'other') ----- browseVersions + "Create and schedule a message set browser on all versions of the currently selected message selector." + (ToolSet + browseVersionsOf: self selectedClassOrMetaClass + selector: self selectedMessageName) ifNil: [self changed: #flash]! - "Create and schedule a message set browser on all versions of the - currently selected message selector." - | class selector | - (selector := self selectedMessageName) ifNotNil: - [class := self selectedClassOrMetaClass. - (class exists and: [class realClass includesSelector: selector]) ifTrue: - [VersionsBrowser - browseVersionsOf: (class realClass compiledMethodAt: selector) - class: class realClass theNonMetaClass - meta: class realClass isMeta - category: self selectedMessageCategoryName - selector: selector]]! Item was changed: ----- Method: StandardToolSet class>>browseVersionsOf:selector: (in category 'browsing') ----- + browseVersionsOf: class selector: selector + "Open and answer a browser on versions of the method. + If the method doesn't exist try and find version from the current change set. + If not found there, answer nil." + | methodOrNil methodCategory | + methodOrNil := class compiledMethodAt: selector ifAbsent: []. + methodOrNil ifNil: + [(ChangeSet current methodInfoFromRemoval: {class name. selector}) + ifNil: [^nil] + ifNotNil: + [:pair| + methodOrNil := CompiledMethod toReturnSelfTrailerBytes: + (CompiledMethodTrailer new sourcePointer: pair first). + methodCategory := pair last]]. + ^VersionsBrowser + browseVersionsOf: methodOrNil + class: class theNonMetaClass + meta: class isMeta + category: (methodCategory ifNil: [class organization categoryOfElement: selector]) + selector: selector! - browseVersionsOf: aClass selector: aSelector - "Open a browser" - VersionsBrowser - browseVersionsOf: (aClass compiledMethodAt: aSelector) - class: aClass theNonMetaClass - meta: aClass isMeta - category: (aClass organization categoryOfElement: aSelector) - selector: aSelector! Item was changed: ----- Method: StringHolder>>browseVersions (in category '*Tools') ----- browseVersions "Create and schedule a Versions Browser, showing all versions of the currently selected message. Answer the browser or nil." + | selector | + self classCommentIndicated ifTrue: + [ClassCommentVersionsBrowser browseCommentOf: self selectedClass. + ^nil]. - | selector class | - self classCommentIndicated - ifTrue: [ ClassCommentVersionsBrowser browseCommentOf: self selectedClass. - ^nil ]. + ^(selector := self selectedMessageName) + ifNil: [self inform: 'Sorry, only actual methods have retrievable versions.'. nil] + ifNotNil: [ToolSet browseVersionsOf: self selectedClassOrMetaClass selector: selector]! - (selector := self selectedMessageName) - ifNil:[ self inform: 'Sorry, only actual methods have retrievable versions.'. ^nil ] - ifNotNil: [ - class := self selectedClassOrMetaClass. - ^VersionsBrowser - browseVersionsOf: (class compiledMethodAt: selector) - class: self selectedClass - meta: class isMeta - category: (class organization categoryOfElement: selector) - selector: selector]! From eliot.miranda at gmail.com Fri Jan 8 22:09:25 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 8 22:09:29 2016 Subject: [squeak-dev] Re: [Pharo-dev] problem with become:? In-Reply-To: <19635D86-E91C-4067-92FD-0AA5BBC85E7F@tudorgirba.com> References: <19635D86-E91C-4067-92FD-0AA5BBC85E7F@tudorgirba.com> Message-ID: Hi Doru, On Fri, Jan 8, 2016 at 12:02 PM, Tudor Girba wrote: > Hi, > > If I execute the following code in the latest Pharo image: > > Object subclass: #A > instanceVariableNames: '' > classVariableNames: '' > package: 'AA'. > Object subclass: #B > instanceVariableNames: '' > classVariableNames: '' > package: 'AA'. > a := A new. > b := B new. > a become: b. > a class > > ==> ?A". > > In a pre-Spur image, I used to get ?B?. Is this a bug, or is there a > change I am not aware of? > > Cheers, > Doru > Looks like a bug to me. I'll fix it asap. > > > -- > www.tudorgirba.com > www.feenk.com > > "Things happen when they happen, > not when you talk about them happening." > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160108/f3dfa62c/attachment.htm From nicolaihess at gmail.com Fri Jan 8 22:11:29 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Fri Jan 8 22:11:31 2016 Subject: [squeak-dev] Re: [Pharo-dev] problem with become:? In-Reply-To: References: <19635D86-E91C-4067-92FD-0AA5BBC85E7F@tudorgirba.com> Message-ID: 2016-01-08 23:09 GMT+01:00 Eliot Miranda : > Hi Doru, > > On Fri, Jan 8, 2016 at 12:02 PM, Tudor Girba wrote: > >> Hi, >> >> If I execute the following code in the latest Pharo image: >> >> Object subclass: #A >> instanceVariableNames: '' >> classVariableNames: '' >> package: 'AA'. >> Object subclass: #B >> instanceVariableNames: '' >> classVariableNames: '' >> package: 'AA'. >> a := A new. >> b := B new. >> a become: b. >> a class >> >> ==> ?A". >> >> In a pre-Spur image, I used to get ?B?. Is this a bug, or is there a >> change I am not aware of? >> >> Cheers, >> Doru >> > > Looks like a bug to me. I'll fix it asap. > There is another bug report at http://bugs.squeak.org/view.php?id=7845 | obj1 obj2 | obj1 := 'string'. obj2 := 1.234. obj1 become: obj2. {obj1. obj2} "=> #('X9?L?v?' 'string'). it should be #(1.234 'string') " Squeak Cog Supr Virtual Machine 4.0.3427.0 Is it related? > >> >> >> -- >> www.tudorgirba.com >> www.feenk.com >> >> "Things happen when they happen, >> not when you talk about them happening." >> >> >> > > > -- > _,,,^..^,,,_ > best, Eliot > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160108/ca51a31d/attachment.htm From eliot.miranda at gmail.com Fri Jan 8 22:33:20 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 8 22:33:22 2016 Subject: [Vm-dev] Re: [squeak-dev] Re: [Pharo-dev] problem with become:? In-Reply-To: References: <19635D86-E91C-4067-92FD-0AA5BBC85E7F@tudorgirba.com> Message-ID: On Fri, Jan 8, 2016 at 2:11 PM, Nicolai Hess wrote: > > > > 2016-01-08 23:09 GMT+01:00 Eliot Miranda : > >> Hi Doru, >> >> On Fri, Jan 8, 2016 at 12:02 PM, Tudor Girba >> wrote: >> >>> Hi, >>> >>> If I execute the following code in the latest Pharo image: >>> >>> Object subclass: #A >>> instanceVariableNames: '' >>> classVariableNames: '' >>> package: 'AA'. >>> Object subclass: #B >>> instanceVariableNames: '' >>> classVariableNames: '' >>> package: 'AA'. >>> a := A new. >>> b := B new. >>> a become: b. >>> a class >>> >>> ==> ?A". >>> >>> In a pre-Spur image, I used to get ?B?. Is this a bug, or is there a >>> change I am not aware of? >>> >>> Cheers, >>> Doru >>> >> >> Looks like a bug to me. I'll fix it asap. >> > > > There is another bug report at > http://bugs.squeak.org/view.php?id=7845 > > | obj1 obj2 | > obj1 := 'string'. > obj2 := 1.234. > obj1 become: obj2. > {obj1. obj2} "=> #('X9 L?v?' 'string'). it should be #(1.234 'string') " > > Squeak Cog Supr Virtual Machine 4.0.3427.0 > > > Is it related? > Thank you, certainly looks like it. -- >>> www.tudorgirba.com >>> www.feenk.com >>> >>> "Things happen when they happen, >>> not when you talk about them happening." >>> >>> >>> >> >> >> -- >> _,,,^..^,,,_ >> best, Eliot >> >> >> >> > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160108/e1693e9f/attachment.htm From commits at source.squeak.org Fri Jan 8 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 8 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160108225502.28340.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-January/009241.html Name: Kernel-eem.976 Ancestors: Kernel-eem.975 Fix regression due to accidental reversion . ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009242.html Name: Tools-eem.660 Ancestors: Tools-pre.659 Make most uses of VersionBrowser>>browseVersionsOf:... go throguh ToolSet and make StandardToolSet search for missing methods in the current change set, avoiding having to hunt throguh the current change set when finding versions of deleted methods in mehtod lists such as Recent Submissions. ============================================= From eliot.miranda at gmail.com Sat Jan 9 00:20:29 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Jan 9 00:20:32 2016 Subject: [Vm-dev] Re: [squeak-dev] Re: [Pharo-dev] problem with become:? In-Reply-To: References: <19635D86-E91C-4067-92FD-0AA5BBC85E7F@tudorgirba.com> Message-ID: Hi Doru, Hi Nicolai, On Fri, Jan 8, 2016 at 2:33 PM, Eliot Miranda wrote: > > > On Fri, Jan 8, 2016 at 2:11 PM, Nicolai Hess > wrote: > >> >> >> >> 2016-01-08 23:09 GMT+01:00 Eliot Miranda : >> >>> Hi Doru, >>> >>> On Fri, Jan 8, 2016 at 12:02 PM, Tudor Girba >>> wrote: >>> >>>> Hi, >>>> >>>> If I execute the following code in the latest Pharo image: >>>> >>>> Object subclass: #A >>>> instanceVariableNames: '' >>>> classVariableNames: '' >>>> package: 'AA'. >>>> Object subclass: #B >>>> instanceVariableNames: '' >>>> classVariableNames: '' >>>> package: 'AA'. >>>> a := A new. >>>> b := B new. >>>> a become: b. >>>> a class >>>> >>>> ==> ?A". >>>> >>>> In a pre-Spur image, I used to get ?B?. Is this a bug, or is there a >>>> change I am not aware of? >>>> >>>> Cheers, >>>> Doru >>>> >>> >>> Looks like a bug to me. I'll fix it asap. >>> >> >> >> There is another bug report at >> http://bugs.squeak.org/view.php?id=7845 >> >> | obj1 obj2 | >> obj1 := 'string'. >> obj2 := 1.234. >> obj1 become: obj2. >> {obj1. obj2} "=> #('X9 L?v?' 'string'). it should be #(1.234 'string') " >> >> Squeak Cog Supr Virtual Machine 4.0.3427.0 >> >> >> Is it related? >> > > Thank you, certainly looks like it. > The good news is that these are not bugs in the simulator. So I need to generate new sources and working VMs (and Esteban will need to rebuild the Pharo 5 VM) and then the bugs should be fixed. There's a slim possibility that this could be due to a Slang bug but I doubt it. -- >>>> www.tudorgirba.com >>>> www.feenk.com >>>> >>>> "Things happen when they happen, >>>> not when you talk about them happening." >>> >>> >>> _,,,^..^,,,_ >>> best, Eliot >>> >>> _,,,^..^,,,_ > best, Eliot > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160108/c923e71f/attachment.htm From eliot.miranda at gmail.com Sat Jan 9 01:39:55 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Jan 9 01:39:59 2016 Subject: [Vm-dev] Re: [squeak-dev] Re: [Pharo-dev] problem with become:? In-Reply-To: References: <19635D86-E91C-4067-92FD-0AA5BBC85E7F@tudorgirba.com> Message-ID: Hi Doru, Hi Nicolai, On Fri, Jan 8, 2016 at 4:20 PM, Eliot Miranda wrote: > Hi Doru, Hi Nicolai, > > On Fri, Jan 8, 2016 at 2:33 PM, Eliot Miranda > wrote: > >> >> >> On Fri, Jan 8, 2016 at 2:11 PM, Nicolai Hess >> wrote: >> >>> >>> >>> >>> 2016-01-08 23:09 GMT+01:00 Eliot Miranda : >>> >>>> Hi Doru, >>>> >>>> On Fri, Jan 8, 2016 at 12:02 PM, Tudor Girba >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> If I execute the following code in the latest Pharo image: >>>>> >>>>> Object subclass: #A >>>>> instanceVariableNames: '' >>>>> classVariableNames: '' >>>>> package: 'AA'. >>>>> Object subclass: #B >>>>> instanceVariableNames: '' >>>>> classVariableNames: '' >>>>> package: 'AA'. >>>>> a := A new. >>>>> b := B new. >>>>> a become: b. >>>>> a class >>>>> >>>>> ==> ?A". >>>>> >>>>> In a pre-Spur image, I used to get ?B?. Is this a bug, or is there a >>>>> change I am not aware of? >>>>> >>>>> Cheers, >>>>> Doru >>>>> >>>> >>>> Looks like a bug to me. I'll fix it asap. >>>> >>> >>> >>> There is another bug report at >>> http://bugs.squeak.org/view.php?id=7845 >>> >>> | obj1 obj2 | >>> obj1 := 'string'. >>> obj2 := 1.234. >>> obj1 become: obj2. >>> {obj1. obj2} "=> #('X9 L?v?' 'string'). it should be #(1.234 'string') " >>> >>> Squeak Cog Supr Virtual Machine 4.0.3427.0 >>> >>> >>> Is it related? >>> >> >> Thank you, certainly looks like it. >> > > The good news is that these are not bugs in the simulator. So I need to > generate new sources and working VMs (and Esteban will need to rebuild the > Pharo 5 VM) and then the bugs should be fixed. There's a slim possibility > that this could be due to a Slang bug but I doubt it. > Shows why I know. It is indeed a Slang bug, and one that shows itself only under optimisation above -O1, i.e. neither the debug nor assert VMs show the bug :-(. Alas these are the kind of bugs that take a while to track down. I'm on it though. -- >>>>> www.tudorgirba.com >>>>> www.feenk.com >>>>> >>>>> "Things happen when they happen, >>>>> not when you talk about them happening." >>>> >>>> >>>> _,,,^..^,,,_ >>>> best, Eliot >>>> >>>> _,,,^..^,,,_ >> best, Eliot >> > > _,,,^..^,,,_ > best, Eliot > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160108/45292232/attachment-0001.htm From tim at rowledge.org Sat Jan 9 02:04:57 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Jan 9 02:05:01 2016 Subject: [Vm-dev] [squeak-dev] Re: [Pharo-dev] problem with become:? In-Reply-To: References: <19635D86-E91C-4067-92FD-0AA5BBC85E7F@tudorgirba.com> Message-ID: <3334ECD3-F5D8-4622-BC87-AACB7576B0E1@rowledge.org> > On 08-01-2016, at 5:39 PM, Eliot Miranda wrote: > > > Shows why I know. It is indeed a Slang bug, and one that shows itself only under optimisation above -O1, i.e. neither the debug nor assert VMs show the bug :-(. Alas these are the kind of bugs that take a while to track down. I'm on it though. If it?s any consolation in a Pi 3542 vm it appears not to be a problem. Might help track it down... tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Suffers from permanent rapture of the deep. (Nitrogen narcosis.) From tim at rowledge.org Sat Jan 9 03:36:08 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Jan 9 03:36:13 2016 Subject: [squeak-dev] Updates seem broken again Message-ID: <9DBE22F4-692A-4E09-8F8D-3AC4468D0D3E@rowledge.org> Whilst attempting to update my (spur) image in order to be able to save the HandMorph>dragging related change I mentioned recently I discovered that we?ve broken something in the update stream again. As it gets to Kernel.spur-dtl.850 things start to complain; an MC merge window appears but I cannot use the ?all newer? etc options. Selecting the first clash and hitting ?Reject? works enough to let me reject all the changes - which looks sensible since they seem to be older than the in-image versions - and then continue the merge. This repeats many times. Any attempt to use ?All Newer? et al. opens a dNU in MCConflict>isRemoteNewer because ?self localDefinition? is nil and of course does not understand #fullTimeStamp. Sigh. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Fractured Idiom:- VENI, VIDI, VICE - I came, I saw, I partied. From tim at rowledge.org Sat Jan 9 04:11:14 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Jan 9 04:11:18 2016 Subject: [squeak-dev] Re: Updates seem broken again In-Reply-To: <9DBE22F4-692A-4E09-8F8D-3AC4468D0D3E@rowledge.org> References: <9DBE22F4-692A-4E09-8F8D-3AC4468D0D3E@rowledge.org> Message-ID: <24508467-9BB0-46F1-B5EE-869A3360EF13@rowledge.org> > On 08-01-2016, at 7:36 PM, tim Rowledge wrote: > > Whilst attempting to update my (spur) image in order to be able to save the HandMorph>dragging related change I mentioned recently I discovered that we?ve broken something in the update stream again. Just to add some puzzlement, I went all the way back to a 5.0 image from the all-in-one package, set the URL for the update stream to trunk and updated it. That went ok (aside from that ?scare the hell out of you? notifier regarding empty packages) and claimed to finish. At update 15546. My working image - the one I wanted to update - is already at 15566. However, the update list was ?update.spur? rather than just ?update? so I tried again from fresh? Nope, gets back to the same issue originally reported. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- If he were any more stupid, he'd have to be watered twice a week. From tim at rowledge.org Sat Jan 9 04:21:57 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Jan 9 04:22:00 2016 Subject: [squeak-dev] Re: Updates seem broken again In-Reply-To: <24508467-9BB0-46F1-B5EE-869A3360EF13@rowledge.org> References: <9DBE22F4-692A-4E09-8F8D-3AC4468D0D3E@rowledge.org> <24508467-9BB0-46F1-B5EE-869A3360EF13@rowledge.org> Message-ID: <2D8CE3B1-DEE0-492D-A71F-5BA9ACED09E5@rowledge.org> Aaaaand even setting the update related preference to not use merge makes no difference - maybe that preference is actually ignored? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Ignorant, and proud of it. From tim at rowledge.org Sat Jan 9 04:56:52 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Jan 9 04:56:56 2016 Subject: [squeak-dev] Re: Updates seem broken again (solved, sort of) In-Reply-To: <2D8CE3B1-DEE0-492D-A71F-5BA9ACED09E5@rowledge.org> References: <9DBE22F4-692A-4E09-8F8D-3AC4468D0D3E@rowledge.org> <24508467-9BB0-46F1-B5EE-869A3360EF13@rowledge.org> <2D8CE3B1-DEE0-492D-A71F-5BA9ACED09E5@rowledge.org> Message-ID: <906887F1-9DAF-44CA-9669-554FACD2AAF4@rowledge.org> Some of the problem is now understood - the image with problems has the ?update.spur? update map name. Apparently it shouldn?t. So then the interesting question is where it came from since I really can?t remember setting it myself - I?ve never even noticed it as an option before! The only suspect I can find at the moment is SpurBootstrapMonticelloPackagePatcher>spurConfigurationOf:forRepository: dated 'eem 2/3/2015 12:59? or uploadNewerSpurConfigurationsInTrunk dated 'eem 10/16/2014 13:21? neither of which are not even in the image nor changes of the system that is having problems. A trunk spur 5.0 image does update and appears to get to the latest changes to Mutex etc. Quite what happened and why my prior working image thought it was at update 15566 I don?t know. It?s been one of those weeks. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Never underestimate the bandwidth of a station wagon full of tapes. From tim at rowledge.org Sat Jan 9 05:02:56 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Jan 9 05:03:02 2016 Subject: [squeak-dev] Re: Updates seem broken again (solved, sort of) In-Reply-To: <906887F1-9DAF-44CA-9669-554FACD2AAF4@rowledge.org> References: <9DBE22F4-692A-4E09-8F8D-3AC4468D0D3E@rowledge.org> <24508467-9BB0-46F1-B5EE-869A3360EF13@rowledge.org> <2D8CE3B1-DEE0-492D-A71F-5BA9ACED09E5@rowledge.org> <906887F1-9DAF-44CA-9669-554FACD2AAF4@rowledge.org> Message-ID: > On 08-01-2016, at 8:56 PM, tim Rowledge wrote: > > Some of the problem is now understood - the image with problems has the ?update.spur? update map name. Apparently it shouldn?t. And problem solved; at some point in the past - early spur development I guess - I saved my preferences when ?update.spur' was the right thing to have in there. Loading those preferences is where it came from. At least I know what happened now. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Hardware: The parts of a computer system that can be kicked. From estebanlm at gmail.com Sat Jan 9 08:59:48 2016 From: estebanlm at gmail.com (Esteban Lorenzano) Date: Sat Jan 9 08:59:51 2016 Subject: [Vm-dev] Re: [squeak-dev] Re: [Pharo-dev] problem with become:? In-Reply-To: References: <19635D86-E91C-4067-92FD-0AA5BBC85E7F@tudorgirba.com> Message-ID: > On 09 Jan 2016, at 01:20, Eliot Miranda wrote: > > Hi Doru, Hi Nicolai, > > On Fri, Jan 8, 2016 at 2:33 PM, Eliot Miranda > wrote: > > > On Fri, Jan 8, 2016 at 2:11 PM, Nicolai Hess > wrote: > > > > 2016-01-08 23:09 GMT+01:00 Eliot Miranda >: > Hi Doru, > > On Fri, Jan 8, 2016 at 12:02 PM, Tudor Girba > wrote: > Hi, > > If I execute the following code in the latest Pharo image: > > Object subclass: #A > instanceVariableNames: '' > classVariableNames: '' > package: 'AA'. > Object subclass: #B > instanceVariableNames: '' > classVariableNames: '' > package: 'AA'. > a := A new. > b := B new. > a become: b. > a class > > ==> ?A". > > In a pre-Spur image, I used to get ?B?. Is this a bug, or is there a change I am not aware of? > > Cheers, > Doru > > Looks like a bug to me. I'll fix it asap. > > > There is another bug report at > http://bugs.squeak.org/view.php?id=7845 > > | obj1 obj2 | > obj1 := 'string'. > obj2 := 1.234. > obj1 become: obj2. > {obj1. obj2} "=> #('X9 L?v?' 'string'). it should be #(1.234 'string') " > > Squeak Cog Supr Virtual Machine 4.0.3427.0 > > > Is it related? > > Thank you, certainly looks like it. > > The good news is that these are not bugs in the simulator. So I need to generate new sources and working VMs (and Esteban will need to rebuild the Pharo 5 VM) and then the bugs should be fixed. There's a slim possibility that this could be due to a Slang bug but I doubt it. yes, I?m now one month behind but that?s because of a bug in pharo who is not fixed, so next week I will resume the jobs. If there are not ?issues? like this, normally VM is available immediately after a VMMaker commit :) Esteban > > > -- > www.tudorgirba.com > www.feenk.com > > "Things happen when they happen, > not when you talk about them happening." > > _,,,^..^,,,_ > best, Eliot > > _,,,^..^,,,_ > best, Eliot > > _,,,^..^,,,_ > best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160109/8e4d6810/attachment.htm From commits at source.squeak.org Sat Jan 9 17:01:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 9 17:01:02 2016 Subject: [squeak-dev] The Trunk: Monticello-eem.625.mcz Message-ID: Eliot Miranda uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-eem.625.mcz ==================== Summary ==================== Name: Monticello-eem.625 Author: eem Time: 9 January 2016, 9:00:45.546083 am UUID: 6a0eca24-2c18-4b96-a55e-28ebccba212b Ancestors: Monticello-mt.624 Make browse versions go through ToolSet hence, avoiding having to hunt throguh the current change set when finding versions of deleted methods. =============== Diff against Monticello-mt.624 =============== Item was changed: ----- Method: MCCodeTool>>browseVersions (in category 'menus') ----- browseVersions + "Create and schedule a message set browser on all versions of the currently selected message selector." + (ToolSet + browseVersionsOf: self selectedClassOrMetaClass + selector: self selectedMessageName) ifNil: [self changed: #flash]! - "Create and schedule a message set browser on all versions of the - currently selected message selector." - - | class selector compiledMethod | - class := self selectedClassOrMetaClass. - selector := self selectedMessageName. - compiledMethod := class compiledMethodAt: selector ifAbsent: [ ^self ]. - VersionsBrowser - browseVersionsOf: compiledMethod - class: class theNonMetaClass - meta: class isMeta - category: self selectedMessageCategoryName - selector: selector! From commits at source.squeak.org Sat Jan 9 17:01:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 9 17:01:52 2016 Subject: [squeak-dev] The Trunk: Graphics-eem.320.mcz Message-ID: Eliot Miranda uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-eem.320.mcz ==================== Summary ==================== Name: Graphics-eem.320 Author: eem Time: 9 January 2016, 8:58:44.935792 am UUID: 805d5995-61ee-409d-9c05-b7f7de330942 Ancestors: Graphics-tpr.319 categorize two uncategorized methods =============== Diff against Graphics-tpr.319 =============== Item was changed: + ----- Method: Bitmap>>asByteArray (in category 'converting') ----- - ----- Method: Bitmap>>asByteArray (in category 'as yet unclassified') ----- asByteArray "Faster way to make a byte array from me. copyFromByteArray: makes equal Bitmap." | f bytes hack | f := Form extent: 4@self size depth: 8 bits: self. bytes := ByteArray new: self size * 4. hack := Form new hackBits: bytes. Smalltalk isLittleEndian ifTrue:[hack swapEndianness]. hack copyBits: f boundingBox from: f at: (0@0) clippingBox: hack boundingBox rule: Form over fillColor: nil map: nil. "f displayOn: hack." ^ bytes. ! Item was changed: + ----- Method: Bitmap>>copy (in category 'copying') ----- - ----- Method: Bitmap>>copy (in category 'as yet unclassified') ----- copy ^self clone! From commits at source.squeak.org Sat Jan 9 19:50:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 9 19:50:06 2016 Subject: [squeak-dev] The Inbox: ShoutCore-kfr.55.mcz Message-ID: A new version of ShoutCore was added to project The Inbox: http://source.squeak.org/inbox/ShoutCore-kfr.55.mcz ==================== Summary ==================== Name: ShoutCore-kfr.55 Author: kfr Time: 6 January 2016, 8:49:46.186914 pm UUID: bd33aa70-60b2-48ee-adee-31db9e5d3ab7 Ancestors: ShoutCore-ul.54 Add preference to turn syntax highlighting on or off =============== Diff against ShoutCore-ul.54 =============== Item was changed: SHTextStyler subclass: #SHTextStylerST80 instanceVariableNames: 'classOrMetaClass workspace font parser formatAssignments environment sourceMap processedSourceMap pixelHeight attributesByPixelHeight parseAMethod' + classVariableNames: 'SubduedSyntaxHighlights SyntaxHighlighting SyntaxHighlightingAsYouType SyntaxHighlightingAsYouTypeAnsiAssignment SyntaxHighlightingAsYouTypeLeftArrowAssignment' - classVariableNames: 'SubduedSyntaxHighlights SyntaxHighlightingAsYouType SyntaxHighlightingAsYouTypeAnsiAssignment SyntaxHighlightingAsYouTypeLeftArrowAssignment' poolDictionaries: '' category: 'ShoutCore-Styling'! SHTextStylerST80 class instanceVariableNames: 'styleTable textAttributesByPixelHeight'! !SHTextStylerST80 commentStamp: 'tween 8/27/2004 10:55' prior: 0! I style Smalltalk methods and expressions. My 'styleTable' class instance var holds an array ofArrays which control how each token is styled/coloured. See my defaultStyleTable class method for its structure. My styleTable can be changed by either modifying the defaultStyleTable class method and then executing SHTextStylerST80 initialize ; or by giving me a new styleTable through my #styleTable: class method. My 'textAttributesByPixelSize' class instance var contains a dictionary of dictionaries. The key is a pixelSize and the value a Dictionary from token type Symbol to TextAttribute array. It is created/maintained automatically. I also install these 3 preferences when my class initialize method is executed.... #syntaxHighlightingAsYouType - controls whether methods are styled in browsers #syntaxHighlightingAsYouTypeAnsiAssignment - controls whether assignments are formatted to be := #syntaxHighlightingAsYouTypeLeftArrowAssignment - controls whether assignments are formatted to be _ I reimplement #unstyledTextFrom: so that TextActions are preserved in the unstyled text ! SHTextStylerST80 class instanceVariableNames: 'styleTable textAttributesByPixelHeight'! Item was added: + ----- Method: SHTextStylerST80 class>>syntaxHighlighting (in category 'preferences') ----- + syntaxHighlighting + + ^SyntaxHighlighting ifNil: [true]! Item was added: + ----- Method: SHTextStylerST80 class>>syntaxHighlighting: (in category 'preferences') ----- + syntaxHighlighting: aBoolean + SyntaxHighlighting := aBoolean.! From commits at source.squeak.org Sat Jan 9 19:56:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 9 19:56:31 2016 Subject: [squeak-dev] The Inbox: ToolBuilder-Morphic-kfr.155.mcz Message-ID: A new version of ToolBuilder-Morphic was added to project The Inbox: http://source.squeak.org/inbox/ToolBuilder-Morphic-kfr.155.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-kfr.155 Author: kfr Time: 6 January 2016, 8:56:21.394914 pm UUID: ee2e96ee-e6c0-4b84-b608-a206f08f50f3 Ancestors: ToolBuilder-Morphic-cmm.154 Turn syntax highlighting on or off according to preference =============== Diff against ToolBuilder-Morphic-cmm.154 =============== Item was changed: ----- Method: PluggableTextMorphPlus>>okToStyle (in category 'testing') ----- okToStyle + ^ styler - ^ styler ifNil:[false] + ifNotNil: [:s | s class syntaxHighlighting + ifTrue:[model aboutToStyle: s] + ifFalse:[false]]! - ifNotNil: [:s | model aboutToStyle: s]! From leves at caesar.elte.hu Sat Jan 9 20:43:21 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sat Jan 9 20:43:24 2016 Subject: [squeak-dev] The Inbox: ShoutCore-kfr.55.mcz In-Reply-To: References: Message-ID: There's already such preference, which does exactly the same thing. It's called #syntaxHighlightingAsYouType. It looks like its senders have been removed from the image for some reason. Levente On Sat, 9 Jan 2016, commits@source.squeak.org wrote: > A new version of ShoutCore was added to project The Inbox: > http://source.squeak.org/inbox/ShoutCore-kfr.55.mcz > > ==================== Summary ==================== > > Name: ShoutCore-kfr.55 > Author: kfr > Time: 6 January 2016, 8:49:46.186914 pm > UUID: bd33aa70-60b2-48ee-adee-31db9e5d3ab7 > Ancestors: ShoutCore-ul.54 > > Add preference to turn syntax highlighting on or off > > =============== Diff against ShoutCore-ul.54 =============== > > Item was changed: > SHTextStyler subclass: #SHTextStylerST80 > instanceVariableNames: 'classOrMetaClass workspace font parser formatAssignments environment sourceMap processedSourceMap pixelHeight attributesByPixelHeight parseAMethod' > + classVariableNames: 'SubduedSyntaxHighlights SyntaxHighlighting SyntaxHighlightingAsYouType SyntaxHighlightingAsYouTypeAnsiAssignment SyntaxHighlightingAsYouTypeLeftArrowAssignment' > - classVariableNames: 'SubduedSyntaxHighlights SyntaxHighlightingAsYouType SyntaxHighlightingAsYouTypeAnsiAssignment SyntaxHighlightingAsYouTypeLeftArrowAssignment' > poolDictionaries: '' > category: 'ShoutCore-Styling'! > SHTextStylerST80 class > instanceVariableNames: 'styleTable textAttributesByPixelHeight'! > > !SHTextStylerST80 commentStamp: 'tween 8/27/2004 10:55' prior: 0! > I style Smalltalk methods and expressions. > > My 'styleTable' class instance var holds an array ofArrays which control how each token is styled/coloured. See my defaultStyleTable class method for its structure. > My styleTable can be changed by either modifying the defaultStyleTable class method and then executing SHTextStylerST80 initialize ; or by giving me a new styleTable through my #styleTable: class method. > > My 'textAttributesByPixelSize' class instance var contains a dictionary of dictionaries. > The key is a pixelSize and the value a Dictionary from token type Symbol to TextAttribute array. > It is created/maintained automatically. > > I also install these 3 preferences when my class initialize method is executed.... > #syntaxHighlightingAsYouType - controls whether methods are styled in browsers > #syntaxHighlightingAsYouTypeAnsiAssignment - controls whether assignments are formatted to be := > #syntaxHighlightingAsYouTypeLeftArrowAssignment - controls whether assignments are formatted to be _ > > I reimplement #unstyledTextFrom: so that TextActions are preserved in the unstyled text > > > > > > > ! > SHTextStylerST80 class > instanceVariableNames: 'styleTable textAttributesByPixelHeight'! > > Item was added: > + ----- Method: SHTextStylerST80 class>>syntaxHighlighting (in category 'preferences') ----- > + syntaxHighlighting > + + category: 'browsing' > + description: 'Enable, or disable, Shout - Syntax Highlighting. When enabled, code in Browsers and Workspaces is styled to reveal its syntactic structure.' > + type: #Boolean> > + ^SyntaxHighlighting ifNil: [true]! > > Item was added: > + ----- Method: SHTextStylerST80 class>>syntaxHighlighting: (in category 'preferences') ----- > + syntaxHighlighting: aBoolean > + SyntaxHighlighting := aBoolean.! > > > From karlramberg at gmail.com Sat Jan 9 22:26:26 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sat Jan 9 22:26:29 2016 Subject: [squeak-dev] The Inbox: ShoutCore-kfr.55.mcz In-Reply-To: References: Message-ID: Ok, I thought syntaxHighlightingAsYouType was more of a dynamic preference that redid the syntax while typing. Anyway, there seem to be a old method that survived copying over to PluggableTextMorphPlus ----- Method: PluggableShoutMorph>>okToStyle (in category 'styler') ----- okToStyle styler ifNil:[^false]. Preferences syntaxHighlightingAsYouType ifFalse: [^false]. (model respondsTo: #shoutAboutToStyle: ) ifFalse:[^true]. ^model shoutAboutToStyle: self! Best, Karl On Sat, Jan 9, 2016 at 9:43 PM, Levente Uzonyi wrote: > There's already such preference, which does exactly the same thing. It's > called #syntaxHighlightingAsYouType. > It looks like its senders have been removed from the image for some reason. > > Levente > > > On Sat, 9 Jan 2016, commits@source.squeak.org wrote: > > A new version of ShoutCore was added to project The Inbox: >> http://source.squeak.org/inbox/ShoutCore-kfr.55.mcz >> >> ==================== Summary ==================== >> >> Name: ShoutCore-kfr.55 >> Author: kfr >> Time: 6 January 2016, 8:49:46.186914 pm >> UUID: bd33aa70-60b2-48ee-adee-31db9e5d3ab7 >> Ancestors: ShoutCore-ul.54 >> >> Add preference to turn syntax highlighting on or off >> >> =============== Diff against ShoutCore-ul.54 =============== >> >> Item was changed: >> SHTextStyler subclass: #SHTextStylerST80 >> instanceVariableNames: 'classOrMetaClass workspace font parser >> formatAssignments environment sourceMap processedSourceMap pixelHeight >> attributesByPixelHeight parseAMethod' >> + classVariableNames: 'SubduedSyntaxHighlights SyntaxHighlighting >> SyntaxHighlightingAsYouType SyntaxHighlightingAsYouTypeAnsiAssignment >> SyntaxHighlightingAsYouTypeLeftArrowAssignment' >> - classVariableNames: 'SubduedSyntaxHighlights >> SyntaxHighlightingAsYouType SyntaxHighlightingAsYouTypeAnsiAssignment >> SyntaxHighlightingAsYouTypeLeftArrowAssignment' >> poolDictionaries: '' >> category: 'ShoutCore-Styling'! >> SHTextStylerST80 class >> instanceVariableNames: 'styleTable textAttributesByPixelHeight'! >> >> !SHTextStylerST80 commentStamp: 'tween 8/27/2004 10:55' prior: 0! >> I style Smalltalk methods and expressions. >> >> My 'styleTable' class instance var holds an array ofArrays which control >> how each token is styled/coloured. See my defaultStyleTable class method >> for its structure. >> My styleTable can be changed by either modifying the defaultStyleTable >> class method and then executing SHTextStylerST80 initialize ; or by giving >> me a new styleTable through my #styleTable: class method. >> >> My 'textAttributesByPixelSize' class instance var contains a dictionary >> of dictionaries. >> The key is a pixelSize and the value a Dictionary from token type >> Symbol to TextAttribute array. >> It is created/maintained automatically. >> >> I also install these 3 preferences when my class initialize method is >> executed.... >> #syntaxHighlightingAsYouType - controls whether methods are >> styled in browsers >> #syntaxHighlightingAsYouTypeAnsiAssignment - controls whether >> assignments are formatted to be := >> #syntaxHighlightingAsYouTypeLeftArrowAssignment - controls >> whether assignments are formatted to be _ >> >> I reimplement #unstyledTextFrom: so that TextActions are preserved in >> the unstyled text >> >> >> >> >> >> >> ! >> SHTextStylerST80 class >> instanceVariableNames: 'styleTable textAttributesByPixelHeight'! >> >> Item was added: >> + ----- Method: SHTextStylerST80 class>>syntaxHighlighting (in category >> 'preferences') ----- >> + syntaxHighlighting >> + > + category: 'browsing' >> + description: 'Enable, or disable, Shout - Syntax >> Highlighting. When enabled, code in Browsers and Workspaces is styled to >> reveal its syntactic structure.' >> + type: #Boolean> >> + ^SyntaxHighlighting ifNil: [true]! >> >> Item was added: >> + ----- Method: SHTextStylerST80 class>>syntaxHighlighting: (in category >> 'preferences') ----- >> + syntaxHighlighting: aBoolean >> + SyntaxHighlighting := aBoolean.! >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160109/278abb91/attachment.htm From commits at source.squeak.org Sat Jan 9 22:38:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 9 22:38:43 2016 Subject: [squeak-dev] The Inbox: ToolBuilder-Morphic-kfr.155.mcz Message-ID: A new version of ToolBuilder-Morphic was added to project The Inbox: http://source.squeak.org/inbox/ToolBuilder-Morphic-kfr.155.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-kfr.155 Author: kfr Time: 6 January 2016, 11:38:05.814914 pm UUID: 43f3809b-ca19-4e70-a321-702dc2e0762a Ancestors: ToolBuilder-Morphic-cmm.154 Restore use of preference syntaxHighlightingAsYouType =============== Diff against ToolBuilder-Morphic-cmm.154 =============== Item was changed: ----- Method: PluggableTextMorphPlus>>okToStyle (in category 'testing') ----- okToStyle + ^ styler - ^ styler ifNil:[false] + ifNotNil: [:s | s class syntaxHighlightingAsYouType + ifTrue:[model aboutToStyle: s] + ifFalse:[false]]! - ifNotNil: [:s | model aboutToStyle: s]! From commits at source.squeak.org Sat Jan 9 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 9 22:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160109225502.12744.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-January/009243.html Name: Monticello-eem.625 Ancestors: Monticello-mt.624 Make browse versions go through ToolSet hence, avoiding having to hunt throguh the current change set when finding versions of deleted methods. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009244.html Name: Graphics-eem.320 Ancestors: Graphics-tpr.319 categorize two uncategorized methods ============================================= From nicolaihess at gmail.com Sun Jan 10 11:16:32 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Sun Jan 10 11:16:34 2016 Subject: [squeak-dev] valid pragma syntax Message-ID: pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" is nil is this valid pragma syntax: our (pharo) parser can not parse this (does not recognizes the "selector parts" (apicall:module:) right) Any recommendations how to fix this - fix RBParser or - change this pragma, for example, like this nicolai -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160110/c2a1d542/attachment.htm From Marcel.Taeumel at hpi.de Sun Jan 10 11:36:17 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Jan 10 11:57:17 2016 Subject: [squeak-dev] Re: valid pragma syntax In-Reply-To: References: Message-ID: <1452425777169-4870374.post@n4.nabble.com> Hi Nicolai, I thought that pragmas are pretty much like message selectors? Arguments can be literals only. At least, this is my (mental) model of pragmas. :-) I like it. It is simple. Best, Marcel -- View this message in context: http://forum.world.st/valid-pragma-syntax-tp4870371p4870374.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Sun Jan 10 12:14:04 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Jan 10 12:14:08 2016 Subject: [squeak-dev] valid pragma syntax In-Reply-To: References: Message-ID: On Sun, 10 Jan 2016, Nicolai Hess wrote: > pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" is nil > > > is this valid pragma syntax: > > ??? This is not a pragma, but the special syntax used by FFI. AFAIK it predates pragmas. > > our (pharo) parser can not parse this (does not recognizes the > "selector parts" (apicall:module:) right) > > Any recommendations how to fix this > - fix RBParser or > - change this pragma, for example, like this > ? There's nothing to fix here. Either you change your parser, compiler and decompiler to support this syntax, but knowing how things work in Pharo, this is not an option, or change the methods with these callouts, introducing another incompatibility between Pharo and the rest, to use pragmas and create a custom parser, compiler and decompiler to be able to compile FFI callouts into methods when such pragmas are present. Levente > > > nicolai > > From nicolaihess at gmail.com Sun Jan 10 12:44:06 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Sun Jan 10 12:44:08 2016 Subject: [squeak-dev] valid pragma syntax In-Reply-To: References: Message-ID: 2016-01-10 13:14 GMT+01:00 Levente Uzonyi : > > On Sun, 10 Jan 2016, Nicolai Hess wrote: > > pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" is >> nil >> >> >> is this valid pragma syntax: >> >> >> > > This is not a pragma, but the special syntax used by FFI. AFAIK it > predates pragmas. > Ah, ok. > > >> our (pharo) parser can not parse this (does not recognizes the >> "selector parts" (apicall:module:) right) >> >> Any recommendations how to fix this >> - fix RBParser or >> - change this pragma, for example, like this >> >> > > There's nothing to fix here. Either you change your parser, compiler and > decompiler to support this syntax, but knowing how things work in Pharo, > this is not an option Why is this not an option? > , or change the methods with these callouts, introducing another > incompatibility between Pharo and the rest, to use pragmas and create a > custom parser, compiler and decompiler to be able to compile FFI callouts > into methods when such pragmas are present. > As we now included this FFI-Examples, where this is used, I would like to find a way that works in both, pharo and squeak. @esteban is this already supported by "our" FFI and just not by the parser used for syntax highlighting or wasn't this package supposed to be in Pharo ? > > Levente > > >> >> nicolai >> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160110/f3a0060e/attachment.htm From leves at caesar.elte.hu Sun Jan 10 13:37:07 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Jan 10 13:37:11 2016 Subject: [squeak-dev] valid pragma syntax In-Reply-To: References: Message-ID: On Sun, 10 Jan 2016, Nicolai Hess wrote: > > > 2016-01-10 13:14 GMT+01:00 Levente Uzonyi : > > On Sun, 10 Jan 2016, Nicolai Hess wrote: > > pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" is nil > > > is this valid pragma syntax: > > ??? > > > This is not a pragma, but the special syntax used by FFI. AFAIK it predates pragmas. > > > Ah, ok. > ? > > > our (pharo) parser can not parse this (does not recognizes the > "selector parts" (apicall:module:) right) > > Any recommendations how to fix this > - fix RBParser or > - change this pragma, for example, like this > ? > > > There's nothing to fix here. Either you change your parser, compiler and decompiler to support this syntax, but knowing how things work in Pharo, this is not an option > > > Why is this not an option? It was a goal to get rid of this syntax[1]. Levente [1] https://lists.gforge.inria.fr/pipermail/pharo-project/2010-February/022534.html > > ? > , or change the methods with these callouts, introducing another incompatibility between Pharo and the rest, to use pragmas and create a custom parser, compiler and decompiler to be able to compile FFI callouts into methods when such pragmas are present. > > > As we now included this FFI-Examples, where this is used, I would like to find a way that works in both, pharo and squeak. > > @esteban > is this already supported by "our" FFI and just not by the parser used for syntax highlighting or wasn't this package supposed to be in Pharo ? > > ? > > Levente > > > > nicolai > > > > > > > From eliot.miranda at gmail.com Sun Jan 10 15:57:39 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Jan 10 15:57:44 2016 Subject: [squeak-dev] valid pragma syntax In-Reply-To: References: Message-ID: Hi Nicolai, On Sun, Jan 10, 2016 at 3:16 AM, Nicolai Hess wrote: > pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" is > nil > > > is this valid pragma syntax: > > > As others have said this is not a valid pragma. A valid pragma is a message expression (a message with no receiver) that has only literal arguments. There is one exception, to accept a variable name for the error code in a primitive invocation. And as Levente has said it is a goal of the new FFI to get rid of the old syntax you show above. And as Igor Stasenko discovered /any/ C signature can be written as a literal Array, providing we allow underscores in Symbols (which is a preference). So for example, the heapsort declaration from the standard C library: int heapsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *)) could be written as a pragma via e.g. in which case it is equal to which, while a massive hack, is pretty neat. The only difficulty in parsing the above s that void *, is #void #*, not #void #* #,. So for me, the natural pragma syntax for the new FFI should be a single keyword starting with ffi that includes the language with which to parse the pragma's argument, followed by a literal Array containing the signature (rather than e.g. a String). I'd also provide a special-purpose pretty-printer for literal arrays that would be used to pretty-print the above, e.g. when decompiling. This would easily allow extensions such as to guide a marshalling engine in providing automatic checks and conversions. [Slightly OT] Note that I'm already using this syntax in Alien callbacks because one thing it does is to normalize the signature, eliminating the significance of most whitespace (the #*, above being one example where it fails). So a Callback for heapsort above looks like voidstarvoidstarRetint: callbackContext sp: spAlien ^callbackContext wordResult: (block value: (Alien forPointer: (spAlien unsignedLongAt: 1)) value: (Alien forPointer: (spAlien unsignedLongAt: 5))) or voidstarvoidstarRetintARM32: callbackContext sp: spAlien ^callbackContext wordResult: (block value: (Alien forPointer: (spAlien registerAt: 1)) value: (Alien forPointer: (spAlien registerAt: 2))) Hmmm, if Callback had subclasses for each ABI then the above would become IA32Callback methods for signature voidstarvoidstarRetint: callbackContext sp: spAlien ^callbackContext wordResult: (block value: (Alien forPointer: (spAlien unsignedLongAt: 1)) value: (Alien forPointer: (spAlien unsignedLongAt: 5))) ARM32Callback methods for signatures voidstarvoidstarRetint: callbackContext sp: spAlien ^callbackContext wordResult: (block value: (Alien forPointer: (spAlien registerAt: 1)) value: (Alien forPointer: (spAlien registerAt: 2))) Much nicer. I shall make it so. our (pharo) parser can not parse this (does not recognizes the > "selector parts" (apicall:module:) right) > > Any recommendations how to fix this > - fix RBParser or > - change this pragma, for example, like this > > > > nicolai > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160110/7653cd67/attachment-0001.htm From commits at source.squeak.org Sun Jan 10 17:38:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 17:38:48 2016 Subject: [squeak-dev] The Inbox: Morphic-kfr.1064.mcz Message-ID: A new version of Morphic was added to project The Inbox: http://source.squeak.org/inbox/Morphic-kfr.1064.mcz ==================== Summary ==================== Name: Morphic-kfr.1064 Author: kfr Time: 6 January 2016, 6:38:01.020914 pm UUID: b190605b-c0ac-4b6d-8239-650c69aed317 Ancestors: Morphic-eem.1063 Add preference backgroundColor to SystemWindows. Add preference to a a few places that where hardcoded to color white. =============== Diff against Morphic-eem.1063 =============== Item was changed: ----- Method: PluggableListMorph>>indicateUnfiltered (in category 'filtering') ----- indicateUnfiltered + self color: SystemWindow backgroundColor! - self color: Color white! Item was changed: ----- Method: ScrollPane>>defaultColor (in category 'initialization') ----- defaultColor + ^ SystemWindow backgroundColor! - ^ Color white ! Item was changed: MorphicModel subclass: #SystemWindow instanceVariableNames: 'labelString stripes label closeBox collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame fullFrame isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes allowReframeHandles labelArea expandBox' + classVariableNames: 'BackgroundColor ClickOnLabelToEdit CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' - classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' poolDictionaries: '' category: 'Morphic-Windows'! !SystemWindow commentStamp: '' prior: 0! SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing. The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.! Item was added: + ----- Method: SystemWindow class>>backgroundColor (in category 'preferences') ----- + backgroundColor + + + ^ BackgroundColor ifNil: [Color white] + ! Item was added: + ----- Method: SystemWindow class>>backgroundColor: (in category 'preferences') ----- + backgroundColor: aColor + + BackgroundColor := aColor + ! From commits at source.squeak.org Sun Jan 10 17:40:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 17:40:45 2016 Subject: [squeak-dev] The Inbox: ToolBuilder-Morphic-kfr.156.mcz Message-ID: A new version of ToolBuilder-Morphic was added to project The Inbox: http://source.squeak.org/inbox/ToolBuilder-Morphic-kfr.156.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-kfr.156 Author: kfr Time: 6 January 2016, 6:40:29.066914 pm UUID: b27a281b-507f-4b2d-b00f-de1857c6e9b2 Ancestors: ToolBuilder-Morphic-kfr.155 Use SystemWindow backgroundColor instead of Color white =============== Diff against ToolBuilder-Morphic-kfr.155 =============== 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 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. + + widget color: SystemWindow backgroundColor. - borderColor: Color lightGray; - color: (aSpec color - ifNil: [Color white] - ifNotNil: [aSpec color]). - 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! Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableText: (in category 'widgets required') ----- buildPluggableText: aSpec | widget | widget := self textPaneClass new. aSpec stylerClass ifNotNil: [:c | widget styler: (c new view: widget)]. widget on: aSpec model text: aSpec getText accept: aSpec setText readSelection: aSpec selection menu: aSpec menu. aSpec font ifNotNil: [:f | widget font: f]. widget readOnly: aSpec readOnly. widget editTextSelector: aSpec editText. widget wantsFrameAdornments: aSpec indicateUnacceptedChanges. widget askBeforeDiscardingEdits: aSpec askBeforeDiscardingEdits. aSpec softLineWrap ifNotNil: [:b | widget wrapFlag: b]. widget isAutoFit ifTrue: [widget hideHScrollBarIndefinitely] ifFalse: [widget showHScrollBarOnlyWhenNeeded]. self register: widget id: aSpec name. widget getColorSelector: 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]. widget borderColor: Color lightGray. + widget color: SystemWindow backgroundColor. - widget color: Color white. ^widget! From commits at source.squeak.org Sun Jan 10 19:14:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 19:14:52 2016 Subject: [squeak-dev] The Inbox: PreferenceBrowser-kfr.60.mcz Message-ID: A new version of PreferenceBrowser was added to project The Inbox: http://source.squeak.org/inbox/PreferenceBrowser-kfr.60.mcz ==================== Summary ==================== Name: PreferenceBrowser-kfr.60 Author: kfr Time: 6 January 2016, 8:14:45.215914 pm UUID: 8f2ce27e-4786-4fcb-b372-c70b12a519b5 Ancestors: PreferenceBrowser-kfr.59 Hook up SystemWindow backgroundColor to PreferenceBrowser =============== Diff against PreferenceBrowser-kfr.59 =============== Item was changed: ----- Method: PreferenceBrowserMorph>>newCategoryList (in category 'submorphs - category list') ----- newCategoryList ^(PluggableListMorph on: self model list: #categoryList selected: #selectedCategoryIndex changeSelected: #selectedCategoryIndex:) + color: SystemWindow backgroundColor; - color: Color white; borderInset; hResizing: #spaceFill; vResizing: #spaceFill; layoutFrame: (LayoutFrame fractions: (0@0 corner: 0.25@1)); yourself.! Item was changed: ----- Method: PreferenceBrowserMorph>>newSearchTextField (in category 'submorphs - search panel') ----- newSearchTextField | ptm | ptm := PluggableTextMorphPlus on: self model text: #searchPatternNeverTriggered accept: #searchPattern:. ptm minimumHeight: 0; balloonText: 'Search preferences ...'; hideScrollBarsIndefinitely; layoutFrame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0@ (TextStyle default lineGrid * 2))); borderInset; + color: SystemWindow backgroundColor; - color: Color white; vResizing: #spaceFill; hResizing: #spaceFill; acceptOnCR: true; onKeyStrokeSend: #value to: [ ptm hasUnacceptedEdits ifTrue: [ ptm accept ] ]. ^ptm.! Item was changed: ----- Method: PreferenceBrowserMorph>>preferenceList (in category 'submorphs - preference list') ----- preferenceList ^preferenceList ifNil: [preferenceList := ScrollPane new + color: SystemWindow backgroundColor; - color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill; layoutFrame: (LayoutFrame fractions: (0.25@0 corner: 1@1)). preferenceList scroller on: #mouseEnter send: #value: to: [:event | event hand newKeyboardFocus: preferenceList scroller]; on: #keyStroke send: #keyPressed: to: self. preferenceList.]! From commits at source.squeak.org Sun Jan 10 21:00:29 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 21:00:29 2016 Subject: [squeak-dev] The Trunk: Collections-ul.677.mcz Message-ID: Levente Uzonyi uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-ul.677.mcz ==================== Summary ==================== Name: Collections-ul.677 Author: ul Time: 9 January 2016, 2:32:25.271894 pm UUID: 3973645f-83f8-4013-806f-a9c56673dec0 Ancestors: Collections-eem.676 Let #arrayType define the class of array in WeakSet. =============== Diff against Collections-eem.676 =============== Item was added: + ----- Method: WeakSet class>>arrayType (in category 'as yet unclassified') ----- + arrayType + + ^WeakArray! Item was changed: ----- Method: WeakSet>>growTo: (in category 'private') ----- growTo: anInteger "Grow the elements array and reinsert the old elements" | oldElements | oldElements := array. + array := self class arrayType new: anInteger withAll: flag. - array := WeakArray new: anInteger withAll: flag. self noCheckNoGrowFillFrom: oldElements! Item was changed: ----- Method: WeakSet>>initialize: (in category 'private') ----- initialize: n "Initialize array to an array size of n" + super initialize: n. flag := Object new. + array atAllPut: flag! - array := WeakArray new: n. - array atAllPut: flag. - tally := 0! From commits at source.squeak.org Sun Jan 10 21:01:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 21:01:39 2016 Subject: [squeak-dev] The Trunk: Network-ul.171.mcz Message-ID: Levente Uzonyi uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-ul.171.mcz ==================== Summary ==================== Name: Network-ul.171 Author: ul Time: 9 January 2016, 2:49:49.074506 pm UUID: 12c693f0-700a-430c-94ff-5fe9af39c9b5 Ancestors: Network-eem.170 Made the conversion logic explicit in Socket >> #setOption:value:. =============== Diff against Network-eem.170 =============== Item was changed: ----- Method: Socket>>setOption:value: (in category 'other') ----- setOption: aName value: aValue | value | "setup options on this socket, see Unix man pages for values for sockets, IP, TCP, UDP. IE SO_KEEPALIVE returns an array, element one is the error number element two is the resulting of the negotiated value. + See #getOption: for list of keys" - See getOption for list of keys" + self isValid ifFalse: [ + InvalidSocketStatusException signal: 'Socket status must valid before setting an option' ]. + value := aValue + caseOf: { + [ true ] -> [ '1' ]. + [ false ] -> [ '0' ] } + otherwise: [ aValue asString ]. - (socketHandle == nil or: [self isValid not]) - ifTrue: [InvalidSocketStatusException signal: 'Socket status must valid before setting an option']. - value := aValue asString. - aValue == true ifTrue: [value := '1']. - aValue == false ifTrue: [value := '0']. ^ self primSocket: socketHandle setOption: aName value: value! From commits at source.squeak.org Sun Jan 10 21:02:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 21:03:01 2016 Subject: [squeak-dev] The Trunk: System-ul.784.mcz Message-ID: Levente Uzonyi uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-ul.784.mcz ==================== Summary ==================== Name: System-ul.784 Author: ul Time: 9 January 2016, 11:57:40.562643 am UUID: 69182e71-9ad2-4bed-ac33-f0c56794b197 Ancestors: System-eem.783 Let PseudoClass behave more like a class, especially when #realClass exists in the image. =============== Diff against System-eem.783 =============== Item was changed: ----- Method: PseudoClass>>allInstVarNames (in category 'accessing') ----- allInstVarNames + + self realClass ifNotNil: [ :realClass | ^realClass allInstVarNames ]. ^#()! Item was changed: ----- Method: PseudoClass>>compilerClass (in category 'accessing') ----- compilerClass + + ^self realClass + ifNil: [ Compiler ] + ifNotNil: [ :realClass | realClass compilerClass ]! - ^ (Smalltalk at: name ifAbsent: [^ Compiler]) compilerClass! Item was changed: ----- Method: PseudoClass>>instVarNames (in category 'accessing') ----- instVarNames + + self realClass ifNotNil: [ :realClass | ^realClass instVarNames ]. + ^#()! - ^ #()! Item was changed: ----- Method: PseudoClass>>parserClass (in category 'private') ----- parserClass + ^self compilerClass parserClass! - ^ Compiler parserClass! Item was changed: ----- Method: PseudoClass>>realClass (in category 'accessing') ----- realClass + + ^Smalltalk globals classNamed: self name! - ^Smalltalk at: self name asSymbol ifAbsent: []! Item was added: + ----- Method: PseudoClass>>withAllSubAndSuperclassesDo: (in category 'enumerating') ----- + withAllSubAndSuperclassesDo: aBlock + + self realClass ifNotNil: [ :realClass | ^realClass withAllSubAndSuperclassesDo: aBlock ]. + ^aBlock value: self! Item was added: + ----- Method: PseudoClass>>withAllSuperclassesDo: (in category 'enumerating') ----- + withAllSuperclassesDo: aBlock + + self realClass ifNotNil: [ :realClass | ^realClass withAllSuperclassesDo: aBlock ]. + ^aBlock value: self! From commits at source.squeak.org Sun Jan 10 21:03:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 21:03:39 2016 Subject: [squeak-dev] The Trunk: Tools-ul.661.mcz Message-ID: Levente Uzonyi uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-ul.661.mcz ==================== Summary ==================== Name: Tools-ul.661 Author: ul Time: 9 January 2016, 10:18:44.095613 pm UUID: bdac8e9b-8841-40ce-9d6a-1be083bcaca7 Ancestors: Tools-eem.660 Added shout support to VersionsBrowser. =============== Diff against Tools-eem.660 =============== Item was added: + ----- Method: ClassCommentVersionsBrowser>>aboutToStyle: (in category 'contents') ----- + aboutToStyle: aStyler + + ^false! Item was added: + ----- Method: VersionsBrowser>>aboutToStyle: (in category 'contents') ----- + aboutToStyle: aStyler + + "Style in source view, or when there's nothing to diff with." + (self isModeStyleable or: [ listIndex = list size ]) ifFalse: [ ^false ]. + aStyler + classOrMetaClass: classOfMethod; + parseAMethod: true. + ^true + ! From commits at source.squeak.org Sun Jan 10 21:03:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 21:03:53 2016 Subject: [squeak-dev] The Trunk: Tools-ul.662.mcz Message-ID: Levente Uzonyi uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-ul.662.mcz ==================== Summary ==================== Name: Tools-ul.662 Author: ul Time: 9 January 2016, 5:14:35.787432 pm UUID: 3972f226-5c3e-4479-bbac-cea2f7e30e3b Ancestors: Tools-ul.661 Improved method to method category drops in Browser: moving methods from classes related by inheritance or by being meta-non-meta pairs won't have to be confirmed any more. =============== Diff against Tools-ul.661 =============== Item was changed: ----- Method: Browser>>dropOnMessageCategories:at: (in category 'drag and drop') ----- dropOnMessageCategories: method at: index + | sourceClass destinationClass category copy | - | dstClass category copy | copy := Sensor shiftPressed. (method isKindOf: CompiledMethod) ifFalse:[^self inform: 'Can only drop methods']. + sourceClass := method methodClass. + destinationClass := self selectedClassOrMetaClass. + sourceClass == destinationClass ifTrue:[ - dstClass := self selectedClassOrMetaClass. - (dstClass == method methodClass) ifTrue:[ category := self messageCategoryList at: index. category = ClassOrganizer allCategory ifTrue: [^false]. + destinationClass organization classify: method selector under: category suppressIfDefault: false logged: true. + ^true ]. + (copy not and: [ + (destinationClass inheritsFrom: sourceClass) + or: [ (sourceClass inheritsFrom: destinationClass) + or: [ sourceClass theNonMetaClass == destinationClass theNonMetaClass ] ] ]) + ifFalse: [ + (self confirm: ( + 'Classes "{1}" and "{2}" are unrelated.{3}Are you sure you want to move this method?' + format: { sourceClass. destinationClass. Character cr })) + ifFalse: [ ^false ] ]. + destinationClass - dstClass organization classify: method selector under: category suppressIfDefault: false logged: true. - ^true]. - copy ifFalse: [ - (self confirm: ( - 'Classes {1} and {2} are unrelated.{3}Are you sure you want to move this method?' - format: { method methodClass. dstClass. Character cr })) - ifFalse: [ ^false ] ]. - dstClass compile: method getSource classified: (self messageCategoryList at: index) withStamp: method timeStamp notifying: nil. copy ifFalse: [ + sourceClass removeSelector: method selector ]. - method methodClass removeSelector: method selector ]. ^true! From commits at source.squeak.org Sun Jan 10 21:27:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 21:27:48 2016 Subject: [squeak-dev] The Trunk: Kernel-ul.977.mcz Message-ID: Levente Uzonyi uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-ul.977.mcz ==================== Summary ==================== Name: Kernel-ul.977 Author: ul Time: 10 January 2016, 10:25:16.755989 pm UUID: aaa18bc1-b66d-47b3-b755-f87c223fa959 Ancestors: Kernel-eem.976 DateAndTime changes and fixes: - #now returns an object with the correct date. (DaysSinceEpoch was only updated in #startUp:, so after a day it became inaccurate.) - #now returns increasing values, as it did before. - Removed the unused DaysSinceEpoch class variable. - Removed #startUp:, because it had nothing else left to do. - DateAndTime is removed from the StartUpList after load. - #julianDayNumber:offset: uses the direct setter method, which results in ~55x speedup. =============== Diff against Kernel-eem.976 =============== Item was changed: Magnitude subclass: #DateAndTime instanceVariableNames: 'seconds offset jdn nanos' + classVariableNames: 'ClockProvider LastClockValue LocalTimeZone NanoOffset' - classVariableNames: 'ClockProvider DaysSinceEpoch LocalTimeZone' poolDictionaries: 'ChronologyConstants' category: 'Kernel-Chronology'! !DateAndTime commentStamp: 'brp 5/13/2003 08:07' prior: 0! I represent a point in UTC time as defined by ISO 8601. I have zero duration. My implementation uses three SmallIntegers and a Duration: jdn - julian day number. seconds - number of seconds since midnight. nanos - the number of nanoseconds since the second. offset - duration from UTC. The nanosecond attribute is almost always zero but it defined for full ISO compliance and is suitable for timestamping. ! Item was changed: ----- Method: DateAndTime class>>julianDayNumber:offset: (in category 'squeak protocol') ----- julianDayNumber: anInteger offset: aDuration + + ^self basicNew + setJdn: anInteger + seconds: 0 + nano: 0 + offset: aDuration! - ^ self basicNew - ticks: anInteger days ticks - offset: aDuration ; - yourself! Item was changed: ----- Method: DateAndTime class>>nowWithOffset: (in category 'squeak protocol') ----- + nowWithOffset: aDuration + + | clockValue nanos | + clockValue := Time utcMicrosecondClock. + "Ensure that consecutive sends of this method return increasing values, by adding small values to the nanosecond part of the created object. The next few lines are assumed to be executed atomically - having no suspension points." + ((LastClockValue ifNil: [ 0 ]) digitCompare: clockValue) = 0 + ifTrue: [ NanoOffset := NanoOffset + 1 ] + ifFalse: [ NanoOffset := 0 ]. + LastClockValue := clockValue. + nanos := clockValue \\ 1000000 * 1000 + NanoOffset. + clockValue := clockValue // 1000000. - nowWithOffset: aDuration - | usecs | - usecs := Time utcMicrosecondClock. ^self basicNew + setJdn: clockValue // SecondsInDay + SqueakEpoch + seconds: clockValue \\ SecondsInDay + nano: nanos - setJdn: DaysSinceEpoch - seconds: usecs // 1000000 \\ SecondsInDay - nano: usecs \\ 1000000 * 1000 offset: aDuration! Item was removed: - ----- Method: DateAndTime class>>startUp: (in category 'initialize-release') ----- - startUp: resuming - | durationSinceEpoch | - resuming ifFalse: [^self]. - durationSinceEpoch := Duration - days: SqueakEpoch - hours: 0 - minutes: 0 - seconds: self clock totalSeconds. - DaysSinceEpoch := durationSinceEpoch days! Item was added: + (PackageInfo named: 'Kernel') postscript: 'Smalltalk removeFromStartUpList: DateAndTime.'! From commits at source.squeak.org Sun Jan 10 21:38:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 21:38:08 2016 Subject: [squeak-dev] The Trunk: Tools-ul.663.mcz Message-ID: Levente Uzonyi uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-ul.663.mcz ==================== Summary ==================== Name: Tools-ul.663 Author: ul Time: 10 January 2016, 10:37:16.787674 pm UUID: c5ee964a-880a-48a7-a20f-a3506f53e1d7 Ancestors: Tools-ul.662 Fixed the copy-case in Browser >> #dropOnMessageCategories:at:. =============== Diff against Tools-ul.662 =============== Item was changed: ----- Method: Browser>>dropOnMessageCategories:at: (in category 'drag and drop') ----- dropOnMessageCategories: method at: index | sourceClass destinationClass category copy | copy := Sensor shiftPressed. (method isKindOf: CompiledMethod) ifFalse:[^self inform: 'Can only drop methods']. sourceClass := method methodClass. destinationClass := self selectedClassOrMetaClass. sourceClass == destinationClass ifTrue:[ category := self messageCategoryList at: index. category = ClassOrganizer allCategory ifTrue: [^false]. destinationClass organization classify: method selector under: category suppressIfDefault: false logged: true. ^true ]. + (copy + or: [ (destinationClass inheritsFrom: sourceClass) + or: [ (sourceClass inheritsFrom: destinationClass) + or: [ sourceClass theNonMetaClass == destinationClass theNonMetaClass ] ] ]) - (copy not and: [ - (destinationClass inheritsFrom: sourceClass) - or: [ (sourceClass inheritsFrom: destinationClass) - or: [ sourceClass theNonMetaClass == destinationClass theNonMetaClass ] ] ]) ifFalse: [ (self confirm: ( 'Classes "{1}" and "{2}" are unrelated.{3}Are you sure you want to move this method?' format: { sourceClass. destinationClass. Character cr })) ifFalse: [ ^false ] ]. destinationClass compile: method getSource classified: (self messageCategoryList at: index) withStamp: method timeStamp notifying: nil. copy ifFalse: [ sourceClass removeSelector: method selector ]. ^true! From commits at source.squeak.org Sun Jan 10 21:54:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 21:54:44 2016 Subject: [squeak-dev] The Trunk: ToolsTests-ul.75.mcz Message-ID: Levente Uzonyi uploaded a new version of ToolsTests to project The Trunk: http://source.squeak.org/trunk/ToolsTests-ul.75.mcz ==================== Summary ==================== Name: ToolsTests-ul.75 Author: ul Time: 10 January 2016, 10:54:30.964862 pm UUID: e23e5db2-a7bc-420b-95d9-0705c0108b15 Ancestors: ToolsTests-ul.74 Updated and simplified BrowserTest's #testFlattenHierarchyTreeOnIndent and #testFlattenHierarchyTreeOnIndentBy. =============== Diff against ToolsTests-ul.74 =============== Item was changed: ----- Method: BrowserTest>>testFlattenHierarchyTreeOnIndent (in category 'as yet unclassified') ----- testFlattenHierarchyTreeOnIndent | flatten | + flatten := [:coll | (browser - flatten := [:coll | browser flattenHierarchyTree: (browser createHierarchyTreeOf: coll) on: OrderedCollection new + indent: '') asArray ]. - indent: '']. "Empty collection." self assert: (flatten value: #()) isEmpty. "Single class." + self assert: #('Browser') equals: (flatten value: {Browser}). - self assert: (OrderedCollection with: 'Browser') = (flatten value: {Browser}). "Single class + subclass." + self assert: #('Browser' ' HierarchyBrowser') equals: (flatten value: {Browser. HierarchyBrowser}). - self assert: (OrderedCollection with: 'Browser' with: ' HierarchyBrowser') = (flatten value: {Browser. HierarchyBrowser}). "Single class + 2 subclasses" + self assert: #('Browser' ' HierarchyBrowser' ' FileContentsBrowser') equals: (flatten value: { Browser. HierarchyBrowser. FileContentsBrowser. }). - self assert: (OrderedCollection with: 'Browser' with: ' HierarchyBrowser' with: ' FileContentsBrowser') = (flatten value: { Browser. HierarchyBrowser. FileContentsBrowser. }). "Superclass, class, subclass" + self assert: #('CodeHolder' ' Browser' ' HierarchyBrowser') equals: (flatten value: { CodeHolder. Browser. HierarchyBrowser. }). - self assert: (OrderedCollection with: 'CodeHolder' with: ' Browser' with: ' HierarchyBrowser') = (flatten value: { CodeHolder. Browser. HierarchyBrowser. }). "Two 'unrelated' classes" + self assert: #('Browser' 'SmallInteger') equals: (flatten value: { Browser. SmallInteger }). - self assert: (OrderedCollection with: 'Browser' with: 'SmallInteger') = (flatten value: { Browser. SmallInteger }). "Two 'unrelated' classes and a common ancestor" + self assert: #('Browser' 'SmallInteger' 'ProtoObject') equals: (flatten value: { Browser. SmallInteger. ProtoObject }).! - self assert: (OrderedCollection with: 'Browser' with: 'SmallInteger' with: 'ProtoObject') = (flatten value: { Browser. SmallInteger. ProtoObject }).! Item was changed: ----- Method: BrowserTest>>testFlattenHierarchyTreeOnIndentBy (in category 'as yet unclassified') ----- testFlattenHierarchyTreeOnIndentBy | flatten | + flatten := [:coll | (browser - flatten := [:coll | browser flattenHierarchyTree: (browser createHierarchyTreeOf: coll) on: OrderedCollection new + indent: '' + by: 'x') asArray ]. - indent: '' by: 'x']. "Empty collection." self assert: (flatten value: #()) isEmpty. "Single class." + self assert: #('Browser') equals: (flatten value: {Browser}). - self assert: (OrderedCollection with: 'Browser') = (flatten value: {Browser}). "Single class + subclass." + self assert: #('Browser' 'xHierarchyBrowser') equals: (flatten value: {Browser. HierarchyBrowser}). - self assert: (OrderedCollection with: 'Browser' with: 'xHierarchyBrowser') = (flatten value: {Browser. HierarchyBrowser}). "Single class + 2 subclasses" + self assert: #('Browser' 'xHierarchyBrowser' 'xFileContentsBrowser') equals: (flatten value: { Browser. HierarchyBrowser. FileContentsBrowser. }). - self assert: (OrderedCollection with: 'Browser' with: 'xHierarchyBrowser' with: 'xFileContentsBrowser') = (flatten value: { Browser. HierarchyBrowser. FileContentsBrowser. }). "Superclass, class, subclass" + self assert: #('CodeHolder' 'xBrowser' 'xxHierarchyBrowser') equals: (flatten value: { CodeHolder. Browser. HierarchyBrowser. }). - self assert: (OrderedCollection with: 'CodeHolder' with: 'xBrowser' with: 'xxHierarchyBrowser') = (flatten value: { CodeHolder. Browser. HierarchyBrowser. }). "Two 'unrelated' classes" + self assert: #('Browser' 'SmallInteger') equals: (flatten value: { Browser. SmallInteger }). - self assert: (OrderedCollection with: 'Browser' with: 'SmallInteger') = (flatten value: { Browser. SmallInteger }). "Two 'unrelated' classes and a common ancestor" + self assert: #('Browser' 'SmallInteger' 'ProtoObject') equals: (flatten value: { Browser. SmallInteger. ProtoObject }).! - self assert: (OrderedCollection with: 'Browser' with: 'SmallInteger' with: 'ProtoObject') = (flatten value: { Browser. SmallInteger. ProtoObject }).! From commits at source.squeak.org Sun Jan 10 22:00:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 22:00:12 2016 Subject: [squeak-dev] The Inbox: Kernel-ul.978.mcz Message-ID: Levente Uzonyi uploaded a new version of Kernel to project The Inbox: http://source.squeak.org/inbox/Kernel-ul.978.mcz ==================== Summary ==================== Name: Kernel-ul.978 Author: ul Time: 10 January 2016, 10:59:22.308768 pm UUID: 7bfcfeab-67b7-498a-80ef-f1f4db04e8a5 Ancestors: Kernel-ul.977 Cleaned up #flushCache usage as suggested by Eliot. =============== Diff against Kernel-ul.977 =============== 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. compiledMethod selector: selector. + "Flush the method cache entries for this selector." - "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. + "Flush the method cache entries for this selector." - "Now flush Squeak's method cache, either by selector or by method" - oldMethod flushCache. selector flushCache. ^oldMethod! Item was changed: ----- Method: MethodDictionary>>at:put: (in category 'accessing') ----- at: key put: value "Set the value at key to be value." | index | index := self scanFor: key. + (self basicAt: index) ifNotNil: [ + ^array at: index put: value ]. + ^self + basicAt: index put: key; + atNewIndex: index put: value! - (self basicAt: index) - ifNil: [ - self - basicAt: index put: key; - atNewIndex: index put: value ] - ifNotNil: [ - (array at: index) flushCache. - array at: index put: value ]. - ^value! From commits at source.squeak.org Sun Jan 10 22:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160110225501.4046.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-January/009245.html Name: Collections-ul.677 Ancestors: Collections-eem.676 Let #arrayType define the class of array in WeakSet. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009246.html Name: Network-ul.171 Ancestors: Network-eem.170 Made the conversion logic explicit in Socket >> #setOption:value:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009247.html Name: System-ul.784 Ancestors: System-eem.783 Let PseudoClass behave more like a class, especially when #realClass exists in the image. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009248.html Name: Tools-ul.661 Ancestors: Tools-eem.660 Added shout support to VersionsBrowser. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009249.html Name: Tools-ul.662 Ancestors: Tools-ul.661 Improved method to method category drops in Browser: moving methods from classes related by inheritance or by being meta-non-meta pairs won't have to be confirmed any more. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009250.html Name: Kernel-ul.977 Ancestors: Kernel-eem.976 DateAndTime changes and fixes: - #now returns an object with the correct date. (DaysSinceEpoch was only updated in #startUp:, so after a day it became inaccurate.) - #now returns increasing values, as it did before. - Removed the unused DaysSinceEpoch class variable. - Removed #startUp:, because it had nothing else left to do. - DateAndTime is removed from the StartUpList after load. - #julianDayNumber:offset: uses the direct setter method, which results in ~55x speedup. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009251.html Name: Tools-ul.663 Ancestors: Tools-ul.662 Fixed the copy-case in Browser >> #dropOnMessageCategories:at:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009252.html Name: ToolsTests-ul.75 Ancestors: ToolsTests-ul.74 Updated and simplified BrowserTest's #testFlattenHierarchyTreeOnIndent and #testFlattenHierarchyTreeOnIndentBy. ============================================= From commits at source.squeak.org Sun Jan 10 22:59:35 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 22:59:37 2016 Subject: [squeak-dev] The Inbox: GraphicsTests-bp.39.mcz Message-ID: Bernhard Pieber uploaded a new version of GraphicsTests to project The Inbox: http://source.squeak.org/inbox/GraphicsTests-bp.39.mcz ==================== Summary ==================== Name: GraphicsTests-bp.39 Author: bp Time: 10 January 2016, 11:30:43.61 pm UUID: b1b53ddc-8ad0-4fb4-8cd8-9a5139dc66ef Ancestors: GraphicsTests-fbs.38 tests for drag to edges resize methods =============== Diff against GraphicsTests-fbs.38 =============== Item was added: + ----- Method: RectangleTest>>testBottomHalf (in category 'testing') ----- + testBottomHalf + | r | + r := 10@20 corner: 30@50. + self assert: (10@35 corner: 30@50) equals: r bottomHalf. + self assert: (10@42 corner: 30@50) equals: r bottomHalf bottomHalf! Item was added: + ----- Method: RectangleTest>>testBottomLeftQuadrant (in category 'testing') ----- + testBottomLeftQuadrant + | r | + r := 10@20 corner: 30@50. + self assert: (10@35 corner: 20@50) equals: r bottomLeftQuadrant. + self assert: (10@42 corner: 15@50) equals: r bottomLeftQuadrant bottomLeftQuadrant! Item was added: + ----- Method: RectangleTest>>testBottomRightQuadrant (in category 'testing') ----- + testBottomRightQuadrant + | r | + r := 10@20 corner: 30@50. + self assert: (20@35 corner: 30@50) equals: r bottomRightQuadrant. + self assert: (25@42 corner: 30@50) equals: r bottomRightQuadrant bottomRightQuadrant! Item was added: + ----- Method: RectangleTest>>testLeftHalf (in category 'testing') ----- + testLeftHalf + | r | + r := 10@20 corner: 30@50. + self assert: (10@20 corner: 20@50) equals: r leftHalf. + self assert: (10@20 corner: 15@50) equals: r leftHalf leftHalf! Item was added: + ----- Method: RectangleTest>>testRightHalf (in category 'testing') ----- + testRightHalf + | r | + r := 10@20 corner: 30@50. + self assert: (20@20 corner: 30@50) equals: r rightHalf. + self assert: (25@20 corner: 30@50) equals: r rightHalf rightHalf! Item was added: + ----- Method: RectangleTest>>testTopHalf (in category 'testing') ----- + testTopHalf + | r | + r := 10@20 corner: 30@50. + self assert: (10@20 corner: 30@35) equals: r topHalf. + self assert: (10@20 corner: 30@27) equals: r topHalf topHalf! Item was added: + ----- Method: RectangleTest>>testTopLeftQuadrant (in category 'testing') ----- + testTopLeftQuadrant + | r | + r := 10@20 corner: 30@50. + self assert: (10@20 corner: 20@35) equals: r topLeftQuadrant. + self assert: (10@20 corner: 15@27) equals: r topLeftQuadrant topLeftQuadrant! Item was added: + ----- Method: RectangleTest>>testTopRightQuadrant (in category 'testing') ----- + testTopRightQuadrant + | r | + r := 10@20 corner: 30@50. + self assert: (20@20 corner: 30@35) equals: r topRightQuadrant. + self assert: (25@20 corner: 30@27) equals: r topRightQuadrant topRightQuadrant! From commits at source.squeak.org Sun Jan 10 22:59:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 22:59:54 2016 Subject: [squeak-dev] The Inbox: Graphics-bp.321.mcz Message-ID: Bernhard Pieber uploaded a new version of Graphics to project The Inbox: http://source.squeak.org/inbox/Graphics-bp.321.mcz ==================== Summary ==================== Name: Graphics-bp.321 Author: bp Time: 10 January 2016, 11:51:49.880912 pm UUID: bf6630e1-72ec-40cb-85ef-bea3213c0456 Ancestors: Graphics-eem.320, Graphics-bp.318 merged =============== Diff against Graphics-eem.320 =============== Item was added: + ----- Method: Rectangle>>bottomHalf (in category 'transforming') ----- + bottomHalf + ^self withTop: self center y! Item was added: + ----- Method: Rectangle>>bottomLeftQuadrant (in category 'transforming') ----- + bottomLeftQuadrant + ^self leftCenter corner: self bottomCenter! Item was added: + ----- Method: Rectangle>>bottomRightQuadrant (in category 'transforming') ----- + bottomRightQuadrant + ^self center corner: self bottomRight! Item was added: + ----- Method: Rectangle>>leftHalf (in category 'transforming') ----- + leftHalf + ^self withRight: self center x! Item was added: + ----- Method: Rectangle>>rightHalf (in category 'truncation and round off') ----- + rightHalf + ^self withLeft: self center x! Item was added: + ----- Method: Rectangle>>topHalf (in category 'transforming') ----- + topHalf + ^self withBottom: self center y! Item was added: + ----- Method: Rectangle>>topLeftQuadrant (in category 'transforming') ----- + topLeftQuadrant + ^self topLeft corner: self center! Item was added: + ----- Method: Rectangle>>topRightQuadrant (in category 'transforming') ----- + topRightQuadrant + ^self topCenter corner: self rightCenter! From commits at source.squeak.org Sun Jan 10 23:00:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 23:00:25 2016 Subject: [squeak-dev] The Inbox: Morphic-bp.1064.mcz Message-ID: Bernhard Pieber uploaded a new version of Morphic to project The Inbox: http://source.squeak.org/inbox/Morphic-bp.1064.mcz ==================== Summary ==================== Name: Morphic-bp.1064 Author: bp Time: 10 January 2016, 11:55:13.379638 pm UUID: 4fd3f0db-2d9f-4abc-9659-9415f279bda4 Ancestors: Morphic-eem.1063, Morphic-bp.1033 Merged =============== Diff against Morphic-eem.1063 =============== Item was changed: MorphicModel subclass: #SystemWindow instanceVariableNames: 'labelString stripes label closeBox collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame fullFrame isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes allowReframeHandles labelArea expandBox' + classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat CollapseBoxImageGradient DoubleClickOnLabelToExpand DragToEdges ExpandBoxFrame ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' - classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' poolDictionaries: '' category: 'Morphic-Windows'! !SystemWindow commentStamp: '' prior: 0! SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing. The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.! Item was added: + ----- Method: SystemWindow class>>dragToEdges (in category 'preferences') ----- + dragToEdges + + ^DragToEdges ifNil: [false]! Item was added: + ----- Method: SystemWindow class>>dragToEdges: (in category 'preferences') ----- + dragToEdges: aBoolean + DragToEdges := aBoolean! Item was changed: ----- Method: SystemWindow>>doFastFrameDrag: (in category 'events') ----- doFastFrameDrag: grabPoint "Do fast frame dragging from the given point" | offset newBounds outerWorldBounds | outerWorldBounds := self boundsIn: nil. offset := outerWorldBounds origin - grabPoint. + newBounds := outerWorldBounds newRectFrom: [:f | + | p a selector | + p := Sensor cursorPoint. + a := ActiveWorld clearArea. + (self class dragToEdges and: [(selector := self dragToEdgesSelectorFor: p in: a) notNil]) + ifTrue: [a perform: selector] + ifFalse: [p + offset extent: outerWorldBounds extent]]. + self bounds: newBounds; comeToFront! - newBounds := outerWorldBounds newRectFrom: [:f | - Sensor cursorPoint + offset extent: outerWorldBounds extent]. - self position: (self globalPointToLocal: newBounds topLeft); comeToFront! Item was added: + ----- Method: SystemWindow>>dragToEdgesSelectorFor:in: (in category 'resize/collapse') ----- + dragToEdgesSelectorFor: p in: a + "answer first matching drag resize selector, if none is found, answer nil" + #(point:nearTopLeftOf: point:nearTopRightOf: point:nearBottomLeftOf: point:nearBottomRightOf: point:nearTopOf: point:nearBottomOf: point:nearLeftOf: point:nearRightOf:) + with: #(topLeftQuadrant topRightQuadrant bottomLeftQuadrant bottomRightQuadrant topHalf bottomHalf leftHalf rightHalf) + do: [:predicate :selector | + (self perform: predicate with: p with: a) ifTrue: [^selector]]. + ^nil! Item was added: + ----- Method: SystemWindow>>point:nearBottomLeftOf: (in category 'resize/collapse') ----- + point: p nearBottomLeftOf: a + ^(self point: p nearBottomOf: a) and: [self point: p nearLeftOf: a]! Item was added: + ----- Method: SystemWindow>>point:nearBottomOf: (in category 'resize/collapse') ----- + point: p nearBottomOf: a + ^p y > (a bottom - 10)! Item was added: + ----- Method: SystemWindow>>point:nearBottomRightOf: (in category 'resize/collapse') ----- + point: p nearBottomRightOf: a + ^(self point: p nearBottomOf: a) and: [self point: p nearRightOf: a]! Item was added: + ----- Method: SystemWindow>>point:nearLeftOf: (in category 'resize/collapse') ----- + point: p nearLeftOf: a + ^p x < (a left + 10)! Item was added: + ----- Method: SystemWindow>>point:nearRightOf: (in category 'resize/collapse') ----- + point: p nearRightOf: a + ^p x > (a right - 10)! Item was added: + ----- Method: SystemWindow>>point:nearTopLeftOf: (in category 'resize/collapse') ----- + point: p nearTopLeftOf: a + ^(self point: p nearTopOf: a) and: [self point: p nearLeftOf: a]! Item was added: + ----- Method: SystemWindow>>point:nearTopOf: (in category 'resize/collapse') ----- + point: p nearTopOf: a + ^p y < (a top + 10)! Item was added: + ----- Method: SystemWindow>>point:nearTopRightOf: (in category 'resize/collapse') ----- + point: p nearTopRightOf: a + ^(self point: p nearTopOf: a) and: [self point: p nearRightOf: a]! From bernhard at pieber.com Sun Jan 10 23:20:02 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Sun Jan 10 23:20:07 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox Message-ID: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Dear all, I implemented a feature which some of you may know from Windows. When a SystemWindow is dragged to one of the edges it is resized to that half of the display. In addition, when it is dragged to one of the corners it is resized to that quadrant of the display. See the following packages in the Inbox: - GraphicsTests-bp.39 - Graphics-bp.321 - Morphic-bp.1064 In order to use it you need to enable the preference Drag To Edges in the Preference Browser, or just do: SystemWindow dragToEdges: true If you have time to try it out, let me know what you think. - Bernhard From commits at source.squeak.org Sun Jan 10 23:21:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 23:21:47 2016 Subject: [squeak-dev] The Inbox: Graphics-bp.318.mcz Message-ID: Bernhard Pieber uploaded a new version of Graphics to project The Inbox: http://source.squeak.org/inbox/Graphics-bp.318.mcz ==================== Summary ==================== Name: Graphics-bp.318 Author: bp Time: 10 January 2016, 11:32:59.384 pm UUID: 040225f1-fa88-4f50-84dd-165cfc4cf291 Ancestors: Graphics-eem.317 resize to edges methods =============== Diff against Graphics-eem.317 =============== Item was added: + ----- Method: Rectangle>>bottomHalf (in category 'transforming') ----- + bottomHalf + ^self withTop: self center y! Item was added: + ----- Method: Rectangle>>bottomLeftQuadrant (in category 'transforming') ----- + bottomLeftQuadrant + ^self leftCenter corner: self bottomCenter! Item was added: + ----- Method: Rectangle>>bottomRightQuadrant (in category 'transforming') ----- + bottomRightQuadrant + ^self center corner: self bottomRight! Item was added: + ----- Method: Rectangle>>leftHalf (in category 'transforming') ----- + leftHalf + ^self withRight: self center x! Item was added: + ----- Method: Rectangle>>rightHalf (in category 'truncation and round off') ----- + rightHalf + ^self withLeft: self center x! Item was added: + ----- Method: Rectangle>>topHalf (in category 'transforming') ----- + topHalf + ^self withBottom: self center y! Item was added: + ----- Method: Rectangle>>topLeftQuadrant (in category 'transforming') ----- + topLeftQuadrant + ^self topLeft corner: self center! Item was added: + ----- Method: Rectangle>>topRightQuadrant (in category 'transforming') ----- + topRightQuadrant + ^self topCenter corner: self rightCenter! From commits at source.squeak.org Sun Jan 10 23:22:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Jan 10 23:22:42 2016 Subject: [squeak-dev] The Inbox: Morphic-bp.1033.mcz Message-ID: Bernhard Pieber uploaded a new version of Morphic to project The Inbox: http://source.squeak.org/inbox/Morphic-bp.1033.mcz ==================== Summary ==================== Name: Morphic-bp.1033 Author: bp Time: 10 January 2016, 11:41:34.907 pm UUID: 9f66e1c2-045a-4459-af65-cf222455afca Ancestors: Morphic-mt.1032 SystemWindows snap and resize when dragged to corners and edges of the Display =============== Diff against Morphic-mt.1032 =============== Item was changed: MorphicModel subclass: #SystemWindow instanceVariableNames: 'labelString stripes label closeBox collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame fullFrame isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes allowReframeHandles labelArea expandBox' + classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat CollapseBoxImageGradient DoubleClickOnLabelToExpand DragToEdges ExpandBoxFrame ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' - classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' poolDictionaries: '' category: 'Morphic-Windows'! !SystemWindow commentStamp: '' prior: 0! SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing. The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.! Item was added: + ----- Method: SystemWindow class>>dragToEdges (in category 'preferences') ----- + dragToEdges + + ^DragToEdges ifNil: [false]! Item was added: + ----- Method: SystemWindow class>>dragToEdges: (in category 'preferences') ----- + dragToEdges: aBoolean + DragToEdges := aBoolean! Item was changed: ----- Method: SystemWindow>>doFastFrameDrag: (in category 'events') ----- doFastFrameDrag: grabPoint "Do fast frame dragging from the given point" | offset newBounds outerWorldBounds | outerWorldBounds := self boundsIn: nil. offset := outerWorldBounds origin - grabPoint. + newBounds := outerWorldBounds newRectFrom: [:f | + | p a selector | + p := Sensor cursorPoint. + a := ActiveWorld clearArea. + (self class dragToEdges and: [(selector := self dragToEdgesSelectorFor: p in: a) notNil]) + ifTrue: [a perform: selector] + ifFalse: [p + offset extent: outerWorldBounds extent]]. + self bounds: newBounds; comeToFront! - newBounds := outerWorldBounds newRectFrom: [:f | - Sensor cursorPoint + offset extent: outerWorldBounds extent]. - self position: (self globalPointToLocal: newBounds topLeft); comeToFront! Item was added: + ----- Method: SystemWindow>>dragToEdgesSelectorFor:in: (in category 'resize/collapse') ----- + dragToEdgesSelectorFor: p in: a + "answer first matching drag resize selector, if none is found, answer nil" + #(point:nearTopLeftOf: point:nearTopRightOf: point:nearBottomLeftOf: point:nearBottomRightOf: point:nearTopOf: point:nearBottomOf: point:nearLeftOf: point:nearRightOf:) + with: #(topLeftQuadrant topRightQuadrant bottomLeftQuadrant bottomRightQuadrant topHalf bottomHalf leftHalf rightHalf) + do: [:predicate :selector | + (self perform: predicate with: p with: a) ifTrue: [^selector]]. + ^nil! Item was added: + ----- Method: SystemWindow>>point:nearBottomLeftOf: (in category 'resize/collapse') ----- + point: p nearBottomLeftOf: a + ^(self point: p nearBottomOf: a) and: [self point: p nearLeftOf: a]! Item was added: + ----- Method: SystemWindow>>point:nearBottomOf: (in category 'resize/collapse') ----- + point: p nearBottomOf: a + ^p y > (a bottom - 10)! Item was added: + ----- Method: SystemWindow>>point:nearBottomRightOf: (in category 'resize/collapse') ----- + point: p nearBottomRightOf: a + ^(self point: p nearBottomOf: a) and: [self point: p nearRightOf: a]! Item was added: + ----- Method: SystemWindow>>point:nearLeftOf: (in category 'resize/collapse') ----- + point: p nearLeftOf: a + ^p x < (a left + 10)! Item was added: + ----- Method: SystemWindow>>point:nearRightOf: (in category 'resize/collapse') ----- + point: p nearRightOf: a + ^p x > (a right - 10)! Item was added: + ----- Method: SystemWindow>>point:nearTopLeftOf: (in category 'resize/collapse') ----- + point: p nearTopLeftOf: a + ^(self point: p nearTopOf: a) and: [self point: p nearLeftOf: a]! Item was added: + ----- Method: SystemWindow>>point:nearTopOf: (in category 'resize/collapse') ----- + point: p nearTopOf: a + ^p y < (a top + 10)! Item was added: + ----- Method: SystemWindow>>point:nearTopRightOf: (in category 'resize/collapse') ----- + point: p nearTopRightOf: a + ^(self point: p nearTopOf: a) and: [self point: p nearRightOf: a]! From Marcel.Taeumel at hpi.de Mon Jan 11 15:16:49 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Jan 11 15:37:58 2016 Subject: [squeak-dev] Re: The Inbox: Morphic-bp.1033.mcz In-Reply-To: References: Message-ID: <1452525409361-4870709.post@n4.nabble.com> Hi Bernhard, nice idea! Here are some suggestions: - Let boolean messages start with "is" such as "isPoint:nearRightOf:" instead of "point:nearRightOf:". - Make it work for non-fast (normal) dragging also. - Remove hardcoded "10" to a snap-threshold preference or at least some named method that returns that constant value. - Do some #bench to measure the impact of the additonal calls to #clearArea, #dragToEdgesSelectorFor:in:, etc. because this might be relevant for the "fast drag mode" --- I think that the impact of the additional calculations should be manageable. - What about snapping to the edges of other windows nearby? :-) Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Morphic-bp-1033-mcz-tp4870527p4870709.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Jan 11 15:26:01 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Jan 11 15:47:09 2016 Subject: [squeak-dev] Re: The Inbox: Morphic-bp.1033.mcz In-Reply-To: <1452525409361-4870709.post@n4.nabble.com> References: <1452525409361-4870709.post@n4.nabble.com> Message-ID: <1452525961699-4870721.post@n4.nabble.com> Hmm... it might be tricky to implement that for non-fast dragging. (see SystemWindow >> #startDragFromLabel:). But maybe it could also work for SystemWindow >> #doFastWindowReframe:. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Morphic-bp-1033-mcz-tp4870527p4870721.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Mon Jan 11 15:27:23 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Jan 11 15:48:32 2016 Subject: [squeak-dev] Re: The Inbox: Graphics-bp.318.mcz In-Reply-To: References: Message-ID: <1452526043739-4870723.post@n4.nabble.com> +1 (independent from the particular application to enable "snap to edges") Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Graphics-bp-318-mcz-tp4870526p4870723.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From asqueaker at gmail.com Mon Jan 11 18:38:21 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Jan 11 18:39:03 2016 Subject: [squeak-dev] The Trunk: Collections-ul.677.mcz In-Reply-To: <5692c671.0352370a.8ee34.ffffa71bSMTPIN_ADDED_MISSING@mx.google.com> References: <5692c671.0352370a.8ee34.ffffa71bSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Yes. On Sun, Jan 10, 2016 at 3:00 PM, wrote: > Levente Uzonyi uploaded a new version of Collections to project The Trunk: > http://source.squeak.org/trunk/Collections-ul.677.mcz > > ==================== Summary ==================== > > Name: Collections-ul.677 > Author: ul > Time: 9 January 2016, 2:32:25.271894 pm > UUID: 3973645f-83f8-4013-806f-a9c56673dec0 > Ancestors: Collections-eem.676 > > Let #arrayType define the class of array in WeakSet. > > =============== Diff against Collections-eem.676 =============== > > Item was added: > + ----- Method: WeakSet class>>arrayType (in category 'as yet unclassified') ----- > + arrayType > + > + ^WeakArray! > > Item was changed: > ----- Method: WeakSet>>growTo: (in category 'private') ----- > growTo: anInteger > "Grow the elements array and reinsert the old elements" > > | oldElements | > oldElements := array. > + array := self class arrayType new: anInteger withAll: flag. > - array := WeakArray new: anInteger withAll: flag. > self noCheckNoGrowFillFrom: oldElements! > > Item was changed: > ----- Method: WeakSet>>initialize: (in category 'private') ----- > initialize: n > "Initialize array to an array size of n" > > + super initialize: n. > flag := Object new. > + array atAllPut: flag! > - array := WeakArray new: n. > - array atAllPut: flag. > - tally := 0! > > From asqueaker at gmail.com Mon Jan 11 19:20:21 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Jan 11 19:21:04 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: Bernhard, please don't take this as offense but just as someone who's interested in UI design -- I'm curious what people find to like about this feature. I myself was so disappointed when Ubuntu did this to Unity because being able to grab a window edge and slam the mouse to the edge of the screen is an easy gross-motor gesture that facilitates efficient window management; affording expansion in the desired dimensions, and no expansion where it isn't desired. However, with this feature the user is now forced to "be careful" when dragging their window edges (don't get too close to the edge!) and so what was a gross-motor became a fine-motor AND their mind is distracted this having to wreste with the UI, because they want to make use of their screen real-estate but, at least in Unity, when you get within 4 pixels of the edge, SNAP. Now its covering many other windows I didn't want covered, whilst presenting vast swaths of useless whitespace (because its too big). I never much liked Operation... :) https://www.youtube.com/watch?v=_6MAkLJ79LE On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber wrote: > Dear all, > > I implemented a feature which some of you may know from Windows. When a SystemWindow is dragged to one of the edges it is resized to that half of the display. In addition, when it is dragged to one of the corners it is resized to that quadrant of the display. See the following packages in the Inbox: > - GraphicsTests-bp.39 > - Graphics-bp.321 > - Morphic-bp.1064 > In order to use it you need to enable the preference Drag To Edges in the Preference Browser, or just do: > SystemWindow dragToEdges: true > > If you have time to try it out, let me know what you think. > > - Bernhard From nicolas.cellier.aka.nice at gmail.com Mon Jan 11 21:01:05 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Mon Jan 11 21:01:07 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: I wanted to comment that there's even more upsetting: the maximize feature of windows 7 when dragging a window near display edge. But as long as we can disable the preference, it's ok for me. 2016-01-11 20:20 GMT+01:00 Chris Muller : > Bernhard, please don't take this as offense but just as someone who's > interested in UI design -- I'm curious what people find to like about > this feature. I myself was so disappointed when Ubuntu did this to > Unity because being able to grab a window edge and slam the mouse to > the edge of the screen is an easy gross-motor gesture that facilitates > efficient window management; affording expansion in the desired > dimensions, and no expansion where it isn't desired. However, with > this feature the user is now forced to "be careful" when dragging > their window edges (don't get too close to the edge!) and so what was > a gross-motor became a fine-motor AND their mind is distracted this > having to wreste with the UI, because they want to make use of their > screen real-estate but, at least in Unity, when you get within 4 > pixels of the edge, SNAP. Now its covering many other windows I > didn't want covered, whilst presenting vast swaths of useless > whitespace (because its too big). > > I never much liked Operation... :) > > https://www.youtube.com/watch?v=_6MAkLJ79LE > > On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber > wrote: > > Dear all, > > > > I implemented a feature which some of you may know from Windows. When a > SystemWindow is dragged to one of the edges it is resized to that half of > the display. In addition, when it is dragged to one of the corners it is > resized to that quadrant of the display. See the following packages in the > Inbox: > > - GraphicsTests-bp.39 > > - Graphics-bp.321 > > - Morphic-bp.1064 > > In order to use it you need to enable the preference Drag To Edges in > the Preference Browser, or just do: > > SystemWindow dragToEdges: true > > > > If you have time to try it out, let me know what you think. > > > > - Bernhard > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160111/bd9f7dc7/attachment.htm From commits at source.squeak.org Mon Jan 11 21:24:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 11 21:24:18 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-kfr.155.mcz Message-ID: Karl Ramberg uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-kfr.155.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-kfr.155 Author: kfr Time: 6 January 2016, 11:38:05.814914 pm UUID: 43f3809b-ca19-4e70-a321-702dc2e0762a Ancestors: ToolBuilder-Morphic-cmm.154 Restore use of preference syntaxHighlightingAsYouType =============== Diff against ToolBuilder-Morphic-cmm.154 =============== Item was changed: ----- Method: PluggableTextMorphPlus>>okToStyle (in category 'testing') ----- okToStyle + ^ styler - ^ styler ifNil:[false] + ifNotNil: [:s | s class syntaxHighlightingAsYouType + ifTrue:[model aboutToStyle: s] + ifFalse:[false]]! - ifNotNil: [:s | model aboutToStyle: s]! From jakob.reschke at student.hpi.de Mon Jan 11 21:39:35 2016 From: jakob.reschke at student.hpi.de (Jakob Reschke) Date: Mon Jan 11 21:39:59 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: In Windows, I tend to like both maximizing a window when it is dragged to the top of the screen and tiling a window when dragged to the left or right edge of the screen. Not sure why I find the first one more intuitive than double clicking the title bar or the window decoration button for it. Maybe it's that gross motion thing Chris mentioned. Just today, I came to dislike once again that the tiling does not work on the inner edges in a dual screen setup. Though, it is possible that I would change my mind if it worked and it would trigger all the time. Anyway, it is achievable with Win-key+Left/Right. On the other hand, I am not so keen on maximizing a window in only one direction (vertically or horizontally) if I drag an edge of the window to the edge of the screen. Windows has that for the vertical direction. But I cannot remember the last time I wanted to maximize a SystemWindow in Squeak... usually I find screen space to be more precious (scarce?) here because there is no web browser or dedicated text editor window, but rather a plethora of smaller windows floating around, each of them preferably only one click away. And I like to spare a hole somewhere to access the world menu... Maybe these habits are also a result of the lack of an Alt+Tab or Expos? like feature by default. 2016-01-11 22:01 GMT+01:00 Nicolas Cellier : > I wanted to comment that there's even more upsetting: the maximize feature > of windows 7 when dragging a window near display edge. > But as long as we can disable the preference, it's ok for me. > > 2016-01-11 20:20 GMT+01:00 Chris Muller : >> >> Bernhard, please don't take this as offense but just as someone who's >> interested in UI design -- I'm curious what people find to like about >> this feature. I myself was so disappointed when Ubuntu did this to >> Unity because being able to grab a window edge and slam the mouse to >> the edge of the screen is an easy gross-motor gesture that facilitates >> efficient window management; affording expansion in the desired >> dimensions, and no expansion where it isn't desired. However, with >> this feature the user is now forced to "be careful" when dragging >> their window edges (don't get too close to the edge!) and so what was >> a gross-motor became a fine-motor AND their mind is distracted this >> having to wreste with the UI, because they want to make use of their >> screen real-estate but, at least in Unity, when you get within 4 >> pixels of the edge, SNAP. Now its covering many other windows I >> didn't want covered, whilst presenting vast swaths of useless >> whitespace (because its too big). >> >> I never much liked Operation... :) >> >> https://www.youtube.com/watch?v=_6MAkLJ79LE >> >> On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber >> wrote: >> > Dear all, >> > >> > I implemented a feature which some of you may know from Windows. When a >> > SystemWindow is dragged to one of the edges it is resized to that half of >> > the display. In addition, when it is dragged to one of the corners it is >> > resized to that quadrant of the display. See the following packages in the >> > Inbox: >> > - GraphicsTests-bp.39 >> > - Graphics-bp.321 >> > - Morphic-bp.1064 >> > In order to use it you need to enable the preference Drag To Edges in >> > the Preference Browser, or just do: >> > SystemWindow dragToEdges: true >> > >> > If you have time to try it out, let me know what you think. >> > >> > - Bernhard >> > From karlramberg at gmail.com Mon Jan 11 21:40:59 2016 From: karlramberg at gmail.com (karl ramberg) Date: Mon Jan 11 21:41:01 2016 Subject: [squeak-dev] The Inbox: Morphic-kfr.1064.mcz In-Reply-To: <5692972d.10dc8c0a.ee3d4.307cSMTPIN_ADDED_MISSING@mx.google.com> References: <5692972d.10dc8c0a.ee3d4.307cSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Why is this method send all the time ? Do we need to filter all lists in all browsers all the time? PluggableListMorph>>indicateUnfiltered (in category 'filtering') ---- indicateUnfiltered self color: Color white! On Sun, Jan 10, 2016 at 6:38 PM, wrote: > A new version of Morphic was added to project The Inbox: > http://source.squeak.org/inbox/Morphic-kfr.1064.mcz > > ==================== Summary ==================== > > Name: Morphic-kfr.1064 > Author: kfr > Time: 6 January 2016, 6:38:01.020914 pm > UUID: b190605b-c0ac-4b6d-8239-650c69aed317 > Ancestors: Morphic-eem.1063 > > Add preference backgroundColor to SystemWindows. Add preference to a a few > places that where hardcoded to color white. > > =============== Diff against Morphic-eem.1063 =============== > > Item was changed: > ----- Method: PluggableListMorph>>indicateUnfiltered (in category > 'filtering') ----- > indicateUnfiltered > + self color: SystemWindow backgroundColor! > - self color: Color white! > > Item was changed: > ----- Method: ScrollPane>>defaultColor (in category 'initialization') > ----- > defaultColor > > + ^ SystemWindow backgroundColor! > - ^ Color white ! > > Item was changed: > MorphicModel subclass: #SystemWindow > instanceVariableNames: 'labelString stripes label closeBox > collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame fullFrame > isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes > allowReframeHandles labelArea expandBox' > + classVariableNames: 'BackgroundColor ClickOnLabelToEdit > CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat > CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame > ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow > HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient > ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' > - classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame > CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat > CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame > ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow > HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient > ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' > poolDictionaries: '' > category: 'Morphic-Windows'! > > !SystemWindow commentStamp: '' prior: 0! > SystemWindow is the Morphic equivalent of StandardSystemView -- a > labelled container for rectangular views, with iconic facilities for close, > collapse/expand, and resizing. > > The attribute onlyActiveOnTop, if set to true (and any call to activate > will set this), determines that only the top member of a collection of such > windows on the screen shall be active. To be not active means that a mouse > click in any region will only result in bringing the window to the top and > then making it active.! > > Item was added: > + ----- Method: SystemWindow class>>backgroundColor (in category > 'preferences') ----- > + backgroundColor > + > + + category: 'windows' > + description: 'set the backgound color of window' > + type: #Color> > + ^ BackgroundColor ifNil: [Color white] > + ! > > Item was added: > + ----- Method: SystemWindow class>>backgroundColor: (in category > 'preferences') ----- > + backgroundColor: aColor > + > + BackgroundColor := aColor > + ! > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160111/4f249ec5/attachment.htm From asqueaker at gmail.com Mon Jan 11 22:24:17 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Jan 11 22:24:59 2016 Subject: [squeak-dev] The Inbox: Morphic-kfr.1064.mcz In-Reply-To: References: <5692972d.10dc8c0a.ee3d4.307cSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: I'm not sure what you mean by "all the time"..? You seem to be saying its sent when it doesn't need to be. When is that? On Mon, Jan 11, 2016 at 3:40 PM, karl ramberg wrote: > Why is this method send all the time ? > Do we need to filter all lists in all browsers all the time? > > PluggableListMorph>>indicateUnfiltered (in category 'filtering') > ----indicateUnfiltered > self color: Color white! > > On Sun, Jan 10, 2016 at 6:38 PM, wrote: >> >> A new version of Morphic was added to project The Inbox: >> http://source.squeak.org/inbox/Morphic-kfr.1064.mcz >> >> ==================== Summary ==================== >> >> Name: Morphic-kfr.1064 >> Author: kfr >> Time: 6 January 2016, 6:38:01.020914 pm >> UUID: b190605b-c0ac-4b6d-8239-650c69aed317 >> Ancestors: Morphic-eem.1063 >> >> Add preference backgroundColor to SystemWindows. Add preference to a a few >> places that where hardcoded to color white. >> >> =============== Diff against Morphic-eem.1063 =============== >> >> Item was changed: >> ----- Method: PluggableListMorph>>indicateUnfiltered (in category >> 'filtering') ----- >> indicateUnfiltered >> + self color: SystemWindow backgroundColor! >> - self color: Color white! >> >> Item was changed: >> ----- Method: ScrollPane>>defaultColor (in category 'initialization') >> ----- >> defaultColor >> >> + ^ SystemWindow backgroundColor! >> - ^ Color white ! >> >> Item was changed: >> MorphicModel subclass: #SystemWindow >> instanceVariableNames: 'labelString stripes label closeBox >> collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame fullFrame >> isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes >> allowReframeHandles labelArea expandBox' >> + classVariableNames: 'BackgroundColor ClickOnLabelToEdit >> CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat >> CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame >> ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow >> HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient >> ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' >> - classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame >> CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat >> CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame >> ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse GradientWindow >> HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient >> ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' >> poolDictionaries: '' >> category: 'Morphic-Windows'! >> >> !SystemWindow commentStamp: '' prior: 0! >> SystemWindow is the Morphic equivalent of StandardSystemView -- a >> labelled container for rectangular views, with iconic facilities for close, >> collapse/expand, and resizing. >> >> The attribute onlyActiveOnTop, if set to true (and any call to activate >> will set this), determines that only the top member of a collection of such >> windows on the screen shall be active. To be not active means that a mouse >> click in any region will only result in bringing the window to the top and >> then making it active.! >> >> Item was added: >> + ----- Method: SystemWindow class>>backgroundColor (in category >> 'preferences') ----- >> + backgroundColor >> + >> + > + category: 'windows' >> + description: 'set the backgound color of window' >> + type: #Color> >> + ^ BackgroundColor ifNil: [Color white] >> + ! >> >> Item was added: >> + ----- Method: SystemWindow class>>backgroundColor: (in category >> 'preferences') ----- >> + backgroundColor: aColor >> + >> + BackgroundColor := aColor >> + ! >> >> > > > > From karlramberg at gmail.com Mon Jan 11 22:33:44 2016 From: karlramberg at gmail.com (karl ramberg) Date: Mon Jan 11 22:33:46 2016 Subject: [squeak-dev] The Inbox: Morphic-kfr.1064.mcz In-Reply-To: References: <5692972d.10dc8c0a.ee3d4.307cSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: If you try changing Color white to something else, you will see it changes in all lists in all browsers. Some update process is running on all lists in the background. Best, Karl On Mon, Jan 11, 2016 at 11:24 PM, Chris Muller wrote: > I'm not sure what you mean by "all the time"..? You seem to be saying > its sent when it doesn't need to be. When is that? > > On Mon, Jan 11, 2016 at 3:40 PM, karl ramberg > wrote: > > Why is this method send all the time ? > > Do we need to filter all lists in all browsers all the time? > > > > PluggableListMorph>>indicateUnfiltered (in category 'filtering') > > ----indicateUnfiltered > > self color: Color white! > > > > On Sun, Jan 10, 2016 at 6:38 PM, wrote: > >> > >> A new version of Morphic was added to project The Inbox: > >> http://source.squeak.org/inbox/Morphic-kfr.1064.mcz > >> > >> ==================== Summary ==================== > >> > >> Name: Morphic-kfr.1064 > >> Author: kfr > >> Time: 6 January 2016, 6:38:01.020914 pm > >> UUID: b190605b-c0ac-4b6d-8239-650c69aed317 > >> Ancestors: Morphic-eem.1063 > >> > >> Add preference backgroundColor to SystemWindows. Add preference to a a > few > >> places that where hardcoded to color white. > >> > >> =============== Diff against Morphic-eem.1063 =============== > >> > >> Item was changed: > >> ----- Method: PluggableListMorph>>indicateUnfiltered (in category > >> 'filtering') ----- > >> indicateUnfiltered > >> + self color: SystemWindow backgroundColor! > >> - self color: Color white! > >> > >> Item was changed: > >> ----- Method: ScrollPane>>defaultColor (in category 'initialization') > >> ----- > >> defaultColor > >> > >> + ^ SystemWindow backgroundColor! > >> - ^ Color white ! > >> > >> Item was changed: > >> MorphicModel subclass: #SystemWindow > >> instanceVariableNames: 'labelString stripes label closeBox > >> collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame > fullFrame > >> isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes > >> allowReframeHandles labelArea expandBox' > >> + classVariableNames: 'BackgroundColor ClickOnLabelToEdit > >> CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient > CollapseBoxImageFlat > >> CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame > >> ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse > GradientWindow > >> HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient > >> ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' > >> - classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame > >> CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat > >> CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame > >> ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse > GradientWindow > >> HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient > >> ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' > >> poolDictionaries: '' > >> category: 'Morphic-Windows'! > >> > >> !SystemWindow commentStamp: '' prior: 0! > >> SystemWindow is the Morphic equivalent of StandardSystemView -- a > >> labelled container for rectangular views, with iconic facilities for > close, > >> collapse/expand, and resizing. > >> > >> The attribute onlyActiveOnTop, if set to true (and any call to > activate > >> will set this), determines that only the top member of a collection of > such > >> windows on the screen shall be active. To be not active means that a > mouse > >> click in any region will only result in bringing the window to the top > and > >> then making it active.! > >> > >> Item was added: > >> + ----- Method: SystemWindow class>>backgroundColor (in category > >> 'preferences') ----- > >> + backgroundColor > >> + > >> + >> + category: 'windows' > >> + description: 'set the backgound color of window' > >> + type: #Color> > >> + ^ BackgroundColor ifNil: [Color white] > >> + ! > >> > >> Item was added: > >> + ----- Method: SystemWindow class>>backgroundColor: (in category > >> 'preferences') ----- > >> + backgroundColor: aColor > >> + > >> + BackgroundColor := aColor > >> + ! > >> > >> > > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160111/414b03a5/attachment.htm From tim at rowledge.org Mon Jan 11 22:47:46 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Jan 11 22:47:51 2016 Subject: [squeak-dev] Short sounds on unix when 'stop sounds when done' preference enabled Message-ID: <1B36E2B3-FAAB-40B6-AB3E-97B7AD8E00AD@rowledge.org> I?m having a lot of fun trying to work out where the playing of a short sound sample (in fact this one - https://copy.com/z2IWbaij3i4kuyUm) produces no sound output when the stop sounds when done? option is set. Without that option the pop appears (if that is the right word for a sound), or if another sound is also playing at around the same time. Or if reverb is on. This is specifically on a Pi, and I don?t have any way to test with any other unixy box. It is the same on my iMac - it sounds ok with reverb on (except for the reverb) but there is only silence with reverb off. Unless I turn off the 'stop playing when done? option in which case no reverb is ok. My best guess right now is that the sample is so short that something in the play loop is simply not ?seeing? the sample and that having reverb on makes it just long enough to get through. Who?s been playing in that particular sandbox recently? Any thoughts tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Cloister: a pretentious clam From commits at source.squeak.org Mon Jan 11 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 11 22:55:05 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160111225502.881.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-January/009253.html Name: ToolBuilder-Morphic-kfr.155 Ancestors: ToolBuilder-Morphic-cmm.154 Restore use of preference syntaxHighlightingAsYouType ============================================= From asqueaker at gmail.com Mon Jan 11 23:31:28 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Jan 11 23:32:10 2016 Subject: [squeak-dev] Short sounds on unix when 'stop sounds when done' preference enabled In-Reply-To: <1B36E2B3-FAAB-40B6-AB3E-97B7AD8E00AD@rowledge.org> References: <1B36E2B3-FAAB-40B6-AB3E-97B7AD8E00AD@rowledge.org> Message-ID: On Mon, Jan 11, 2016 at 4:47 PM, tim Rowledge wrote: > I?m having a lot of fun trying to work out where the playing of a short sound sample (in fact this one - https://copy.com/z2IWbaij3i4kuyUm) produces no sound output when the stop sounds when done? option is set. At about 1ms. I researched this when I implemented the ability for a Magma server to play a tone for the duration of each request processed. Requests shorter than 1ms are inaudible. From nicolas.cellier.aka.nice at gmail.com Mon Jan 11 23:46:31 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Mon Jan 11 23:46:35 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: The reasons why I personnally hate this maximizing thing are these ones: - I generally have kind of portrait oriented documents best viewed with tall viewport (not wide) - my screen is too wide but that's ok to view 2 documents side by side, or 1 document with 2 pages side by side alternatively. - i often resize/move the windows to obtain side by side view (for comparison, drag and drop etc...) alas, since my windows are tall, they are most of the time near top, and i more than often have to undo the UN-INTENDED maximization. There are at least two other ways to maximize the window, so this gesture is never going to be on purpose from myself, if only I knew how to disable it :( 2016-01-11 22:39 GMT+01:00 Jakob Reschke : > In Windows, I tend to like both maximizing a window when it is dragged > to the top of the screen and tiling a window when dragged to the left > or right edge of the screen. Not sure why I find the first one more > intuitive than double clicking the title bar or the window decoration > button for it. Maybe it's that gross motion thing Chris mentioned. > Just today, I came to dislike once again that the tiling does not work > on the inner edges in a dual screen setup. Though, it is possible that > I would change my mind if it worked and it would trigger all the time. > Anyway, it is achievable with Win-key+Left/Right. > > On the other hand, I am not so keen on maximizing a window in only one > direction (vertically or horizontally) if I drag an edge of the window > to the edge of the screen. Windows has that for the vertical > direction. > > But I cannot remember the last time I wanted to maximize a > SystemWindow in Squeak... usually I find screen space to be more > precious (scarce?) here because there is no web browser or dedicated > text editor window, but rather a plethora of smaller windows floating > around, each of them preferably only one click away. And I like to > spare a hole somewhere to access the world menu... Maybe these habits > are also a result of the lack of an Alt+Tab or Expos? like feature by > default. > > 2016-01-11 22:01 GMT+01:00 Nicolas Cellier < > nicolas.cellier.aka.nice@gmail.com>: > > I wanted to comment that there's even more upsetting: the maximize > feature > > of windows 7 when dragging a window near display edge. > > But as long as we can disable the preference, it's ok for me. > > > > 2016-01-11 20:20 GMT+01:00 Chris Muller : > >> > >> Bernhard, please don't take this as offense but just as someone who's > >> interested in UI design -- I'm curious what people find to like about > >> this feature. I myself was so disappointed when Ubuntu did this to > >> Unity because being able to grab a window edge and slam the mouse to > >> the edge of the screen is an easy gross-motor gesture that facilitates > >> efficient window management; affording expansion in the desired > >> dimensions, and no expansion where it isn't desired. However, with > >> this feature the user is now forced to "be careful" when dragging > >> their window edges (don't get too close to the edge!) and so what was > >> a gross-motor became a fine-motor AND their mind is distracted this > >> having to wreste with the UI, because they want to make use of their > >> screen real-estate but, at least in Unity, when you get within 4 > >> pixels of the edge, SNAP. Now its covering many other windows I > >> didn't want covered, whilst presenting vast swaths of useless > >> whitespace (because its too big). > >> > >> I never much liked Operation... :) > >> > >> https://www.youtube.com/watch?v=_6MAkLJ79LE > >> > >> On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber > >> wrote: > >> > Dear all, > >> > > >> > I implemented a feature which some of you may know from Windows. When > a > >> > SystemWindow is dragged to one of the edges it is resized to that > half of > >> > the display. In addition, when it is dragged to one of the corners it > is > >> > resized to that quadrant of the display. See the following packages > in the > >> > Inbox: > >> > - GraphicsTests-bp.39 > >> > - Graphics-bp.321 > >> > - Morphic-bp.1064 > >> > In order to use it you need to enable the preference Drag To Edges in > >> > the Preference Browser, or just do: > >> > SystemWindow dragToEdges: true > >> > > >> > If you have time to try it out, let me know what you think. > >> > > >> > - Bernhard > >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/95963360/attachment.htm From tim at rowledge.org Mon Jan 11 23:48:58 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Jan 11 23:49:04 2016 Subject: [squeak-dev] Short sounds on unix when 'stop sounds when done' preference enabled In-Reply-To: References: <1B36E2B3-FAAB-40B6-AB3E-97B7AD8E00AD@rowledge.org> Message-ID: <153B744D-EA6B-4187-8E2D-6C88C3956CB0@rowledge.org> > On 11-01-2016, at 3:31 PM, Chris Muller wrote: > > On Mon, Jan 11, 2016 at 4:47 PM, tim Rowledge wrote: >> I?m having a lot of fun trying to work out where the playing of a short sound sample (in fact this one - https://copy.com/z2IWbaij3i4kuyUm) produces no sound output when the stop sounds when done? option is set. > > At about 1ms. > > I researched this when I implemented the ability for a Magma server to > play a tone for the duration of each request processed. Requests > shorter than 1ms are inaudible. Hmm. Well the pop is quite a bit longer than 1mS I guess but whatever is getting in the way may be the same. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: BPB: Branch on Program Bug From tim at rowledge.org Tue Jan 12 00:15:28 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Jan 12 00:15:34 2016 Subject: [squeak-dev] Double-click gone missing? Message-ID: <3CFE0B61-F16F-4A7F-A13C-F694EA6ADE8E@rowledge.org> It looks like something has stopped double-clicking working in my update 15557 image, whether running on a very latest vm or a slightly older one. D-clicks are quite important in Scratch and I have a big release coming up at the end of the week... Simplest way to check is to open a ClickExerciserMorph; even browse it and stick a break on the doubleClick: method. The click: and doubleClickTimeout: methods are being hit. I get no hits on doubleClick: at all but there are spurious hits on doubleClickTimeout: when I try to d-click. In fact I get a doubleCLickTimeout: simply by doing a click or click-hold-no-movement (don?t want to trigger a drag). That really isn?t right. I can?t see any code that relates to MouseClickState has changed recently, though of course we have a big change in Time recently. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Computer Science: solving today's problems tomorrow. From tim at rowledge.org Tue Jan 12 00:41:55 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Jan 12 00:42:02 2016 Subject: [squeak-dev] Re: Double-click gone missing? In-Reply-To: <3CFE0B61-F16F-4A7F-A13C-F694EA6ADE8E@rowledge.org> References: <3CFE0B61-F16F-4A7F-A13C-F694EA6ADE8E@rowledge.org> Message-ID: > On 11-01-2016, at 4:15 PM, tim Rowledge wrote: > I can?t see any code that relates to MouseClickState has changed recently, though of course we have a big change in Time recently. Yeah, if my trapping is returning anything like the truth - always a big if when trying to debug events - I appear to be getting the MouseClickState created with a firstClickTime ~ 6655941 and then a subsequent event with a timeStamp of 3629982911523. Which is really *quite* a long time after if you believe it to be in the same time units as the first click time. Interestingly the following event that has the mouse up which leads to the spurious doubleClickTimeout has a timestamp ~ 6656027 or rather similar to the firstclicktime. So I guess somewhere an event is being made with the microsecond time value, or possibly, junk. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim The severity of the itch is proportional to the reach. From tim at rowledge.org Tue Jan 12 01:12:52 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Jan 12 01:12:59 2016 Subject: [squeak-dev] Re: Double-click gone missing? In-Reply-To: References: <3CFE0B61-F16F-4A7F-A13C-F694EA6ADE8E@rowledge.org> Message-ID: <5B41A5E0-BC35-41C6-B14C-71AD3EB2B587@rowledge.org> > On 11-01-2016, at 4:41 PM, tim Rowledge wrote: > > So I guess somewhere an event is being made with the microsecond time value, or possibly, junk. Almost - when we fake up a MouseMoveEvent via MouseEvent>asMouseMove, it has been sticking in Time millisecondClockValue as the timeStamp in the belief that the vm will be using the same kind of value. However, now that a 64 bit value is being used for Time millisecondClockValue with no setting to a baseline, that is a poor assumption. I can fix it (badly) by re-using the timestamp from the event we are converting/faking but that can?t be a long term solution since the entire point is to have an event with the current time get handled and cause any *appropriate* timeouts to happen. I think we still need access to the old millisecond value here? There are other places where this might cause problems; for example HandMorph>generateMouseEvent where we fake the timestamp if the incoming event has no value set. There?s a possible issue in any case where XXXEvent>type:readFrom: is used. EventRecorderMorph>resumeRecordIn: will do nasty. HandMorph>generateWindowEvent: might. Oh and HandMorph>generateKeyboardEvent: tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Fractured Idiom:- APRES MOE LE DELUGE - Larry and Curly get wet From ma.chris.m at gmail.com Tue Jan 12 02:09:45 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Tue Jan 12 02:10:28 2016 Subject: [squeak-dev] Short sounds on unix when 'stop sounds when done' preference enabled In-Reply-To: <153B744D-EA6B-4187-8E2D-6C88C3956CB0@rowledge.org> References: <1B36E2B3-FAAB-40B6-AB3E-97B7AD8E00AD@rowledge.org> <153B744D-EA6B-4187-8E2D-6C88C3956CB0@rowledge.org> Message-ID: The only way I was able to accomplish a correct "picture" of the timings was via a SoundQueue. On Mon, Jan 11, 2016 at 5:48 PM, tim Rowledge wrote: > >> On 11-01-2016, at 3:31 PM, Chris Muller wrote: >> >> On Mon, Jan 11, 2016 at 4:47 PM, tim Rowledge wrote: >>> I?m having a lot of fun trying to work out where the playing of a short sound sample (in fact this one - https://copy.com/z2IWbaij3i4kuyUm) produces no sound output when the stop sounds when done? option is set. >> >> At about 1ms. >> >> I researched this when I implemented the ability for a Magma server to >> play a tone for the duration of each request processed. Requests >> shorter than 1ms are inaudible. > > Hmm. Well the pop is quite a bit longer than 1mS I guess but whatever is getting in the way may be the same. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: BPB: Branch on Program Bug > > From asqueaker at gmail.com Tue Jan 12 02:29:29 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Jan 12 02:30:12 2016 Subject: [squeak-dev] The Inbox: Morphic-kfr.1064.mcz In-Reply-To: References: <5692972d.10dc8c0a.ee3d4.307cSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Just add "thisContext longStack" to a global Set at the top of the method. I did that it found about 13 unique paths to that method, they all looked valid. >From what I remember doing that Invertebrite package, there were a LOT of different places that needed to be tweaked to access some preferred: color instead of a hard-coded color. For example, after thinking I had successful white-on-black everywhere, then there were the "Ok" and "Cancel" buttons of UI Dialog, black-on-black. New cases kept popping up even months later. It ended up being a lot of different preferences all scattered about. Colors have to coordinate with other colors (adjacent), so we have reason to recognize some kind of "coordinated set of colors" object for this purpose. I suggest a first-class ColorScheme object simply held by Preferences for now, which wraps a Dictionary, so it can grow organically to include colors of new widgets as we discover them. On Mon, Jan 11, 2016 at 4:33 PM, karl ramberg wrote: > If you try changing Color white to something else, you will see it changes > in all lists in all browsers. Some update process is running on all lists in > the background. > > Best, > Karl > > On Mon, Jan 11, 2016 at 11:24 PM, Chris Muller wrote: >> >> I'm not sure what you mean by "all the time"..? You seem to be saying >> its sent when it doesn't need to be. When is that? >> >> On Mon, Jan 11, 2016 at 3:40 PM, karl ramberg >> wrote: >> > Why is this method send all the time ? >> > Do we need to filter all lists in all browsers all the time? >> > >> > PluggableListMorph>>indicateUnfiltered (in category 'filtering') >> > ----indicateUnfiltered >> > self color: Color white! >> > >> > On Sun, Jan 10, 2016 at 6:38 PM, wrote: >> >> >> >> A new version of Morphic was added to project The Inbox: >> >> http://source.squeak.org/inbox/Morphic-kfr.1064.mcz >> >> >> >> ==================== Summary ==================== >> >> >> >> Name: Morphic-kfr.1064 >> >> Author: kfr >> >> Time: 6 January 2016, 6:38:01.020914 pm >> >> UUID: b190605b-c0ac-4b6d-8239-650c69aed317 >> >> Ancestors: Morphic-eem.1063 >> >> >> >> Add preference backgroundColor to SystemWindows. Add preference to a a >> >> few >> >> places that where hardcoded to color white. >> >> >> >> =============== Diff against Morphic-eem.1063 =============== >> >> >> >> Item was changed: >> >> ----- Method: PluggableListMorph>>indicateUnfiltered (in category >> >> 'filtering') ----- >> >> indicateUnfiltered >> >> + self color: SystemWindow backgroundColor! >> >> - self color: Color white! >> >> >> >> Item was changed: >> >> ----- Method: ScrollPane>>defaultColor (in category 'initialization') >> >> ----- >> >> defaultColor >> >> >> >> + ^ SystemWindow backgroundColor! >> >> - ^ Color white ! >> >> >> >> Item was changed: >> >> MorphicModel subclass: #SystemWindow >> >> instanceVariableNames: 'labelString stripes label closeBox >> >> collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame >> >> fullFrame >> >> isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes >> >> allowReframeHandles labelArea expandBox' >> >> + classVariableNames: 'BackgroundColor ClickOnLabelToEdit >> >> CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient >> >> CollapseBoxImageFlat >> >> CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame >> >> ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse >> >> GradientWindow >> >> HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient >> >> ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' >> >> - classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame >> >> CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat >> >> CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame >> >> ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse >> >> GradientWindow >> >> HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient >> >> ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' >> >> poolDictionaries: '' >> >> category: 'Morphic-Windows'! >> >> >> >> !SystemWindow commentStamp: '' prior: 0! >> >> SystemWindow is the Morphic equivalent of StandardSystemView -- a >> >> labelled container for rectangular views, with iconic facilities for >> >> close, >> >> collapse/expand, and resizing. >> >> >> >> The attribute onlyActiveOnTop, if set to true (and any call to >> >> activate >> >> will set this), determines that only the top member of a collection of >> >> such >> >> windows on the screen shall be active. To be not active means that a >> >> mouse >> >> click in any region will only result in bringing the window to the top >> >> and >> >> then making it active.! >> >> >> >> Item was added: >> >> + ----- Method: SystemWindow class>>backgroundColor (in category >> >> 'preferences') ----- >> >> + backgroundColor >> >> + >> >> + > >> + category: 'windows' >> >> + description: 'set the backgound color of window' >> >> + type: #Color> >> >> + ^ BackgroundColor ifNil: [Color white] >> >> + ! >> >> >> >> Item was added: >> >> + ----- Method: SystemWindow class>>backgroundColor: (in category >> >> 'preferences') ----- >> >> + backgroundColor: aColor >> >> + >> >> + BackgroundColor := aColor >> >> + ! >> >> >> >> >> > >> > >> > >> > >> > > > > From asqueaker at gmail.com Tue Jan 12 02:37:20 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Jan 12 02:38:03 2016 Subject: [squeak-dev] The Inbox: Morphic-kfr.1064.mcz In-Reply-To: References: <5692972d.10dc8c0a.ee3d4.307cSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: So for example for this one, instead of introducing a new class var and preference on SystemWindow, just have the class-side method on SystemWindow do this: SystemWindow class>>#preferredBackgroundColor ^ Preferences colorScheme colorFor: {SystemWindow. #preferredBackgroundColor} ifNone: [ Color white] ColorScheme colorFor: would just look up that tuple in its internal Dictionary. Now, entire color-coordinated ColorSchemes can be independent of larger Themes (which include the colorScheme as well as other non-color related preferences too). On Mon, Jan 11, 2016 at 8:29 PM, Chris Muller wrote: > Just add "thisContext longStack" to a global Set at the top of the > method. I did that it found about 13 unique paths to that method, > they all looked valid. > > From what I remember doing that Invertebrite package, there were a LOT > of different places that needed to be tweaked to access some > preferred: color instead of a hard-coded color. For example, after > thinking I had successful white-on-black everywhere, then there were > the "Ok" and "Cancel" buttons of UI Dialog, black-on-black. New cases > kept popping up even months later. It ended up being a lot of > different preferences all scattered about. > > Colors have to coordinate with other colors (adjacent), so we have > reason to recognize some kind of "coordinated set of colors" object > for this purpose. I suggest a first-class ColorScheme object simply > held by Preferences for now, which wraps a Dictionary, so it can grow > organically to include colors of new widgets as we discover them. > > > > On Mon, Jan 11, 2016 at 4:33 PM, karl ramberg wrote: >> If you try changing Color white to something else, you will see it changes >> in all lists in all browsers. Some update process is running on all lists in >> the background. >> >> Best, >> Karl >> >> On Mon, Jan 11, 2016 at 11:24 PM, Chris Muller wrote: >>> >>> I'm not sure what you mean by "all the time"..? You seem to be saying >>> its sent when it doesn't need to be. When is that? >>> >>> On Mon, Jan 11, 2016 at 3:40 PM, karl ramberg >>> wrote: >>> > Why is this method send all the time ? >>> > Do we need to filter all lists in all browsers all the time? >>> > >>> > PluggableListMorph>>indicateUnfiltered (in category 'filtering') >>> > ----indicateUnfiltered >>> > self color: Color white! >>> > >>> > On Sun, Jan 10, 2016 at 6:38 PM, wrote: >>> >> >>> >> A new version of Morphic was added to project The Inbox: >>> >> http://source.squeak.org/inbox/Morphic-kfr.1064.mcz >>> >> >>> >> ==================== Summary ==================== >>> >> >>> >> Name: Morphic-kfr.1064 >>> >> Author: kfr >>> >> Time: 6 January 2016, 6:38:01.020914 pm >>> >> UUID: b190605b-c0ac-4b6d-8239-650c69aed317 >>> >> Ancestors: Morphic-eem.1063 >>> >> >>> >> Add preference backgroundColor to SystemWindows. Add preference to a a >>> >> few >>> >> places that where hardcoded to color white. >>> >> >>> >> =============== Diff against Morphic-eem.1063 =============== >>> >> >>> >> Item was changed: >>> >> ----- Method: PluggableListMorph>>indicateUnfiltered (in category >>> >> 'filtering') ----- >>> >> indicateUnfiltered >>> >> + self color: SystemWindow backgroundColor! >>> >> - self color: Color white! >>> >> >>> >> Item was changed: >>> >> ----- Method: ScrollPane>>defaultColor (in category 'initialization') >>> >> ----- >>> >> defaultColor >>> >> >>> >> + ^ SystemWindow backgroundColor! >>> >> - ^ Color white ! >>> >> >>> >> Item was changed: >>> >> MorphicModel subclass: #SystemWindow >>> >> instanceVariableNames: 'labelString stripes label closeBox >>> >> collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame >>> >> fullFrame >>> >> isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes >>> >> allowReframeHandles labelArea expandBox' >>> >> + classVariableNames: 'BackgroundColor ClickOnLabelToEdit >>> >> CloseBoxFrame CloseBoxImageFlat CloseBoxImageGradient >>> >> CollapseBoxImageFlat >>> >> CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame >>> >> ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse >>> >> GradientWindow >>> >> HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient >>> >> ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' >>> >> - classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame >>> >> CloseBoxImageFlat CloseBoxImageGradient CollapseBoxImageFlat >>> >> CollapseBoxImageGradient DoubleClickOnLabelToExpand ExpandBoxFrame >>> >> ExpandBoxImageFlat ExpandBoxImageGradient FocusFollowsMouse >>> >> GradientWindow >>> >> HideExpandButton MenuBoxFrame MenuBoxImageFlat MenuBoxImageGradient >>> >> ResizeAlongEdges ReuseWindows TopWindow WindowsRaiseOnClick' >>> >> poolDictionaries: '' >>> >> category: 'Morphic-Windows'! >>> >> >>> >> !SystemWindow commentStamp: '' prior: 0! >>> >> SystemWindow is the Morphic equivalent of StandardSystemView -- a >>> >> labelled container for rectangular views, with iconic facilities for >>> >> close, >>> >> collapse/expand, and resizing. >>> >> >>> >> The attribute onlyActiveOnTop, if set to true (and any call to >>> >> activate >>> >> will set this), determines that only the top member of a collection of >>> >> such >>> >> windows on the screen shall be active. To be not active means that a >>> >> mouse >>> >> click in any region will only result in bringing the window to the top >>> >> and >>> >> then making it active.! >>> >> >>> >> Item was added: >>> >> + ----- Method: SystemWindow class>>backgroundColor (in category >>> >> 'preferences') ----- >>> >> + backgroundColor >>> >> + >>> >> + >> >> + category: 'windows' >>> >> + description: 'set the backgound color of window' >>> >> + type: #Color> >>> >> + ^ BackgroundColor ifNil: [Color white] >>> >> + ! >>> >> >>> >> Item was added: >>> >> + ----- Method: SystemWindow class>>backgroundColor: (in category >>> >> 'preferences') ----- >>> >> + backgroundColor: aColor >>> >> + >>> >> + BackgroundColor := aColor >>> >> + ! >>> >> >>> >> >>> > >>> > >>> > >>> > >>> >> >> >> >> From asqueaker at gmail.com Tue Jan 12 05:20:32 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Jan 12 05:21:14 2016 Subject: [squeak-dev] How to change balloon help colors? Message-ID: I want to have BalloonMorphs with translucent color and white text. Setting BalloonMorph class>>#setBalloonColor: with a TranslucentColor does not work -- it sets the color but displays only at alpha 1.0. Adding the following to (BalloonMorph class>>#getTextMorph:for:) as the last line before the return: m textColor: Color white does not work. From karlramberg at gmail.com Tue Jan 12 08:24:52 2016 From: karlramberg at gmail.com (karl ramberg) Date: Tue Jan 12 08:24:56 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: Nicolas: http://superuser.com/questions/96220/how-to-disable-maximize-on-top-drag Best, Karl On Tue, Jan 12, 2016 at 12:46 AM, Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com> wrote: > The reasons why I personnally hate this maximizing thing are these ones: > - I generally have kind of portrait oriented documents best viewed with > tall viewport (not wide) > - my screen is too wide but that's ok to view 2 documents side by side, or > 1 document with 2 pages side by side alternatively. > - i often resize/move the windows to obtain side by side view (for > comparison, drag and drop etc...) > alas, since my windows are tall, they are most of the time near top, and i > more than often have to undo the UN-INTENDED maximization. > > There are at least two other ways to maximize the window, so this gesture > is never going to be on purpose from myself, if only I knew how to disable > it :( > > > 2016-01-11 22:39 GMT+01:00 Jakob Reschke : > >> In Windows, I tend to like both maximizing a window when it is dragged >> to the top of the screen and tiling a window when dragged to the left >> or right edge of the screen. Not sure why I find the first one more >> intuitive than double clicking the title bar or the window decoration >> button for it. Maybe it's that gross motion thing Chris mentioned. >> Just today, I came to dislike once again that the tiling does not work >> on the inner edges in a dual screen setup. Though, it is possible that >> I would change my mind if it worked and it would trigger all the time. >> Anyway, it is achievable with Win-key+Left/Right. >> >> On the other hand, I am not so keen on maximizing a window in only one >> direction (vertically or horizontally) if I drag an edge of the window >> to the edge of the screen. Windows has that for the vertical >> direction. >> >> But I cannot remember the last time I wanted to maximize a >> SystemWindow in Squeak... usually I find screen space to be more >> precious (scarce?) here because there is no web browser or dedicated >> text editor window, but rather a plethora of smaller windows floating >> around, each of them preferably only one click away. And I like to >> spare a hole somewhere to access the world menu... Maybe these habits >> are also a result of the lack of an Alt+Tab or Expos? like feature by >> default. >> >> 2016-01-11 22:01 GMT+01:00 Nicolas Cellier < >> nicolas.cellier.aka.nice@gmail.com>: >> > I wanted to comment that there's even more upsetting: the maximize >> feature >> > of windows 7 when dragging a window near display edge. >> > But as long as we can disable the preference, it's ok for me. >> > >> > 2016-01-11 20:20 GMT+01:00 Chris Muller : >> >> >> >> Bernhard, please don't take this as offense but just as someone who's >> >> interested in UI design -- I'm curious what people find to like about >> >> this feature. I myself was so disappointed when Ubuntu did this to >> >> Unity because being able to grab a window edge and slam the mouse to >> >> the edge of the screen is an easy gross-motor gesture that facilitates >> >> efficient window management; affording expansion in the desired >> >> dimensions, and no expansion where it isn't desired. However, with >> >> this feature the user is now forced to "be careful" when dragging >> >> their window edges (don't get too close to the edge!) and so what was >> >> a gross-motor became a fine-motor AND their mind is distracted this >> >> having to wreste with the UI, because they want to make use of their >> >> screen real-estate but, at least in Unity, when you get within 4 >> >> pixels of the edge, SNAP. Now its covering many other windows I >> >> didn't want covered, whilst presenting vast swaths of useless >> >> whitespace (because its too big). >> >> >> >> I never much liked Operation... :) >> >> >> >> https://www.youtube.com/watch?v=_6MAkLJ79LE >> >> >> >> On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber >> >> wrote: >> >> > Dear all, >> >> > >> >> > I implemented a feature which some of you may know from Windows. >> When a >> >> > SystemWindow is dragged to one of the edges it is resized to that >> half of >> >> > the display. In addition, when it is dragged to one of the corners >> it is >> >> > resized to that quadrant of the display. See the following packages >> in the >> >> > Inbox: >> >> > - GraphicsTests-bp.39 >> >> > - Graphics-bp.321 >> >> > - Morphic-bp.1064 >> >> > In order to use it you need to enable the preference Drag To Edges in >> >> > the Preference Browser, or just do: >> >> > SystemWindow dragToEdges: true >> >> > >> >> > If you have time to try it out, let me know what you think. >> >> > >> >> > - Bernhard >> >> >> > >> >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/9e2a3612/attachment-0001.htm From nicolas.cellier.aka.nice at gmail.com Tue Jan 12 08:46:25 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue Jan 12 08:46:27 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: Thanks Karl, that's usefull 2016-01-12 9:24 GMT+01:00 karl ramberg : > Nicolas: > http://superuser.com/questions/96220/how-to-disable-maximize-on-top-drag > > Best, > Karl > > On Tue, Jan 12, 2016 at 12:46 AM, Nicolas Cellier < > nicolas.cellier.aka.nice@gmail.com> wrote: > >> The reasons why I personnally hate this maximizing thing are these ones: >> - I generally have kind of portrait oriented documents best viewed with >> tall viewport (not wide) >> - my screen is too wide but that's ok to view 2 documents side by side, >> or 1 document with 2 pages side by side alternatively. >> - i often resize/move the windows to obtain side by side view (for >> comparison, drag and drop etc...) >> alas, since my windows are tall, they are most of the time near top, and >> i more than often have to undo the UN-INTENDED maximization. >> >> There are at least two other ways to maximize the window, so this gesture >> is never going to be on purpose from myself, if only I knew how to disable >> it :( >> >> >> 2016-01-11 22:39 GMT+01:00 Jakob Reschke : >> >>> In Windows, I tend to like both maximizing a window when it is dragged >>> to the top of the screen and tiling a window when dragged to the left >>> or right edge of the screen. Not sure why I find the first one more >>> intuitive than double clicking the title bar or the window decoration >>> button for it. Maybe it's that gross motion thing Chris mentioned. >>> Just today, I came to dislike once again that the tiling does not work >>> on the inner edges in a dual screen setup. Though, it is possible that >>> I would change my mind if it worked and it would trigger all the time. >>> Anyway, it is achievable with Win-key+Left/Right. >>> >>> On the other hand, I am not so keen on maximizing a window in only one >>> direction (vertically or horizontally) if I drag an edge of the window >>> to the edge of the screen. Windows has that for the vertical >>> direction. >>> >>> But I cannot remember the last time I wanted to maximize a >>> SystemWindow in Squeak... usually I find screen space to be more >>> precious (scarce?) here because there is no web browser or dedicated >>> text editor window, but rather a plethora of smaller windows floating >>> around, each of them preferably only one click away. And I like to >>> spare a hole somewhere to access the world menu... Maybe these habits >>> are also a result of the lack of an Alt+Tab or Expos? like feature by >>> default. >>> >>> 2016-01-11 22:01 GMT+01:00 Nicolas Cellier < >>> nicolas.cellier.aka.nice@gmail.com>: >>> > I wanted to comment that there's even more upsetting: the maximize >>> feature >>> > of windows 7 when dragging a window near display edge. >>> > But as long as we can disable the preference, it's ok for me. >>> > >>> > 2016-01-11 20:20 GMT+01:00 Chris Muller : >>> >> >>> >> Bernhard, please don't take this as offense but just as someone who's >>> >> interested in UI design -- I'm curious what people find to like about >>> >> this feature. I myself was so disappointed when Ubuntu did this to >>> >> Unity because being able to grab a window edge and slam the mouse to >>> >> the edge of the screen is an easy gross-motor gesture that facilitates >>> >> efficient window management; affording expansion in the desired >>> >> dimensions, and no expansion where it isn't desired. However, with >>> >> this feature the user is now forced to "be careful" when dragging >>> >> their window edges (don't get too close to the edge!) and so what was >>> >> a gross-motor became a fine-motor AND their mind is distracted this >>> >> having to wreste with the UI, because they want to make use of their >>> >> screen real-estate but, at least in Unity, when you get within 4 >>> >> pixels of the edge, SNAP. Now its covering many other windows I >>> >> didn't want covered, whilst presenting vast swaths of useless >>> >> whitespace (because its too big). >>> >> >>> >> I never much liked Operation... :) >>> >> >>> >> https://www.youtube.com/watch?v=_6MAkLJ79LE >>> >> >>> >> On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber >> > >>> >> wrote: >>> >> > Dear all, >>> >> > >>> >> > I implemented a feature which some of you may know from Windows. >>> When a >>> >> > SystemWindow is dragged to one of the edges it is resized to that >>> half of >>> >> > the display. In addition, when it is dragged to one of the corners >>> it is >>> >> > resized to that quadrant of the display. See the following packages >>> in the >>> >> > Inbox: >>> >> > - GraphicsTests-bp.39 >>> >> > - Graphics-bp.321 >>> >> > - Morphic-bp.1064 >>> >> > In order to use it you need to enable the preference Drag To Edges >>> in >>> >> > the Preference Browser, or just do: >>> >> > SystemWindow dragToEdges: true >>> >> > >>> >> > If you have time to try it out, let me know what you think. >>> >> > >>> >> > - Bernhard >>> >> >>> > >>> >>> >> >> >> >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/35b76bc3/attachment.htm From bert at freudenbergs.de Tue Jan 12 09:34:52 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Jan 12 09:36:16 2016 Subject: [squeak-dev] How to change balloon help colors? In-Reply-To: References: Message-ID: <6AD170DE-C622-4CE2-A956-6723006C30E2@freudenbergs.de> On 12.01.2016, at 06:20, Chris Muller wrote: > > I want to have BalloonMorphs with translucent color and white text. > Setting BalloonMorph class>>#setBalloonColor: with a TranslucentColor > does not work -- it sets the color but displays only at alpha 1.0. Works fine in an Etoys image, if you want to compare. Note that the system uses balloonMorphClass nowadays, though. > Adding the following to (BalloonMorph class>>#getTextMorph:for:) as > the last line before the return: > > m textColor: Color white > > does not work. Try attributes: {TextFontReference toFont: balloonOwner balloonFont. TextColor white} - 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/20160112/6d3abf0c/smime.bin From frank.shearar at gmail.com Tue Jan 12 09:49:57 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Tue Jan 12 09:50:00 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: FWIW I'm super happy with the soft tiling window manager approach Windows 8 brought (and Win 10 augments, because you can now tile within quadrants, not half-screens). I use this all the time, especially from the keyboard - - / tile to the respective half-screens, - "promotes" a half-screen to full-screen, - minimises, etc. It's just a couple of key presses now to get two windows side-by-side. I would be very happy if Squeak provided similar functionality (without disagreeing with Chris's comments re gross/fine motor movements). frank On 11 January 2016 at 21:39, Jakob Reschke wrote: > In Windows, I tend to like both maximizing a window when it is dragged > to the top of the screen and tiling a window when dragged to the left > or right edge of the screen. Not sure why I find the first one more > intuitive than double clicking the title bar or the window decoration > button for it. Maybe it's that gross motion thing Chris mentioned. > Just today, I came to dislike once again that the tiling does not work > on the inner edges in a dual screen setup. Though, it is possible that > I would change my mind if it worked and it would trigger all the time. > Anyway, it is achievable with Win-key+Left/Right. > > On the other hand, I am not so keen on maximizing a window in only one > direction (vertically or horizontally) if I drag an edge of the window > to the edge of the screen. Windows has that for the vertical > direction. > > But I cannot remember the last time I wanted to maximize a > SystemWindow in Squeak... usually I find screen space to be more > precious (scarce?) here because there is no web browser or dedicated > text editor window, but rather a plethora of smaller windows floating > around, each of them preferably only one click away. And I like to > spare a hole somewhere to access the world menu... Maybe these habits > are also a result of the lack of an Alt+Tab or Expos? like feature by > default. > > 2016-01-11 22:01 GMT+01:00 Nicolas Cellier : >> I wanted to comment that there's even more upsetting: the maximize feature >> of windows 7 when dragging a window near display edge. >> But as long as we can disable the preference, it's ok for me. >> >> 2016-01-11 20:20 GMT+01:00 Chris Muller : >>> >>> Bernhard, please don't take this as offense but just as someone who's >>> interested in UI design -- I'm curious what people find to like about >>> this feature. I myself was so disappointed when Ubuntu did this to >>> Unity because being able to grab a window edge and slam the mouse to >>> the edge of the screen is an easy gross-motor gesture that facilitates >>> efficient window management; affording expansion in the desired >>> dimensions, and no expansion where it isn't desired. However, with >>> this feature the user is now forced to "be careful" when dragging >>> their window edges (don't get too close to the edge!) and so what was >>> a gross-motor became a fine-motor AND their mind is distracted this >>> having to wreste with the UI, because they want to make use of their >>> screen real-estate but, at least in Unity, when you get within 4 >>> pixels of the edge, SNAP. Now its covering many other windows I >>> didn't want covered, whilst presenting vast swaths of useless >>> whitespace (because its too big). >>> >>> I never much liked Operation... :) >>> >>> https://www.youtube.com/watch?v=_6MAkLJ79LE >>> >>> On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber >>> wrote: >>> > Dear all, >>> > >>> > I implemented a feature which some of you may know from Windows. When a >>> > SystemWindow is dragged to one of the edges it is resized to that half of >>> > the display. In addition, when it is dragged to one of the corners it is >>> > resized to that quadrant of the display. See the following packages in the >>> > Inbox: >>> > - GraphicsTests-bp.39 >>> > - Graphics-bp.321 >>> > - Morphic-bp.1064 >>> > In order to use it you need to enable the preference Drag To Edges in >>> > the Preference Browser, or just do: >>> > SystemWindow dragToEdges: true >>> > >>> > If you have time to try it out, let me know what you think. >>> > >>> > - Bernhard >>> >> > From Marcel.Taeumel at hpi.de Tue Jan 12 11:54:54 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Jan 12 12:16:09 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: References: Message-ID: <1452599694728-4870851.post@n4.nabble.com> Squeak 5.0 has new-style balloon tips enabled. So you have to deal with NewBalloonMorph class. If you disable them in preferences, you can go on working on the BalloonMorph class. If you enable alpha in the color, you might want to remove/disable the shadow that new-style balloon tips have. Best, Marcel -- View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4870851.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Jan 12 12:01:29 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Jan 12 12:22:43 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: <1452599694728-4870851.post@n4.nabble.com> References: <1452599694728-4870851.post@n4.nabble.com> Message-ID: <1452600089467-4870852.post@n4.nabble.com> Otherwise, you can display regular text objects in the new-style balloon tips. Just change the text color of the #balloonText to white and it should work. Like this: So we have to improve the following in NewBalloonMorph: - Disable the shadow if the balloon color has an alpha < 1.0 - Let each morph have its own balloon color (if it wants to) to better support text objects in Morph >> #balloonText: Best, Marcel -- View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4870852.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Jan 12 12:06:50 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Jan 12 12:28:04 2016 Subject: [squeak-dev] Re: The Inbox: Morphic-kfr.1064.mcz In-Reply-To: References: Message-ID: <1452600410508-4870853.post@n4.nabble.com> ScrollPanes should not have any knowlegde about SystemWindow. So storing the preference in SystemWindow >> #backgroundColor is not an option. It would make sense, however, to attach individual preference to those major widgets. So that ScrollPane has its own #backgroundColor. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Morphic-kfr-1064-mcz-tp4870404p4870853.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Jan 12 12:22:27 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Jan 12 12:43:42 2016 Subject: [squeak-dev] Re: Double-click gone missing? In-Reply-To: <5B41A5E0-BC35-41C6-B14C-71AD3EB2B587@rowledge.org> References: <3CFE0B61-F16F-4A7F-A13C-F694EA6ADE8E@rowledge.org> <5B41A5E0-BC35-41C6-B14C-71AD3EB2B587@rowledge.org> Message-ID: <1452601347904-4870855.post@n4.nabble.com> So it has been broken some time ago? There is just no double-click in the default tools? :) Best, Marcel -- View this message in context: http://forum.world.st/Double-click-gone-missing-tp4870802p4870855.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From ron at usmedrec.com Tue Jan 12 15:05:11 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Tue Jan 12 15:05:16 2016 Subject: [squeak-dev] Squeak Oversight Board Election 2016 Message-ID: <1a3501d14d4a$a33911c0$e9ab3540$@usmedrec.com> Hi All, It's that time again. Time to raise your voices and elect your leaders! It's a time for you to stand up, help your community and volunteer to serve! Squeak wants you! Every year we elect the SOB (Squeak Oversight Board) consisting of seven members from our community. The current board members are: 1. Bert Freudenberg 2. Eliot Miranda 3. Tim Rowledge 4. Frank Shearar 5. Craig Latta 6. Chris Muller 7. David T. Lewis For more info on the board please see: https://squeakboard.wordpress.com/our-mission/ Everything about the election, including schedule and more, can be tracked here: http://wiki.squeak.org/squeak/6346 Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB members and campaigning! Candidates should nominate themselves and start their campaign on the squeak-dev mailing list. Or if you nominate someone else, make sure that person really wants to run. :) I will not put anyone on the candidate list until that person makes it known on squeak-dev that he/she intends to run. During this period, the candidates should ideally present themselves on squeak-dev, unless they have already done so, and the community can ask questions. I encourage you to reach out to potential candidates, people that are active in the community and represent your views, and ask them to run. Some people will not run without encouragement. Also I know that some people wait to the last minute to run for the board to see if others will run but please consider getting this year off to a faster start and just jump right in! *** Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB members and campaigning! *** Monday 1st of February 2015 3PM (20.00 UTC): Candidate list is finalized. *** Monday 1st of February 2015 4PM (21.00 UTC): Online election starts. *** Tuesday 9th of February 2015 6PM (23.00 UTC): Online election ends. *** Results will be announced immediately when the election ends. The voting period is one week long and ballots are sent out via email. And how do you end up on the voter list? See below. :) IMPORTANT: New voters will NOT be added once the election is started. You MUST try to get on the voter list before the 1st of February 2014 or you will NOT be able to vote. If your Email has changed please make sure it is changed on the list of voters before the election starts. -------------------------- If you were invited to vote last year you are already on the voter list, no worries! If you are a new Squeaker and wish to vote do ONE of the following: * Get a "known" Squeaker to vouch for you. If a known Squeaker sends an email to voters (at) squeak.org giving me name and email for you, then I will add you. * Send an email to voters at squeak.org yourself (and CC to squeak-dev if you like) with information/arguments showing me that you are indeed serious about voting and that you are indeed a Squeaker. When the voting period starts all voters will receive an email with instructions and a link to the voting website. If there are any further questions, just reply *in this thread* and I will closely track it - or send email to voters (at) squeak.org which points to me. ...so let's get on with it! All the best, Ron Teitelbaum -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/625783cf/attachment.htm From asqueaker at gmail.com Tue Jan 12 16:40:34 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Jan 12 16:41:16 2016 Subject: [squeak-dev] an approach to ColorSchemes (was: The Inbox: Morphic-kfr.1064.mcz) Message-ID: > ScrollPanes should not have any knowlegde about SystemWindow. So storing the > preference in SystemWindow >> #backgroundColor is not an option. +1, but that is tangential to our discussion at the moment -- we just want to establish our "design" for enabling the ability to have different color sets. > It would make sense, however, to attach individual preference to those major > widgets. So that ScrollPane has its own #backgroundColor. Use-case #1 is: I'm working during the day, I want a brighter, black-on-white scheme, when night comes, I want to "one-click" switch to a white-on-black scheme **without changing or having to double-manage** any of my other Preferences in the system -- they remain untouched. I'm concerned that individual preferences scattered across a bunch of global class vars would inhibit my use-case above. Are you saying I would have to go into Preferernces panel and change the 30-50 "individual preferences" to go to night mode? To have "color themes" someone would have to write a methods to update all the globals, something like this: ScrollPane backgroundColor: ... ScrollPane foregroundColor: ... SystemWindow titlebarBackgroundColor: ... SystemWindow titlebarForegroundColor: ... UserDialogBoxMorph backgroundColor: ... UserDialogBoxMorph foregroundColor: ... And what package would such methods be written in? They have to reference the entire system, so there would be dependency issues. Every time we discover a new thing needing color we'll have to update this method... That's why I think we store colors into ColorSchemes which can be swapped out whole and grow organically instead of a bunch of class-vars. I don't care about exact the implementation details, just that we make something flexible and easy to use and maintain, not brittle. Please. From karlramberg at gmail.com Tue Jan 12 16:58:13 2016 From: karlramberg at gmail.com (karl ramberg) Date: Tue Jan 12 16:58:17 2016 Subject: [squeak-dev] an approach to ColorSchemes (was: The Inbox: Morphic-kfr.1064.mcz) In-Reply-To: References: Message-ID: We already have the WindowColorRegistry, so we could extend that to have background color Best, Karl On Tue, Jan 12, 2016 at 5:40 PM, Chris Muller wrote: > > ScrollPanes should not have any knowlegde about SystemWindow. So storing > the > > preference in SystemWindow >> #backgroundColor is not an option. > > +1, but that is tangential to our discussion at the moment -- we just > want to establish our "design" for enabling the ability to have > different color sets. > > > It would make sense, however, to attach individual preference to those > major > > widgets. So that ScrollPane has its own #backgroundColor. > > Use-case #1 is: I'm working during the day, I want a brighter, > black-on-white scheme, when night comes, I want to "one-click" switch > to a white-on-black scheme **without changing or having to > double-manage** any of my other Preferences in the system -- they > remain untouched. > > I'm concerned that individual preferences scattered across a bunch of > global class vars would inhibit my use-case above. Are you saying I > would have to go into Preferernces panel and change the 30-50 > "individual preferences" to go to night mode? To have "color themes" > someone would have to write a methods to update all the globals, > something like this: > > ScrollPane backgroundColor: ... > ScrollPane foregroundColor: ... > SystemWindow titlebarBackgroundColor: ... > SystemWindow titlebarForegroundColor: ... > UserDialogBoxMorph backgroundColor: ... > UserDialogBoxMorph foregroundColor: ... > > And what package would such methods be written in? They have to > reference the entire system, so there would be dependency issues. > Every time we discover a new thing needing color we'll have to update > this method... > > That's why I think we store colors into ColorSchemes which can be > swapped out whole and grow organically instead of a bunch of > class-vars. I don't care about exact the implementation details, just > that we make something flexible and easy to use and maintain, not > brittle. Please. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/bc7f932f/attachment.htm From tim at rowledge.org Tue Jan 12 18:17:57 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Jan 12 18:18:03 2016 Subject: [squeak-dev] Re: Double-click gone missing? In-Reply-To: <1452601347904-4870855.post@n4.nabble.com> References: <3CFE0B61-F16F-4A7F-A13C-F694EA6ADE8E@rowledge.org> <5B41A5E0-BC35-41C6-B14C-71AD3EB2B587@rowledge.org> <1452601347904-4870855.post@n4.nabble.com> Message-ID: > On 12-01-2016, at 4:22 AM, marcel.taeumel wrote: > > So it has been broken some time ago? There is just no double-click in the > default tools? :) It?s broken by Eliot?s recent changes to the millisecond time stuff. The vm still passes events in with a 32 bit timestamp based on ioMSecs() but the various ?faked? events we have to use such as MouseEvent>asMouseMove use Time>millisecondClockValue. Which *used* to be based on ioMSecs() as well but is no longer. Thus any d-clicking will generally have problems because the core MouseClickState code must inevitably get confused by the resultant attempts to compare ioMSecs() values in the few-million range with primitive 241 values in the range umpty-gazillion. The obvious nice way to deal with this is to upgrade the vm but that would screw all previous images and so on. Bad idea. Another option would be to add a method to one or other event related class to keep using the old prim for a millisecond value and update the user methods - ok for future images, mildly annoying but livable (maybe) for older ones. Or maybe it would be manageable to keep the millisecondsClockValue (either in the prim code or by in-image offset) working off the same base as the ioMSecs() code. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: FSRA: Forms Skip and Run-Away From nicolaihess at gmail.com Tue Jan 12 19:03:05 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Tue Jan 12 19:03:10 2016 Subject: [squeak-dev] How to make a scrollpane adjust to its content? Message-ID: See stackoverflow question http://stackoverflow.com/questions/34722545/how-to-make-a-scrollpane-adjust-to-its-content/34751687#34751687 all I came up with is calling sp setScrollDeltas. This will reset (or add or remove) the scrollbars. I was wondering why something like rows updateLayout or rows changed doesn't work. Do we have a way to let a ScrollPane "know" when the submorphs changed ? Some way for listening to newly added submorphs. Or add the pane to dependents for its scrolled area and notify on changes for submorphs or just the size? (The content morph ("rows" in this example) can automatically adjust its size when we add new submorphs) nicolai -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/ec27894b/attachment.htm From nicolaihess at gmail.com Tue Jan 12 19:06:14 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Tue Jan 12 19:06:17 2016 Subject: [Vm-dev] Re: [squeak-dev] valid pragma syntax In-Reply-To: References: Message-ID: 2016-01-10 16:57 GMT+01:00 Eliot Miranda : > > Hi Nicolai, > > On Sun, Jan 10, 2016 at 3:16 AM, Nicolai Hess > wrote: > >> pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" >> is nil >> >> >> is this valid pragma syntax: >> >> >> > > As others have said this is not a valid pragma. A valid pragma is a > message expression (a message with no receiver) that has only literal > arguments. There is one exception, to accept a variable name for the error > code in a primitive invocation. > > And as Levente has said it is a goal of the new FFI to get rid of the old > syntax you show above. > Thanks Eliot. I think I will wait what Esteban will say to this, he put those classes in the image, maybe he had a plan for the new ffi/apicall syntax > And as Igor Stasenko discovered /any/ C signature can be written as a > literal Array, providing we allow underscores in Symbols (which is a > preference). So for example, the heapsort declaration from the standard C > library: > > int > heapsort(void *base, size_t nel, size_t width, > int (*compar)(const void *, const void *)) > > could be written as a pragma via e.g. > > (*compar)(const void *, const void *)))> > > in which case it is equal to > > #size_t #width #, #int #( #* #compar ) #( #const #void #*, #const #void > #*)))> > > which, while a massive hack, is pretty neat. The only difficulty in > parsing the above s that void *, is #void #*, not #void #* #,. > > So for me, the natural pragma syntax for the new FFI should be a single > keyword starting with ffi that includes the language with which to parse > the pragma's argument, followed by a literal Array containing the signature > (rather than e.g. a String). I'd also provide a special-purpose > pretty-printer for literal arrays that would be used to pretty-print the > above, e.g. when decompiling. > > This would easily allow extensions such as > > #UnicodeString arg2is: Character> > > to guide a marshalling engine in providing automatic checks and > conversions. > > [Slightly OT] > Note that I'm already using this syntax in Alien callbacks because one > thing it does is to normalize the signature, eliminating the significance > of most whitespace (the #*, above being one example where it fails). So a > Callback for heapsort above looks like > > voidstarvoidstarRetint: callbackContext sp: spAlien > > ^callbackContext wordResult: > (block > value: (Alien forPointer: (spAlien unsignedLongAt: 1)) > value: (Alien forPointer: (spAlien unsignedLongAt: 5))) > > or > voidstarvoidstarRetintARM32: callbackContext sp: spAlien > > ^callbackContext wordResult: > (block > value: (Alien forPointer: (spAlien registerAt: 1)) > value: (Alien forPointer: (spAlien registerAt: 2))) > > > Hmmm, if Callback had subclasses for each ABI then the above would become > > IA32Callback methods for signature > voidstarvoidstarRetint: callbackContext sp: spAlien > > ^callbackContext wordResult: > (block > value: (Alien forPointer: (spAlien unsignedLongAt: 1)) > value: (Alien forPointer: (spAlien unsignedLongAt: 5))) > > ARM32Callback methods for signatures > voidstarvoidstarRetint: callbackContext sp: spAlien > > ^callbackContext wordResult: > (block > value: (Alien forPointer: (spAlien registerAt: 1)) > value: (Alien forPointer: (spAlien registerAt: 2))) > > Much nicer. I shall make it so. > > our (pharo) parser can not parse this (does not recognizes the >> "selector parts" (apicall:module:) right) >> >> Any recommendations how to fix this >> - fix RBParser or >> - change this pragma, for example, like this >> >> >> >> nicolai >> > > _,,,^..^,,,_ > best, Eliot > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/cdfa8905/attachment.htm From karlramberg at gmail.com Tue Jan 12 19:16:24 2016 From: karlramberg at gmail.com (karl ramberg) Date: Tue Jan 12 19:16:26 2016 Subject: [squeak-dev] How to make a scrollpane adjust to its content? In-Reply-To: References: Message-ID: sp setScrollDeltas Best, Karl On Tue, Jan 12, 2016 at 8:03 PM, Nicolai Hess wrote: > See stackoverflow question > > http://stackoverflow.com/questions/34722545/how-to-make-a-scrollpane-adjust-to-its-content/34751687#34751687 > > all I came up with is > calling > sp setScrollDeltas. > > This will reset (or add or remove) the scrollbars. > > I was wondering why something like > rows updateLayout or > rows changed > > doesn't work. > > Do we have a way to let a ScrollPane "know" when the submorphs changed ? > Some way for listening to newly added submorphs. Or add > the pane to dependents for its scrolled area and notify on changes for > submorphs or just > the size? > (The content morph ("rows" in this example) can automatically adjust its > size when we add new submorphs) > > > nicolai > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/9368a64e/attachment.htm From karlramberg at gmail.com Tue Jan 12 19:24:04 2016 From: karlramberg at gmail.com (karl ramberg) Date: Tue Jan 12 19:24:06 2016 Subject: [squeak-dev] How to make a scrollpane adjust to its content? In-Reply-To: References: Message-ID: Ugh, Didn't read the question correctly. I see any passive ways scroll delta is updated in the image. Best, Karl On Tue, Jan 12, 2016 at 8:16 PM, karl ramberg wrote: > sp setScrollDeltas > > Best, > Karl > > On Tue, Jan 12, 2016 at 8:03 PM, Nicolai Hess > wrote: > >> See stackoverflow question >> >> http://stackoverflow.com/questions/34722545/how-to-make-a-scrollpane-adjust-to-its-content/34751687#34751687 >> >> all I came up with is >> calling >> sp setScrollDeltas. >> >> This will reset (or add or remove) the scrollbars. >> >> I was wondering why something like >> rows updateLayout or >> rows changed >> >> doesn't work. >> >> Do we have a way to let a ScrollPane "know" when the submorphs changed ? >> Some way for listening to newly added submorphs. Or add >> the pane to dependents for its scrolled area and notify on changes for >> submorphs or just >> the size? >> (The content morph ("rows" in this example) can automatically adjust its >> size when we add new submorphs) >> >> >> nicolai >> >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/4141df1a/attachment-0001.htm From nicolaihess at gmail.com Tue Jan 12 19:28:05 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Tue Jan 12 19:28:08 2016 Subject: [squeak-dev] How to make a scrollpane adjust to its content? In-Reply-To: References: Message-ID: Am 12.01.2016 8:24 nachm. schrieb "karl ramberg" : > > Ugh, > Didn't read the question correctly. :-) > > I see any passive ways scroll delta is updated in the image. OK, thanks. > > Best, > Karl > > > On Tue, Jan 12, 2016 at 8:16 PM, karl ramberg wrote: >> >> sp setScrollDeltas >> >> Best, >> Karl >> >> On Tue, Jan 12, 2016 at 8:03 PM, Nicolai Hess wrote: >>> >>> See stackoverflow question >>> http://stackoverflow.com/questions/34722545/how-to-make-a-scrollpane-adjust-to-its-content/34751687#34751687 >>> >>> all I came up with is >>> calling >>> sp setScrollDeltas. >>> >>> This will reset (or add or remove) the scrollbars. >>> >>> I was wondering why something like >>> rows updateLayout or >>> rows changed >>> >>> doesn't work. >>> >>> Do we have a way to let a ScrollPane "know" when the submorphs changed ? >>> Some way for listening to newly added submorphs. Or add >>> the pane to dependents for its scrolled area and notify on changes for submorphs or just >>> the size? >>> (The content morph ("rows" in this example) can automatically adjust its >>> size when we add new submorphs) >>> >>> >>> nicolai >>> >>> >>> >>> >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/4c65000a/attachment.htm From ron at usmedrec.com Tue Jan 12 19:29:43 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Tue Jan 12 19:29:44 2016 Subject: [squeak-dev] Squeak Oversight Board Election 2016 In-Reply-To: <1a1401d14d49$47548d90$d5fda8b0$@3dicc.com> References: <1a1401d14d49$47548d90$d5fda8b0$@3dicc.com> Message-ID: <1b5e01d14d6f$9716fdb0$c544f910$@usmedrec.com> Hi All, Correction. Current board members are: 1. Bert Freudenberg 2. Eliot Miranda 3. Tim Rowledge 4. Craig Latta 5. David T. Lewis 6. Chris Muller 7. Marcel Taeumel Sorry about that. Comes from using the same email from last year! :) Now is the time to announce your candidacy! Thank you to everyone that has volunteered to serve in the past. I'm hoping you will volunteer to run again! Squeak Needs You! All the best, Ron Teitelbaum -----Original Message----- From: Ron Teitelbaum [mailto:ron@3dicc.com] Sent: Tuesday, January 12, 2016 9:55 AM To: 'The general-purpose Squeak developers list'; 'Squeak Oversight Board Discussion'; squeakland@squeakland.org; voters@squeak.org; 'Squeak Virtual Machine Development Discussion' Subject: Squeak Oversight Board Election 2016 Hi All, It's that time again. Time to raise your voices and elect your leaders! It's a time for you to stand up, help your community and volunteer to serve! Squeak wants you! Every year we elect the SOB (Squeak Oversight Board) consisting of seven members from our community. The current board members are: 1. Bert Freudenberg 2. Eliot Miranda 3. Tim Rowledge 4. Frank Shearar 5. Craig Latta 6. Chris Muller 7. David T. Lewis For more info on the board please see: https://squeakboard.wordpress.com/our-mission/ Everything about the election, including schedule and more, can be tracked here: http://wiki.squeak.org/squeak/6346 Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB members and campaigning! Candidates should nominate themselves and start their campaign on the squeak-dev mailing list. Or if you nominate someone else, make sure that person really wants to run. :) I will not put anyone on the candidate list until that person makes it known on squeak-dev that he/she intends to run. During this period, the candidates should ideally present themselves on squeak-dev, unless they have already done so, and the community can ask questions. I encourage you to reach out to potential candidates, people that are active in the community and represent your views, and ask them to run. Some people will not run without encouragement. Also I know that some people wait to the last minute to run for the board to see if others will run but please consider getting this year off to a faster start and just jump right in! *** Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB members and campaigning! *** Monday 1st of February 2015 3PM (20.00 UTC): Candidate list is finalized. *** Monday 1st of February 2015 4PM (21.00 UTC): Online election starts. *** Tuesday 9th of February 2015 6PM (23.00 UTC): Online election ends. *** Results will be announced immediately when the election ends. The voting period is one week long and ballots are sent out via email. And how do you end up on the voter list? See below. :) IMPORTANT: New voters will NOT be added once the election is started. You MUST try to get on the voter list before the 1st of February 2014 or you will NOT be able to vote. If your Email has changed please make sure it is changed on the list of voters before the election starts. -------------------------- If you were invited to vote last year you are already on the voter list, no worries! If you are a new Squeaker and wish to vote do ONE of the following: * Get a "known" Squeaker to vouch for you. If a known Squeaker sends an email to voters (at) squeak.org giving me name and email for you, then I will add you. * Send an email to voters at squeak.org yourself (and CC to squeak-dev if you like) with information/arguments showing me that you are indeed serious about voting and that you are indeed a Squeaker. When the voting period starts all voters will receive an email with instructions and a link to the voting website. If there are any further questions, just reply *in this thread* and I will closely track it - or send email to voters (at) squeak.org which points to me. ...so let's get on with it! All the best, Ron Teitelbaum From tim at rowledge.org Tue Jan 12 19:38:42 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Jan 12 19:38:47 2016 Subject: [squeak-dev] Squeak Oversight Board Election 2016 In-Reply-To: <1b5e01d14d6f$9716fdb0$c544f910$@usmedrec.com> References: <1a1401d14d49$47548d90$d5fda8b0$@3dicc.com> <1b5e01d14d6f$9716fdb0$c544f910$@usmedrec.com> Message-ID: <7E34FC47-725C-408A-B316-BD8C42C40A77@rowledge.org> > On 12-01-2016, at 11:29 AM, Ron Teitelbaum wrote: > > It's that time again. Time to raise your voices and elect your leaders! > It's a time for you to stand up, help your community and volunteer to serve! > Squeak wants you! I?ll stand again. If you support me there will be pot in every garage and a chicken in every car![1] Or something like that. tim [1] http://www.infoplease.com/askeds/promising-chicken-every-pot.html -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim After a number of decimal places, nobody gives a damn. From commits at source.squeak.org Tue Jan 12 19:51:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 12 19:51:54 2016 Subject: [squeak-dev] The Inbox: Morphic-bp.1065.mcz Message-ID: Bernhard Pieber uploaded a new version of Morphic to project The Inbox: http://source.squeak.org/inbox/Morphic-bp.1065.mcz ==================== Summary ==================== Name: Morphic-bp.1065 Author: bp Time: 12 January 2016, 8:49:11.009884 pm UUID: e97e37b1-39c8-49e1-8f5d-e41afb141f86 Ancestors: Morphic-bp.1064 Some code improvements inspired by Marcel Taeumels code review. Thanks! =============== Diff against Morphic-bp.1064 =============== Item was changed: ----- Method: SystemWindow>>doFastFrameDrag: (in category 'events') ----- doFastFrameDrag: grabPoint "Do fast frame dragging from the given point" + | offset newBounds outerWorldBounds clearArea | - | offset newBounds outerWorldBounds | outerWorldBounds := self boundsIn: nil. offset := outerWorldBounds origin - grabPoint. + clearArea := ActiveWorld clearArea. newBounds := outerWorldBounds newRectFrom: [:f | + | p selector | - | p a selector | p := Sensor cursorPoint. + (self class dragToEdges and: [(selector := self dragToEdgesSelectorFor: p in: clearArea) notNil]) + ifTrue: [clearArea perform: selector] - a := ActiveWorld clearArea. - (self class dragToEdges and: [(selector := self dragToEdgesSelectorFor: p in: a) notNil]) - ifTrue: [a perform: selector] ifFalse: [p + offset extent: outerWorldBounds extent]]. self bounds: newBounds; comeToFront! Item was added: + ----- Method: SystemWindow>>dragToEdgeDistance (in category 'resize/collapse') ----- + dragToEdgeDistance + ^10! Item was changed: ----- Method: SystemWindow>>dragToEdgesSelectorFor:in: (in category 'resize/collapse') ----- dragToEdgesSelectorFor: p in: a "answer first matching drag resize selector, if none is found, answer nil" + #(isPoint:nearTopLeftOf: isPoint:nearTopRightOf: isPoint:nearBottomLeftOf: isPoint:nearBottomRightOf: isPoint:nearTopOf: isPoint:nearBottomOf: isPoint:nearLeftOf: isPoint:nearRightOf:) - #(point:nearTopLeftOf: point:nearTopRightOf: point:nearBottomLeftOf: point:nearBottomRightOf: point:nearTopOf: point:nearBottomOf: point:nearLeftOf: point:nearRightOf:) with: #(topLeftQuadrant topRightQuadrant bottomLeftQuadrant bottomRightQuadrant topHalf bottomHalf leftHalf rightHalf) do: [:predicate :selector | (self perform: predicate with: p with: a) ifTrue: [^selector]]. ^nil! Item was added: + ----- Method: SystemWindow>>isPoint:nearBottomLeftOf: (in category 'resize/collapse') ----- + isPoint: p nearBottomLeftOf: a + ^(self isPoint: p nearBottomOf: a) and: [self isPoint: p nearLeftOf: a]! Item was added: + ----- Method: SystemWindow>>isPoint:nearBottomOf: (in category 'resize/collapse') ----- + isPoint: p nearBottomOf: a + ^p y > (a bottom - self dragToEdgeDistance)! Item was added: + ----- Method: SystemWindow>>isPoint:nearBottomRightOf: (in category 'resize/collapse') ----- + isPoint: p nearBottomRightOf: a + ^(self isPoint: p nearBottomOf: a) and: [self isPoint: p nearRightOf: a]! Item was added: + ----- Method: SystemWindow>>isPoint:nearLeftOf: (in category 'resize/collapse') ----- + isPoint: p nearLeftOf: a + ^p x < (a left + self dragToEdgeDistance)! Item was added: + ----- Method: SystemWindow>>isPoint:nearRightOf: (in category 'resize/collapse') ----- + isPoint: p nearRightOf: a + ^p x > (a right - self dragToEdgeDistance)! Item was added: + ----- Method: SystemWindow>>isPoint:nearTopLeftOf: (in category 'resize/collapse') ----- + isPoint: p nearTopLeftOf: a + ^(self isPoint: p nearTopOf: a) and: [self isPoint: p nearLeftOf: a]! Item was added: + ----- Method: SystemWindow>>isPoint:nearTopOf: (in category 'resize/collapse') ----- + isPoint: p nearTopOf: a + ^p y < (a top + self dragToEdgeDistance)! Item was added: + ----- Method: SystemWindow>>isPoint:nearTopRightOf: (in category 'resize/collapse') ----- + isPoint: p nearTopRightOf: a + ^(self isPoint: p nearTopOf: a) and: [self isPoint: p nearRightOf: a]! Item was removed: - ----- Method: SystemWindow>>point:nearBottomLeftOf: (in category 'resize/collapse') ----- - point: p nearBottomLeftOf: a - ^(self point: p nearBottomOf: a) and: [self point: p nearLeftOf: a]! Item was removed: - ----- Method: SystemWindow>>point:nearBottomOf: (in category 'resize/collapse') ----- - point: p nearBottomOf: a - ^p y > (a bottom - 10)! Item was removed: - ----- Method: SystemWindow>>point:nearBottomRightOf: (in category 'resize/collapse') ----- - point: p nearBottomRightOf: a - ^(self point: p nearBottomOf: a) and: [self point: p nearRightOf: a]! Item was removed: - ----- Method: SystemWindow>>point:nearLeftOf: (in category 'resize/collapse') ----- - point: p nearLeftOf: a - ^p x < (a left + 10)! Item was removed: - ----- Method: SystemWindow>>point:nearRightOf: (in category 'resize/collapse') ----- - point: p nearRightOf: a - ^p x > (a right - 10)! Item was removed: - ----- Method: SystemWindow>>point:nearTopLeftOf: (in category 'resize/collapse') ----- - point: p nearTopLeftOf: a - ^(self point: p nearTopOf: a) and: [self point: p nearLeftOf: a]! Item was removed: - ----- Method: SystemWindow>>point:nearTopOf: (in category 'resize/collapse') ----- - point: p nearTopOf: a - ^p y < (a top + 10)! Item was removed: - ----- Method: SystemWindow>>point:nearTopRightOf: (in category 'resize/collapse') ----- - point: p nearTopRightOf: a - ^(self point: p nearTopOf: a) and: [self point: p nearRightOf: a]! From estebanlm at gmail.com Tue Jan 12 19:57:14 2016 From: estebanlm at gmail.com (Esteban Lorenzano) Date: Tue Jan 12 19:57:21 2016 Subject: [Vm-dev] [squeak-dev] valid pragma syntax In-Reply-To: References: Message-ID: <4729CFF7-0781-4FFA-9A44-8CC1BFAAB969@gmail.com> well? UnifiedFFI, UFFI or whatever it will be called already does that? as you know. Currently we are using ?older? NB way: as a method call, then solving it in first call. This is nice because is compatible and easies some stuff. But final objective is to provide a pragma and solve it in compilation time. Then we can 100% deprecate the invalid pragma old FFI uses today. At least, that?s what we have talk :) Esteban > On 12 Jan 2016, at 20:06, Nicolai Hess wrote: > > > > 2016-01-10 16:57 GMT+01:00 Eliot Miranda >: > > Hi Nicolai, > > On Sun, Jan 10, 2016 at 3:16 AM, Nicolai Hess > wrote: > pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" is nil > > > is this valid pragma syntax: > > > > As others have said this is not a valid pragma. A valid pragma is a message expression (a message with no receiver) that has only literal arguments. There is one exception, to accept a variable name for the error code in a primitive invocation. > > And as Levente has said it is a goal of the new FFI to get rid of the old syntax you show above. > > > Thanks Eliot. > > I think I will wait what Esteban will say to this, he put those classes in the image, maybe he had a plan for the new ffi/apicall syntax > > > > And as Igor Stasenko discovered /any/ C signature can be written as a literal Array, providing we allow underscores in Symbols (which is a preference). So for example, the heapsort declaration from the standard C library: > > int > heapsort(void *base, size_t nel, size_t width, > int (*compar)(const void *, const void *)) > > could be written as a pragma via e.g. > > > > in which case it is equal to > > > > which, while a massive hack, is pretty neat. The only difficulty in parsing the above s that void *, is #void #*, not #void #* #,. > > So for me, the natural pragma syntax for the new FFI should be a single keyword starting with ffi that includes the language with which to parse the pragma's argument, followed by a literal Array containing the signature (rather than e.g. a String). I'd also provide a special-purpose pretty-printer for literal arrays that would be used to pretty-print the above, e.g. when decompiling. > > This would easily allow extensions such as > > > > to guide a marshalling engine in providing automatic checks and conversions. > > [Slightly OT] > Note that I'm already using this syntax in Alien callbacks because one thing it does is to normalize the signature, eliminating the significance of most whitespace (the #*, above being one example where it fails). So a Callback for heapsort above looks like > > voidstarvoidstarRetint: callbackContext sp: spAlien > > ^callbackContext wordResult: > (block > value: (Alien forPointer: (spAlien unsignedLongAt: 1)) > value: (Alien forPointer: (spAlien unsignedLongAt: 5))) > > or > voidstarvoidstarRetintARM32: callbackContext sp: spAlien > > ^callbackContext wordResult: > (block > value: (Alien forPointer: (spAlien registerAt: 1)) > value: (Alien forPointer: (spAlien registerAt: 2))) > > > Hmmm, if Callback had subclasses for each ABI then the above would become > > IA32Callback methods for signature > voidstarvoidstarRetint: callbackContext sp: spAlien > > ^callbackContext wordResult: > (block > value: (Alien forPointer: (spAlien unsignedLongAt: 1)) > value: (Alien forPointer: (spAlien unsignedLongAt: 5))) > > ARM32Callback methods for signatures > voidstarvoidstarRetint: callbackContext sp: spAlien > > ^callbackContext wordResult: > (block > value: (Alien forPointer: (spAlien registerAt: 1)) > value: (Alien forPointer: (spAlien registerAt: 2))) > > Much nicer. I shall make it so. > > our (pharo) parser can not parse this (does not recognizes the > "selector parts" (apicall:module:) right) > > Any recommendations how to fix this > - fix RBParser or > - change this pragma, for example, like this > > > > nicolai > > _,,,^..^,,,_ > best, Eliot > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/2e55cd14/attachment.htm From nicolaihess at gmail.com Tue Jan 12 20:12:07 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Tue Jan 12 20:12:09 2016 Subject: [Vm-dev] [squeak-dev] valid pragma syntax In-Reply-To: <4729CFF7-0781-4FFA-9A44-8CC1BFAAB969@gmail.com> References: <4729CFF7-0781-4FFA-9A44-8CC1BFAAB969@gmail.com> Message-ID: 2016-01-12 20:57 GMT+01:00 Esteban Lorenzano : > > well? UnifiedFFI, UFFI or whatever it will be called already does that? as > you know. > Currently we are using ?older? NB way: as a method call, then solving it > in first call. This is nice because is compatible and easies some stuff. > But final objective is to provide a pragma and solve it in compilation > time. > > Then we can 100% deprecate the invalid pragma old FFI uses today. > But how do we solve the issue? > > At least, that?s what we have talk :) > > Esteban > > On 12 Jan 2016, at 20:06, Nicolai Hess wrote: > > > > 2016-01-10 16:57 GMT+01:00 Eliot Miranda : > >> >> Hi Nicolai, >> >> On Sun, Jan 10, 2016 at 3:16 AM, Nicolai Hess >> wrote: >> >>> pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" >>> is nil >>> >>> >>> is this valid pragma syntax: >>> >>> >>> >> >> As others have said this is not a valid pragma. A valid pragma is a >> message expression (a message with no receiver) that has only literal >> arguments. There is one exception, to accept a variable name for the error >> code in a primitive invocation. >> >> And as Levente has said it is a goal of the new FFI to get rid of the old >> syntax you show above. >> > > > Thanks Eliot. > > I think I will wait what Esteban will say to this, he put those classes in > the image, maybe he had a plan for the new ffi/apicall syntax > > > >> And as Igor Stasenko discovered /any/ C signature can be written as a >> literal Array, providing we allow underscores in Symbols (which is a >> preference). So for example, the heapsort declaration from the standard C >> library: >> >> int >> heapsort(void *base, size_t nel, size_t width, >> int (*compar)(const void *, const void *)) >> >> could be written as a pragma via e.g. >> >> > (*compar)(const void *, const void *)))> >> >> in which case it is equal to >> >> > #size_t #width #, #int #( #* #compar ) #( #const #void #*, #const #void >> #*)))> >> >> which, while a massive hack, is pretty neat. The only difficulty in >> parsing the above s that void *, is #void #*, not #void #* #,. >> >> So for me, the natural pragma syntax for the new FFI should be a single >> keyword starting with ffi that includes the language with which to parse >> the pragma's argument, followed by a literal Array containing the signature >> (rather than e.g. a String). I'd also provide a special-purpose >> pretty-printer for literal arrays that would be used to pretty-print the >> above, e.g. when decompiling. >> >> This would easily allow extensions such as >> >> > #UnicodeString arg2is: Character> >> >> to guide a marshalling engine in providing automatic checks and >> conversions. >> >> [Slightly OT] >> Note that I'm already using this syntax in Alien callbacks because one >> thing it does is to normalize the signature, eliminating the significance >> of most whitespace (the #*, above being one example where it fails). So a >> Callback for heapsort above looks like >> >> voidstarvoidstarRetint: callbackContext sp: spAlien >> >> ^callbackContext wordResult: >> (block >> value: (Alien forPointer: (spAlien unsignedLongAt: 1)) >> value: (Alien forPointer: (spAlien unsignedLongAt: 5))) >> >> or >> voidstarvoidstarRetintARM32: callbackContext sp: spAlien >> >> ^callbackContext wordResult: >> (block >> value: (Alien forPointer: (spAlien registerAt: 1)) >> value: (Alien forPointer: (spAlien registerAt: 2))) >> >> >> Hmmm, if Callback had subclasses for each ABI then the above would become >> >> IA32Callback methods for signature >> voidstarvoidstarRetint: callbackContext sp: spAlien >> >> ^callbackContext wordResult: >> (block >> value: (Alien forPointer: (spAlien unsignedLongAt: 1)) >> value: (Alien forPointer: (spAlien unsignedLongAt: 5))) >> >> ARM32Callback methods for signatures >> voidstarvoidstarRetint: callbackContext sp: spAlien >> >> ^callbackContext wordResult: >> (block >> value: (Alien forPointer: (spAlien registerAt: 1)) >> value: (Alien forPointer: (spAlien registerAt: 2))) >> >> Much nicer. I shall make it so. >> >> our (pharo) parser can not parse this (does not recognizes the >>> "selector parts" (apicall:module:) right) >>> >>> Any recommendations how to fix this >>> - fix RBParser or >>> - change this pragma, for example, like this >>> >>> >>> >>> nicolai >>> >> >> _,,,^..^,,,_ >> best, Eliot >> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/60d3527a/attachment.htm From estebanlm at gmail.com Tue Jan 12 20:22:56 2016 From: estebanlm at gmail.com (Esteban Lorenzano) Date: Tue Jan 12 20:23:01 2016 Subject: [Vm-dev] [squeak-dev] valid pragma syntax In-Reply-To: References: <4729CFF7-0781-4FFA-9A44-8CC1BFAAB969@gmail.com> Message-ID: <9164332B-E8C0-48E6-B310-FFB7BAF4C8E2@gmail.com> > On 12 Jan 2016, at 21:12, Nicolai Hess wrote: > > > > 2016-01-12 20:57 GMT+01:00 Esteban Lorenzano >: > > well? UnifiedFFI, UFFI or whatever it will be called already does that? as you know. > Currently we are using ?older? NB way: as a method call, then solving it in first call. This is nice because is compatible and easies some stuff. > But final objective is to provide a pragma and solve it in compilation time. > > Then we can 100% deprecate the invalid pragma old FFI uses today. > > But how do we solve the issue? Well, we should add an #visitFFIPragmaNode: who can deal with it, in the mean time :) Esteban > > > At least, that?s what we have talk :) > > Esteban > >> On 12 Jan 2016, at 20:06, Nicolai Hess > wrote: >> >> >> >> 2016-01-10 16:57 GMT+01:00 Eliot Miranda >: >> >> Hi Nicolai, >> >> On Sun, Jan 10, 2016 at 3:16 AM, Nicolai Hess > wrote: >> pharo fogbugz issue: 17359 MessageNotUnderstood: receiver of "keywords" is nil >> >> >> is this valid pragma syntax: >> >> >> >> As others have said this is not a valid pragma. A valid pragma is a message expression (a message with no receiver) that has only literal arguments. There is one exception, to accept a variable name for the error code in a primitive invocation. >> >> And as Levente has said it is a goal of the new FFI to get rid of the old syntax you show above. >> >> >> Thanks Eliot. >> >> I think I will wait what Esteban will say to this, he put those classes in the image, maybe he had a plan for the new ffi/apicall syntax >> >> >> >> And as Igor Stasenko discovered /any/ C signature can be written as a literal Array, providing we allow underscores in Symbols (which is a preference). So for example, the heapsort declaration from the standard C library: >> >> int >> heapsort(void *base, size_t nel, size_t width, >> int (*compar)(const void *, const void *)) >> >> could be written as a pragma via e.g. >> >> >> >> in which case it is equal to >> >> >> >> which, while a massive hack, is pretty neat. The only difficulty in parsing the above s that void *, is #void #*, not #void #* #,. >> >> So for me, the natural pragma syntax for the new FFI should be a single keyword starting with ffi that includes the language with which to parse the pragma's argument, followed by a literal Array containing the signature (rather than e.g. a String). I'd also provide a special-purpose pretty-printer for literal arrays that would be used to pretty-print the above, e.g. when decompiling. >> >> This would easily allow extensions such as >> >> >> >> to guide a marshalling engine in providing automatic checks and conversions. >> >> [Slightly OT] >> Note that I'm already using this syntax in Alien callbacks because one thing it does is to normalize the signature, eliminating the significance of most whitespace (the #*, above being one example where it fails). So a Callback for heapsort above looks like >> >> voidstarvoidstarRetint: callbackContext sp: spAlien >> >> ^callbackContext wordResult: >> (block >> value: (Alien forPointer: (spAlien unsignedLongAt: 1)) >> value: (Alien forPointer: (spAlien unsignedLongAt: 5))) >> >> or >> voidstarvoidstarRetintARM32: callbackContext sp: spAlien >> >> ^callbackContext wordResult: >> (block >> value: (Alien forPointer: (spAlien registerAt: 1)) >> value: (Alien forPointer: (spAlien registerAt: 2))) >> >> >> Hmmm, if Callback had subclasses for each ABI then the above would become >> >> IA32Callback methods for signature >> voidstarvoidstarRetint: callbackContext sp: spAlien >> >> ^callbackContext wordResult: >> (block >> value: (Alien forPointer: (spAlien unsignedLongAt: 1)) >> value: (Alien forPointer: (spAlien unsignedLongAt: 5))) >> >> ARM32Callback methods for signatures >> voidstarvoidstarRetint: callbackContext sp: spAlien >> >> ^callbackContext wordResult: >> (block >> value: (Alien forPointer: (spAlien registerAt: 1)) >> value: (Alien forPointer: (spAlien registerAt: 2))) >> >> Much nicer. I shall make it so. >> >> our (pharo) parser can not parse this (does not recognizes the >> "selector parts" (apicall:module:) right) >> >> Any recommendations how to fix this >> - fix RBParser or >> - change this pragma, for example, like this >> >> >> >> nicolai >> >> _,,,^..^,,,_ >> best, Eliot >> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/d66c8cdd/attachment.htm From eliot.miranda at gmail.com Tue Jan 12 22:20:13 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Jan 12 22:20:31 2016 Subject: [squeak-dev] Re: Double-click gone missing? In-Reply-To: References: <3CFE0B61-F16F-4A7F-A13C-F694EA6ADE8E@rowledge.org> <5B41A5E0-BC35-41C6-B14C-71AD3EB2B587@rowledge.org> <1452601347904-4870855.post@n4.nabble.com> Message-ID: On Tue, Jan 12, 2016 at 10:17 AM, tim Rowledge wrote: > > > On 12-01-2016, at 4:22 AM, marcel.taeumel wrote: > > > > So it has been broken some time ago? There is just no double-click in the > > default tools? :) > > It?s broken by Eliot?s recent changes to the millisecond time stuff. The > vm still passes events in with a 32 bit timestamp based on ioMSecs() but > the various ?faked? events we have to use such as MouseEvent>asMouseMove > use Time>millisecondClockValue. Which *used* to be based on ioMSecs() as > well but is no longer. Thus any d-clicking will generally have problems > because the core MouseClickState code must inevitably get confused by the > resultant attempts to compare ioMSecs() values in the few-million range > with primitive 241 values in the range umpty-gazillion. > Ah! OK, I'll try and fix this pronto. > > The obvious nice way to deal with this is to upgrade the vm but that would > screw all previous images and so on. Bad idea. Another option would be to > add a method to one or other event related class to keep using the old prim > for a millisecond value and update the user methods - ok for future images, > mildly annoying but livable (maybe) for older ones. Or maybe it would be > manageable to keep the millisecondsClockValue (either in the prim code or > by in-image offset) working off the same base as the ioMSecs() code. > Yes, I think with my changes there needs to be another change which adds a delta to the value answered by the millisecond clock until the VM is upgraded suitably. I'll take a look at this promptly. And in the mean time apologies. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: FSRA: Forms Skip and Run-Away > > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160112/5ac01cf0/attachment.htm From asqueaker at gmail.com Tue Jan 12 23:39:33 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Jan 12 23:40:15 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: <1452600089467-4870852.post@n4.nabble.com> References: <1452599694728-4870851.post@n4.nabble.com> <1452600089467-4870852.post@n4.nabble.com> Message-ID: I overrode Morph>>#showBalloon:hand: to take out the drop shadow, but trasluncent color is still not being honored. I like the look of the NewBalloonMorph, but I don't understand why it seems less functional / flexible than the old BalloonMorph.. I added to the end of Morph>>#showBalloon:hand: .... snip... balloon hasDropShadow: false. "<--- added this" balloon popUpFor: self hand: h. I also want rounded corners on my NewBalloonMorph, but since it no longer inherits from BorderedMorph I'm not able to do that. Classic BalloonMorph has the ability to do that or not, as desired.. I don't need each Morph to have its own balloon color, but I do want to be able to control all the attributes of all Balloons. There are a lot of attributes right? -- background-color, foreground-color, font, border-thickness, border-style, shadow presence or not, etc. -- so I wonder whether we shouldn't just have a "preferredBalloonPrototype" preference from which we can make a deepCopy each time? The the prototype would BE the "settings"... On Tue, Jan 12, 2016 at 6:01 AM, marcel.taeumel wrote: > Otherwise, you can display regular text objects in the new-style balloon > tips. Just change the text color of the #balloonText to white and it should > work. > > Like this: > > > > So we have to improve the following in NewBalloonMorph: > > - Disable the shadow if the balloon color has an alpha < 1.0 > - Let each morph have its own balloon color (if it wants to) to better > support text objects in Morph >> #balloonText: > > Best, > Marcel > > > > > -- > View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4870852.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From Marcel.Taeumel at hpi.de Wed Jan 13 06:35:35 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 06:56:55 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: References: <1452599694728-4870851.post@n4.nabble.com> <1452600089467-4870852.post@n4.nabble.com> Message-ID: <1452666935230-4871023.post@n4.nabble.com> I will have look at it. Best, Marcel -- View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4871023.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Jan 13 06:40:20 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 07:01:39 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: <1452666935230-4871023.post@n4.nabble.com> References: <1452599694728-4870851.post@n4.nabble.com> <1452600089467-4870852.post@n4.nabble.com> <1452666935230-4871023.post@n4.nabble.com> Message-ID: <1452667220383-4871024.post@n4.nabble.com> Btw: Rounded corners are bound to "rounded menu corners" --- do you we need an extra preference for that, too? Best, Marcel -- View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4871024.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From nicolaihess at gmail.com Wed Jan 13 07:16:25 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Wed Jan 13 07:16:28 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: <1452667220383-4871024.post@n4.nabble.com> References: <1452599694728-4870851.post@n4.nabble.com> <1452600089467-4870852.post@n4.nabble.com> <1452666935230-4871023.post@n4.nabble.com> <1452667220383-4871024.post@n4.nabble.com> Message-ID: BTW, @marcel, you did some work for rounded corners. Can you look at the bug about rounded scrollbars, they look really Str?nge. Am 13.01.2016 8:01 vorm. schrieb "marcel.taeumel" : > Btw: Rounded corners are bound to "rounded menu corners" --- do you we need > an extra preference for that, too? > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4871024.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/20160113/0863113c/attachment-0001.htm From nicolaihess at gmail.com Wed Jan 13 07:17:32 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Wed Jan 13 07:17:35 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: References: <1452599694728-4870851.post@n4.nabble.com> <1452600089467-4870852.post@n4.nabble.com> <1452666935230-4871023.post@n4.nabble.com> <1452667220383-4871024.post@n4.nabble.com> Message-ID: Am 13.01.2016 8:16 vorm. schrieb "Nicolai Hess" : > > BTW, > @marcel, you did some work for rounded corners. Can you look at the bug about rounded scrollbars, they look really Str?nge. "strange" > > Am 13.01.2016 8:01 vorm. schrieb "marcel.taeumel" : >> >> Btw: Rounded corners are bound to "rounded menu corners" --- do you we need >> an extra preference for that, too? >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4871024.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/20160113/91c0635c/attachment.htm From commits at source.squeak.org Wed Jan 13 07:54:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 13 07:54:15 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1064.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1064.mcz ==================== Summary ==================== Name: Morphic-mt.1064 Author: mt Time: 13 January 2016, 8:53:36.98468 am UUID: 90ae0497-e619-4289-abf1-602c0895cc4e Ancestors: Morphic-eem.1063 Fixes some hard-coded values in new-style balloon morphs. That is, make default text color configurable and the drop shadow react to #menuAppearance3d just like everywhere else. =============== Diff against Morphic-eem.1063 =============== Item was changed: + ----- Method: BalloonMorph class>>balloonColor (in category 'preferences') ----- - ----- Method: BalloonMorph class>>balloonColor (in category 'utility') ----- balloonColor + + + + ^ BalloonColor ifNil: [(TranslucentColor r: 0.92 g: 0.92 b: 0.706 alpha: 0.749)]! - ^ BalloonColor! Item was added: + ----- Method: BalloonMorph class>>balloonColor: (in category 'preferences') ----- + balloonColor: aColor + + BalloonColor := aColor.! Item was removed: - ----- Method: BalloonMorph class>>setBalloonColorTo: (in category 'utility') ----- - setBalloonColorTo: aColor - aColor ifNotNil: [BalloonColor := aColor]! Item was changed: Morph subclass: #NewBalloonMorph instanceVariableNames: 'balloonOwner textMorph maximumWidth orientation hasTail' + classVariableNames: 'DefaultBalloonTextColor UseNewBalloonMorph' - classVariableNames: 'UseNewBalloonMorph' poolDictionaries: '' category: 'Morphic-Widgets'! !NewBalloonMorph commentStamp: 'mt 3/31/2015 10:15' prior: 0! A balloon is a bubble with an optional tail. It contains rich text, which describes something about its balloon-owner.! Item was added: + ----- Method: NewBalloonMorph class>>defaultBalloonTextColor (in category 'preferences') ----- + defaultBalloonTextColor + + + ^ DefaultBalloonTextColor ifNil: [Color black]! Item was added: + ----- Method: NewBalloonMorph class>>defaultBalloonTextColor: (in category 'preferences') ----- + defaultBalloonTextColor: color + + DefaultBalloonTextColor := color.! Item was changed: ----- Method: NewBalloonMorph>>defaultBorderWidth (in category 'initialization') ----- defaultBorderWidth + ^ MenuMorph menuBorderWidth! - ^ 1! Item was changed: ----- Method: NewBalloonMorph>>initialize (in category 'initialization') ----- initialize super initialize. self borderWidth: self defaultBorderWidth; borderColor: self defaultBorderColor; + color: (Preferences menuAppearance3d + ifTrue: [self defaultColor alpha: 1.0] + ifFalse: [self defaultColor]); + hasDropShadow: Preferences menuAppearance3d; - color: (self defaultColor alpha: 1.0); "no alpha due to drop shadow" - hasDropShadow: true; 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.! Item was changed: ----- Method: NewBalloonMorph>>setText: (in category 'initialization') ----- setText: stringOrText | text | text := stringOrText asText. + + text unembellished ifTrue: [ + text addAttribute: (TextColor color: self class defaultBalloonTextColor)]. + text addAttribute: (TextFontReference toFont: (self balloonOwner ifNil: [BalloonMorph]) balloonFont). self textMorph wrapFlag: false. self textMorph newContents: text. self textMorph fullBounds. (self maximumWidth > 0 and: [self textMorph width > self maximumWidth]) ifTrue: [ self textMorph wrapFlag: true; width: self maximumWidth]. self updateLayout.! From commits at source.squeak.org Wed Jan 13 07:54:46 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 13 07:54:48 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.15.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.15.mcz ==================== Summary ==================== Name: 51Deprecated-mt.15 Author: mt Time: 13 January 2016, 8:54:42.47168 am UUID: aecd870e-2eac-481d-84d8-0fbfc9569526 Ancestors: 51Deprecated-eem.14 Deprecates old way to set balloon background color. We have a preference-based way now. =============== Diff against 51Deprecated-eem.14 =============== Item was added: + ----- Method: BalloonMorph class>>setBalloonColorTo: (in category '*51Deprecated') ----- + setBalloonColorTo: aColor + + self deprecated: 'Use #balloonColor: instead.'. + self balloonColor: aColor.! From commits at source.squeak.org Wed Jan 13 07:55:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 13 07:55:45 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.129.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.129.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.129 Author: mt Time: 13 January 2016, 8:55:36.31568 am UUID: 42891e38-bc3a-4bcc-ae13-f558ef260974 Ancestors: ReleaseBuilder-cmm.128 Use #ballonColor: instead of #setBalloonColorTo:, which is now deprecated. =============== Diff against ReleaseBuilder-cmm.128 =============== Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'preferences') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" self setProjectBackground: Color darkGray. "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; disable: #mouseOverForKeyboardFocus ; enable: #swapMouseButtons. Morph indicateKeyboardFocus: true. SearchBar useScratchPad: false. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. Preferences insertionPointColor: Color red. PluggableTextMorph simpleFrameAdornments: false. "Windows" Preferences installUniformWindowColors. SystemWindow reuseWindows: false. Model windowActiveOnFirstClick: false. "Not good for 800x600" Preferences disable: #showSplitterHandles; enable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false. ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; disable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 6. Preferences disable: #roundedWindowCorners. PluggableButtonMorph roundedButtonCorners: false. FillInTheBlankMorph roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." Preferences disable: #gradientScrollBars. SystemWindow gradientWindow: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. "Shadows" Preferences enable: #menuAppearance3d. MenuMorph menuBorderWidth: 1; menuBorderColor: Color lightGray; menuLineColor: Color lightGray. Morph useSoftDropShadow: true.. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. LazyListMorph listSelectionTextColor: Color black; listSelectionColor: (Color r: 0.72 g: 0.72 b: 0.9). "Standard Tools" + BalloonMorph balloonColor: - BalloonMorph setBalloonColorTo: (TranslucentColor r: 0.92 g: 0.92 b: 0.706 alpha: 0.75). Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From commits at source.squeak.org Wed Jan 13 07:56:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 13 07:56:32 2016 Subject: [squeak-dev] The Trunk: System-mt.785.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.785.mcz ==================== Summary ==================== Name: System-mt.785 Author: mt Time: 13 January 2016, 8:56:07.72568 am UUID: 5ebfaea6-5fd2-476b-85ec-8ea4e365cdce Ancestors: System-ul.784 Use #ballonColor: instead of #setBalloonColorTo:, which is now deprecated. =============== Diff against System-ul.784 =============== Item was changed: ----- Method: ColorTheme>>apply (in category 'applying') ----- apply "apply the receiver as the current theme" + BalloonMorph balloonColor: self balloonColor. - BalloonMorph setBalloonColorTo: self balloonColor. Preferences setParameter: #defaultWorldColor to: self defaultWorldColor. Preferences insertionPointColor: self insertionPointColor. Preferences keyboardFocusColor: self keyboardFocusColor. Preferences textHighlightColor: self textHighlightColor. Preferences setParameter: #menuTitleColor to: self menuTitleColor. Preferences setParameter: #menuTitleBorderColor to: self menuTitleBorderColor. Preferences setParameter: #menuTitleBorderWidth to: self menuTitleBorderWidth. Preferences setParameter: #menuColor to: self menuColor. Preferences setParameter: #menuBorderColor to: self menuBorderColor. Preferences setParameter: #menuLineColor to: self menuLineColor. Preferences setParameter: #menuBorderWidth to: self menuBorderWidth. Preferences setParameter: #menuSelectionColor to: self menuSelectionColor. SystemProgressMorph reset. self class current: self. ! From Marcel.Taeumel at hpi.de Wed Jan 13 07:38:27 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 07:59:47 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: <1452666935230-4871023.post@n4.nabble.com> References: <1452599694728-4870851.post@n4.nabble.com> <1452600089467-4870852.post@n4.nabble.com> <1452666935230-4871023.post@n4.nabble.com> Message-ID: <1452670707442-4871032.post@n4.nabble.com> Hi Chris, your things should work fine now: http://forum.world.st/The-Trunk-Morphic-mt-1064-mcz-td4871028.html Here is an example: Note that bold balloon fonts might look better on on a dark background with white. The property #defaultBalloonTextColor is used for strings and embellished text objects. Also note that #menuAppearance3d still controls the drop shadows in the system and that menu properties and balloon properties are somewhat bound together in terms of border width (and maybe other stuff). Why? Hmm... because they are both popupable? :-D Don't know... Best, Marcel -- View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4871032.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Jan 13 08:07:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 13 08:07:09 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1065.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1065.mcz ==================== Summary ==================== Name: Morphic-mt.1065 Author: mt Time: 13 January 2016, 9:06:34.13368 am UUID: f53e7ff7-7ad1-4818-a1ec-1041d5de5617 Ancestors: Morphic-mt.1064 Fixes the other (forgotten *sigh*) cases where rounded rectangles degrade to ovals, which looks rather ugly, for example, in narrow, rounded scroll bars. =============== Diff against Morphic-mt.1064 =============== Item was changed: ----- Method: FormCanvas>>fillRoundRect:radius:fillStyle: (in category 'drawing-rectangles') ----- fillRoundRect: aRectangle radius: radius fillStyle: fillStyle fillStyle isTransparent ifTrue:[^self]. radius asPoint <= (0@0) ifTrue:[^self fillRectangle: aRectangle fillStyle: fillStyle]. - (radius * 2) asPoint >= aRectangle extent - ifTrue:[^self fillOval: aRectangle fillStyle: fillStyle]. fillStyle isSolidFill ifFalse:[^self balloonFillRoundRect: aRectangle radius: radius fillStyle: fillStyle]. self setFillColor: (shadowColor ifNil:[fillStyle asColor]). ^port fillRoundRect: (aRectangle translateBy: origin) truncated radius: radius. ! Item was changed: ----- Method: FormCanvas>>frameAndFillRoundRect:radius:fillStyle:borderWidth:borderColor: (in category 'drawing-rectangles') ----- frameAndFillRoundRect: aRectangle radius: cornerRadius fillStyle: fillStyle borderWidth: bw borderColor: bc "Draw a rounded rectangle" self shadowColor ifNotNil:[ ^self fillRoundRect: aRectangle radius: cornerRadius fillStyle: shadowColor. ]. "see if the round rect is degenerate" cornerRadius asPoint <= (0@0) ifTrue:[^self frameAndFillRectangle: aRectangle fillColor: fillStyle asColor borderWidth: bw borderColor: bc]. - cornerRadius * 2 >= aRectangle width - ifTrue:[^self fillOval: aRectangle color: fillStyle asColor borderWidth: bw borderColor: bc]. "Okay it's a rounded rectangle" fillStyle isTransparent ifFalse:["fill interior" | innerRect radius | innerRect := aRectangle. radius := cornerRadius. bw isZero ifFalse:[ innerRect := innerRect insetBy: bw. radius := radius - bw. ]. self fillRoundRect: innerRect radius: radius fillStyle: fillStyle. ]. self frameRoundRect: aRectangle radius: cornerRadius width: bw color: bc ! From commits at source.squeak.org Wed Jan 13 08:14:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 13 08:14:12 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1066.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1066.mcz ==================== Summary ==================== Name: Morphic-mt.1066 Author: mt Time: 13 January 2016, 9:13:37.52568 am UUID: 0736edd7-ebd0-41ee-b085-367e364e0ab3 Ancestors: Morphic-mt.1065 Makes the border for rounded sliders thinner. =============== Diff against Morphic-mt.1065 =============== Item was changed: ----- Method: ScrollBar>>initializeSlider (in category 'initialize') ----- initializeSlider self initializeMenuButton; initializeUpButton; initializeDownButton; initializePagingArea. super initializeSlider. self expandSlider. + self class roundedScrollBarLook ifTrue: [ + slider cornerStyle: #rounded. + sliderShadow cornerStyle: #rounded. + + Preferences menuAppearance3d ifTrue: [ + slider borderStyle: (BorderStyle complexRaised width: 1)]]. + + self sliderColor: self sliderColor.! - self class roundedScrollBarLook - ifTrue: [slider cornerStyle: #rounded. - slider - borderStyle: (BorderStyle complexRaised width: 3). - sliderShadow cornerStyle: #rounded]. - self sliderColor: self sliderColor! From Marcel.Taeumel at hpi.de Wed Jan 13 07:53:39 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 08:14:59 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: References: <1452599694728-4870851.post@n4.nabble.com> <1452600089467-4870852.post@n4.nabble.com> <1452666935230-4871023.post@n4.nabble.com> <1452667220383-4871024.post@n4.nabble.com> Message-ID: <1452671619526-4871041.post@n4.nabble.com> Fixed: http://forum.world.st/The-Trunk-Morphic-mt-1065-mcz-td4871037.html http://forum.world.st/The-Trunk-Morphic-mt-1066-mcz-td4871040.html Best, Marcel -- View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4871041.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bernhard at pieber.com Wed Jan 13 11:06:55 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Wed Jan 13 11:07:01 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: Hi Chris, No offence taken. Thank you for your feedback! I would never have dared to suggest this without a preference. ;-) I find it quite helpful obviously, especially on my 13? notebook display, and thought others might, too. Knowing that the preference is off by default, would you still be opposed to move it to the trunk? Cheers, Bernhard > Am 11.01.2016 um 20:20 schrieb Chris Muller : > > Bernhard, please don't take this as offense but just as someone who's > interested in UI design -- I'm curious what people find to like about > this feature. I myself was so disappointed when Ubuntu did this to > Unity because being able to grab a window edge and slam the mouse to > the edge of the screen is an easy gross-motor gesture that facilitates > efficient window management; affording expansion in the desired > dimensions, and no expansion where it isn't desired. However, with > this feature the user is now forced to "be careful" when dragging > their window edges (don't get too close to the edge!) and so what was > a gross-motor became a fine-motor AND their mind is distracted this > having to wreste with the UI, because they want to make use of their > screen real-estate but, at least in Unity, when you get within 4 > pixels of the edge, SNAP. Now its covering many other windows I > didn't want covered, whilst presenting vast swaths of useless > whitespace (because its too big). > > I never much liked Operation... :) > > https://www.youtube.com/watch?v=_6MAkLJ79LE > > On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber wrote: >> Dear all, >> >> I implemented a feature which some of you may know from Windows. When a SystemWindow is dragged to one of the edges it is resized to that half of the display. In addition, when it is dragged to one of the corners it is resized to that quadrant of the display. See the following packages in the Inbox: >> - GraphicsTests-bp.39 >> - Graphics-bp.321 >> - Morphic-bp.1064 >> In order to use it you need to enable the preference Drag To Edges in the Preference Browser, or just do: >> SystemWindow dragToEdges: true >> >> If you have time to try it out, let me know what you think. >> >> - Bernhard > From bernhard at pieber.com Wed Jan 13 11:09:03 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Wed Jan 13 11:09:07 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: Hi Nicolas, Thank you for your feedback and your support for moving it to the trunk. I wanted to note that dragging to the top edge snaps the window to the top half of the screen. Cheers, Bernhard > Am 11.01.2016 um 22:01 schrieb Nicolas Cellier : > > I wanted to comment that there's even more upsetting: the maximize feature of windows 7 when dragging a window near display edge. > But as long as we can disable the preference, it's ok for me. > > 2016-01-11 20:20 GMT+01:00 Chris Muller : > Bernhard, please don't take this as offense but just as someone who's > interested in UI design -- I'm curious what people find to like about > this feature. I myself was so disappointed when Ubuntu did this to > Unity because being able to grab a window edge and slam the mouse to > the edge of the screen is an easy gross-motor gesture that facilitates > efficient window management; affording expansion in the desired > dimensions, and no expansion where it isn't desired. However, with > this feature the user is now forced to "be careful" when dragging > their window edges (don't get too close to the edge!) and so what was > a gross-motor became a fine-motor AND their mind is distracted this > having to wreste with the UI, because they want to make use of their > screen real-estate but, at least in Unity, when you get within 4 > pixels of the edge, SNAP. Now its covering many other windows I > didn't want covered, whilst presenting vast swaths of useless > whitespace (because its too big). > > I never much liked Operation... :) > > https://www.youtube.com/watch?v=_6MAkLJ79LE > > On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber wrote: > > Dear all, > > > > I implemented a feature which some of you may know from Windows. When a SystemWindow is dragged to one of the edges it is resized to that half of the display. In addition, when it is dragged to one of the corners it is resized to that quadrant of the display. See the following packages in the Inbox: > > - GraphicsTests-bp.39 > > - Graphics-bp.321 > > - Morphic-bp.1064 > > In order to use it you need to enable the preference Drag To Edges in the Preference Browser, or just do: > > SystemWindow dragToEdges: true > > > > If you have time to try it out, let me know what you think. > > > > - Bernhard > > > From bernhard at pieber.com Wed Jan 13 11:09:38 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Wed Jan 13 11:09:43 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: <2CF32E58-6DD3-47CE-AAFC-A32179F9B27A@pieber.com> Hi Frank, Yes, keyboard support would be cool, too. Note though, that currently dragging to the top edge does not maximise, just snap and resize to the top half. Dragging to the corners snaps and resizes to the respective quadrant. Cheers, Bernhard > Am 12.01.2016 um 10:49 schrieb Frank Shearar : > > FWIW I'm super happy with the soft tiling window manager approach > Windows 8 brought (and Win 10 augments, because you can now tile > within quadrants, not half-screens). I use this all the time, > especially from the keyboard - - / tile > to the respective half-screens, - "promotes" a > half-screen to full-screen, - minimises, etc. It's > just a couple of key presses now to get two windows side-by-side. > > I would be very happy if Squeak provided similar functionality > (without disagreeing with Chris's comments re gross/fine motor > movements). > > frank > > On 11 January 2016 at 21:39, Jakob Reschke wrote: >> In Windows, I tend to like both maximizing a window when it is dragged >> to the top of the screen and tiling a window when dragged to the left >> or right edge of the screen. Not sure why I find the first one more >> intuitive than double clicking the title bar or the window decoration >> button for it. Maybe it's that gross motion thing Chris mentioned. >> Just today, I came to dislike once again that the tiling does not work >> on the inner edges in a dual screen setup. Though, it is possible that >> I would change my mind if it worked and it would trigger all the time. >> Anyway, it is achievable with Win-key+Left/Right. >> >> On the other hand, I am not so keen on maximizing a window in only one >> direction (vertically or horizontally) if I drag an edge of the window >> to the edge of the screen. Windows has that for the vertical >> direction. >> >> But I cannot remember the last time I wanted to maximize a >> SystemWindow in Squeak... usually I find screen space to be more >> precious (scarce?) here because there is no web browser or dedicated >> text editor window, but rather a plethora of smaller windows floating >> around, each of them preferably only one click away. And I like to >> spare a hole somewhere to access the world menu... Maybe these habits >> are also a result of the lack of an Alt+Tab or Expos? like feature by >> default. >> >> 2016-01-11 22:01 GMT+01:00 Nicolas Cellier : >>> I wanted to comment that there's even more upsetting: the maximize feature >>> of windows 7 when dragging a window near display edge. >>> But as long as we can disable the preference, it's ok for me. >>> >>> 2016-01-11 20:20 GMT+01:00 Chris Muller : >>>> >>>> Bernhard, please don't take this as offense but just as someone who's >>>> interested in UI design -- I'm curious what people find to like about >>>> this feature. I myself was so disappointed when Ubuntu did this to >>>> Unity because being able to grab a window edge and slam the mouse to >>>> the edge of the screen is an easy gross-motor gesture that facilitates >>>> efficient window management; affording expansion in the desired >>>> dimensions, and no expansion where it isn't desired. However, with >>>> this feature the user is now forced to "be careful" when dragging >>>> their window edges (don't get too close to the edge!) and so what was >>>> a gross-motor became a fine-motor AND their mind is distracted this >>>> having to wreste with the UI, because they want to make use of their >>>> screen real-estate but, at least in Unity, when you get within 4 >>>> pixels of the edge, SNAP. Now its covering many other windows I >>>> didn't want covered, whilst presenting vast swaths of useless >>>> whitespace (because its too big). >>>> >>>> I never much liked Operation... :) >>>> >>>> https://www.youtube.com/watch?v=_6MAkLJ79LE >>>> >>>> On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber >>>> wrote: >>>>> Dear all, >>>>> >>>>> I implemented a feature which some of you may know from Windows. When a >>>>> SystemWindow is dragged to one of the edges it is resized to that half of >>>>> the display. In addition, when it is dragged to one of the corners it is >>>>> resized to that quadrant of the display. See the following packages in the >>>>> Inbox: >>>>> - GraphicsTests-bp.39 >>>>> - Graphics-bp.321 >>>>> - Morphic-bp.1064 >>>>> In order to use it you need to enable the preference Drag To Edges in >>>>> the Preference Browser, or just do: >>>>> SystemWindow dragToEdges: true >>>>> >>>>> If you have time to try it out, let me know what you think. >>>>> >>>>> - Bernhard >>>> >>> >> > From karlramberg at gmail.com Wed Jan 13 11:09:56 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Jan 13 11:09:59 2016 Subject: [squeak-dev] an approach to ColorSchemes (was: The Inbox: Morphic-kfr.1064.mcz) In-Reply-To: References: Message-ID: I suggest using Object defaultBackgroundColor and refactor current use of defaultBackgroundColor to defaultWindowColor which is what it is used as currently in the image. Then add backgoundColor to WindowColorSpec so all windows can specify their background color in a theme. Best, Karl On Tue, Jan 12, 2016 at 5:58 PM, karl ramberg wrote: > We already have the WindowColorRegistry, so we could extend that to have > background color > > Best, > Karl > > On Tue, Jan 12, 2016 at 5:40 PM, Chris Muller wrote: > >> > ScrollPanes should not have any knowlegde about SystemWindow. So >> storing the >> > preference in SystemWindow >> #backgroundColor is not an option. >> >> +1, but that is tangential to our discussion at the moment -- we just >> want to establish our "design" for enabling the ability to have >> different color sets. >> >> > It would make sense, however, to attach individual preference to those >> major >> > widgets. So that ScrollPane has its own #backgroundColor. >> >> Use-case #1 is: I'm working during the day, I want a brighter, >> black-on-white scheme, when night comes, I want to "one-click" switch >> to a white-on-black scheme **without changing or having to >> double-manage** any of my other Preferences in the system -- they >> remain untouched. >> >> I'm concerned that individual preferences scattered across a bunch of >> global class vars would inhibit my use-case above. Are you saying I >> would have to go into Preferernces panel and change the 30-50 >> "individual preferences" to go to night mode? To have "color themes" >> someone would have to write a methods to update all the globals, >> something like this: >> >> ScrollPane backgroundColor: ... >> ScrollPane foregroundColor: ... >> SystemWindow titlebarBackgroundColor: ... >> SystemWindow titlebarForegroundColor: ... >> UserDialogBoxMorph backgroundColor: ... >> UserDialogBoxMorph foregroundColor: ... >> >> And what package would such methods be written in? They have to >> reference the entire system, so there would be dependency issues. >> Every time we discover a new thing needing color we'll have to update >> this method... >> >> That's why I think we store colors into ColorSchemes which can be >> swapped out whole and grow organically instead of a bunch of >> class-vars. I don't care about exact the implementation details, just >> that we make something flexible and easy to use and maintain, not >> brittle. Please. >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160113/474fa708/attachment.htm From bernhard at pieber.com Wed Jan 13 11:10:11 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Wed Jan 13 11:10:14 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: Hi Jakob, Thank you for your feedback. I agree that something like Alt-Tab or Expos? would be super cool. Cheers, Bernhard > Am 11.01.2016 um 22:39 schrieb Jakob Reschke : > > In Windows, I tend to like both maximizing a window when it is dragged > to the top of the screen and tiling a window when dragged to the left > or right edge of the screen. Not sure why I find the first one more > intuitive than double clicking the title bar or the window decoration > button for it. Maybe it's that gross motion thing Chris mentioned. > Just today, I came to dislike once again that the tiling does not work > on the inner edges in a dual screen setup. Though, it is possible that > I would change my mind if it worked and it would trigger all the time. > Anyway, it is achievable with Win-key+Left/Right. > > On the other hand, I am not so keen on maximizing a window in only one > direction (vertically or horizontally) if I drag an edge of the window > to the edge of the screen. Windows has that for the vertical > direction. > > But I cannot remember the last time I wanted to maximize a > SystemWindow in Squeak... usually I find screen space to be more > precious (scarce?) here because there is no web browser or dedicated > text editor window, but rather a plethora of smaller windows floating > around, each of them preferably only one click away. And I like to > spare a hole somewhere to access the world menu... Maybe these habits > are also a result of the lack of an Alt+Tab or Expos? like feature by > default. > > 2016-01-11 22:01 GMT+01:00 Nicolas Cellier : >> I wanted to comment that there's even more upsetting: the maximize feature >> of windows 7 when dragging a window near display edge. >> But as long as we can disable the preference, it's ok for me. >> >> 2016-01-11 20:20 GMT+01:00 Chris Muller : >>> >>> Bernhard, please don't take this as offense but just as someone who's >>> interested in UI design -- I'm curious what people find to like about >>> this feature. I myself was so disappointed when Ubuntu did this to >>> Unity because being able to grab a window edge and slam the mouse to >>> the edge of the screen is an easy gross-motor gesture that facilitates >>> efficient window management; affording expansion in the desired >>> dimensions, and no expansion where it isn't desired. However, with >>> this feature the user is now forced to "be careful" when dragging >>> their window edges (don't get too close to the edge!) and so what was >>> a gross-motor became a fine-motor AND their mind is distracted this >>> having to wreste with the UI, because they want to make use of their >>> screen real-estate but, at least in Unity, when you get within 4 >>> pixels of the edge, SNAP. Now its covering many other windows I >>> didn't want covered, whilst presenting vast swaths of useless >>> whitespace (because its too big). >>> >>> I never much liked Operation... :) >>> >>> https://www.youtube.com/watch?v=_6MAkLJ79LE >>> >>> On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber >>> wrote: >>>> Dear all, >>>> >>>> I implemented a feature which some of you may know from Windows. When a >>>> SystemWindow is dragged to one of the edges it is resized to that half of >>>> the display. In addition, when it is dragged to one of the corners it is >>>> resized to that quadrant of the display. See the following packages in the >>>> Inbox: >>>> - GraphicsTests-bp.39 >>>> - Graphics-bp.321 >>>> - Morphic-bp.1064 >>>> In order to use it you need to enable the preference Drag To Edges in >>>> the Preference Browser, or just do: >>>> SystemWindow dragToEdges: true >>>> >>>> If you have time to try it out, let me know what you think. >>>> >>>> - Bernhard >>> >> > From bernhard at pieber.com Wed Jan 13 11:11:36 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Wed Jan 13 11:11:41 2016 Subject: [squeak-dev] The Inbox: Morphic-bp.1033.mcz In-Reply-To: <1452525409361-4870709.post@n4.nabble.com> References: <1452525409361-4870709.post@n4.nabble.com> Message-ID: Hi Marcel, Thank you for the feedback, especially the code review. I just copied an improved version to the inbox. Comments inline. > Am 11.01.2016 um 16:16 schrieb marcel.taeumel : > nice idea! > > Here are some suggestions: > > - Let boolean messages start with "is" such as "isPoint:nearRightOf:" > instead of ?point:nearRightOf:". Done! > - Make it work for non-fast (normal) dragging also. Had a short look and decided this was for another day. ;-) Especially since I always use fast drag. Does anyone use non-fast drag? > - Remove hardcoded "10" to a snap-threshold preference or at least some > named method that returns that constant value. Done. I introduced a method. > - Do some #bench to measure the impact of the additonal calls to #clearArea, > #dragToEdgesSelectorFor:in:, etc. because this might be relevant for the > "fast drag mode" --- I think that the impact of the additional calculations > should be manageable. I am not sure how to bench that. However, I moved the call to #clearArea outside the block, so it is only called once when you start dragging. This should not be a problem because I cannot think of a way the display might be resized while you are dragging a window. > - What about snapping to the edges of other windows nearby? :-) I had thought about this. This is a different feature, though. Cheers, Bernhard From karlramberg at gmail.com Wed Jan 13 11:12:44 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Jan 13 11:12:46 2016 Subject: [squeak-dev] SystemWindow drag to edges in Inbox In-Reply-To: <2CF32E58-6DD3-47CE-AAFC-A32179F9B27A@pieber.com> References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> <2CF32E58-6DD3-47CE-AAFC-A32179F9B27A@pieber.com> Message-ID: I see no harm in adding this to the image. Best, Karl On Wed, Jan 13, 2016 at 12:09 PM, Bernhard Pieber wrote: > Hi Frank, > > Yes, keyboard support would be cool, too. Note though, that currently > dragging to the top edge does not maximise, just snap and resize to the top > half. Dragging to the corners snaps and resizes to the respective quadrant. > > Cheers, > Bernhard > > > Am 12.01.2016 um 10:49 schrieb Frank Shearar : > > > > FWIW I'm super happy with the soft tiling window manager approach > > Windows 8 brought (and Win 10 augments, because you can now tile > > within quadrants, not half-screens). I use this all the time, > > especially from the keyboard - - / tile > > to the respective half-screens, - "promotes" a > > half-screen to full-screen, - minimises, etc. It's > > just a couple of key presses now to get two windows side-by-side. > > > > I would be very happy if Squeak provided similar functionality > > (without disagreeing with Chris's comments re gross/fine motor > > movements). > > > > frank > > > > On 11 January 2016 at 21:39, Jakob Reschke > wrote: > >> In Windows, I tend to like both maximizing a window when it is dragged > >> to the top of the screen and tiling a window when dragged to the left > >> or right edge of the screen. Not sure why I find the first one more > >> intuitive than double clicking the title bar or the window decoration > >> button for it. Maybe it's that gross motion thing Chris mentioned. > >> Just today, I came to dislike once again that the tiling does not work > >> on the inner edges in a dual screen setup. Though, it is possible that > >> I would change my mind if it worked and it would trigger all the time. > >> Anyway, it is achievable with Win-key+Left/Right. > >> > >> On the other hand, I am not so keen on maximizing a window in only one > >> direction (vertically or horizontally) if I drag an edge of the window > >> to the edge of the screen. Windows has that for the vertical > >> direction. > >> > >> But I cannot remember the last time I wanted to maximize a > >> SystemWindow in Squeak... usually I find screen space to be more > >> precious (scarce?) here because there is no web browser or dedicated > >> text editor window, but rather a plethora of smaller windows floating > >> around, each of them preferably only one click away. And I like to > >> spare a hole somewhere to access the world menu... Maybe these habits > >> are also a result of the lack of an Alt+Tab or Expos? like feature by > >> default. > >> > >> 2016-01-11 22:01 GMT+01:00 Nicolas Cellier < > nicolas.cellier.aka.nice@gmail.com>: > >>> I wanted to comment that there's even more upsetting: the maximize > feature > >>> of windows 7 when dragging a window near display edge. > >>> But as long as we can disable the preference, it's ok for me. > >>> > >>> 2016-01-11 20:20 GMT+01:00 Chris Muller : > >>>> > >>>> Bernhard, please don't take this as offense but just as someone who's > >>>> interested in UI design -- I'm curious what people find to like about > >>>> this feature. I myself was so disappointed when Ubuntu did this to > >>>> Unity because being able to grab a window edge and slam the mouse to > >>>> the edge of the screen is an easy gross-motor gesture that facilitates > >>>> efficient window management; affording expansion in the desired > >>>> dimensions, and no expansion where it isn't desired. However, with > >>>> this feature the user is now forced to "be careful" when dragging > >>>> their window edges (don't get too close to the edge!) and so what was > >>>> a gross-motor became a fine-motor AND their mind is distracted this > >>>> having to wreste with the UI, because they want to make use of their > >>>> screen real-estate but, at least in Unity, when you get within 4 > >>>> pixels of the edge, SNAP. Now its covering many other windows I > >>>> didn't want covered, whilst presenting vast swaths of useless > >>>> whitespace (because its too big). > >>>> > >>>> I never much liked Operation... :) > >>>> > >>>> https://www.youtube.com/watch?v=_6MAkLJ79LE > >>>> > >>>> On Sun, Jan 10, 2016 at 5:20 PM, Bernhard Pieber > > >>>> wrote: > >>>>> Dear all, > >>>>> > >>>>> I implemented a feature which some of you may know from Windows. > When a > >>>>> SystemWindow is dragged to one of the edges it is resized to that > half of > >>>>> the display. In addition, when it is dragged to one of the corners > it is > >>>>> resized to that quadrant of the display. See the following packages > in the > >>>>> Inbox: > >>>>> - GraphicsTests-bp.39 > >>>>> - Graphics-bp.321 > >>>>> - Morphic-bp.1064 > >>>>> In order to use it you need to enable the preference Drag To Edges in > >>>>> the Preference Browser, or just do: > >>>>> SystemWindow dragToEdges: true > >>>>> > >>>>> If you have time to try it out, let me know what you think. > >>>>> > >>>>> - Bernhard > >>>> > >>> > >> > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160113/47b19316/attachment.htm From Marcel.Taeumel at hpi.de Wed Jan 13 11:10:02 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 11:31:23 2016 Subject: [squeak-dev] Re: an approach to ColorSchemes (was: The Inbox: Morphic-kfr.1064.mcz) In-Reply-To: References: Message-ID: <1452683402610-4871086.post@n4.nabble.com> I suggest do remove/replace the WindowColorRegistry because it is an hard-to-extend and difficult-to-update cache. Please browse the methods in "prefs - window colors" on the class-side of Preferences to gain a better understanding. See Preferences class >> #installWindowColorsVia: as another example. For the last two lines: SystemWindow refreshAllWindows. TheWorldMainDockingBar updateInstances. ...indicates that we need a mechanism to update existing morphs with new color specs. Reopening an application is not an option in such a live programming environment. Best, Marcel -- View this message in context: http://forum.world.st/an-approach-to-ColorSchemes-was-The-Inbox-Morphic-kfr-1064-mcz-tp4870902p4871086.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Jan 13 11:14:12 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 11:35:33 2016 Subject: [squeak-dev] Re: SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> Message-ID: <1452683652424-4871088.post@n4.nabble.com> Considering an Expos?-like dashboard for windows, see this code: https://github.com/hpi-swa/vivide/tree/master/repository/Vivide.package/ViWindowsDashboard.class Here is a screenshot: https://github.com/hpi-swa/vivide/commit/c2a38e486d6c046e244b114b46ebe85fd982baa6 It can be modified to be independent from Vivide. It is invoked via Control+Tab like in other applications (resp. eco systems). Best, Marcel -- View this message in context: http://forum.world.st/SystemWindow-drag-to-edges-in-Inbox-tp4870525p4871088.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Wed Jan 13 11:43:58 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Jan 13 11:44:02 2016 Subject: [squeak-dev] Re: an approach to ColorSchemes (was: The Inbox: Morphic-kfr.1064.mcz) In-Reply-To: <1452683402610-4871086.post@n4.nabble.com> References: <1452683402610-4871086.post@n4.nabble.com> Message-ID: Repacing the WindowColorRegistry could be a long term goal but it seems like a bigger job than I currently can do manage. The dynamic-ness of the morphic ui is something I really like, but it is broken in many places and something we must constantly address. Best, Karl On Wed, Jan 13, 2016 at 12:10 PM, marcel.taeumel wrote: > I suggest do remove/replace the WindowColorRegistry because it is an > hard-to-extend and difficult-to-update cache. > > Please browse the methods in "prefs - window colors" on the class-side of > Preferences to gain a better understanding. > > See Preferences class >> #installWindowColorsVia: as another example. For > the last two lines: > > SystemWindow refreshAllWindows. > TheWorldMainDockingBar updateInstances. > > ...indicates that we need a mechanism to update existing morphs with new > color specs. Reopening an application is not an option in such a live > programming environment. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/an-approach-to-ColorSchemes-was-The-Inbox-Morphic-kfr-1064-mcz-tp4870902p4871086.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/20160113/89540c9c/attachment.htm From btc at openinworld.com Wed Jan 13 11:59:45 2016 From: btc at openinworld.com (Ben Coman) Date: Wed Jan 13 12:00:11 2016 Subject: [squeak-dev] Re: [Pharo-dev] I will rename FFI-NB to UnifiedFFI In-Reply-To: References: <569558AF.1020103@free.fr> <0185AAFD-D7B8-428F-90DA-EC3A0025823D@gmail.com> Message-ID: (cross-posted from pharo-dev) On Wed, Jan 13, 2016 at 6:32 PM, Esteban Lorenzano wrote: > So, recapitulation: > > I want to introduce: > > 1) package renaming, from FFI-NB to UnifiedFFI > 2) prefix renaming, from FFI to UFFI (I will not change method prefix, they > will remain ffi* so this is maybe a problem?) Actually I suggested this without thinking it through. We should be consider cross-platform compatibility with Squeak at this low level close to image interface to the rest of the world, where its probably harder for average Joe to deal with the differences. I'm not familiar enough with either platform's FFI to comment more. cheers -ben > 3) method renaming, from ffiLibraryName to ffiLibrary (we didn?t talk about > this, but I?m introducing it because is better name :P) > > I *think* #2 can be skipped, but #1 and #3 are a must. > > opinions? > > Esteban > > On 13 Jan 2016, at 11:28, Esteban Lorenzano wrote: > > > On 13 Jan 2016, at 03:46, Ben Coman wrote: > > Le 12/1/16 17:58, Denis Kudriashov a ?crit : > > Hi > > UFFI reminds me UFO which can be translated like Unified Foreign Objects. > And objects outside image look really like unidentified flying objects. It's > just address, blob of bytes and they fly outside smalltalk world > And it has some relation to Alien name. > But maybe it is too much funny name > > > I guess we are considering... > > Prefix: UFO (shorter) > Package: Unified Foreign Objects (longer) > > Prefix: UFFI (longer) > Package: UnifiedFFI (shorter) > > I like your thinking, but I have mixed feelings. Name is cool. The > shorter prefix may be a benefit (though the "I" doesn't add much). > But it implies more semantics as an external "object" than external > blobs of memory (for example) for C libraries. > I like "Unified" because it brings together parts of several > implementations (if I understand correctly) and fixes a point of > divergence at the VM level making it harder for limited resources to > collaborate there. > So in the end I think I prefer Unified. > > > yes, I suppose you are right. > but I was not considering changing prefix from FFI to UFFI, just repackaging > as UnifiedFFI :P > > now? probably I will do it (not many changes to adapt and probably better > for understanding in the long way). > > > cheers -ben > > P.S. As I understand it, NativeBoost performs a bit better than > UnifiedFFI, but it hindered cross-architecture compatibility - but > UnifiedFFI essentially keeps the NativeBoost syntax - so I wonder if > its technically feasible for NativeBoost to become a plug-in backend > for UnifiedFFI, that could be used is special circumstances that > super-performance is required only on supported platforms? > > > actually (though I do not test it since a couple of months) it should be > more or less compatible? it was at the beginning, then I made some changes? > what is not compatible anymore is the vm who needs to be changed to use > executable memory. > > Also? yes, NativeBoost is faster (callouts, not callbacks) because you > cannot compete with ASM, but you can compite in activation time and > optimised code? so who knows, in the future that advantage can not exist > anymore. > > cheers, > Esteban > > > > > > 2016-01-12 16:55 GMT+01:00 Esteban Lorenzano : > > > Hi, > > People has pointed (and they are right) that the name of the new FFI > front-end is misleading. > So yesterday I was talking with Stef and we think UnifiedFFI (or UFFI, for > short) is a better name? and to keep packages prox. to regular FFI I was > thinking on rename FFI-NB packages to FFI-Unified? but maybe is better just > to rename them as UFFI or UnifiedFFI? > what do you think? > > Esteban > > From kilon.alios at gmail.com Wed Jan 13 12:04:50 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Wed Jan 13 12:05:04 2016 Subject: [squeak-dev] Re: SystemWindow drag to edges in Inbox In-Reply-To: <1452683652424-4871088.post@n4.nabble.com> References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> <1452683652424-4871088.post@n4.nabble.com> Message-ID: yeah the automatic resize of windows that are dragged to edges is a very bad design and one of the things that annoy me the most while using UBUNTU , I am not surprised this idea comes from windoom though I was not aware at the time. On Wed, Jan 13, 2016 at 1:35 PM marcel.taeumel wrote: > Considering an Expos?-like dashboard for windows, see this code: > > https://github.com/hpi-swa/vivide/tree/master/repository/Vivide.package/ViWindowsDashboard.class > > Here is a screenshot: > > https://github.com/hpi-swa/vivide/commit/c2a38e486d6c046e244b114b46ebe85fd982baa6 > > It can be modified to be independent from Vivide. It is invoked via > Control+Tab like in other applications (resp. eco systems). > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/SystemWindow-drag-to-edges-in-Inbox-tp4870525p4871088.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/20160113/545eee2a/attachment.htm From Marcel.Taeumel at hpi.de Wed Jan 13 14:52:34 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 15:13:57 2016 Subject: [squeak-dev] Re: an approach to ColorSchemes (was: The Inbox: Morphic-kfr.1064.mcz) In-Reply-To: References: <1452683402610-4871086.post@n4.nabble.com> Message-ID: <1452696754836-4871133.post@n4.nabble.com> I just want to prevent that somebody tries to extend or reuse WindowColorRegistry for such a thing. :-) Best, Marcel -- View this message in context: http://forum.world.st/an-approach-to-ColorSchemes-was-The-Inbox-Morphic-kfr-1064-mcz-tp4870902p4871133.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Wed Jan 13 15:14:36 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Jan 13 15:14:39 2016 Subject: [squeak-dev] Re: an approach to ColorSchemes (was: The Inbox: Morphic-kfr.1064.mcz) In-Reply-To: <1452696754836-4871133.post@n4.nabble.com> References: <1452683402610-4871086.post@n4.nabble.com> <1452696754836-4871133.post@n4.nabble.com> Message-ID: Ok Best, Karl On Wed, Jan 13, 2016 at 3:52 PM, marcel.taeumel wrote: > I just want to prevent that somebody tries to extend or reuse > WindowColorRegistry for such a thing. :-) > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/an-approach-to-ColorSchemes-was-The-Inbox-Morphic-kfr-1064-mcz-tp4870902p4871133.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/20160113/d1e88563/attachment.htm From Marcel.Taeumel at hpi.de Wed Jan 13 15:00:45 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 15:22:07 2016 Subject: [squeak-dev] Re: SystemWindow drag to edges in Inbox In-Reply-To: References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> <1452683652424-4871088.post@n4.nabble.com> Message-ID: <1452697245273-4871136.post@n4.nabble.com> Hey Chris, well, you can slam-drag a window to any edge of the screen as you like in MS Windows 7+. Since then, you have been getting a preview of what will happen in terms of resizing. If you do not like it, just drag it back some pixels to the center of the screen before mouse-up. This is no big challenge in terms of user precision. You can be as "coarse" as you want with your mouse interaction. Note that there is no threshold but you actually have to touch the edge of the screen with the mouse cursor. Best, Marcel -- View this message in context: http://forum.world.st/SystemWindow-drag-to-edges-in-Inbox-tp4870525p4871136.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Jan 13 15:03:37 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 15:25:00 2016 Subject: [squeak-dev] Re: The Inbox: Morphic-bp.1033.mcz In-Reply-To: References: <1452525409361-4870709.post@n4.nabble.com> Message-ID: <1452697417088-4871137.post@n4.nabble.com> Hey Bernhard. "Does anyone use non-fast drag?" --- Yes, me. All the time. I want to see the contents of a window all the time to find out easier which size I need for a window. It's like a preview of fast drag before I do mouse-up. ;-) Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-Morphic-bp-1033-mcz-tp4870527p4871137.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Wed Jan 13 16:03:52 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Jan 13 16:03:54 2016 Subject: [squeak-dev] Re: an approach to ColorSchemes (was: The Inbox: Morphic-kfr.1064.mcz) In-Reply-To: References: <1452683402610-4871086.post@n4.nabble.com> <1452696754836-4871133.post@n4.nabble.com> Message-ID: But we use WindowColorRegistry for something like this: WindowColorRegistry>>initialize self refresh. Preferences addColorPreference: #backgroundColor category: #window default: Color white balloonHelp: 'The background color of a window' Best, Karl On Wed, Jan 13, 2016 at 4:14 PM, karl ramberg wrote: > Ok > > Best, > Karl > > On Wed, Jan 13, 2016 at 3:52 PM, marcel.taeumel > wrote: > >> I just want to prevent that somebody tries to extend or reuse >> WindowColorRegistry for such a thing. :-) >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/an-approach-to-ColorSchemes-was-The-Inbox-Morphic-kfr-1064-mcz-tp4870902p4871133.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/20160113/d2e8245d/attachment.htm From ron at usmedrec.com Wed Jan 13 16:10:16 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Wed Jan 13 16:10:15 2016 Subject: [squeak-dev] Candidates wanted for Squeak Oversight Board Message-ID: <1f3801d14e1c$e4bf05f0$ae3d11d0$@usmedrec.com> Hi All, So far we have 1 candidate for 7 seats. Thank you Tim Rowledge for announcing, and for the chicken car pot garage. If you know someone you think should run please send them an email to encourage them. Now back to our regular program. All the best, Ron Teitelbaum -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160113/f3876438/attachment.htm From Marcel.Taeumel at hpi.de Wed Jan 13 17:08:56 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 13 17:30:18 2016 Subject: [squeak-dev] Re: Squeak Oversight Board Election 2016 In-Reply-To: <1b5e01d14d6f$9716fdb0$c544f910$@usmedrec.com> References: <1b5e01d14d6f$9716fdb0$c544f910$@usmedrec.com> Message-ID: <1452704936568-4871173.post@n4.nabble.com> I'll stand again, too. :-) I will continue to work on and fight for Morphic, tools, and usability issues/improvements. I am continuously collecting experiences via my Vivide programming environment [1], which is implemented in Squeak. Additionally, I will continue to watch over the Windows-specific parts in the CogVM. Note that 2015 has been a great year for Squeak. We got 4.6/5.0 out and squeak.org [2] updated. :-) 2016 will be legen... wait for it.... Best, Marcel [1] https://github.com/hpi-swa/vivide [2] https://github.com/squeak-smalltalk/squeak.org -- View this message in context: http://forum.world.st/Squeak-Oversight-Board-Election-2016-tp4870953p4871173.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Wed Jan 13 19:33:42 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Jan 13 19:33:49 2016 Subject: [squeak-dev] Double-click gone missing? In-Reply-To: References: <3CFE0B61-F16F-4A7F-A13C-F694EA6ADE8E@rowledge.org> <5B41A5E0-BC35-41C6-B14C-71AD3EB2B587@rowledge.org> <1452601347904-4870855.post@n4.nabble.com> Message-ID: <4D587637-308B-40AC-B336-F377C284FAC6@rowledge.org> Here - https://copy.com/wR261WxDYQPLpJya is a proposed fix for the issue. Since the VM passes in a timestamp with events that is derived from ioMSecs() and we have a primitive that also provides a value based on that I simply re-engaged that prim (135) as Time eventMillisecondClock and replaced all the relevant seeming usages of Time millisecondClockValue. So far it appears to function well but there?s always a chance of having missed somewhere, or even being a bit over-enthusiastic. In particular I suspect more cleverness might be needed for the remote event stuff. Eliot is rather pre-occupied with 64 bit stuff right now so if anyone else could try loading this and checking it out that would be helpful. It?s fairly urgent to get it working. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Multitasking: Screwing up several things at once... From commits at source.squeak.org Wed Jan 13 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 13 22:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160113225502.32468.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-January/009254.html Name: Morphic-mt.1064 Ancestors: Morphic-eem.1063 Fixes some hard-coded values in new-style balloon morphs. That is, make default text color configurable and the drop shadow react to #menuAppearance3d just like everywhere else. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009255.html Name: 51Deprecated-mt.15 Ancestors: 51Deprecated-eem.14 Deprecates old way to set balloon background color. We have a preference-based way now. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009256.html Name: ReleaseBuilder-mt.129 Ancestors: ReleaseBuilder-cmm.128 Use #ballonColor: instead of #setBalloonColorTo:, which is now deprecated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009257.html Name: System-mt.785 Ancestors: System-ul.784 Use #ballonColor: instead of #setBalloonColorTo:, which is now deprecated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009258.html Name: Morphic-mt.1065 Ancestors: Morphic-mt.1064 Fixes the other (forgotten *sigh*) cases where rounded rectangles degrade to ovals, which looks rather ugly, for example, in narrow, rounded scroll bars. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009259.html Name: Morphic-mt.1066 Ancestors: Morphic-mt.1065 Makes the border for rounded sliders thinner. ============================================= From commits at source.squeak.org Thu Jan 14 01:07:46 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 14 01:07:49 2016 Subject: [squeak-dev] The Trunk: Kernel-tpr.979.mcz Message-ID: tim Rowledge uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-tpr.979.mcz ==================== Summary ==================== Name: Kernel-tpr.979 Author: tpr Time: 14 January 2016, 5:07:09.653455 pm UUID: 066512f9-4f6d-4079-bfbf-92fe82801f6a Ancestors: Kernel-tpr.978 {Authorisation error: let's try again. Sigh} Add Time class>eventMillisecondClock (which gets its value from the same api as the vm event creation prim) and use it instead of the new 64bit based clock - this allows d-click code to work. =============== Diff against Kernel-ul.977 =============== Item was changed: ----- Method: EventSensor>>createMouseEvent (in category 'mouse') ----- createMouseEvent "create and return a new mouse event from the current mouse position; this is useful for restarting normal event queue processing after manual polling" | buttons modifiers pos mapped eventBuffer | eventBuffer := Array new: 8. buttons := self primMouseButtons. pos := self primMousePt. modifiers := buttons bitShift: -3. buttons := buttons bitAnd: 7. mapped := self mapButtons: buttons modifiers: modifiers. eventBuffer at: 1 put: EventTypeMouse; + at: 2 put: Time eventMillisecondClock; - at: 2 put: Time millisecondClockValue; at: 3 put: pos x; at: 4 put: pos y; at: 5 put: mapped; at: 6 put: modifiers. ^ eventBuffer! Item was changed: ----- Method: EventSensor>>nextEventSynthesized (in category 'private') ----- nextEventSynthesized "Return a synthesized event. This method is called if an event driven client wants to receive events but the primary user interface is not event-driven (e.g., the receiver does not have an event queue but only updates its state). This can, for instance, happen if a Morphic World is run in an MVC window. To simplify the clients work this method will always return all available keyboard events first, and then (repeatedly) the mouse events. Since mouse events come last, the client can assume that after one mouse event has been received there are no more to come. Note that it is impossible for EventSensor to determine if a mouse event has been issued before so the client must be aware of the possible problem of getting repeatedly the same mouse events. See HandMorph>>processEvents for an example on how to deal with this." | kbd array buttons pos modifiers mapped | "First check for keyboard" array := Array new: 8. kbd := self primKbdNext. kbd ifNotNil: ["simulate keyboard event" array at: 1 put: EventTypeKeyboard. "evt type" + array at: 2 put: Time eventMillisecondClock. "time stamp" - array at: 2 put: Time millisecondClockValue. "time stamp" array at: 3 put: (kbd bitAnd: 255). "char code" array at: 4 put: EventKeyChar. "key press/release" array at: 5 put: (kbd bitShift: -8). "modifier keys" ^ array]. "Then check for mouse" pos := self primMousePt. buttons := mouseButtons. modifiers := buttons bitShift: -3. buttons := buttons bitAnd: 7. mapped := self mapButtons: buttons modifiers: modifiers. array at: 1 put: EventTypeMouse; + at: 2 put: Time eventMillisecondClock; - at: 2 put: Time millisecondClockValue; at: 3 put: pos x; at: 4 put: pos y; at: 5 put: mapped; at: 6 put: modifiers. ^ array ! Item was changed: ----- Method: EventSensor>>primGetNextEvent: (in category 'private-I/O') ----- primGetNextEvent: array "Store the next OS event available into the provided array. Essential. If the VM is not event driven the ST code will fall back to the old-style mechanism and use the state based primitives instead." | kbd buttons modifiers pos mapped | "Simulate the events" array at: 1 put: EventTypeNone. "assume no more events" "First check for keyboard" kbd := super primKbdNext. kbd = nil ifFalse:[ "simulate keyboard event" array at: 1 put: EventTypeKeyboard. "evt type" + array at: 2 put: Time eventMillisecondClock. "time stamp" - array at: 2 put: Time millisecondClockValue. "time stamp" array at: 3 put: (kbd bitAnd: 255). "char code" array at: 4 put: EventKeyChar. "key press/release" array at: 5 put: (kbd bitShift: -8). "modifier keys" ^self]. "Then check for mouse" buttons := super primMouseButtons. pos := super primMousePt. modifiers := buttons bitShift: -3. buttons := buttons bitAnd: 7. mapped := self mapButtons: buttons modifiers: modifiers. (pos = mousePosition and:[(mapped bitOr: (modifiers bitShift: 3)) = mouseButtons]) ifTrue:[^self]. array at: 1 put: EventTypeMouse; + at: 2 put: Time eventMillisecondClock; - at: 2 put: Time millisecondClockValue; at: 3 put: pos x; at: 4 put: pos y; at: 5 put: mapped; at: 6 put: modifiers. ! Item was added: + ----- Method: Time class>>eventMillisecondClock (in category 'clock') ----- + eventMillisecondClock + "In order to make certain event handling code work (cf MouseEvent>asMouseMove) we need access + to the tick kept by ioMSecs() " + "Time eventMillisecondClock" + + ^0! From commits at source.squeak.org Thu Jan 14 01:10:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 14 01:10:26 2016 Subject: [squeak-dev] The Trunk: Morphic-tpr.1067.mcz Message-ID: tim Rowledge uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tpr.1067.mcz ==================== Summary ==================== Name: Morphic-tpr.1067 Author: tpr Time: 14 January 2016, 5:09:31.880065 pm UUID: 9f5c0b23-31d9-4698-99ba-588068d5e268 Ancestors: Morphic-mt.1066 Use the new Time class>eventMillisecondClock method to get a fake timestamp for places where we have to fake up an event and want to compare its timestamp with a real event. =============== Diff against Morphic-mt.1066 =============== Item was changed: ----- Method: HandMorph>>generateDropFilesEvent: (in category 'private events') ----- generateDropFilesEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" "Note: This is still in an experimental phase and will need more work" | position buttons modifiers stamp numFiles dragType | stamp := evtBuf second. + stamp = 0 ifTrue: [stamp := Time eventMillisecondClock]. - stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. dragType := evtBuf third. position := evtBuf fourth @ evtBuf fifth. buttons := 0. modifiers := evtBuf sixth. buttons := buttons bitOr: (modifiers bitShift: 3). numFiles := evtBuf seventh. dragType = 4 ifTrue: ["e.g., drop" owner borderWidth: 0. ^DropFilesEvent new setPosition: position contents: numFiles hand: self]. "the others are currently not handled by morphs themselves" dragType = 1 ifTrue: ["experimental drag enter" owner borderWidth: 4; borderColor: owner color asColor negated]. dragType = 2 ifTrue: ["experimental drag move" ]. dragType = 3 ifTrue: ["experimental drag leave" owner borderWidth: 0]. ^nil! Item was changed: ----- Method: HandMorph>>generateKeyboardEvent: (in category 'private events') ----- generateKeyboardEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" | buttons modifiers type pressType stamp keyValue | stamp := evtBuf second. + stamp = 0 ifTrue: [stamp := Time eventMillisecondClock]. - stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. pressType := evtBuf fourth. pressType = EventKeyDown ifTrue: [type := #keyDown]. pressType = EventKeyUp ifTrue: [type := #keyUp]. pressType = EventKeyChar ifTrue: [type := #keystroke]. modifiers := evtBuf fifth. buttons := (modifiers bitShift: 3) bitOr: (lastMouseEvent buttons bitAnd: 7). type = #keystroke ifTrue: [keyValue := (self keyboardInterpreter nextCharFrom: Sensor firstEvt: evtBuf) asInteger] ifFalse: [keyValue := evtBuf third]. ^ KeyboardEvent new setType: type buttons: buttons position: self position keyValue: keyValue hand: self stamp: stamp. ! Item was changed: ----- Method: HandMorph>>generateMouseEvent: (in category 'private events') ----- generateMouseEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" | position buttons modifiers type trail stamp oldButtons evtChanged | evtBuf first = lastEventBuffer first ifTrue: ["Workaround for Mac VM bug, *always* generating 3 events on clicks" evtChanged := false. 3 to: evtBuf size do: [:i | (lastEventBuffer at: i) = (evtBuf at: i) ifFalse: [evtChanged := true]]. evtChanged ifFalse: [^nil]]. stamp := evtBuf second. + stamp = 0 ifTrue: [stamp := Time eventMillisecondClock]. - stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. position := evtBuf third @ evtBuf fourth. buttons := evtBuf fifth. modifiers := evtBuf sixth. type := buttons = 0 ifTrue:[ lastEventBuffer fifth = 0 ifTrue: [#mouseMove] "this time no button and previously no button .. just mouse move" ifFalse: [#mouseUp] "this time no button but previously some button ... therefore button was released" ] ifFalse:[ buttons = lastEventBuffer fifth ifTrue: [#mouseMove] "button states are the same .. now and past .. therfore a mouse movement" ifFalse: [ "button states are different .. button was pressed or released" buttons > lastEventBuffer fifth ifTrue: [#mouseDown] ifFalse:[#mouseUp]. ]. ]. buttons := buttons bitOr: (modifiers bitShift: 3). oldButtons := lastEventBuffer fifth bitOr: (lastEventBuffer sixth bitShift: 3). lastEventBuffer := evtBuf. type == #mouseMove ifTrue: [trail := self mouseTrailFrom: evtBuf. ^MouseMoveEvent new setType: type startPoint: (self position) endPoint: trail last trail: trail buttons: buttons hand: self stamp: stamp]. ^MouseButtonEvent new setType: type position: position which: (oldButtons bitXor: buttons) buttons: buttons hand: self stamp: stamp! Item was changed: ----- Method: HandMorph>>generateWindowEvent: (in category 'private events') ----- generateWindowEvent: evtBuf "Generate the appropriate window event for the given raw event buffer" | evt | evt := WindowEvent new. evt setTimeStamp: evtBuf second. + evt timeStamp = 0 ifTrue: [evt setTimeStamp: Time eventMillisecondClock]. - evt timeStamp = 0 ifTrue: [evt setTimeStamp: Time millisecondClockValue]. evt action: evtBuf third. evt rectangle: (Rectangle origin: evtBuf fourth @ evtBuf fifth corner: evtBuf sixth @ evtBuf seventh ). ^evt! Item was changed: ----- Method: MorphicEvent>>timeStamp (in category 'accessing') ----- timeStamp "Return the millisecond clock value at which the event was generated" + ^timeStamp ifNil:[timeStamp := Time eventMillisecondClock]! - ^timeStamp ifNil:[timeStamp := Time millisecondClockValue]! Item was changed: ----- Method: MouseEvent>>asMouseMove (in category 'converting') ----- asMouseMove "Convert the receiver into a mouse move" + ^MouseMoveEvent new setType: #mouseMove startPoint: position endPoint: position trail: {position. position} buttons: buttons hand: source stamp: Time eventMillisecondClock! - ^MouseMoveEvent new setType: #mouseMove startPoint: position endPoint: position trail: {position. position} buttons: buttons hand: source stamp: Time millisecondClockValue.! From tim at rowledge.org Thu Jan 14 01:34:07 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Jan 14 01:34:14 2016 Subject: [squeak-dev] The Trunk: Morphic-tpr.1067.mcz In-Reply-To: <201601140110.u0E1AS0m028354@mail64c0.megamailservers.com> References: <201601140110.u0E1AS0m028354@mail64c0.megamailservers.com> Message-ID: <0384A293-AD81-479F-8498-DCBA45AC1693@rowledge.org> > On 14-01-2016, at 1:10 AM, commits@source.squeak.org wrote: > > tim Rowledge uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-tpr.1067.mcz > > ==================== Summary ==================== > > Name: Morphic-tpr.1067 > Author: tpr > Time: 14 January 2016, 5:09:31.880065 pm > UUID: 9f5c0b23-31d9-4698-99ba-588068d5e268 > Ancestors: Morphic-mt.1066 > > Use the new Time class>eventMillisecondClock method to get a fake timestamp for places where we have to fake up an event and want to compare its timestamp with a real event. This seems to mostly solve the problem but I?m not really happy with seeing ?clicktimeout? notifications in the ClickExerciserMorph after a fast click-release. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Been playing with the pharmacy section again. From lewis at mail.msen.com Thu Jan 14 02:06:21 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Jan 14 02:06:24 2016 Subject: [squeak-dev] The Trunk: Morphic-tpr.1067.mcz In-Reply-To: <0384A293-AD81-479F-8498-DCBA45AC1693@rowledge.org> References: <201601140110.u0E1AS0m028354@mail64c0.megamailservers.com> <0384A293-AD81-479F-8498-DCBA45AC1693@rowledge.org> Message-ID: <20160114020621.GA15890@shell.msen.com> On Wed, Jan 13, 2016 at 05:34:07PM -0800, tim Rowledge wrote: > > > On 14-01-2016, at 1:10 AM, commits@source.squeak.org wrote: > > > > tim Rowledge uploaded a new version of Morphic to project The Trunk: > > http://source.squeak.org/trunk/Morphic-tpr.1067.mcz > > > > ==================== Summary ==================== > > > > Name: Morphic-tpr.1067 > > Author: tpr > > Time: 14 January 2016, 5:09:31.880065 pm > > UUID: 9f5c0b23-31d9-4698-99ba-588068d5e268 > > Ancestors: Morphic-mt.1066 > > > > Use the new Time class>eventMillisecondClock method to get a fake timestamp for places where we have to fake up an event and want to compare its timestamp with a real event. > > This seems to mostly solve the problem but I???m not really happy with seeing ???clicktimeout??? notifications in the ClickExerciserMorph after a fast click-release. > I don't know if you have it perfect, but your approach makes sense for now. The millisecond clock is/was by definition an arbitrary value that should be expected to roll over periodically. There is no expectation that it be tied to e.g. the Smalltalk or Posix epoch. If we can fix things up in the VM such that it /does/ align with a sensible time scale, that's great, but in the mean time it is probably better if the image does not depend on it. There are enough dependencies on 32 bit event time stamps to preserve that behavior. Assuming that event times are given with millisecond resolution, there is no need to provide a large time scale range. So for events, a 32-bit time stamp is fine, millisecond resolution is reasonable, and existing data structures for events are ok. +1 for #eventMillisecondClock. Dave From Marcel.Taeumel at hpi.de Thu Jan 14 07:36:04 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Jan 14 07:57:31 2016 Subject: [squeak-dev] Re: The Trunk: Kernel-tpr.979.mcz In-Reply-To: References: Message-ID: <1452756964643-4871229.post@n4.nabble.com> If you get an authorization error, fix your login data and then just *copy* the MCZ, which got created in the package cache, to the repository of your choice. - Retains your carefully written comments - Retains MCZ version number, timestamp, etc. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Kernel-tpr-979-mcz-tp4871223p4871229.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Jan 14 08:58:40 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Jan 14 09:20:06 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-tpr.1067.mcz In-Reply-To: References: Message-ID: <1452761920174-4871240.post@n4.nabble.com> Why is it implemented in the Time class and not in HandMorph or MorphicEvent? Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-tpr-1067-mcz-tp4871224p4871240.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From craig at netjam.org Thu Jan 14 09:27:48 2016 From: craig at netjam.org (Craig Latta) Date: Thu Jan 14 09:28:20 2016 Subject: [squeak-dev] re: Squeak Oversight Board Election 2016 In-Reply-To: <1a3501d14d4a$a33911c0$e9ab3540$@usmedrec.com> References: <1a3501d14d4a$a33911c0$e9ab3540$@usmedrec.com> Message-ID: Hoi all-- I'd like to serve on the Squeak board in the next term. I'd like to increase awareness of Squeak through Bert's SqueakJS virtual machine[1]. I've been working on making SqueakJS-powered systems invokable from mainstream JavaScript code, as a normal member of the community of JS frameworks people use today. I also have SqueakJS working as a display surface for distributed Squeak apps. This has interesting implications for cloud and mobile computing, and will make my Context project[2] more accessible. I'd also like to get us back in the FOSDEM open-source community conference[3] in Europe. thanks! -C [1] http://try.squeak.org [2] http://netjam.org/context [3] http://fosdem.org -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From jon at huv.com Thu Jan 14 13:51:57 2016 From: jon at huv.com (Jon Hylands) Date: Thu Jan 14 13:52:00 2016 Subject: [squeak-dev] SerialPort on Raspberry Pi Message-ID: Hi everyone, I'm trying to use the SerialPort class on my Raspberry pi 2, to access the UART on the pi. I've successfully accessed the port from python, using pyserial. On the pi, the port name is '/dev/ttyAMA0'. In squeak (using the 5.0 all-in-one), when I try and open the port, it fails, but doesn't tell you anything useful. After I attempt to open the port, SerialPlugin is listed both as an internal plugin and as a loaded module. SerialPlugin VMMaker.oscog-eem.1325 (i) Has anyone actually used the serial port on the pi from Squeak? Thanks, Jon -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160114/19561744/attachment.htm From bert at freudenbergs.de Thu Jan 14 14:47:28 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Jan 14 14:47:31 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-tpr.1067.mcz In-Reply-To: <1452761920174-4871240.post@n4.nabble.com> References: <1452761920174-4871240.post@n4.nabble.com> Message-ID: > On 14.01.2016, at 09:58, marcel.taeumel wrote: > > Why is it implemented in the Time class and not in HandMorph or MorphicEvent? Seems like a very reasonable place to me, because it?s answering a time value. The only other reasonable place would be in EventSensor, which Morphic uses to fetch events. - 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/20160114/6d7c3d37/smime.bin From ron at usmedrec.com Thu Jan 14 15:44:47 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Thu Jan 14 15:44:52 2016 Subject: [squeak-dev] Squeak Oversight Board 2016 Message-ID: <014101d14ee2$7ffdcd10$7ff96730$@usmedrec.com> Hi All, We are off to a great start. We have 3 candidates for 7 seats. (In order of announcement) Tim Rowledge Marcel Taeumel Craig Latta Squeak needs you! Please consider running for the board, or If you know someone that would be a good candidate please encourage them to run. All the best, Ron Teitelbaum -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160114/ccef0dbc/attachment.htm From bert at freudenbergs.de Thu Jan 14 17:11:11 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Jan 14 17:11:16 2016 Subject: [squeak-dev] Squeak Oversight Board 2016 In-Reply-To: <014101d14ee2$7ffdcd10$7ff96730$@usmedrec.com> References: <014101d14ee2$7ffdcd10$7ff96730$@usmedrec.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/20160114/1487a504/smime.bin From tim at rowledge.org Thu Jan 14 17:56:30 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Jan 14 17:56:37 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-tpr.1067.mcz In-Reply-To: <1452761920174-4871240.post@n4.nabble.com> References: <1452761920174-4871240.post@n4.nabble.com> Message-ID: <0ECA3770-7737-4BEE-AE9F-D4235FB0132C@rowledge.org> > On 14-01-2016, at 12:58 AM, marcel.taeumel wrote: > > Why is it implemented in the Time class and not in HandMorph or MorphicEvent? A fair question. Probably the best answer is ?simple-minded editing?. I don?t think it matters a great deal where it goes and if anyone thinks there is a better place they should feel free to change it. Can?t see how performance would be measurably affected by any of the choices. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Immune from any serious head injury. From tim at rowledge.org Thu Jan 14 18:07:46 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Jan 14 18:07:52 2016 Subject: [squeak-dev] Squeak Oversight Board 2016 In-Reply-To: References: <014101d14ee2$7ffdcd10$7ff96730$@usmedrec.com> Message-ID: <88821BA4-FF7D-46ED-A0F3-895B4C717A2E@rowledge.org> > On 14-01-2016, at 9:11 AM, Bert Freudenberg wrote: > And I encourage you all to give it a try! It?s little more work than talking to the other board members for an hour twice a month, plus the occasional emails. Dammit Bert, you?re not supposed to reveal Confidential Board Top Sekrit information on public networks! tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim A computer program does what you tell it to do, not what you want it to do. From ron at usmedrec.com Thu Jan 14 22:21:00 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Thu Jan 14 22:21:05 2016 Subject: [squeak-dev] Squeak Oversight Board 2016 In-Reply-To: <88821BA4-FF7D-46ED-A0F3-895B4C717A2E@rowledge.org> References: <014101d14ee2$7ffdcd10$7ff96730$@usmedrec.com> <88821BA4-FF7D-46ED-A0F3-895B4C717A2E@rowledge.org> Message-ID: <02e501d14f19$d9c94cc0$8d5be640$@usmedrec.com> > > > On 14-01-2016, at 9:11 AM, Bert Freudenberg > wrote: > > And I encourage you all to give it a try! It?s little more work than talking to > the other board members for an hour twice a month, plus the occasional > emails. > > Dammit Bert, you?re not supposed to reveal Confidential Board Top Sekrit > information on public networks! > [Ron Teitelbaum] hehehehe! From commits at source.squeak.org Thu Jan 14 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 14 22:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160114225502.27443.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-January/009260.html Name: Kernel-tpr.979 Ancestors: Kernel-tpr.978 {Authorisation error: let's try again. Sigh} Add Time class>eventMillisecondClock (which gets its value from the same api as the vm event creation prim) and use it instead of the new 64bit based clock - this allows d-click code to work. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009261.html Name: Morphic-tpr.1067 Ancestors: Morphic-mt.1066 Use the new Time class>eventMillisecondClock method to get a fake timestamp for places where we have to fake up an event and want to compare its timestamp with a real event. ============================================= From Marcel.Taeumel at hpi.de Fri Jan 15 10:57:12 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Jan 15 11:18:48 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-tpr.1067.mcz In-Reply-To: References: <1452761920174-4871240.post@n4.nabble.com> Message-ID: <1452855432924-4871483.post@n4.nabble.com> I consider "event" being more specific than "time" and thus would prefer to have it, for example, in EventSensor. But maybe it is just me. :) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-tpr-1067-mcz-tp4871224p4871483.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From frank.shearar at gmail.com Fri Jan 15 12:22:15 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Fri Jan 15 12:22:17 2016 Subject: [squeak-dev] Start thinking about GSoC Message-ID: It's coming up to the next GSoC - time to start thinking about what we'd like to try get funded! frank From craig at netjam.org Fri Jan 15 13:48:14 2016 From: craig at netjam.org (Craig Latta) Date: Fri Jan 15 13:48:25 2016 Subject: [squeak-dev] re: Start thinking about GSoC In-Reply-To: References: Message-ID: Frank writes: > It's coming up to the next GSoC - time to start thinking about what > we'd like to try get funded! Yeah, I'd like to get some students working on some fun SqueakJS stuff, like integration with other JS frameworks. -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From Das.Linux at gmx.de Fri Jan 15 20:15:28 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Fri Jan 15 20:15:32 2016 Subject: [squeak-dev] (hopefully) last GMX test (please ignore) Message-ID: <282B1A8E-08F3-4143-B053-C843E298F561@gmx.de> Again, sorry for any inconveniences. Best regards -Tobias From Das.Linux at gmx.de Fri Jan 15 20:15:56 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Fri Jan 15 20:15:59 2016 Subject: [squeak-dev] (hopefully) last GMX test (please ignore) In-Reply-To: <282B1A8E-08F3-4143-B053-C843E298F561@gmx.de> References: <282B1A8E-08F3-4143-B053-C843E298F561@gmx.de> Message-ID: YES :D On 15.01.2016, at 21:15, Tobias Pape wrote: > Again, sorry for any inconveniences. > > Best regards > -Tobias > From Das.Linux at gmx.de Fri Jan 15 20:28:53 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Fri Jan 15 20:28:56 2016 Subject: [squeak-dev] [OT] ISP issue Message-ID: Dear all, due to a configuration issue on the mailing list server, a German ISP had refused messages from this list since mid December. These issues should now be resolved. I apologize should there have been missed messages or other inconveniences due to this. Best regards -Tobias From ron at usmedrec.com Fri Jan 15 20:49:59 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Fri Jan 15 20:50:04 2016 Subject: [squeak-dev] RE: Squeak Oversight Board Election 2016 In-Reply-To: <1a1401d14d49$47548d90$d5fda8b0$@3dicc.com> References: <1a1401d14d49$47548d90$d5fda8b0$@3dicc.com> Message-ID: <020d01d14fd6$4d497370$e7dc5a50$@usmedrec.com> Hello Squeakers from Germany! Can you hear me now? I heard that you may not have received some of the messages about the Squeak Oversight Board Election 2016 currently going on. Below is the original email. You can find more information about what has gone on since then here: http://wiki.squeak.org/squeak/6346 As a quick summary we now have 4 candidates for 7 board seats Candidates in order of announcement: Tim Rowledge Marcel Taeumel Craig Latta Bert Freudenberg We still need candidates. Please feel free to nudge people you think should run for the board or, if you have been an important part of the community, you might consider running yourself. Welcome back to the mailing lists! All the best, Ron Teitelbaum > From: Ron Teitelbaum [mailto:ron@3dicc.com] > Sent: Tuesday, January 12, 2016 9:55 AM > > Hi All, > > It's that time again. Time to raise your voices and elect your leaders! > It's a time for you to stand up, help your community and volunteer to serve! > Squeak wants you! > > Every year we elect the SOB (Squeak Oversight Board) consisting of seven > members from our community. The current board members are: > > 1. Bert Freudenberg > 2. Eliot Miranda > 3. Tim Rowledge > 4. Frank Shearar > 5. Craig Latta > 6. Chris Muller > 7. David T. Lewis > > For more info on the board please see: > https://squeakboard.wordpress.com/our-mission/ > > Everything about the election, including schedule and more, can be > > tracked here: > > http://wiki.squeak.org/squeak/6346 > > > Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB > members and campaigning! > > Candidates should nominate themselves and start their campaign on the > squeak-dev mailing list. Or if you nominate someone else, make sure that > person really wants to run. :) I will not put anyone on the candidate list until > that person makes it known on squeak-dev that he/she intends to run. > > During this period, the candidates should ideally present themselves on > squeak-dev, unless they have already done so, and the community can ask > questions. > > I encourage you to reach out to potential candidates, people that are active > in the community and represent your views, and ask them to run. Some > people will not run without encouragement. Also I know that some people > wait to the last minute to run for the board to see if others will run but > please consider getting this year off to a faster start and just jump right in! > > *** Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB > members and campaigning! > *** Monday 1st of February 2015 3PM (20.00 UTC): Candidate list is > finalized. > *** Monday 1st of February 2015 4PM (21.00 UTC): Online election starts. > *** Tuesday 9th of February 2015 6PM (23.00 UTC): Online election ends. > *** Results will be announced immediately when the election ends. > > The voting period is one week long and ballots are sent out via email. > > And how do you end up on the voter list? See below. :) > > IMPORTANT: New voters will NOT be added once the election is started. > You > MUST try to get on the voter list before the 1st of February 2014 or you will > NOT be able to vote. If your Email has changed please make sure it is > changed on the list of voters before the election starts. > > -------------------------- > > If you were invited to vote last year you are already on the voter list, no > worries! If you are a new Squeaker and wish to vote do ONE of the following: > > * Get a "known" Squeaker to vouch for you. If a known Squeaker sends > an email to voters (at) squeak.org giving me name and email for you, then I > will add you. > * Send an email to voters at squeak.org yourself (and CC to squeak-dev if > you like) with information/arguments showing me that you are indeed > serious about voting and that you are indeed a Squeaker. > > When the voting period starts all voters will receive an email with > instructions and a link to the voting website. > > If there are any further questions, just reply *in this thread* and I will > closely track it - or send email to voters (at) squeak.org which points to me. > > ...so let's get on with it! > > All the best, > > Ron Teitelbaum > From herbertkoenig at gmx.net Fri Jan 15 21:06:58 2016 From: herbertkoenig at gmx.net (=?ISO-8859-1?Q?Herbert_K=F6nig?=) Date: Fri Jan 15 21:07:02 2016 Subject: AW: [squeak-dev] RE: Squeak Oversight Board Election 2016 Message-ID: <6p7v06n5vptn4pl18qe8hbci.1452892018847@email.android.com> Hi,? yes we can :-) Herbert
-------- Urspr?ngliche Nachricht --------
Von: Ron Teitelbaum
Datum:15.01.2016 21:49 (GMT+01:00)
An: 'The general-purpose Squeak developers list' ,'Squeak Virtual Machine Development Discussion'
Betreff: [squeak-dev] RE: Squeak Oversight Board Election 2016
Hello Squeakers from Germany! Can you hear me now? I heard that you may not have received some of the messages about the Squeak Oversight Board Election 2016 currently going on.? Below is the original email.? You can find more information about what has gone on since then here: http://wiki.squeak.org/squeak/6346 As a quick summary we now have 4 candidates for 7 board seats Candidates in order of announcement: Tim Rowledge Marcel Taeumel Craig Latta Bert Freudenberg We still need candidates.? Please feel free to nudge people you think should run for the board or, if you have been an important part of the community, you might consider running yourself.? Welcome back to the mailing lists! All the best, Ron Teitelbaum > From: Ron Teitelbaum [mailto:ron@3dicc.com] > Sent: Tuesday, January 12, 2016 9:55 AM > > Hi All, > > It's that time again.? Time to raise your voices and elect your leaders! > It's a time for you to stand up, help your community and volunteer to serve! > Squeak wants you! > > Every year we elect the SOB (Squeak Oversight Board) consisting of seven > members from our community. The current board members are: > > 1. Bert Freudenberg > 2. Eliot Miranda > 3. Tim Rowledge > 4. Frank Shearar > 5. Craig Latta > 6. Chris Muller > 7. David T. Lewis > > For more info on the board please see: > https://squeakboard.wordpress.com/our-mission/ > > Everything about the election, including schedule and more, can be > > tracked here: > >??????????????? http://wiki.squeak.org/squeak/6346 > > > Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB > members and campaigning! > > Candidates should nominate themselves and start their campaign on the > squeak-dev mailing list. Or if you nominate someone else, make sure that > person really wants to run. :) I will not put anyone on the candidate list until > that person makes it known on squeak-dev that he/she intends to run. > > During this period, the candidates should ideally present themselves on > squeak-dev, unless they have already done so, and the community can ask > questions. > > I encourage you to reach out to potential candidates, people that are active > in the community and represent your views, and ask them to run.? Some > people will not run without encouragement.? Also I know that some people > wait to the last minute to run for the board to see if others will run but > please consider getting this year off to a faster start and just jump right in! > > *** Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB > members and campaigning! > *** Monday 1st of February 2015 3PM (20.00 UTC): Candidate list is > finalized. > *** Monday 1st of February 2015 4PM (21.00 UTC): Online election starts. > *** Tuesday 9th of February 2015 6PM (23.00 UTC): Online election ends. > *** Results will be announced immediately when the election ends. > > The voting period is one week long and ballots are sent out via email. > > And how do you end up on the voter list? See below. :) > > IMPORTANT: New voters will NOT be added once the election is started. > You > MUST try to get on the voter list before the 1st of February 2014 or you will > NOT be able to vote.? If your Email has changed please make sure it is > changed on the list of voters before the election starts. > > -------------------------- > > If you were invited to vote last year you are already on the voter list, no > worries! If you are a new Squeaker and wish to vote do ONE of the following: > >?????? * Get a "known" Squeaker to vouch for you. If a known Squeaker sends > an email to voters (at) squeak.org giving me name and email for you, then I > will add you. >?????? * Send an email to voters at squeak.org yourself (and CC to squeak-dev if > you like) with information/arguments showing me that you are indeed > serious about voting and that you are indeed a Squeaker. > > When the voting period starts all voters will receive an email with > instructions and a link to the voting website. > > If there are any further questions, just reply *in this thread* and I will > closely track it - or send email to voters (at) squeak.org which points to me. > > ...so let's get on with it! > > All the best, > > Ron Teitelbaum > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160115/4b36f37e/attachment.htm From Das.Linux at gmx.de Fri Jan 15 21:30:48 2016 From: Das.Linux at gmx.de (Das.Linux@gmx.de) Date: Fri Jan 15 21:30:51 2016 Subject: [squeak-dev] [OT] ISP issue In-Reply-To: References: Message-ID: <753D0A1E-F59D-455D-BB40-D21F9F2E5FD2@gmx.de> On 15.01.2016, at 21:28, Tobias Pape wrote: > Dear all, > > due to a configuration issue on the mailing list server, > a German ISP had refused messages from this list since mid > December. > These issues should now be resolved. > I apologize should there have been missed messages or other > inconveniences due to this. > Note to affected users: it seems that the Mailing list server tries to catch up with mails it wasn't able to deliver up until now. Expect out-of-order emails. Best regards -Tobias From asqueaker at gmail.com Fri Jan 15 21:43:28 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Jan 15 21:44:11 2016 Subject: [squeak-dev] Re: How to change balloon help colors? In-Reply-To: <1452670707442-4871032.post@n4.nabble.com> References: <1452599694728-4870851.post@n4.nabble.com> <1452600089467-4870852.post@n4.nabble.com> <1452666935230-4871023.post@n4.nabble.com> <1452670707442-4871032.post@n4.nabble.com> Message-ID: Thank you Marcel! On Wed, Jan 13, 2016 at 1:38 AM, marcel.taeumel wrote: > Hi Chris, > > your things should work fine now: > http://forum.world.st/The-Trunk-Morphic-mt-1064-mcz-td4871028.html > > Here is an example: > > > Note that bold balloon fonts might look better on on a dark background with > white. The property #defaultBalloonTextColor is used for strings and > embellished text objects. > > Also note that #menuAppearance3d still controls the drop shadows in the > system and that menu properties and balloon properties are somewhat bound > together in terms of border width (and maybe other stuff). Why? Hmm... > because they are both popupable? :-D Don't know... > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/How-to-change-balloon-help-colors-tp4870808p4871032.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Fri Jan 15 21:47:16 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Jan 15 21:47:59 2016 Subject: [squeak-dev] Re: SystemWindow drag to edges in Inbox In-Reply-To: <1452697245273-4871136.post@n4.nabble.com> References: <2EFCC821-444C-4EDF-B7E7-83F2DF5F4662@pieber.com> <1452683652424-4871088.post@n4.nabble.com> <1452697245273-4871136.post@n4.nabble.com> Message-ID: Good discussion thanks all. I've wondered whether this feature (and some other new ones) in OS's is part of an effort by OS designers to converge the UI between PC and tablet devices.. On Wed, Jan 13, 2016 at 9:00 AM, marcel.taeumel wrote: > Hey Chris, > > well, you can slam-drag a window to any edge of the screen as you like in MS > Windows 7+. Since then, you have been getting a preview of what will happen > in terms of resizing. If you do not like it, just drag it back some pixels > to the center of the screen before mouse-up. This is no big challenge in > terms of user precision. You can be as "coarse" as you want with your mouse > interaction. Note that there is no threshold but you actually have to touch > the edge of the screen with the mouse cursor. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/SystemWindow-drag-to-edges-in-Inbox-tp4870525p4871136.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From ron at usmedrec.com Fri Jan 15 21:51:31 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Fri Jan 15 21:51:37 2016 Subject: [squeak-dev] RE: Squeak Oversight Board Election 2016 In-Reply-To: <6p7v06n5vptn4pl18qe8hbci.1452892018847@email.android.com> References: <6p7v06n5vptn4pl18qe8hbci.1452892018847@email.android.com> Message-ID: <022e01d14fde$e55daa70$b018ff50$@usmedrec.com> Excellent! Ron From: squeak-dev-bounces@lists.squeakfoundation.org [mailto:squeak-dev-bounces@lists.squeakfoundation.org] On Behalf Of Herbert K?nig Sent: Friday, January 15, 2016 4:07 PM To: The general-purpose Squeak developers list Subject: AW: [squeak-dev] RE: Squeak Oversight Board Election 2016 Hi, yes we can :-) Herbert -------- Urspr?ngliche Nachricht -------- Von: Ron Teitelbaum Datum:15.01.2016 21:49 (GMT+01:00) An: 'The general-purpose Squeak developers list' ,'Squeak Virtual Machine Development Discussion' Betreff: [squeak-dev] RE: Squeak Oversight Board Election 2016 Hello Squeakers from Germany! Can you hear me now? I heard that you may not have received some of the messages about the Squeak Oversight Board Election 2016 currently going on. Below is the original email. You can find more information about what has gone on since then here: http://wiki.squeak.org/squeak/6346 As a quick summary we now have 4 candidates for 7 board seats Candidates in order of announcement: Tim Rowledge Marcel Taeumel Craig Latta Bert Freudenberg We still need candidates. Please feel free to nudge people you think should run for the board or, if you have been an important part of the community, you might consider running yourself. Welcome back to the mailing lists! All the best, Ron Teitelbaum > From: Ron Teitelbaum [mailto:ron@3dicc.com] > Sent: Tuesday, January 12, 2016 9:55 AM > > Hi All, > > It's that time again. Time to raise your voices and elect your leaders! > It's a time for you to stand up, help your community and volunteer to serve! > Squeak wants you! > > Every year we elect the SOB (Squeak Oversight Board) consisting of seven > members from our community. The current board members are: > > 1. Bert Freudenberg > 2. Eliot Miranda > 3. Tim Rowledge > 4. Frank Shearar > 5. Craig Latta > 6. Chris Muller > 7. David T. Lewis > > For more info on the board please see: > https://squeakboard.wordpress.com/our-mission/ > > Everything about the election, including schedule and more, can be > > tracked here: > > http://wiki.squeak.org/squeak/6346 > > > Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB > members and campaigning! > > Candidates should nominate themselves and start their campaign on the > squeak-dev mailing list. Or if you nominate someone else, make sure that > person really wants to run. :) I will not put anyone on the candidate list until > that person makes it known on squeak-dev that he/she intends to run. > > During this period, the candidates should ideally present themselves on > squeak-dev, unless they have already done so, and the community can ask > questions. > > I encourage you to reach out to potential candidates, people that are active > in the community and represent your views, and ask them to run. Some > people will not run without encouragement. Also I know that some people > wait to the last minute to run for the board to see if others will run but > please consider getting this year off to a faster start and just jump right in! > > *** Now until Monday 1st of February 3PM (20.00 UTC): Nominations of SOB > members and campaigning! > *** Monday 1st of February 2015 3PM (20.00 UTC): Candidate list is > finalized. > *** Monday 1st of February 2015 4PM (21.00 UTC): Online election starts. > *** Tuesday 9th of February 2015 6PM (23.00 UTC): Online election ends. > *** Results will be announced immediately when the election ends. > > The voting period is one week long and ballots are sent out via email. > > And how do you end up on the voter list? See below. :) > > IMPORTANT: New voters will NOT be added once the election is started. > You > MUST try to get on the voter list before the 1st of February 2014 or you will > NOT be able to vote. If your Email has changed please make sure it is > changed on the list of voters before the election starts. > > -------------------------- > > If you were invited to vote last year you are already on the voter list, no > worries! If you are a new Squeaker and wish to vote do ONE of the following: > > * Get a "known" Squeaker to vouch for you. If a known Squeaker sends > an email to voters (at) squeak.org giving me name and email for you, then I > will add you. > * Send an email to voters at squeak.org yourself (and CC to squeak-dev if > you like) with information/arguments showing me that you are indeed > serious about voting and that you are indeed a Squeaker. > > When the voting period starts all voters will receive an email with > instructions and a link to the voting website. > > If there are any further questions, just reply *in this thread* and I will > closely track it - or send email to voters (at) squeak.org which points to me. > > ...so let's get on with it! > > All the best, > > Ron Teitelbaum > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160115/95ce72a4/attachment.htm From ron at usmedrec.com Fri Jan 15 23:05:32 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Fri Jan 15 23:05:38 2016 Subject: [squeak-dev] SqueakSSL Moved to squeak-smalltalk Message-ID: <02c701d14fe9$3c9b9ae0$b5d2d0a0$@usmedrec.com> Hi All, Just an FYI. I've moved the squeakSSL code from the itsmeront github to squeak-smalltalk org where it belongs. Please update your repositories accordingly. https://github.com/squeak-smalltalk/squeakssl All the best, Ron Teitelbaum Head Of Engineering 3D Immersive Collaboration Consulting ron@3Dicc.com Follow Me On Twitter: @RonTeitelbaum www.3Dicc.com https://www.google.com/+3Dicc -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160115/ed147501/attachment.htm From commits at source.squeak.org Sat Jan 16 17:43:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 16 17:43:54 2016 Subject: [squeak-dev] The Trunk: Graphics-eem.321.mcz Message-ID: Eliot Miranda uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-eem.321.mcz ==================== Summary ==================== Name: Graphics-eem.321 Author: eem Time: 16 January 2016, 9:43:19.481889 am UUID: 63221468-923b-4e2d-a262-1fb47958bb0c Ancestors: Graphics-eem.320 Rewrite Color>>pixelValueForDepth: to avoid need for normalization and for creating 4-byte LargeIntegers in 64-bits. =============== Diff against Graphics-eem.320 =============== Item was changed: ----- Method: Color>>pixelValueForDepth: (in category 'conversions') ----- pixelValueForDepth: d + "Answers an integer representing the bits that appear in a single pixel of this color in a Form of the given depth. + The depth must be one of 1, 2, 4, 8, 16, or 32. Contrast with pixelWordForDepth: and bitPatternForDepth:, which + answer either a 32-bit word packed with the given pixel value or a multiple-word Bitmap containing a pattern. + The inverse is the class message colorFromPixelValue:depth:" + "Details: + For depths of 8 or less, the result is a colorMap index. + For depths of 16 and 32, it is a direct color value with 5 or 8 bits per color component." + "Transparency: + The pixel value zero is reserved for transparent. + For depths greater than 8, black maps to the darkest possible blue." - "Returns an integer representing the bits that appear in a single pixel of this color in a Form of the given depth. The depth must be one of 1, 2, 4, 8, 16, or 32. Contrast with pixelWordForDepth: and bitPatternForDepth:, which return either a 32-bit word packed with the given pixel value or a multiple-word Bitmap containing a pattern. The inverse is the class message colorFromPixelValue:depth:" - "Details: For depths of 8 or less, the result is a colorMap index. For depths of 16 and 32, it is a direct color value with 5 or 8 bits per color component." - "Transparency: The pixel value zero is reserved for transparent. For depths greater than 8, black maps to the darkest possible blue." | val | + d > 8 ifTrue: "most common case" + [d = 32 ifTrue: "eight bits per component; top 8 bits set to all ones (opaque alpha)" + ["this subexpression is a SmallInteger in both 32- and 64-bits." + val := ((rgb bitShift: -6) bitAnd: 16rFF0000) bitOr: + (((rgb bitShift: -4) bitAnd: 16rFF00) bitOr: + ((rgb bitShift: -2) bitAnd: 16rFF)). + "16rFF000000 & 16rFF000001 are LargeIntegers in 32-bits, SmallIntegers in 64-bits." + ^val = 0 ifTrue: [16rFF000001] ifFalse: [16rFF000000 + val]]. + + d = 16 ifTrue: "five bits per component; top bits ignored" + [val := (((rgb bitShift: -15) bitAnd: 16r7C00) bitOr: - d > 8 "most common case" - ifTrue: - [d = 32 ifTrue: [ - "eight bits per component; top 8 bits set to all ones (opaque alpha)" - val := (LargePositiveInteger new: 4) - at: 4 put: 16rFF; - at: 3 put: ((rgb bitShift: -22) bitAnd: 16rFF); - at: 2 put: ((rgb bitShift: -12) bitAnd: 16rFF); - at: 1 put: ((rgb bitShift: -2) bitAnd: 16rFF); - normalize. "normalize is not necessary as long as SmallInteger maxVal highBit < 32, but let's be future proof" - ^val < 16rFF000001 ifTrue: [16rFF000001] ifFalse: [val]]. - - d = 16 ifTrue: [ - "five bits per component; top bits ignored" - val := (((rgb bitShift: -15) bitAnd: 16r7C00) bitOr: ((rgb bitShift: -10) bitAnd: 16r03E0)) bitOr: ((rgb bitShift: -5) bitAnd: 16r001F). + ^val = 0 ifTrue: [1] ifFalse: [val]]. - ^val < 1 ifTrue: [1] ifFalse: [val]]. + d = 12 ifTrue: "for indexing a color map with 4 bits per color component" + [val := (((rgb bitShift: -18) bitAnd: 16r0F00) bitOr: - d = 12 ifTrue: [ "for indexing a color map with 4 bits per color component" - val := (((rgb bitShift: -18) bitAnd: 16r0F00) bitOr: ((rgb bitShift: -12) bitAnd: 16r00F0)) bitOr: ((rgb bitShift: -6) bitAnd: 16r000F). + ^val = 0 ifTrue: [1] ifFalse: [val]]. - ^val < 1 ifTrue: [1] ifFalse: [val]]. + d = 9 ifTrue: "for indexing a color map with 3 bits per color component" + [val := (((rgb bitShift: -21) bitAnd: 16r01C0) bitOr: + ((rgb bitShift: -14) bitAnd: 16r0038)) bitOr: + ((rgb bitShift: -7) bitAnd: 16r0007). + ^val = 0 ifTrue: [1] ifFalse: [val]]]. - d = 9 ifTrue: [ "for indexing a color map with 3 bits per color component" - val := (((rgb bitShift: -21) bitAnd: 16r01C0) bitOr: - ((rgb bitShift: -14) bitAnd: 16r0038)) bitOr: - ((rgb bitShift: -7) bitAnd: 16r0007). - ^val < 1 ifTrue: [1] ifFalse: [val]]]. d = 8 ifTrue: [^ self closestPixelValue8]. d = 4 ifTrue: [^ self closestPixelValue4]. d = 2 ifTrue: [^ self closestPixelValue2].. d = 1 ifTrue: [^ self closestPixelValue1]. self error: 'unknown pixel depth: ', d printString ! From commits at source.squeak.org Sat Jan 16 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 16 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160116225502.10860.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-January/009262.html Name: Graphics-eem.321 Ancestors: Graphics-eem.320 Rewrite Color>>pixelValueForDepth: to avoid need for normalization and for creating 4-byte LargeIntegers in 64-bits. ============================================= From eliot.miranda at gmail.com Sun Jan 17 02:10:21 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Jan 17 02:10:24 2016 Subject: [squeak-dev] Re: [Pharo-project] [Vm-dev] Re: Can OSProcess functionality be implemented using FFI instead of plugin? In-Reply-To: References: <99B01B57-5F11-4AF6-A934-C18A2079D398@gmail.com> Message-ID: On Sat, Jan 16, 2016 at 4:37 PM, Levente Uzonyi wrote: > > On Sat, 16 Jan 2016, Mariano Martinez Peck wrote: > > (Still no quote.) > > How will you read the output of the process without having your image's > process blocked in the FFI callout? > How will you make sure that writes to input of the process won't block the > FFI callout? This presupposes the threaded FFI. The threaded FFI allows the VM to make any number of blocking calls, adding a new thread to run the VM whenever the VM is stalled when the heartbeat beats. hence one can freely read and write to/from i/o blocking i/o streams (including pipes and sockets) or blocking database connexions, etc, all without stating that the FFI call must be done in a special way, since all calls through the FFI can block without blocking the VM. Note that the scheme is also amenable to plugins, but the plugins must be rewritten to include the release vm/acquire vm calls around a blocking call. With the threaded VM the FFI includes these calls around every FFI call. HTH _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160116/3ceb91ed/attachment.htm From frank.shearar at gmail.com Sun Jan 17 11:11:29 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Sun Jan 17 11:11:34 2016 Subject: [squeak-dev] Re: [Vm-dev] Where to get Monitor implementation based on primitives? In-Reply-To: References: Message-ID: On 7 January 2016 at 17:12, Eliot Miranda wrote: > Hi Denis, Hi Cl?ment, Hi Frank, > > On Thu, Jan 7, 2016 at 5:34 AM, Cl?ment Bera wrote: >> >> Hello, >> >> Eliot, please, you told me you had the code and Denis is interested. >> >> It uses 3 primitives for performance. > > > Forgive the delay. I thought it proper to ask permission since the code was > written while I was at Qwaq. I'm attaching the code in a fairly raw state, > see the attached. The code is MIT, but copyright 3DICC. > > It is a plugin replacement for Squeak's Mutex, and with a little ingenuity > could be a replacement for Squeak's Monitor. It is quicker because it uses > three new primitives to manage entering a critical section and setting the > owner, exiting the critical section and releasing the owner, and testing if > a critical section, entering if the section is unowned. The use of the > primitives means fewer block activations and ensure: blocks in entering and > exiting the critical section, and that's the actual cause of the speed-up. > > You can benchmark the code as is. Here are some results on 32-bit Spur, on > my 2.2GHz Core i7 > > {Mutex new. Monitor new. CriticalSection new} collect: > [:cs| | n | > n := 0. > [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n > + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. > cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - > 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. > n ] bench] > > {Mutex new. Monitor new. CriticalSection new} collect: > [:cs| | n | > n := 0. > cs class name, ' -> ', > [cs critical: [n := n + 1]. cs critical: [n := n + 1]. cs critical: [n := n > + 1]. cs critical: [n := n + 1]. cs critical: [n := n + 1]. > cs critical: [n := n - 1]. cs critical: [n := n - 1]. cs critical: [n := n - > 1]. cs critical: [n := n - 1]. cs critical: [n := n - 1]. > n ] bench] > > #( 'Mutex -> 440,000 per second. 2.27 microseconds per run.' > 'Monitor -> 688,000 per second. 1.45 microseconds per run.' > 'CriticalSection -> 1,110,000 per second. 900 nanoseconds per run.') > > Replacement is probably trivial; rename Mutex to OldMutex, rename > CriticalSection to Mutex, recompile. But there are lots of mutexes in the > system and these are potentially owned. Transforming unowned ones is > trivial, but transforming owned ones is, I think, impossible. But at least > in my system there are no owned mutexes or monitors. > > Frank (or anyone else), would you be interested in creating a replacement > for Squeak's Monitor based on CriticalSection? It sounds like an interesting problem. I watched the thread unfold and I'm still not massively clear on what is required though? (Apologies for the delay in responding: my cup overfloweth at the moment, but should resume normal levels in a month or so.) frank From leves at caesar.elte.hu Sun Jan 17 15:30:44 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Jan 17 15:30:50 2016 Subject: [squeak-dev] Re: [Pharo-project] [Vm-dev] Re: Can OSProcess functionality be implemented using FFI instead of plugin? In-Reply-To: References: Message-ID: On Sat, 16 Jan 2016, Eliot Miranda wrote: > > > On Sat, Jan 16, 2016 at 4:37 PM, Levente Uzonyi wrote: > > On Sat, 16 Jan 2016, Mariano Martinez Peck wrote: > > (Still no quote.) > > How will you read the output of the process without having your image's process blocked in the FFI callout? > How will you make sure that writes to input of the process won't block the FFI callout? > > > This presupposes the threaded FFI.? The threaded FFI allows the VM to make any number of blocking calls, adding a new thread to run the VM whenever the VM is stalled when the heartbeat beats. ?hence one can freely read and write to/from i/o blocking i/o streams > (including pipes and sockets) or blocking database connexions, etc, all without stating that the FFI call must be done in a special way, since all calls through the FFI can block without blocking the VM. I think it was you who said (in a discussion with Craig) that the threaded FFI was not production ready. Is it ready for produciton now? Levente > > Note that the scheme is also amenable to plugins, but the plugins must be rewritten to include the release vm/acquire vm calls around a blocking call.? With the threaded VM the FFI includes these calls around every FFI call. > > HTH > _,,,^..^,,,_ > best,?Eliot > > From eliot.miranda at gmail.com Sun Jan 17 16:53:48 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Jan 17 16:53:55 2016 Subject: [squeak-dev] Re: [Pharo-project] [Vm-dev] Re: Can OSProcess functionality be implemented using FFI instead of plugin? In-Reply-To: References: Message-ID: <17650508-71B8-497E-A646-5CAEF40D0910@gmail.com> Hi Levente, > On Jan 17, 2016, at 7:30 AM, Levente Uzonyi wrote: > >> On Sat, 16 Jan 2016, Eliot Miranda wrote: >> >> On Sat, Jan 16, 2016 at 4:37 PM, Levente Uzonyi wrote: >> >> On Sat, 16 Jan 2016, Mariano Martinez Peck wrote: >> >> (Still no quote.) >> >> How will you read the output of the process without having your image's process blocked in the FFI callout? >> How will you make sure that writes to input of the process won't block the FFI callout? >> This presupposes the threaded FFI. The threaded FFI allows the VM to make any number of blocking calls, adding a new thread to run the VM whenever the VM is stalled when the heartbeat beats. hence one can freely read and write to/from i/o blocking i/o streams >> (including pipes and sockets) or blocking database connexions, etc, all without stating that the FFI call must be done in a special way, since all calls through the FFI can block without blocking the VM. > > I think it was you who said (in a discussion with Craig) that the threaded FFI was not production ready. Is it ready for produciton now? No, but I expect this is the year it will be. Spur provides pinning, so the VM infrastructure is there. The Pharo community plus some commercial relationships that have developed are providing funding. Esteban Lorenzano and I want to collaborate on this and I hope to get help from some other people, such as Ronie Salgado. And Mariano is working on an important part of the problem. So I feel there's sufficient momentum for us to realize the threaded FFI this year. > Levente _,,,^..^,,,_ (phone) >> Note that the scheme is also amenable to plugins, but the plugins must be rewritten to include the release vm/acquire vm calls around a blocking call. With the threaded VM the FFI includes these calls around every FFI call. >> HTH >> _,,,^..^,,,_ >> best, Eliot From kilon.alios at gmail.com Sun Jan 17 16:55:10 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Sun Jan 17 16:55:22 2016 Subject: [squeak-dev] Re: [Pharo-project] [Vm-dev] Re: Can OSProcess functionality be implemented using FFI instead of plugin? In-Reply-To: <17650508-71B8-497E-A646-5CAEF40D0910@gmail.com> References: <17650508-71B8-497E-A646-5CAEF40D0910@gmail.com> Message-ID: wow impressive work guys , thats awesome news. On Sun, Jan 17, 2016 at 6:53 PM Eliot Miranda wrote: > > Hi Levente, > > > On Jan 17, 2016, at 7:30 AM, Levente Uzonyi > wrote: > > > >> On Sat, 16 Jan 2016, Eliot Miranda wrote: > >> > >> On Sat, Jan 16, 2016 at 4:37 PM, Levente Uzonyi > wrote: > >> > >> On Sat, 16 Jan 2016, Mariano Martinez Peck wrote: > >> > >> (Still no quote.) > >> > >> How will you read the output of the process without having your > image's process blocked in the FFI callout? > >> How will you make sure that writes to input of the process won't > block the FFI callout? > >> This presupposes the threaded FFI. The threaded FFI allows the VM to > make any number of blocking calls, adding a new thread to run the VM > whenever the VM is stalled when the heartbeat beats. hence one can freely > read and write to/from i/o blocking i/o streams > >> (including pipes and sockets) or blocking database connexions, etc, all > without stating that the FFI call must be done in a special way, since all > calls through the FFI can block without blocking the VM. > > > > I think it was you who said (in a discussion with Craig) that the > threaded FFI was not production ready. Is it ready for produciton now? > > No, but I expect this is the year it will be. Spur provides pinning, so > the VM infrastructure is there. The Pharo community plus some commercial > relationships that have developed are providing funding. Esteban Lorenzano > and I want to collaborate on this and I hope to get help from some other > people, such as Ronie Salgado. And Mariano is working on an important part > of the problem. So I feel there's sufficient momentum for us to realize > the threaded FFI this year. > > > Levente > > > _,,,^..^,,,_ (phone) > > >> Note that the scheme is also amenable to plugins, but the plugins must > be rewritten to include the release vm/acquire vm calls around a blocking > call. With the threaded VM the FFI includes these calls around every FFI > call. > >> HTH > >> _,,,^..^,,,_ > >> best, Eliot > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160117/eae9a390/attachment.htm From eliot.miranda at gmail.com Sun Jan 17 17:04:05 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Jan 17 17:04:10 2016 Subject: [squeak-dev] Re: [Pharo-project] [Vm-dev] Re: Can OSProcess functionality be implemented using FFI instead of plugin? In-Reply-To: <17650508-71B8-497E-A646-5CAEF40D0910@gmail.com> References: <17650508-71B8-497E-A646-5CAEF40D0910@gmail.com> Message-ID: <191B3EDD-8F6E-49BA-B7B9-06F9475440E8@gmail.com> > On Jan 17, 2016, at 8:53 AM, Eliot Miranda wrote: > > Hi Levente, > >>> On Jan 17, 2016, at 7:30 AM, Levente Uzonyi wrote: >>> >>> On Sat, 16 Jan 2016, Eliot Miranda wrote: >>> >>> On Sat, Jan 16, 2016 at 4:37 PM, Levente Uzonyi wrote: >>> >>> On Sat, 16 Jan 2016, Mariano Martinez Peck wrote: >>> >>> (Still no quote.) >>> >>> How will you read the output of the process without having your image's process blocked in the FFI callout? >>> How will you make sure that writes to input of the process won't block the FFI callout? >>> This presupposes the threaded FFI. The threaded FFI allows the VM to make any number of blocking calls, adding a new thread to run the VM whenever the VM is stalled when the heartbeat beats. hence one can freely read and write to/from i/o blocking i/o streams >>> (including pipes and sockets) or blocking database connexions, etc, all without stating that the FFI call must be done in a special way, since all calls through the FFI can block without blocking the VM. >> >> I think it was you who said (in a discussion with Craig) that the threaded FFI was not production ready. Is it ready for produciton now? > > No, but I expect this is the year it will be. Spur provides pinning, so the VM infrastructure is there. The Pharo community plus some commercial relationships that have developed are providing funding. Esteban Lorenzano and I want to collaborate on this and I hope to get help from some other people, such as Ronie Salgado. And Mariano is working on an important part of the problem. So I feel there's sufficient momentum for us to realize the threaded FFI this year. and when Craig Latta tried to use it late last year it worked up to a point. The thing that didn't work was callbacks from foreign threads. So it looks like the core threading code is not too far away from working. Another really important part, bigger than threading, is marshaling. Being able to handle the full x85_64 abi requires a better approach than interpreting tops signatures. Igor's NativeBoost gave an example of how to generate marshaling machine code, but alas only for x86. But Sista includes an extensible bytecode set for arbitrary instructions. Sista is close to production, and we know the bytecode set works. So the plan is to use these bytecodes to do the marshaling. That neatly solves the problems of a) associating marshaling machine code with a method and b) marshaling in an interpreted stack VM, since the bytecode set works in any Cog VM. So the plan is to write an ABI compiler from C signatures to marshaling code to replace the interpreted FFI plugin. So this year I hope we will have an excellent high performance FFI. >> Levente > > _,,,^..^,,,_ (phone) > >>> Note that the scheme is also amenable to plugins, but the plugins must be rewritten to include the release vm/acquire vm calls around a blocking call. With the threaded VM the FFI includes these calls around every FFI call. >>> HTH >>> _,,,^..^,,,_ >>> best, Eliot From gettimothy at zoho.com Sun Jan 17 19:54:54 2016 From: gettimothy at zoho.com (gettimothy) Date: Sun Jan 17 19:54:59 2016 Subject: [squeak-dev] Proposal for a 'category browser' method on Browser class Message-ID: <15251279694.c0be020963234.2341686453061756263@zoho.com> Back story. If you browse Category 'Kernel-Methods' class CompiledMethod and right click on 'accessing-pragmas & properties' then select 'browse' a Browser appears showing all the methods in that method category; In some HelpTopic work I am doing, I want to do the same thing within the HelpTopic so the user can do a DoIt and see all the related methods I am discussing. I hunted around for how the system currently does it and Browser->buildMessageCategoryBrowserEditString: aString does the work. I am able to duplicate that with Browser openBrowserView:( (Browser new) selectSystemCategory: #'Kernel-Methods'; selectClass: CompiledMethod; metaClassIndicated: false; selectMessageCategoryNamed: #'accessing-pragmas & properties'; selectMessageNamed: nil; openMessageCatEditString:nil) label: 'Message Category Browser (', #'Kernel-Classes' asString, ')'. While this works, embedding this in a HelpTopic is a bit clunky looking, so I propose adding a wrapper method such as: Browser openCategoryBrowserFor: #'Kernel-Methods' class: CompiledMethod category:#'accessing-pragmas & properties' -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160117/53e61747/attachment.htm From tim at rowledge.org Sun Jan 17 23:38:11 2016 From: tim at rowledge.org (tim Rowledge) Date: Sun Jan 17 23:38:15 2016 Subject: [squeak-dev] SerialPort on Raspberry Pi In-Reply-To: References: Message-ID: > On 14-01-2016, at 5:51 AM, Jon Hylands wrote: > > > Hi everyone, > > I'm trying to use the SerialPort class on my Raspberry pi 2, to access the UART on the pi. > > I've successfully accessed the port from python, using pyserial. On the pi, the port name is '/dev/ttyAMA0?. The only thing I can offer is that Scratch finds a serial port as /dev/ttyAMA0 as well, implying that on at least one Pi it finds the same port that python does. I don?t think I have any devices that I could even try to connect to. Any suggestions for things that might be around the office? I do faintly recall some discussions about Pi serial stuff and having to use the rasp-config utility but that was a long time ago and I don?t seem to have any emails referring to it. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: EOS: Erase Operating System From btc at openinworld.com Mon Jan 18 00:35:47 2016 From: btc at openinworld.com (Ben Coman) Date: Mon Jan 18 00:36:11 2016 Subject: [squeak-dev] SerialPort on Raspberry Pi In-Reply-To: References: Message-ID: On Mon, Jan 18, 2016 at 7:38 AM, tim Rowledge wrote: > >> On 14-01-2016, at 5:51 AM, Jon Hylands wrote: >> >> >> Hi everyone, >> >> I'm trying to use the SerialPort class on my Raspberry pi 2, to access the UART on the pi. >> >> I've successfully accessed the port from python, using pyserial. On the pi, the port name is '/dev/ttyAMA0?. > > The only thing I can offer is that Scratch finds a serial port as /dev/ttyAMA0 as well, implying that on at least one Pi it finds the same port that python does. I don?t think I have any devices that I could even try to connect to. Any suggestions for things that might be around the office? > > I do faintly recall some discussions about Pi serial stuff and having to use the rasp-config utility but that was a long time ago and I don?t seem to have any emails referring to it. > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: EOS: Erase Operating System > > > Maybe you could just loop back... http://unix.stackexchange.com/questions/117037/how-to-send-data-to-a-serial-port-and-see-any-answer From btc at openinworld.com Mon Jan 18 00:39:10 2016 From: btc at openinworld.com (Ben Coman) Date: Mon Jan 18 00:39:32 2016 Subject: [squeak-dev] SerialPort on Raspberry Pi In-Reply-To: References: Message-ID: On Mon, Jan 18, 2016 at 8:35 AM, Ben Coman wrote: > On Mon, Jan 18, 2016 at 7:38 AM, tim Rowledge wrote: >> >>> On 14-01-2016, at 5:51 AM, Jon Hylands wrote: >>> >>> >>> Hi everyone, >>> >>> I'm trying to use the SerialPort class on my Raspberry pi 2, to access the UART on the pi. >>> >>> I've successfully accessed the port from python, using pyserial. On the pi, the port name is '/dev/ttyAMA0?. >> >> The only thing I can offer is that Scratch finds a serial port as /dev/ttyAMA0 as well, implying that on at least one Pi it finds the same port that python does. I don?t think I have any devices that I could even try to connect to. Any suggestions for things that might be around the office? >> >> I do faintly recall some discussions about Pi serial stuff and having to use the rasp-config utility but that was a long time ago and I don?t seem to have any emails referring to it. >> >> >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> Strange OpCodes: EOS: Erase Operating System >> >> >> > > Maybe you could just loop back... > http://unix.stackexchange.com/questions/117037/how-to-send-data-to-a-serial-port-and-see-any-answer Whoops, sent too soon - just a potential problem... http://unix.stackexchange.com/questions/42964/unexpected-results-testing-serial-loopback-using-echo-and-cat Loopback with SoCat http://myrobotlab.org/content/serial-terminal-loopbacks-linux Hardware loopback http://serial-lines.blogspot.com.au/2011/04/for-this-post-were-going-to-send-some.html Toubleshooting... http://www.ee.ryerson.ca/~phiscock/papers/serial.pdf cheers -ben From commits at source.squeak.org Mon Jan 18 03:32:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 18 03:32:40 2016 Subject: [squeak-dev] The Trunk: Kernel-eem.980.mcz Message-ID: Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.980.mcz ==================== Summary ==================== Name: Kernel-eem.980 Author: eem Time: 18 January 2016, 7:32:08.6746 pm UUID: 95543c3e-e2d1-4ec8-8ad2-a90fca9a2b06 Ancestors: Kernel-tpr.979 Lay the ground work for double-byte strings (and possibly a 64-bit indexable bits type). Test shallowCopy's error code and report primitive failure if it has failed for other than being out of memory (which may simply imply the need for a GC). =============== Diff against Kernel-tpr.979 =============== Item was changed: ----- Method: Behavior>>format (in category 'accessing') ----- format "Answer an Integer that encodes the kinds and numbers of variables of + instances of the receiver. The format is (currently) composed of two fields, + a 16-bit instSize, in the least significant bits, specifying the number of named + inst vars, if any, and a 5-bit format field, describing the kind of class. c.f. instSpec. + (msb)<5 bit format><16 bit #fixed fields>(lsb)" - instances of the receiver." ^format! Item was changed: ----- Method: Behavior>>instSpec (in category 'testing') ----- instSpec "Answer the instance specification part of the format that defines what kind of object an instance of the receiver is. The formats are 0 = 0 sized objects (UndefinedObject True False et al) 1 = non-indexable objects with inst vars (Point et al) 2 = indexable objects with no inst vars (Array et al) 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al) 4 = weak indexable objects with inst vars (WeakArray et al) 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron) 6 = unused 7 = immediates (SmallInteger, Character) 8 = unused 9 = 64-bit indexable + 10-11 = 32-bit indexable (Bitmap) (plus one odd bit, unused in 32-bits) + 12-15 = 16-bit indexable (plus two odd bits, one unused in 32-bits) + 16-23 = 8-bit indexable (plus three odd bits, one unused in 32-bits) + 24-31 = compiled methods (CompiledMethod) (plus three odd bits, one unused in 32-bits) + Note that in the VM instances also have a 5 bit format field that relates to their class's format. + Formats 11, 13-15, 17-23 & 25-31 are unused in classes but used in instances to define the + number of elements missing up to the slot size. For example, a 2-byte ByteString instance + has format 18 in 32-bits, since its size is one 32-bit slot - 2 bytes ((18 bitAnd: 3) = 2), and + 22 in 64 bits, since its size is one 64-bit slot - 6 bytes ((22 bitAnd: 7) = 6)." - 10-11 = 32-bit indexable (Bitmap) - 12-15 = 16-bit indexable - 16-23 = 8-bit indexable - 24-31 = compiled methods (CompiledMethod)" ^(format bitShift: -16) bitAnd: 16r1F! Item was changed: ----- Method: Behavior>>kindOfSubclass (in category 'testing class hierarchy') ----- kindOfSubclass "Answer a String that is the keyword that describes the receiver's kind of subclass, either a regular subclass, a variableSubclass, a variableByteSubclass, a variableWordSubclass, a weakSubclass, an ephemeronSubclass or an immediateSubclass. + c.f. typeOfClass & instSpec" + ^(#(' subclass: ' + ' subclass: ' + ' variableSubclass: ' + ' variableSubclass: ' + ' weakSubclass: ' + ' ephemeronSubclass: ' + nil + ' immediateSubclass: ' + nil + ' variableDoubleWordSubclass: ' + ' variableWordSubclass: ' nil + ' variableDoubleByteSubclass: ' nil nil nil + ' variableByteSubclass: ' nil nil nil nil nil nil nil + ' variableByteSubclass: ' nil nil nil nil nil nil nil ) + at: self instSpec + 1) ifNil: + [self error: 'invalid class type']! - c.f. typeOfClass" - ^self isVariable - ifTrue: - [self isBits - ifTrue: - [self isBytes - ifTrue: [' variableByteSubclass: '] - ifFalse: [' variableWordSubclass: ']] - ifFalse: - [self isWeak - ifTrue: [' weakSubclass: '] - ifFalse: [' variableSubclass: ']]] - ifFalse: - [self isImmediateClass - ifTrue: [' immediateSubclass: '] - ifFalse: - [self isEphemeronClass - ifTrue: [' ephemeronSubclass: '] - ifFalse: [' subclass: ']]]! Item was changed: ----- Method: Behavior>>typeOfClass (in category 'accessing') ----- typeOfClass + "Answer a symbol uniquely describing the type of the receiver. c.f. kindOfSubclass, instSpec" + ^(#(normal + normal + variable + variable + weak + ephemeron + nil + immediate + nil + longs + words nil + shorts nil nil nil + bytes nil nil nil nil nil nil nil + compiledMethod nil nil nil nil nil nil nil) + at: self instSpec + 1) ifNil: + [self error: 'invalid class type']! - "Answer a symbol uniquely describing the type of the receiver. c.f. kindOfSubclass" - self isBytes ifTrue: - [^self instSpec = CompiledMethod instSpec - ifTrue: [#compiledMethod] "Very special!!" - ifFalse: [#bytes]]. - (self isWords and: [self isPointers not]) ifTrue: - [^self instSpec = SmallInteger instSpec - ifTrue: [#immediate] "Very special!!" - ifFalse: [#words]]. - self isWeak ifTrue: [^#weak]. - self isVariable ifTrue: [^#variable]. - self isEphemeronClass ifTrue: [^#ephemeron]. - ^#normal! Item was changed: ----- Method: ClassBuilder>>computeFormat:instSize:forSuper: (in category 'class format') ----- computeFormat: type instSize: newInstSize forSuper: newSuper "Compute the new format for making oldClass a subclass of newSuper. Answer the format or nil if there is any problem." + | instSize isVar isPointers isWeak bitsUnitSize | - | instSize isVar isWords isPointers isWeak | type == #compiledMethod ifTrue: [newInstSize > 0 ifTrue: [self error: 'A compiled method class cannot have named instance variables'. ^nil]. ^CompiledMethod format]. instSize := newInstSize + (newSuper ifNil:[0] ifNotNil:[newSuper instSize]). instSize > 65535 ifTrue: [self error: 'Class has too many instance variables (', instSize printString,')'. ^nil]. + type == #normal ifTrue:[isVar := isWeak := false. isPointers := true]. + type == #bytes ifTrue:[isVar := true. bitsUnitSize := 1. isPointers := isWeak := false]. + type == #shorts ifTrue:[isVar := true. bitsUnitSize := 2. isPointers := isWeak := false]. + type == #words ifTrue:[isVar := true. bitsUnitSize := 4. isPointers := isWeak := false]. + type == #longs ifTrue:[isVar := true. bitsUnitSize := 8. isPointers := isWeak := false]. + type == #variable ifTrue:[isVar := isPointers := true. isWeak := false]. + type == #weak ifTrue:[isVar := isWeak := isPointers := true]. + type == #ephemeron ifTrue:[isVar := false. isWeak := isPointers := true]. + type == #immediate ifTrue:[isVar := isWeak := isPointers := false]. - type == #normal ifTrue:[isVar := isWeak := false. isWords := isPointers := true]. - type == #bytes ifTrue:[isVar := true. isWords := isPointers := isWeak := false]. - type == #words ifTrue:[isVar := isWords := true. isPointers := isWeak := false]. - type == #variable ifTrue:[isVar := isPointers := isWords := true. isWeak := false]. - type == #weak ifTrue:[isVar := isWeak := isWords := isPointers := true]. - type == #ephemeron ifTrue:[isVar := false. isWeak := isWords := isPointers := true]. - type == #immediate ifTrue:[isVar := isWeak := isPointers := false. isWords := true]. (isPointers not and: [instSize > 0]) ifTrue: [self error: 'A non-pointer class cannot have named instance variables'. ^nil]. + ^self format: instSize variable: isVar bitsUnitSize: bitsUnitSize pointers: isPointers weak: isWeak! - ^self format: instSize variable: isVar words: isWords pointers: isPointers weak: isWeak! Item was added: + ----- Method: ClassBuilder>>format:variable:bitsUnitSize:pointers:weak: (in category 'class format') ----- + format: nInstVars variable: isVar bitsUnitSize: bitsUnitSize pointers: isPointers weak: isWeak + "Compute the format for the given instance specfication. + Above Cog Spur the class format is + <5 bits inst spec><16 bits inst size> + where the 5-bit inst spec is + 0 = 0 sized objects (UndefinedObject True False et al) + 1 = non-indexable objects with inst vars (Point et al) + 2 = indexable objects with no inst vars (Array et al) + 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al) + 4 = weak indexable objects with inst vars (WeakArray et al) + 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron) + 6 = unused + 7 = immediates (SmallInteger, Character, SmallFloat64) + 8 = unused + 9 = 64-bit indexable + 10-11 = 32-bit indexable (Bitmap, WideString) + 12-15 = 16-bit indexable + 16-23 = 8-bit indexable (ByteString) + 24-31 = compiled methods (CompiledMethod)" + | instSpec | + instSpec := isWeak + ifTrue: + [isVar + ifTrue: [4] + ifFalse: [5]] + ifFalse: + [isPointers + ifTrue: + [isVar + ifTrue: [nInstVars > 0 ifTrue: [3] ifFalse: [2]] + ifFalse: [nInstVars > 0 ifTrue: [1] ifFalse: [0]]] + ifFalse: + [isVar + ifTrue: [bitsUnitSize caseOf: { + [1] -> [16]. + [2] -> [12]. + [4] -> [10]. + [8] -> [9] }] + ifFalse: [7]]]. + ^(instSpec bitShift: 16) + nInstVars! Item was changed: ----- Method: Object>>shallowCopy (in category 'copying') ----- shallowCopy "Answer a copy of the receiver which shares the receiver's instance variables." | class newObject index | + + ec == #'insufficient object memory' ifFalse: + [^self primitiveFailed]. - class := self class. class isVariable ifTrue: [index := self basicSize. + newObject := class basicNew: index. + [index > 0] whileTrue: + [newObject basicAt: index put: (self basicAt: index). + index := index - 1]] - newObject := class basicNew: index. - [index > 0] - whileTrue: - [newObject basicAt: index put: (self basicAt: index). - index := index - 1]] ifFalse: [newObject := class basicNew]. index := class instSize. + [index > 0] whileTrue: + [newObject instVarAt: index put: (self instVarAt: index). + index := index - 1]. + ^newObject! - [index > 0] - whileTrue: - [newObject instVarAt: index put: (self instVarAt: index). - index := index - 1]. - ^ newObject! From commits at source.squeak.org Mon Jan 18 07:31:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 18 07:31:38 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1068.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1068.mcz ==================== Summary ==================== Name: Morphic-mt.1068 Author: mt Time: 18 January 2016, 8:31:01.62408 am UUID: f13223e3-051e-4345-96d8-c207a307a828 Ancestors: Morphic-tpr.1067 Makes preference regarding 24-hr clock in docking bar functional. Adds preference regarding seconds in clock in docking bar. =============== Diff against Morphic-tpr.1067 =============== Item was changed: Object subclass: #TheWorldMainDockingBar instanceVariableNames: '' + classVariableNames: 'Instance ShowSecondsInClock TS TwentyFourHourClock' - classVariableNames: 'Instance TS TwentyFourHourClock' poolDictionaries: '' category: 'Morphic-Kernel'! Item was added: + ----- Method: TheWorldMainDockingBar class>>showSecondsInClock (in category 'preferences') ----- + showSecondsInClock + + ^ ShowSecondsInClock ifNil: [ true ]! Item was added: + ----- Method: TheWorldMainDockingBar class>>showSecondsInClock: (in category 'preferences') ----- + showSecondsInClock: boolean + + ShowSecondsInClock := boolean. + self updateInstances.! Item was changed: ----- Method: TheWorldMainDockingBar>>clockOn: (in category 'right side') ----- clockOn: aDockingBar aDockingBar + addMorphBack: (ClockMorph new + show24hr: self class twentyFourHourClock; + showSeconds: self class showSecondsInClock; + yourself); - addMorphBack: (ClockMorph new show24hr: TwentyFourHourClock; yourself); addDefaultSpace! From Marcel.Taeumel at hpi.de Mon Jan 18 07:13:44 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Jan 18 07:35:39 2016 Subject: [squeak-dev] Re: Proposal for a 'category browser' method on Browser class In-Reply-To: <15251279694.c0be020963234.2341686453061756263@zoho.com> References: <15251279694.c0be020963234.2341686453061756263@zoho.com> Message-ID: <1453101224424-4872219.post@n4.nabble.com> Hi, there. :) So, besides ToolSet class >> #browse:selector: ToolSet class >> #browseClass: ToolSet class >> #browseHierarchy:selector: you want to have a ToolSet class >> #browseClass:category: ? Sounds like a good idea to me. Note that you should use the ToolSet to open browsers whenever possible. Best, Marcel -- View this message in context: http://forum.world.st/Proposal-for-a-category-browser-method-on-Browser-class-tp4872150p4872219.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From jon at huv.com Mon Jan 18 12:50:46 2016 From: jon at huv.com (Jon Hylands) Date: Mon Jan 18 12:50:49 2016 Subject: [squeak-dev] SerialPort on Raspberry Pi In-Reply-To: References: Message-ID: You don't need a device to test it - Serial doesn't require a second device if all you're doing is sending bytes. The issue I'm having is when I try and open the port - that part is failing. Tim, not sure if you have Scratch set up to access the underlying Squeak code, but if you do: | serialPort | serialPort := SerialPort new. serialPort baudrate: 115200. serialPort openPort: '/dev/ttyAMA0'. serialPort inspect the port instance variable in serialPort will be nil if it failed, and something else if it didn't fail. Thanks, Jon On Sun, Jan 17, 2016 at 6:38 PM, tim Rowledge wrote: > > > On 14-01-2016, at 5:51 AM, Jon Hylands wrote: > > > > > > Hi everyone, > > > > I'm trying to use the SerialPort class on my Raspberry pi 2, to access > the UART on the pi. > > > > I've successfully accessed the port from python, using pyserial. On the > pi, the port name is '/dev/ttyAMA0?. > > The only thing I can offer is that Scratch finds a serial port as > /dev/ttyAMA0 as well, implying that on at least one Pi it finds the same > port that python does. I don?t think I have any devices that I could even > try to connect to. Any suggestions for things that might be around the > office? > > I do faintly recall some discussions about Pi serial stuff and having to > use the rasp-config utility but that was a long time ago and I don?t seem > to have any emails referring to it. > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: EOS: Erase Operating System > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160118/f331db02/attachment.htm From ron at usmedrec.com Mon Jan 18 15:30:54 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Mon Jan 18 15:30:54 2016 Subject: [squeak-dev] Candidates Wanted! Message-ID: <0a3f01d15205$38c82550$aa586ff0$@usmedrec.com> Hi all, There are only 2 weeks left until the Squeak Oversight Board 2016 election. So far we have 4 candidates for 7 board seats. Tim Rowledge Marcel Taeumel Craig Latta Bert Freudenberg There are a lot of great members of this community. Please reach out to members you think should run and encourage them to volunteer. As Bert says, it doesn't take much of your time to be a board member. All you need is: brains, a heart, courage, a dog named Toto, and ruby . no wait that's something else. 2 weeks to go. All the best, Ron Teitelbaum -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160118/fce72a2c/attachment.htm From herbertkoenig at gmx.net Mon Jan 18 20:17:03 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Mon Jan 18 20:17:03 2016 Subject: [squeak-dev] SerialPort on Raspberry Pi In-Reply-To: References: Message-ID: <569D483F.40509@gmx.net> Hi Jon, it used to work exactly like this. I have two methods from March 2015 to control a servo controller via RS232C. One is: initSystem (self serialPortName: '/dev/ttyAMA0') ifNil: [0 halt "can't init serial port"]. self getErrors which calls: serialPortName: aString "return nil if opening failed" ^serial openPort: aString and in initialize I do: initialize "super uses two SerialPorts, so no super initialize here" serial := SerialPort new. serial baudRate: 115200. serialCommand := serial. No access to my Pi's I just copied this from a backup of the Squeak 4.5 image with the old VM which I have on my laptop. I haven't used this software since last October (youngest method stamp). So maybe one of the raspbian updates broke it or the new VM or image need different incantations. I didn't use sudo but missing access rights can also cause problems. Cheers, Herbert So maybe you try on 4.5 and the old VM. Am 18.01.2016 um 13:50 schrieb Jon Hylands: > You don't need a device to test it - Serial doesn't require a second > device if all you're doing is sending bytes. > > The issue I'm having is when I try and open the port - that part is > failing. > > Tim, not sure if you have Scratch set up to access the underlying > Squeak code, but if you do: > > | serialPort | > serialPort := SerialPort new. > serialPort baudrate: 115200. > serialPort openPort: '/dev/ttyAMA0'. > serialPort inspect > > the port instance variable in serialPort will be nil if it failed, and > something else if it didn't fail. > > Thanks, > Jon > > > On Sun, Jan 17, 2016 at 6:38 PM, tim Rowledge > wrote: > > > > On 14-01-2016, at 5:51 AM, Jon Hylands > wrote: > > > > > > Hi everyone, > > > > I'm trying to use the SerialPort class on my Raspberry pi 2, to > access the UART on the pi. > > > > I've successfully accessed the port from python, using pyserial. > On the pi, the port name is '/dev/ttyAMA0?. > > The only thing I can offer is that Scratch finds a serial port as > /dev/ttyAMA0 as well, implying that on at least one Pi it finds > the same port that python does. I don?t think I have any devices > that I could even try to connect to. Any suggestions for things > that might be around the office? > > I do faintly recall some discussions about Pi serial stuff and > having to use the rasp-config utility but that was a long time ago > and I don?t seem to have any emails referring to it. > > > tim > -- > tim Rowledge; tim@rowledge.org ; > http://www.rowledge.org/tim > Strange OpCodes: EOS: Erase Operating System > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160118/4299454c/attachment.htm From commits at source.squeak.org Mon Jan 18 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 18 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160118225502.8815.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-January/009263.html Name: Kernel-eem.980 Ancestors: Kernel-tpr.979 Lay the ground work for double-byte strings (and possibly a 64-bit indexable bits type). Test shallowCopy's error code and report primitive failure if it has failed for other than being out of memory (which may simply imply the need for a GC). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009264.html Name: Morphic-mt.1068 Ancestors: Morphic-tpr.1067 Makes preference regarding 24-hr clock in docking bar functional. Adds preference regarding seconds in clock in docking bar. ============================================= From dale.henrichs at gemtalksystems.com Mon Jan 18 23:10:48 2016 From: dale.henrichs at gemtalksystems.com (Dale Henrichs) Date: Mon Jan 18 23:10:53 2016 Subject: [squeak-dev] unplanned outage: http://ss3.gemstone.com/ and http://seaside.gemtalksystems.com/ss Message-ID: <569D70F8.8030100@gemtalksystems.com> The datacenter where the sites http://ss3.gemstone.com/ and http://seaside.gemtalksystems.com/ss are hosted lost their primary router, while the backup router was being repaired ... the machines hosting the two sites are up and running, so no data loss is expected. They are working on getting another router in=place, but no ETA is known at this time ... Dale From tim at rowledge.org Tue Jan 19 00:34:19 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Jan 19 00:34:23 2016 Subject: [squeak-dev] SerialPort on Raspberry Pi In-Reply-To: <569D483F.40509@gmx.net> References: <569D483F.40509@gmx.net> Message-ID: It?s probably well worth comparing platforms/unix/plugins/SerialPlugin/sqUnixSerial.c & platforms/unix/plugins/ScratchPlugin/unixSerialPort2Ops.c tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Ornerythologists study bad tempered birds From dale.henrichs at gemtalksystems.com Tue Jan 19 02:35:49 2016 From: dale.henrichs at gemtalksystems.com (Dale Henrichs) Date: Tue Jan 19 02:35:55 2016 Subject: [squeak-dev] Re: unplanned outage: http://ss3.gemstone.com/ and http://seaside.gemtalksystems.com/ss In-Reply-To: <569D70F8.8030100@gemtalksystems.com> References: <569D70F8.8030100@gemtalksystems.com> Message-ID: <569DA105.5060106@gemtalksystems.com> The datacenter network came back on-line about a 1/2 hour ago ... Dale On 1/18/16 3:10 PM, Dale Henrichs wrote: > The datacenter where the sites http://ss3.gemstone.com/ and > http://seaside.gemtalksystems.com/ss are hosted lost their primary > router, while the backup router was being repaired ... the machines > hosting the two sites are up and running, so no data loss is expected. > > They are working on getting another router in=place, but no ETA is > known at this time ... > > Dale From dale.henrichs at gemtalksystems.com Tue Jan 19 02:38:13 2016 From: dale.henrichs at gemtalksystems.com (Dale Henrichs) Date: Tue Jan 19 02:38:18 2016 Subject: [squeak-dev] Re: unplanned outage: http://ss3.gemstone.com/ and http://seaside.gemtalksystems.com/ss In-Reply-To: <569DA105.5060106@gemtalksystems.com> References: <569D70F8.8030100@gemtalksystems.com> <569DA105.5060106@gemtalksystems.com> Message-ID: <569DA195.1010407@gemtalksystems.com> Nooo, make that 2 hours ago:) On 1/18/16 6:35 PM, Dale Henrichs wrote: > The datacenter network came back on-line about a 1/2 hour ago ... > > Dale > > On 1/18/16 3:10 PM, Dale Henrichs wrote: >> The datacenter where the sites http://ss3.gemstone.com/ and >> http://seaside.gemtalksystems.com/ss are hosted lost their primary >> router, while the backup router was being repaired ... the machines >> hosting the two sites are up and running, so no data loss is expected. >> >> They are working on getting another router in=place, but no ETA is >> known at this time ... >> >> Dale > From commits at source.squeak.org Tue Jan 19 22:01:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 19 22:01:05 2016 Subject: [squeak-dev] The Trunk: Morphic-tpr.1069.mcz Message-ID: tim Rowledge uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tpr.1069.mcz ==================== Summary ==================== Name: Morphic-tpr.1069 Author: tpr Time: 19 January 2016, 2:00:10.351434 pm UUID: 080b7719-2b70-419c-91f3-4842337058a6 Ancestors: Morphic-mt.1068, Morphic-tpr.1068 This seems to be the best way to make sure that the preference 'cmd gestures enabled' being false results in no Halos. If you have a nicer way, please replace this. =============== Diff against Morphic-mt.1068 =============== Item was changed: ----- Method: Morph>>handleMouseDown: (in category 'events-processing') ----- handleMouseDown: anEvent "System level event handling." anEvent wasHandled ifTrue:[^self]. "not interested" anEvent hand removePendingBalloonFor: self. anEvent hand removePendingHaloFor: self. anEvent wasHandled: true. (anEvent controlKeyPressed and: [anEvent blueButtonChanged not and: [Preferences cmdGesturesEnabled]]) ifTrue: [^ self invokeMetaMenu: anEvent]. "Make me modal during mouse transitions" anEvent hand newMouseFocus: self event: anEvent. + (anEvent blueButtonChanged and:[Preferences cmdGesturesEnabled]) ifTrue:[^self blueButtonDown: anEvent]. - anEvent blueButtonChanged ifTrue:[^self blueButtonDown: anEvent]. "this mouse down could be the start of a gesture, or the end of a gesture focus" (self isGestureStart: anEvent) ifTrue: [^ self gestureStart: anEvent]. "Filter events sent to the subwidgets of non-MorphicModels in inactive windows, if they are not supposed to receive them due to windowActiveOnFirstClick being set to false. I don't like having this check for owningWindow here, is there another way?" SystemWindow allWindowsAcceptInput ifTrue: [ self owningWindow ifNil: [ self mouseDown: anEvent ] ifNotNil: [ : owningWindow | (owningWindow canProcessMouseDown: anEvent) ifTrue: [ self mouseDown: anEvent ] ifFalse: [ owningWindow activate ] ] ] ifFalse: [ self mouseDown: anEvent ]. Preferences maintainHalos ifFalse:[ anEvent hand removeHaloFromClick: anEvent on: self ]. (self handlesMouseStillDown: anEvent) ifTrue:[ self startStepping: #handleMouseStillDown: at: Time millisecondClockValue + self mouseStillDownThreshold arguments: {anEvent copy resetHandlerFields} stepTime: self mouseStillDownStepRate ]. ! From commits at source.squeak.org Tue Jan 19 22:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Jan 19 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160119225501.22046.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-January/009265.html Name: Morphic-tpr.1069 Ancestors: Morphic-mt.1068, Morphic-tpr.1068 This seems to be the best way to make sure that the preference 'cmd gestures enabled' being false results in no Halos. If you have a nicer way, please replace this. ============================================= From commits at source.squeak.org Wed Jan 20 01:59:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 20 01:59:22 2016 Subject: [squeak-dev] The Trunk: MultilingualTests-tpr.19.mcz Message-ID: tim Rowledge uploaded a new version of MultilingualTests to project The Trunk: http://source.squeak.org/trunk/MultilingualTests-tpr.19.mcz ==================== Summary ==================== Name: MultilingualTests-tpr.19 Author: tpr Time: 20 January 2016, 5:59:14.555529 pm UUID: b2182a04-860d-4137-a68e-89b4502e581d Ancestors: MultilingualTests-fbs.18 Fix a failing test - when formatting NewParagraphs the caretWidth is added to the width required by the actual included text. The test needs to allow for that =============== Diff against MultilingualTests-fbs.18 =============== Item was changed: ----- Method: FontTest>>testParagraph (in category 'testing') ----- testParagraph "self debug: #testParagraph" | text p style height width | text := 'test' asText. p := NewParagraph new. style := TextStyle default. p compose: text style: style from: 1 in: (0 @ 0 corner: 100 @ 100). "See CompositionScanner>>setActualFont: & CompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:" height := style defaultFont height + style leading. + width := (text - width := text inject: 0 into: [:tally :next | tally + + (style defaultFont widthOf: next)]) + p caretWidth. "because it is added by the paragraph formatting" - + (style defaultFont widthOf: next)]. p adjustRightX. self assert: p extent = (width @ height)! From commits at source.squeak.org Wed Jan 20 02:02:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 20 02:02:47 2016 Subject: [squeak-dev] The Trunk: System-tpr.786.mcz Message-ID: tim Rowledge uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tpr.786.mcz ==================== Summary ==================== Name: System-tpr.786 Author: tpr Time: 20 January 2016, 6:02:02.528554 pm UUID: b9b4f339-997d-40ad-af12-1101a18c7b1b Ancestors: System-mt.785 The preference's idea of caret width is no longer used. See Editor instead. =============== Diff against System-mt.785 =============== Item was removed: - ----- Method: Preferences class>>caretWidth (in category 'prefs - text') ----- - caretWidth - ^ Parameters at: #caretWidth! Item was removed: - ----- Method: Preferences class>>caretWidth: (in category 'prefs - text') ----- - caretWidth: anInteger - ^ Parameters at: #caretWidth put: anInteger! Item was changed: ----- Method: Preferences class>>initializeTextHighlightingParameters (in category 'prefs - text') ----- initializeTextHighlightingParameters "Preferences initializeTextHighlightingParameters" self - caretWidth: 2; insertionPointColor: (TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.8); textHighlightColor: (TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.2)! From commits at source.squeak.org Wed Jan 20 02:08:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 20 02:08:10 2016 Subject: [squeak-dev] The Trunk: MultilingualTests-tpr.20.mcz Message-ID: tim Rowledge uploaded a new version of MultilingualTests to project The Trunk: http://source.squeak.org/trunk/MultilingualTests-tpr.20.mcz ==================== Summary ==================== Name: MultilingualTests-tpr.20 Author: tpr Time: 20 January 2016, 6:08:00.796359 pm UUID: f3143cf4-b0b2-43d3-9549-55c4c2e56070 Ancestors: MultilingualTests-tpr.19 testParagraphFallback also needs to handle the caret width =============== Diff against MultilingualTests-tpr.19 =============== Item was changed: ----- Method: FontTest>>testParagraphFallback (in category 'testing') ----- testParagraphFallback "self debug: #testParagraphFallback" | text p style height width e expect | e := (Character value: 257) asString. text := ('test' , e , e , e , e , 'test') asText. expect := 'test????test'. p := NewParagraph new. style := TextStyle default. p compose: text style: style from: 1 in: (0 @ 0 corner: 100 @ 100). "See CompositionScanner>>setActualFont: & CompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:" height := style defaultFont height + style leading. + width := (expect - width := expect inject: 0 into: [:tally :next | tally + + (style defaultFont widthOf: next)]) + p caretWidth. - + (style defaultFont widthOf: next)]. p adjustRightX. self assert: p extent = (width @ height). "Display getCanvas paragraph: p bounds: (10 @ 10 extent: 100 @ 100) color: Color black"! From tim at rowledge.org Wed Jan 20 02:18:39 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Jan 20 02:18:43 2016 Subject: [squeak-dev] ExceptionTests>testHandlerFromAction fails Message-ID: I?ve been running the SUnits on my Pi whilst other stuff compiles and noticed this one failing. Fails on the Mac as well so it?s not platform specific (phew). I?m not sure I see how it fails without lots of other stuff failing, but that?s life. Image is up to update 15569. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: MII: Mask all Interrupts and then Interrupt From asqueaker at gmail.com Wed Jan 20 02:24:44 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Jan 20 02:25:26 2016 Subject: [squeak-dev] The Trunk: Morphic-tpr.1069.mcz In-Reply-To: <569eb224.144b370a.10571.7288SMTPIN_ADDED_MISSING@mx.google.com> References: <569eb224.144b370a.10571.7288SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Does it still work correctly if you toggle your swapMouseButtons setting? On Tue, Jan 19, 2016 at 4:00 PM, wrote: > tim Rowledge uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-tpr.1069.mcz > > ==================== Summary ==================== > > Name: Morphic-tpr.1069 > Author: tpr > Time: 19 January 2016, 2:00:10.351434 pm > UUID: 080b7719-2b70-419c-91f3-4842337058a6 > Ancestors: Morphic-mt.1068, Morphic-tpr.1068 > > This seems to be the best way to make sure that the preference 'cmd gestures enabled' being false results in no Halos. > > If you have a nicer way, please replace this. > > =============== Diff against Morphic-mt.1068 =============== > > Item was changed: > ----- Method: Morph>>handleMouseDown: (in category 'events-processing') ----- > handleMouseDown: anEvent > "System level event handling." > anEvent wasHandled ifTrue:[^self]. "not interested" > anEvent hand removePendingBalloonFor: self. > anEvent hand removePendingHaloFor: self. > anEvent wasHandled: true. > > (anEvent controlKeyPressed > and: [anEvent blueButtonChanged not > and: [Preferences cmdGesturesEnabled]]) > ifTrue: [^ self invokeMetaMenu: anEvent]. > > "Make me modal during mouse transitions" > anEvent hand newMouseFocus: self event: anEvent. > + (anEvent blueButtonChanged and:[Preferences cmdGesturesEnabled]) ifTrue:[^self blueButtonDown: anEvent]. > - anEvent blueButtonChanged ifTrue:[^self blueButtonDown: anEvent]. > > "this mouse down could be the start of a gesture, or the end of a gesture focus" > (self isGestureStart: anEvent) > ifTrue: [^ self gestureStart: anEvent]. > > "Filter events sent to the subwidgets of non-MorphicModels in inactive windows, if they are not supposed to receive them due to windowActiveOnFirstClick being set to false. I don't like having this check for owningWindow here, is there another way?" > SystemWindow allWindowsAcceptInput > ifTrue: > [ self owningWindow > ifNil: [ self mouseDown: anEvent ] > ifNotNil: > [ : owningWindow | > (owningWindow canProcessMouseDown: anEvent) > ifTrue: [ self mouseDown: anEvent ] > ifFalse: [ owningWindow activate ] ] ] > ifFalse: [ self mouseDown: anEvent ]. > > Preferences maintainHalos > ifFalse:[ anEvent hand removeHaloFromClick: anEvent on: self ]. > > (self handlesMouseStillDown: anEvent) ifTrue:[ > self startStepping: #handleMouseStillDown: > at: Time millisecondClockValue + self mouseStillDownThreshold > arguments: {anEvent copy resetHandlerFields} > stepTime: self mouseStillDownStepRate ]. > ! > > From tim at rowledge.org Wed Jan 20 05:03:12 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Jan 20 05:03:15 2016 Subject: [squeak-dev] The Trunk: Morphic-tpr.1069.mcz In-Reply-To: References: <569eb224.144b370a.10571.7288SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <3CE56AA3-4126-45FF-8527-770068F175EE@rowledge.org> > On 19-01-2016, at 6:24 PM, Chris Muller wrote: > > Does it still work correctly if you toggle your swapMouseButtons setting? Yup. The bit flags are swapped at a very low level and thus blue-button stuff stays the same. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: SSAN: Stop, and See if Anyone Notices From leves at caesar.elte.hu Wed Jan 20 10:15:35 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Jan 20 10:15:40 2016 Subject: [squeak-dev] ExceptionTests>testHandlerFromAction fails In-Reply-To: References: Message-ID: That's normal because that test case is kind of a feature request. Exception handling in Squeak has never worked like that. Thanks for fixing the other tests! Levente On Tue, 19 Jan 2016, tim Rowledge wrote: > I?ve been running the SUnits on my Pi whilst other stuff compiles and noticed this one failing. Fails on the Mac as well so it?s not platform specific (phew). > > I?m not sure I see how it fails without lots of other stuff failing, but that?s life. > > Image is up to update 15569. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: MII: Mask all Interrupts and then Interrupt > > > > From Marcel.Taeumel at hpi.de Wed Jan 20 10:55:26 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Jan 20 11:17:35 2016 Subject: [squeak-dev] Re: ExceptionTests>testHandlerFromAction fails In-Reply-To: References: Message-ID: <1453287326560-4872891.post@n4.nabble.com> So, it should be an #expectedFailure then? Best, Marcel -- View this message in context: http://forum.world.st/ExceptionTests-testHandlerFromAction-fails-tp4872828p4872891.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Wed Jan 20 16:26:19 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Jan 20 16:26:22 2016 Subject: [squeak-dev] Re: ExceptionTests>testHandlerFromAction fails In-Reply-To: <1453287326560-4872891.post@n4.nabble.com> References: <1453287326560-4872891.post@n4.nabble.com> Message-ID: It should. And at the same time we should revisit these "expected failures" from time to time. Levente On Wed, 20 Jan 2016, marcel.taeumel wrote: > So, it should be an #expectedFailure then? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/ExceptionTests-testHandlerFromAction-fails-tp4872828p4872891.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From eliot.miranda at gmail.com Wed Jan 20 21:46:17 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Jan 20 21:46:19 2016 Subject: [squeak-dev] Ignore shortcut Message-ID: Hi, Bert did a brilliant thing adding the "ignore" Monticello check-in option, which allows one, cheaply to maintain a fork with a few changes, which still checking into the main line. However, for a while now the menu shortcut (i) hasn't worked and one must pick from the menu. Is there any way this can be fixed? _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160120/d3de51c3/attachment.htm From commits at source.squeak.org Wed Jan 20 21:47:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 20 21:47:53 2016 Subject: [squeak-dev] The Trunk: System-eem.787.mcz Message-ID: Eliot Miranda uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-eem.787.mcz ==================== Summary ==================== Name: System-eem.787 Author: eem Time: 20 January 2016, 1:47:21.381067 pm UUID: 14aec38e-df6c-4751-9bb8-fa68dffb16e5 Ancestors: System-tpr.786 When triming change set history, nuke changes for methods that can't be found as well as those that have been added then removed. Add some robustness to parsing class names in class definitions in ChangeRecord. =============== Diff against System-tpr.786 =============== Item was changed: ----- Method: ChangeRecord>>methodClassName (in category 'access') ----- methodClassName | tokens | (class isNil and: [type = #doIt + and: [([(tokens := Scanner new scanTokens: self text) size >= 3] + on: Error do: [:ex| false]) - and: [(tokens := Scanner new scanTokens: self text) size >= 3 and: [(tokens includes: #'.') not "exclude multi-statement doits" and: [tokens first isSymbol and: [tokens first isKeyword not and: [tokens first first canBeGlobalVarInitial and: [(tokens includes: #instanceVariableNames:) or: [tokens second == #comment: or: [tokens third == #comment:]]]]]]]]]) ifTrue: ["Could be a class definition. Class definitions start with Superclass blahSubclass: #ClassName Metaclass definitions start with ClassName class instanceVariableNames:" (tokens second isSymbol and: [tokens second isKeyword and: [tokens third isSymbol and: [tokens third isKeyword not and: [(2 to: tokens size by: 2) allSatisfy: [:i| (tokens at: i) isKeyword]]]]]) ifTrue: [^tokens third]. (tokens size = 4 and: [tokens second = #class and: [(tokens third = #instanceVariableNames: or: [tokens third = #comment:]) and: [tokens last isString]]]) ifTrue: [^tokens first]. (tokens size = 3 and: [tokens second = #comment: and: [tokens last isString]]) ifTrue: [^tokens first]]. ^class! Item was changed: ----- Method: ClassChangeRecord>>trimHistory (in category 'all changes') ----- trimHistory "Drop non-essential history." + | realClass | + realClass := self realClass. "Forget methods added and later removed" methodChanges keysAndValuesRemove: + [:sel :chgRecord | + chgRecord changeType == #addedThenRemoved + "this removes methods that have been lost, e.g. by being deleted in a different change set, etc" + or: [(chgRecord changeType == #add or: [chgRecord changeType == #change]) + and: [realClass isNil or: [(realClass includesSelector: sel) not]]]]. - [:sel :chgRecord | chgRecord changeType == #addedThenRemoved]. "Forget renaming and reorganization of newly-added classes." (changeTypes includes: #add) ifTrue: + [changeTypes removeAllFoundIn: #(rename reorganize)]! - [changeTypes removeAllFoundIn: #(rename reorganize)]. - ! From karlramberg at gmail.com Wed Jan 20 21:51:07 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Jan 20 21:51:09 2016 Subject: [squeak-dev] Ignore shortcut In-Reply-To: References: Message-ID: Also a multiple selection list would be nice :-) Best, Karl On Wed, Jan 20, 2016 at 10:46 PM, Eliot Miranda wrote: > Hi, > > Bert did a brilliant thing adding the "ignore" Monticello check-in > option, which allows one, cheaply to maintain a fork with a few changes, > which still checking into the main line. However, for a while now the menu > shortcut (i) hasn't worked and one must pick from the menu. Is there any > way this can be fixed? > _,,,^..^,,,_ > best, Eliot > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160120/a59ab421/attachment.htm From asqueaker at gmail.com Wed Jan 20 21:52:23 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Jan 20 21:53:05 2016 Subject: [squeak-dev] Ignore shortcut In-Reply-To: References: Message-ID: Taking a close look at the menu selection itself you've been clicking, it says its capital I for Ignore, lowercase i for inheritance. They both work for me. On Wed, Jan 20, 2016 at 3:46 PM, Eliot Miranda wrote: > Hi, > > Bert did a brilliant thing adding the "ignore" Monticello check-in > option, which allows one, cheaply to maintain a fork with a few changes, > which still checking into the main line. However, for a while now the menu > shortcut (i) hasn't worked and one must pick from the menu. Is there any > way this can be fixed? > _,,,^..^,,,_ > best, Eliot > > > From eliot.miranda at gmail.com Wed Jan 20 22:41:56 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Jan 20 22:41:58 2016 Subject: [squeak-dev] Ignore shortcut In-Reply-To: References: Message-ID: Thanks Chris, doh! On Wed, Jan 20, 2016 at 1:52 PM, Chris Muller wrote: > Taking a close look at the menu selection itself you've been clicking, > it says its capital I for Ignore, lowercase i for inheritance. > > They both work for me. > > On Wed, Jan 20, 2016 at 3:46 PM, Eliot Miranda > wrote: > > Hi, > > > > Bert did a brilliant thing adding the "ignore" Monticello check-in > > option, which allows one, cheaply to maintain a fork with a few changes, > > which still checking into the main line. However, for a while now the > menu > > shortcut (i) hasn't worked and one must pick from the menu. Is there any > > way this can be fixed? > > _,,,^..^,,,_ > > best, Eliot > > > > > > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160120/8bf97cc9/attachment.htm From commits at source.squeak.org Wed Jan 20 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Jan 20 22:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160120225502.21079.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-January/009266.html Name: MultilingualTests-tpr.19 Ancestors: MultilingualTests-fbs.18 Fix a failing test - when formatting NewParagraphs the caretWidth is added to the width required by the actual included text. The test needs to allow for that ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009267.html Name: System-tpr.786 Ancestors: System-mt.785 The preference's idea of caret width is no longer used. See Editor instead. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009268.html Name: MultilingualTests-tpr.20 Ancestors: MultilingualTests-tpr.19 testParagraphFallback also needs to handle the caret width ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009269.html Name: System-eem.787 Ancestors: System-tpr.786 When triming change set history, nuke changes for methods that can't be found as well as those that have been added then removed. Add some robustness to parsing class names in class definitions in ChangeRecord. ============================================= From karlramberg at gmail.com Thu Jan 21 08:50:57 2016 From: karlramberg at gmail.com (karl ramberg) Date: Thu Jan 21 08:51:00 2016 Subject: [squeak-dev] [BUG]FileList PluggableTreeMorph accept drops of any morph Message-ID: FileList's PluggableTreeMorph accepts drops of any morph, but give a PreDebuggerWindow Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160121/110b28b9/attachment.htm From commits at source.squeak.org Thu Jan 21 14:21:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 21 14:21:12 2016 Subject: [squeak-dev] The Trunk: Tools-mt.664.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.664.mcz ==================== Summary ==================== Name: Tools-mt.664 Author: mt Time: 21 January 2016, 3:20:55.039876 pm UUID: 7640e095-75e6-4add-add8-6bf4748f802e Ancestors: Tools-ul.663 Fixes drop behavior in File List. Ignore things that are not files or folders. However, move/copy folders might still work on Unix-based systems only. =============== Diff against Tools-ul.663 =============== Item was changed: ----- Method: FileList>>buildDirectoryTreeWith: (in category 'toolbuilder') ----- buildDirectoryTreeWith: builder | treeSpec | treeSpec := builder pluggableTreeSpec new. treeSpec model: self ; roots: #rootDirectoryList ; hasChildren: #hasMoreDirectories: ; getChildren: #subDirectoriesOf: ; getSelectedPath: #selectedPath ; setSelected: #setDirectoryTo: ; getSelected: #directory; label: #directoryNameOf: ; menu: #volumeMenu: ; autoDeselect: false. SystemBrowser browseWithDragNDrop ifTrue: [ treeSpec + dragItem: #dragFromDirectoryList: ; + dropItem: #drop:ontoDirectory:shouldCopy: ; + dropAccept: #wantsDraggedObject: ]. - dragItem: #dragFromDirectoryList: ; - dropItem: #drop:ontoDirectory:shouldCopy: ]. ^ treeSpec! Item was added: + ----- Method: FileList>>wantsDraggedObject: (in category 'drag''n''drop') ----- + wantsDraggedObject: anObject + + ^ (anObject isKindOf: DirectoryEntry) or: [anObject isKindOf: FileDirectory]! From commits at source.squeak.org Thu Jan 21 14:29:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 21 14:29:35 2016 Subject: [squeak-dev] The Trunk: Tools-mt.665.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.665.mcz ==================== Summary ==================== Name: Tools-mt.665 Author: mt Time: 21 January 2016, 3:29:14.847612 pm UUID: 24e30409-d257-4e2a-b221-1d9b4faf786e Ancestors: Tools-mt.664 After a brief discussion with Bert, remove the possibility to drop folders into the folder tree in the File List tool. To avoid inadvertent restructuring. =============== Diff against Tools-mt.664 =============== Item was changed: ----- Method: FileList>>wantsDraggedObject: (in category 'drag''n''drop') ----- wantsDraggedObject: anObject + ^ anObject class == DirectoryEntryFile! - ^ (anObject isKindOf: DirectoryEntry) or: [anObject isKindOf: FileDirectory]! From Marcel.Taeumel at hpi.de Thu Jan 21 14:07:48 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Jan 21 14:30:06 2016 Subject: [squeak-dev] Re: [BUG]FileList PluggableTreeMorph accept drops of any morph In-Reply-To: References: Message-ID: <1453385268641-4873153.post@n4.nabble.com> Fixed: http://forum.world.st/The-Trunk-Tools-mt-664-mcz-td4873146.html Best, Marcel -- View this message in context: http://forum.world.st/BUG-FileList-PluggableTreeMorph-accept-drops-of-any-morph-tp4873065p4873153.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Jan 21 15:01:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 21 15:01:51 2016 Subject: [squeak-dev] The Trunk: Tools-kfr.666.mcz Message-ID: Karl Ramberg uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-kfr.666.mcz ==================== Summary ==================== Name: Tools-kfr.666 Author: kfr Time: 21 January 2016, 4:01:20.739426 pm UUID: f0ce7bca-019a-43f3-9cfb-171cc8e4c9a0 Ancestors: Tools-kfr.664, Tools-mt.665 Fix for full menu =============== Diff against Tools-mt.665 =============== Item was changed: ----- Method: FileList>>fullFileListMenu:shifted: (in category 'file list menu') ----- fullFileListMenu: aMenu shifted: aBoolean "Fill the menu with all possible items for the file list pane, regardless of selection." | lastProvider | aMenu title: 'all possible file operations' translated. aMenu addStayUpItemSpecial. lastProvider := nil. + (self itemsForFile: self fullName) do: [ :svc | - (self itemsForFile: 'a.*') do: [ :svc | (lastProvider notNil and: [svc provider ~~ lastProvider]) ifTrue: [ aMenu addLine ]. svc addServiceFor: self toMenu: aMenu. Smalltalk isMorphic ifTrue: [aMenu submorphs last setBalloonText: svc description]. lastProvider := svc provider. svc addDependent: self. ]. ^aMenu! From asqueaker at gmail.com Thu Jan 21 16:12:37 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Jan 21 16:13:19 2016 Subject: [squeak-dev] The Trunk: Tools-mt.665.mcz In-Reply-To: <56a0eb52.0c5c8c0a.e0013.5b16SMTPIN_ADDED_MISSING@mx.google.com> References: <56a0eb52.0c5c8c0a.e0013.5b16SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Disable functionality because it might accidently be invoked? Shouldn't the requirement that the one being dragged be pre-selected be requirement enough? That way it won't happen through accidently clicking it, because its already clicked. Especially now that I can no longer refresh the file list by clicking the _already selected_ folder, something taht got broken since 5.0... Now I have to click on a different folder, then back to the folder I wanted to refresh... From karlramberg at gmail.com Thu Jan 21 16:55:35 2016 From: karlramberg at gmail.com (karl ramberg) Date: Thu Jan 21 16:55:39 2016 Subject: [squeak-dev] The Trunk: Tools-mt.665.mcz In-Reply-To: References: <56a0eb52.0c5c8c0a.e0013.5b16SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: +1 Refresh for FileList is needed Best, Karl On Thu, Jan 21, 2016 at 5:12 PM, Chris Muller wrote: > Disable functionality because it might accidently be invoked? > > Shouldn't the requirement that the one being dragged be pre-selected > be requirement enough? That way it won't happen through accidently > clicking it, because its already clicked. > > Especially now that I can no longer refresh the file list by clicking > the _already selected_ folder, something taht got broken since 5.0... > Now I have to click on a different folder, then back to the folder I > wanted to refresh... > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160121/27c20933/attachment.htm From asqueaker at gmail.com Thu Jan 21 17:10:13 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Jan 21 17:10:55 2016 Subject: [squeak-dev] The Trunk: Tools-mt.665.mcz In-Reply-To: References: <56a0eb52.0c5c8c0a.e0013.5b16SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: > Shouldn't the requirement that the one being dragged be pre-selected > be requirement enough? That way it won't happen through accidently > clicking it, because its already clicked. And, actually, I seem to remember this threshold of dragging-distance which must be exceeded before an object is considered being dragged. Maybe that would be a solution to accidental draggage... From craig at netjam.org Thu Jan 21 17:18:57 2016 From: craig at netjam.org (Craig Latta) Date: Thu Jan 21 17:19:11 2016 Subject: [squeak-dev] Smalltalk website tricks Message-ID: Hi-- I wrote a new website for Black Page Digital, my consultancy in Amsterdam and San Francisco. It includes SqueakJS running in a 3D CSS viewport, kinda cute. Please check it out, pass it on, and let me know what you think! http://thiscontext.com/2016/01/21/new-website-for-black-page-digital thanks, -C -- Craig Latta Black Page Digital postbus 10784 1001ET Amsterdam, Netherlands craig@blackpagedigital.com +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From ron at usmedrec.com Thu Jan 21 17:43:29 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Thu Jan 21 17:43:21 2016 Subject: [squeak-dev] Board Candidates Needed Message-ID: <19ad01d15473$3d76c0a0$b86441e0$@usmedrec.com> Hi All, So far we have 4 candidates for 7 seats. Tim Rowledge Marcel Taeumel Craig Latta Bert Freudenberg Come on people you can do better. It would be nice if we could get at least 10 candidates! We have 10 days left. Please feel free to encourage people to run. Maybe do it publically on squeak-dev. Squeak needs you!!! All the best, Ron Teitelbaum -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160121/0ff95a3d/attachment.htm From kilon.alios at gmail.com Thu Jan 21 18:39:42 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Thu Jan 21 18:39:56 2016 Subject: [squeak-dev] Smalltalk website tricks In-Reply-To: References: Message-ID: Does not render well on my iPad and has problems with multi touch, looks cool though :) On Thu, 21 Jan 2016 at 19:19, Craig Latta wrote: > > Hi-- > > I wrote a new website for Black Page Digital, my consultancy in > Amsterdam and San Francisco. It includes SqueakJS running in a 3D CSS > viewport, kinda cute. Please check it out, pass it on, and let me know > what you think! > > > http://thiscontext.com/2016/01/21/new-website-for-black-page-digital > > > thanks, > > -C > > -- > Craig Latta > Black Page Digital > postbus 10784 > 1001ET Amsterdam, Netherlands > craig@blackpagedigital.com > +31 6 2757 7177 (SMS ok) > + 1 415 287 3547 (no SMS) > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160121/acfecccd/attachment-0001.htm From craig at netjam.org Thu Jan 21 18:45:14 2016 From: craig at netjam.org (Craig Latta) Date: Thu Jan 21 18:45:23 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: References: Message-ID: > Does not render well on my iPad and has problems with multi touch. Hm, it should be ignoring multi-touch gestures. What happens? And what rendering problems does it have? I haven't done any browser-specific optimizations yet. thanks! -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From tim at rowledge.org Thu Jan 21 19:11:51 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Jan 21 19:11:58 2016 Subject: [squeak-dev] Smalltalk website tricks In-Reply-To: References: Message-ID: Interesting; I finally realised that the squeak image is on the Escher-ish pane (page?) rather than being what is producing the entire thing. Only disconcerting bit was the warning that squeakjs was still running when I went to leave the page. I guess it might be interesting to have live demos of squeak based apps that run on squeakjs and include a nice easy way to ?buy? and download a ?proper? vm and the image. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Always responds to "Make Money Fast" postings on the Net. From kilon.alios at gmail.com Thu Jan 21 19:51:39 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Thu Jan 21 19:51:52 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: References: Message-ID: It first told me close other tabs for it to load a database which was weird I double clicked and then the interface turned 3D sidewise and i could not bring straight , also it shadow created a mouse pointer that was offset to my touch event. Touching was bringing a world menu and there was also a workspace mixed with the images On Thu, 21 Jan 2016 at 20:45, Craig Latta wrote: > > > Does not render well on my iPad and has problems with multi touch. > > Hm, it should be ignoring multi-touch gestures. What happens? And > what rendering problems does it have? I haven't done any > browser-specific optimizations yet. > > > thanks! > > -C > > -- > Craig Latta > netjam.org > +31 6 2757 7177 (SMS ok) > + 1 415 287 3547 (no SMS) > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160121/2db4551d/attachment.htm From kilon.alios at gmail.com Thu Jan 21 19:53:26 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Thu Jan 21 19:53:38 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: References: Message-ID: It first told me close other tabs for it to load a database which was weird I double clicked and then the interface turned 3D sidewise and i could not bring straight , also it shadow created a mouse pointer that was offset to my touch event. Touching was bringing a world menu and there was also a workspace mixed with the images On Thu, 21 Jan 2016 at 21:31, Dimitris Chloupis wrote: > It first told me close other tabs for it to load a database which was weird > > I double clicked and then the interface turned 3D sidewise and i could not > bring straight , also it shadow created a mouse pointer that was offset to > my touch event. Touching was bringing a world menu and there was also a > workspace mixed with the images > On Thu, 21 Jan 2016 at 20:45, Craig Latta wrote: > >> >> > Does not render well on my iPad and has problems with multi touch. >> >> Hm, it should be ignoring multi-touch gestures. What happens? And >> what rendering problems does it have? I haven't done any >> browser-specific optimizations yet. >> >> >> thanks! >> >> -C >> >> -- >> Craig Latta >> netjam.org >> +31 6 2757 7177 (SMS ok) >> + 1 415 287 3547 (no SMS) >> >> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160121/78a6bcf7/attachment.htm From jeffgonis at fastmail.com Thu Jan 21 20:42:33 2016 From: jeffgonis at fastmail.com (Jeff Gonis) Date: Thu Jan 21 20:42:35 2016 Subject: [squeak-dev] Live Coding Demonstration Success! Message-ID: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> Hi Squeakers, I just wanted to write in with a quick report on a recent demonstration I did for my my colleagues at work. At the company I work for we are given one Friday a month to work on any sort of project that interests us, whether or not it is related to the work we do for the company, and so I usually end up playing around with a project in Squeak. As part of the deal, we are asked to occasionally present what we are working on to our peers, in the hopes that they can do some learning from our projects as well. I didn't have any projects ready to demonstrate in a compelling way so I decided to instead just show off Squeak itself and give people kind of an introduction to Smalltalk and what I find so compelling about it. I decided to go ahead and live code a version of the bouncing atoms morph, using submorphs for the atoms, and developing the code as the parent morph "stepped" away on screen, updating its behavior seamlessly. I demonstrated adding variables and method without stopping, changing the methods and debugging them when I made mistakes, changing the entire class of the onscreen morphs as the simulation ran and some of the cool things about the language itself as well, like "build-your-own" if statements and such. Overall I think that I kind of blew a bunch of people's minds, what with our day to day work being in C++ and always being in that edit-compile-run-test cycle. Several people came up to me afterwards to say how much they enjoyed seeing a different view of programming and what it could represent and I hope to put together a few more demonstrations in the coming months. Anyway, I just wanted to let you know that Smalltalk is still surprising people and exceeding their expectations 35 years on, and a large part of it is thanks to all the great work that goes into Squeak from its contributors. Thanks for your efforts! Jeff From kilon.alios at gmail.com Thu Jan 21 21:08:58 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Thu Jan 21 21:09:12 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> Message-ID: Great job, I think they will be suprised even more that you can use smalltalk as scripting language for C++ projects which is currently what I do :) Though I am using pharo instead of squeak , there is little reason for the same concepts not to apply for squeak . I am actually trying to make a shared memory(based on memory mapped files) frameworks where pharo shares memory with a c++ executable and they can talk to each other, shared data and live state and use each other's functions and libraries , sort of C++ being pharo's best buddy and vice versa ;) On Thu, Jan 21, 2016 at 10:42 PM Jeff Gonis wrote: > Hi Squeakers, > > I just wanted to write in with a quick report on a recent demonstration > I did for my my colleagues at work. > > At the company I work for we are given one Friday a month to work on any > sort of project that interests us, whether or not it is related to the > work we do for the company, and so I usually end up playing around with > a project in Squeak. As part of the deal, we are asked to occasionally > present what we are working on to our peers, in the hopes that they can > do some learning from our projects as well. > > I didn't have any projects ready to demonstrate in a compelling way so I > decided to instead just show off Squeak itself and give people kind of > an introduction to Smalltalk and what I find so compelling about it. I > decided to go ahead and live code a version of the bouncing atoms morph, > using submorphs for the atoms, and developing the code as the parent > morph "stepped" away on screen, updating its behavior seamlessly. I > demonstrated adding variables and method without stopping, changing the > methods and debugging them when I made mistakes, changing the entire > class of the onscreen morphs as the simulation ran and some of the cool > things about the language itself as well, like "build-your-own" if > statements and such. > > Overall I think that I kind of blew a bunch of people's minds, what with > our day to day work being in C++ and always being in that > edit-compile-run-test cycle. Several people came up to me afterwards to > say how much they enjoyed seeing a different view of programming and > what it could represent and I hope to put together a few more > demonstrations in the coming months. > > Anyway, I just wanted to let you know that Smalltalk is still surprising > people and exceeding their expectations 35 years on, and a large part of > it is thanks to all the great work that goes into Squeak from its > contributors. > > Thanks for your efforts! > Jeff > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160121/c277b98e/attachment.htm From lewis at mail.msen.com Thu Jan 21 21:17:02 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Jan 21 21:17:04 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> Message-ID: <55933.136.2.1.102.1453411022.squirrel@webmail.msen.com> Yay! It's nice to hear stories like this. Thanks, Dave > Hi Squeakers, > > I just wanted to write in with a quick report on a recent demonstration > I did for my my colleagues at work. > > At the company I work for we are given one Friday a month to work on any > sort of project that interests us, whether or not it is related to the > work we do for the company, and so I usually end up playing around with > a project in Squeak. As part of the deal, we are asked to occasionally > present what we are working on to our peers, in the hopes that they can > do some learning from our projects as well. > > I didn't have any projects ready to demonstrate in a compelling way so I > decided to instead just show off Squeak itself and give people kind of > an introduction to Smalltalk and what I find so compelling about it. I > decided to go ahead and live code a version of the bouncing atoms morph, > using submorphs for the atoms, and developing the code as the parent > morph "stepped" away on screen, updating its behavior seamlessly. I > demonstrated adding variables and method without stopping, changing the > methods and debugging them when I made mistakes, changing the entire > class of the onscreen morphs as the simulation ran and some of the cool > things about the language itself as well, like "build-your-own" if > statements and such. > > Overall I think that I kind of blew a bunch of people's minds, what with > our day to day work being in C++ and always being in that > edit-compile-run-test cycle. Several people came up to me afterwards to > say how much they enjoyed seeing a different view of programming and > what it could represent and I hope to put together a few more > demonstrations in the coming months. > > Anyway, I just wanted to let you know that Smalltalk is still surprising > people and exceeding their expectations 35 years on, and a large part of > it is thanks to all the great work that goes into Squeak from its > contributors. > > Thanks for your efforts! > Jeff > From ron at usmedrec.com Thu Jan 21 21:28:11 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Thu Jan 21 21:28:03 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: <55933.136.2.1.102.1453411022.squirrel@webmail.msen.com> References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> <55933.136.2.1.102.1453411022.squirrel@webmail.msen.com> Message-ID: <1ac101d15492$a14d4850$e3e7d8f0$@usmedrec.com> Hi Jeff, I occasionally have to write stuff in other languages. While all of what you learn in "Programming" transfers to any language, all the things you feel like you should be able to do - are just missing in other languages. The live aspect and debugging on the fly, oh what does that class look like, just debug and find out what's there, follow the connections live. It becomes second nature and so painful when it's missing. All the best, Ron Teitelbaum > -----Original Message----- > From: squeak-dev-bounces@lists.squeakfoundation.org [mailto:squeak-dev- > bounces@lists.squeakfoundation.org] On Behalf Of David T. Lewis > Sent: Thursday, January 21, 2016 4:17 PM > To: The general-purpose Squeak developers list > Subject: Re: [squeak-dev] Live Coding Demonstration Success! > > Yay! It's nice to hear stories like this. > > Thanks, > Dave > > > Hi Squeakers, > > > > I just wanted to write in with a quick report on a recent > > demonstration I did for my my colleagues at work. > > > > At the company I work for we are given one Friday a month to work on > > any sort of project that interests us, whether or not it is related to > > the work we do for the company, and so I usually end up playing around > > with a project in Squeak. As part of the deal, we are asked to > > occasionally present what we are working on to our peers, in the hopes > > that they can do some learning from our projects as well. > > > > I didn't have any projects ready to demonstrate in a compelling way so > > I decided to instead just show off Squeak itself and give people kind > > of an introduction to Smalltalk and what I find so compelling about > > it. I decided to go ahead and live code a version of the bouncing > > atoms morph, using submorphs for the atoms, and developing the code as > > the parent morph "stepped" away on screen, updating its behavior > > seamlessly. I demonstrated adding variables and method without > > stopping, changing the methods and debugging them when I made > > mistakes, changing the entire class of the onscreen morphs as the > > simulation ran and some of the cool things about the language itself > > as well, like "build-your-own" if statements and such. > > > > Overall I think that I kind of blew a bunch of people's minds, what > > with our day to day work being in C++ and always being in that > > edit-compile-run-test cycle. Several people came up to me afterwards > > to say how much they enjoyed seeing a different view of programming > > and what it could represent and I hope to put together a few more > > demonstrations in the coming months. > > > > Anyway, I just wanted to let you know that Smalltalk is still > > surprising people and exceeding their expectations 35 years on, and a > > large part of it is thanks to all the great work that goes into Squeak > > from its contributors. > > > > Thanks for your efforts! > > Jeff > > > > From asqueaker at gmail.com Thu Jan 21 21:44:01 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Jan 21 21:44:44 2016 Subject: [squeak-dev] Board Candidates Needed In-Reply-To: <19ad01d15473$3d76c0a0$b86441e0$@usmedrec.com> References: <19ad01d15473$3d76c0a0$b86441e0$@usmedrec.com> Message-ID: I'm running. Squeak is Smalltalk-80 for the modern-age. Sophisticated yet, elegant. Unassuming, yet unapologetic. Where else can I find a class-library this amazingly robust with a license this generous. The latest changes to the IDE are amazing, I never dreamed it could be this productive. Squeak 5 and Spur have opened new possibilities for scaling new heights. I'm fully invested; personally, professionally, commercially. Whether re-elected or not, I plan to continue channeling the best parts of my passion into code and progress for the image, this community, and our infrastructure. My immediate future plans are to restore, hopefully once and for all, the MC history function to the IDE, and also work with Marcel and Karl to bring a workable Theming function to the IDE. On Thu, Jan 21, 2016 at 11:43 AM, Ron Teitelbaum wrote: > Hi All, > > > > So far we have 4 candidates for 7 seats. > > > > Tim Rowledge > > Marcel Taeumel > > Craig Latta > > Bert Freudenberg > > > > Come on people you can do better. It would be nice if we could get at least > 10 candidates! > > > > We have 10 days left. Please feel free to encourage people to run. Maybe > do it publically on squeak-dev. > > > > Squeak needs you!!! > > > > All the best, > > > > Ron Teitelbaum > > > > From commits at source.squeak.org Thu Jan 21 22:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 21 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160121225501.454.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-January/009270.html Name: Tools-mt.664 Ancestors: Tools-ul.663 Fixes drop behavior in File List. Ignore things that are not files or folders. However, move/copy folders might still work on Unix-based systems only. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009271.html Name: Tools-mt.665 Ancestors: Tools-mt.664 After a brief discussion with Bert, remove the possibility to drop folders into the folder tree in the File List tool. To avoid inadvertent restructuring. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009272.html Name: Tools-kfr.666 Ancestors: Tools-kfr.664, Tools-mt.665 Fix for full menu ============================================= From craig at netjam.org Thu Jan 21 23:34:34 2016 From: craig at netjam.org (Craig Latta) Date: Thu Jan 21 23:34:47 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: References: Message-ID: > Only disconcerting bit was the warning that squeakjs was still > running when I went to leave the page. Mm, I took that out. Also, Bert figured out how to get 2D mouse coordinates from 3D when you're zoomed out. > I guess it might be interesting to have live demos of squeak based > apps that run on squeakjs and include a nice easy way to ?buy? and > download a ?proper? vm and the image. Certainly! -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From lewis at mail.msen.com Fri Jan 22 00:05:31 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Jan 22 00:05:33 2016 Subject: [squeak-dev] Board Candidates Needed In-Reply-To: <19ad01d15473$3d76c0a0$b86441e0$@usmedrec.com> References: <19ad01d15473$3d76c0a0$b86441e0$@usmedrec.com> Message-ID: <20160122000531.GC96644@shell.msen.com> On Thu, Jan 21, 2016 at 12:43:29PM -0500, Ron Teitelbaum wrote: > > We have 10 days left. Please feel free to encourage people to run. Maybe > do it publically on squeak-dev. > > Squeak needs you!!! I am running for the Squeak Oversight Board this year. I participate in Squeak as an amateur member of the community. While I appreciate the value of Squeak as a software development tool, for me that is not important. I see it as a personal toolbox for exploring ideas and learning ("computer science in a box"). Some of the things that inspire me are: - Cuis - for its simplicity and clarity of vision. - FunSqueak - for reminding us of all the things that Squeak can be. - Scratch and Etoys - supporting the part of our community that matters the most. - Spur/Cog - for advancing the leading edge of performance, for making future scalability possible, and for doing it all in open source. - SqueakJS - for breaking free from old operating systems, for making run anything/run everywhere more possible than ever before. I plan to continue supporting my own projects (OSProcess, VM team support, and a few others). As a member of the oversight board I will do my best to ensure that Squeak is both cutting edge in its new development, and truly accessible to non-professional Squeakers, kids, and hobby programmers. Dave From kbrown at mac.com Fri Jan 22 00:12:31 2016 From: kbrown at mac.com (Ken G. Brown) Date: Fri Jan 22 00:12:36 2016 Subject: [squeak-dev] Smalltalk website tricks In-Reply-To: References: Message-ID: <63489C1A-49CE-4F01-82D9-803907D7AE8F@mac.com> Tried in Chrome on OS X 10.11.4. I get to the www site and see a bunch of overlapping 3D rectangles. Mousing over some of them, displays text. Double clicking on the displayed text goes to that page, the text is uncomfortably large on a large browser window on a 30? display. I find that mousing over to display something is disturbing, similar to the way they have started hiding the X controls on Safari browser tabs, and also some of the available buttons in Apple Mail. I prefer to see everything so there are less surprises. Double clicking the Informatics or other screens does not bring the proper view into visibility as might be expected, need to scroll down. All pages can be accessed by scrolling down. Text is uncomfortably large everywhere even if browser window smaller. Ken G. Brown > On Jan 21, 2016, at 10:18, Craig Latta wrote: > > > Hi-- > > I wrote a new website for Black Page Digital, my consultancy in > Amsterdam and San Francisco. It includes SqueakJS running in a 3D CSS > viewport, kinda cute. Please check it out, pass it on, and let me know > what you think! > > > http://thiscontext.com/2016/01/21/new-website-for-black-page-digital > > > thanks, > > -C > > -- > Craig Latta > Black Page Digital > postbus 10784 > 1001ET Amsterdam, Netherlands > craig@blackpagedigital.com > +31 6 2757 7177 (SMS ok) > + 1 415 287 3547 (no SMS) > > > From btc at openinworld.com Fri Jan 22 00:49:57 2016 From: btc at openinworld.com (Ben Coman) Date: Fri Jan 22 00:50:20 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> Message-ID: On Fri, Jan 22, 2016 at 4:42 AM, Jeff Gonis wrote: > Hi Squeakers, > > I just wanted to write in with a quick report on a recent demonstration > I did for my my colleagues at work. > > At the company I work for we are given one Friday a month to work on any > sort of project that interests us, whether or not it is related to the > work we do for the company, and so I usually end up playing around with > a project in Squeak. As part of the deal, we are asked to occasionally > present what we are working on to our peers, in the hopes that they can > do some learning from our projects as well. > > I didn't have any projects ready to demonstrate in a compelling way so I > decided to instead just show off Squeak itself and give people kind of > an introduction to Smalltalk and what I find so compelling about it. I > decided to go ahead and live code a version of the bouncing atoms morph, > using submorphs for the atoms, and developing the code as the parent > morph "stepped" away on screen, updating its behavior seamlessly. I > demonstrated adding variables and method without stopping, changing the > methods and debugging them when I made mistakes, changing the entire > class of the onscreen morphs as the simulation ran and some of the cool > things about the language itself as well, like "build-your-own" if > statements and such. > > Overall I think that I kind of blew a bunch of people's minds, what with > our day to day work being in C++ and always being in that > edit-compile-run-test cycle. Several people came up to me afterwards to > say how much they enjoyed seeing a different view of programming and > what it could represent and I hope to put together a few more > demonstrations in the coming months. > > Anyway, I just wanted to let you know that Smalltalk is still surprising > people and exceeding their expectations 35 years on, and a large part of > it is thanks to all the great work that goes into Squeak from its > contributors. > > Thanks for your efforts! > Jeff > Great to hear such stories. Any chance recording some of those demonstrations? That would be immense ;). cheers -ben From squeaklist at gmail.com Fri Jan 22 02:20:46 2016 From: squeaklist at gmail.com (Kjell Godo) Date: Fri Jan 22 02:20:49 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> Message-ID: Will you be publishing this Package in the SqueakMap or somewhere? Could this work for other languages like Haskell to Smalltalk or Haskell to C to Smalltalk? I have thought about trying this but i don't do C or C++ Although i did do a Bank kiosk in TurboC in the 1980s TuboC was nice it was good i got scarred for life trying to use an early Microsoft C compiler in the mid 1980s that was just awrful people in that class at the UW were dropping like flies one girl was hiding under one of the tables in the lab on the final day the professor was getting pretty sick and tired of getting software handed in that didn't work so he was giving out zero grades for the class project to anyone who handed in a class project in Microsoft c that didn't work and i can tell you there were a lot of zeros handed out that day i think most of us got zeros even though we worked really hard using a c compiler that basically was pretty much just emitting random sequences of semi executable drivel i tried using the UNIX C compiler to get it going and then port it back to Microsoft c crashed and burned out of time no way hozay yyyyyyou get zero well if i was quick i would have gotten down on all fours and gone under the table with the girl she was a jolly Asian girl at least i could have gotten a pretty good quip out of the deal so i swore off of c right then and there i swore off of it for life the instant that zero hit the instant i could see zero coming and my name on it and no way to dodge it left just a helpless prisoner of war kneeling in the headlights with hands behind my head that moment when you just give up because haint nothing more you can do but just get hit and it's too late to cheat too late to band together with the cheaters and collaborate they probably all got zeroed out too anyway for being too similar or maybe the prof just rolled up his eyes up and over and back and said caint give every dang one of em a zero today and i swore that on my death bed i would say Haint touched it since but TurboC was pretty good yeah TurboC was almost Smalltalk like yeah TurboC was all right i made a bank kiosk out of TurboC and TurboProlog which was noted for being error free probably Borland figured that based on all our heinous experiences with c that building a C compiler that works a C compiler that actual works would be pretty near to a wide open blue ocean deal ie no competition exists On Thursday, January 21, 2016, Dimitris Chloupis wrote: > Great job, I think they will be suprised even more that you can use > smalltalk as scripting language for C++ projects which is currently what I > do :) > > Though I am using pharo instead of squeak , there is little reason for the > same concepts not to apply for squeak . I am actually trying to make a > shared memory(based on memory mapped files) frameworks where pharo shares > memory with a c++ executable and they can talk to each other, shared data > and live state and use each other's functions and libraries , sort of C++ > being pharo's best buddy and vice versa ;) > > On Thu, Jan 21, 2016 at 10:42 PM Jeff Gonis > wrote: > >> Hi Squeakers, >> >> I just wanted to write in with a quick report on a recent demonstration >> I did for my my colleagues at work. >> >> At the company I work for we are given one Friday a month to work on any >> sort of project that interests us, whether or not it is related to the >> work we do for the company, and so I usually end up playing around with >> a project in Squeak. As part of the deal, we are asked to occasionally >> present what we are working on to our peers, in the hopes that they can >> do some learning from our projects as well. >> >> I didn't have any projects ready to demonstrate in a compelling way so I >> decided to instead just show off Squeak itself and give people kind of >> an introduction to Smalltalk and what I find so compelling about it. I >> decided to go ahead and live code a version of the bouncing atoms morph, >> using submorphs for the atoms, and developing the code as the parent >> morph "stepped" away on screen, updating its behavior seamlessly. I >> demonstrated adding variables and method without stopping, changing the >> methods and debugging them when I made mistakes, changing the entire >> class of the onscreen morphs as the simulation ran and some of the cool >> things about the language itself as well, like "build-your-own" if >> statements and such. >> >> Overall I think that I kind of blew a bunch of people's minds, what with >> our day to day work being in C++ and always being in that >> edit-compile-run-test cycle. Several people came up to me afterwards to >> say how much they enjoyed seeing a different view of programming and >> what it could represent and I hope to put together a few more >> demonstrations in the coming months. >> >> Anyway, I just wanted to let you know that Smalltalk is still surprising >> people and exceeding their expectations 35 years on, and a large part of >> it is thanks to all the great work that goes into Squeak from its >> contributors. >> >> Thanks for your efforts! >> Jeff >> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160121/de2b7dc4/attachment.htm From craig at netjam.org Fri Jan 22 06:50:17 2016 From: craig at netjam.org (Craig Latta) Date: Fri Jan 22 06:50:26 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: <63489C1A-49CE-4F01-82D9-803907D7AE8F@mac.com> References: <63489C1A-49CE-4F01-82D9-803907D7AE8F@mac.com> Message-ID: Hi Ken-- > Double clicking the Informatics or other screens does not bring the > proper view into visibility as might be expected, need to scroll down. Mm, it zooms in at the height that was clicked. I want to make it zoom in so that the clicked element is centered, but I can't figure that out. window.scrollTo and window.scrollY don't seem to work as I expect. scrollIntoView works, but some browsers don't respect its options (like moving smoothly). If anyone knows the right JavaScript code to use, please let me know. Thanks! -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From karlramberg at gmail.com Fri Jan 22 08:20:40 2016 From: karlramberg at gmail.com (karl ramberg) Date: Fri Jan 22 08:20:44 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: References: <63489C1A-49CE-4F01-82D9-803907D7AE8F@mac.com> Message-ID: Hi, I found that if I open a new window in the Squeak image it is so near the top that is is hard to move it. Best, Karl On Fri, Jan 22, 2016 at 7:50 AM, Craig Latta wrote: > > Hi Ken-- > > > Double clicking the Informatics or other screens does not bring the > > proper view into visibility as might be expected, need to scroll down. > > Mm, it zooms in at the height that was clicked. I want to make it > zoom in so that the clicked element is centered, but I can't figure that > out. window.scrollTo and window.scrollY don't seem to work as I expect. > scrollIntoView works, but some browsers don't respect its options (like > moving smoothly). > > If anyone knows the right JavaScript code to use, please let me > know. Thanks! > > > -C > > -- > Craig Latta > netjam.org > +31 6 2757 7177 (SMS ok) > + 1 415 287 3547 (no SMS) > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160122/ed2d9dc8/attachment.htm From Marcel.Taeumel at hpi.de Fri Jan 22 08:25:44 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Jan 22 08:48:07 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.665.mcz In-Reply-To: References: Message-ID: <1453451144207-4873270.post@n4.nabble.com> Actually, the code does not work for folders only for files. Does it on your system? Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-665-mcz-tp4873152p4873270.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From kilon.alios at gmail.com Fri Jan 22 09:46:12 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Fri Jan 22 09:46:29 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> Message-ID: "Will you be publishing this Package in the SqueakMap or somewhere? Could this work for other languages like Haskell to Smalltalk or Haskell to C to Smalltalk?" Yes I will publish it in github. Yes it can work for any language that gives access to memory mapped files . I will implement it also for python. I currently use sockets for this IPC , which allow me to use python libraries from pharo. But of course sockets are nowhere as fast as shared memory. However my implementation is not a magic pill and will need modifications to satisfy personal needs, but I plan to document it with a set of video tutorials that they will explain how it works. Currently you can use a C++ library from pharo/squeak if you export it as a C library so it does not do name mangling , however my approach with memory mapped files does not allow you only to use C++ as a library but even "hack" inside executables and even store the live state of those executables together with the live state of your image. Essentially it will allows to run pharo with C++ side by side and interface between the two in many different ways. On Fri, Jan 22, 2016 at 4:20 AM Kjell Godo wrote: > Will you be publishing this Package in the SqueakMap or somewhere? > Could this work for other languages like > Haskell to Smalltalk > or > Haskell to C to Smalltalk? > I have thought about trying this but i don't do C or C++ > Although i did do a Bank kiosk in TurboC in the 1980s > TuboC was nice it was good > > i got scarred for life trying to use an early > Microsoft C compiler > in the mid 1980s > that was just awrful > people in that class at the UW were dropping like flies > one girl was hiding under one of the tables in the lab on the final day > the professor was getting pretty sick and tired > of getting software handed in that didn't work > so he was giving out zero grades for the class project to anyone > who handed in a class project in Microsoft c > that didn't work > and i can tell you > there were a lot of zeros handed out that day > i think most of us got zeros > even though we worked really hard > using a c compiler that > basically was pretty much just emitting > random sequences of semi executable drivel > i tried using the UNIX C compiler to get it going > and then port it back to > Microsoft c > crashed and burned > out of time > no way hozay > yyyyyyou get zero > well if i was quick > i would have gotten down on all fours > and gone under the table with the girl > she was a jolly Asian girl > at least i could have gotten > a pretty good quip out of the deal > > so > > i swore off of c > right then and there > i swore off of it > for life > the instant that zero hit > the instant i could see zero coming and my name on it > and no way to dodge it left > just a helpless prisoner of war kneeling in the headlights > with hands behind my head > that moment when you just give up > because haint nothing more you can do > but just get hit > and it's too late to cheat > too late to band together with the cheaters and collaborate > they probably all got zeroed out too anyway for being too similar > or maybe the prof just rolled up his eyes up and over and back and said > caint give every dang one of em a zero today > and i swore that on my death bed i would say > Haint touched it since > > but TurboC was pretty good > yeah TurboC was almost Smalltalk like > yeah TurboC was all right > i made a bank kiosk out of > TurboC and TurboProlog > which was noted for being > error free > > probably Borland figured that > based on all our heinous experiences with c > that building a C compiler that works > a C compiler that actual works > would be pretty near to a > wide open blue ocean deal > ie > no competition exists > > > > > On Thursday, January 21, 2016, Dimitris Chloupis > wrote: > >> Great job, I think they will be suprised even more that you can use >> smalltalk as scripting language for C++ projects which is currently what I >> do :) >> >> Though I am using pharo instead of squeak , there is little reason for >> the same concepts not to apply for squeak . I am actually trying to make a >> shared memory(based on memory mapped files) frameworks where pharo shares >> memory with a c++ executable and they can talk to each other, shared data >> and live state and use each other's functions and libraries , sort of C++ >> being pharo's best buddy and vice versa ;) >> >> On Thu, Jan 21, 2016 at 10:42 PM Jeff Gonis >> wrote: >> >>> Hi Squeakers, >>> >>> I just wanted to write in with a quick report on a recent demonstration >>> I did for my my colleagues at work. >>> >>> At the company I work for we are given one Friday a month to work on any >>> sort of project that interests us, whether or not it is related to the >>> work we do for the company, and so I usually end up playing around with >>> a project in Squeak. As part of the deal, we are asked to occasionally >>> present what we are working on to our peers, in the hopes that they can >>> do some learning from our projects as well. >>> >>> I didn't have any projects ready to demonstrate in a compelling way so I >>> decided to instead just show off Squeak itself and give people kind of >>> an introduction to Smalltalk and what I find so compelling about it. I >>> decided to go ahead and live code a version of the bouncing atoms morph, >>> using submorphs for the atoms, and developing the code as the parent >>> morph "stepped" away on screen, updating its behavior seamlessly. I >>> demonstrated adding variables and method without stopping, changing the >>> methods and debugging them when I made mistakes, changing the entire >>> class of the onscreen morphs as the simulation ran and some of the cool >>> things about the language itself as well, like "build-your-own" if >>> statements and such. >>> >>> Overall I think that I kind of blew a bunch of people's minds, what with >>> our day to day work being in C++ and always being in that >>> edit-compile-run-test cycle. Several people came up to me afterwards to >>> say how much they enjoyed seeing a different view of programming and >>> what it could represent and I hope to put together a few more >>> demonstrations in the coming months. >>> >>> Anyway, I just wanted to let you know that Smalltalk is still surprising >>> people and exceeding their expectations 35 years on, and a large part of >>> it is thanks to all the great work that goes into Squeak from its >>> contributors. >>> >>> Thanks for your efforts! >>> Jeff >>> >>> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160122/d326e252/attachment-0001.htm From craig at netjam.org Fri Jan 22 12:52:14 2016 From: craig at netjam.org (Craig Latta) Date: Fri Jan 22 12:52:29 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: References: <63489C1A-49CE-4F01-82D9-803907D7AE8F@mac.com> Message-ID: > I found that if I open a new window in the Squeak image it is so near > the top that is is hard to move it. Yeah, that problem doesn't happen if the Squeak page is centered in the browser window. That's why I'd like to know the JavaScript code to run to center it when you zoom in. In the meantime, I changed Squeak's RealEstateAgent to have a more conservative allowable area for new windows. thanks, -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From commits at source.squeak.org Fri Jan 22 13:26:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 22 13:26:06 2016 Subject: [squeak-dev] The Trunk: System-mt.788.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.788.mcz ==================== Summary ==================== Name: System-mt.788 Author: mt Time: 22 January 2016, 2:25:42.237541 pm UUID: d8e842ad-39e5-4d38-a0b5-45d7692143a0 Ancestors: System-eem.787 Add support for browsing message categories to toolsets. =============== Diff against System-eem.787 =============== Item was added: + ----- Method: ToolSet class>>browseClass:category: (in category 'browsing') ----- + browseClass: aClass category: aCategory + "Open a browser" + self default ifNil:[^self inform: 'Cannot open Browser']. + ^self default browseClass: aClass category: aCategory! Item was added: + ----- Method: ToolSet class>>browseMessageCategory:inClass: (in category 'browsing') ----- + browseMessageCategory: aCategory inClass: aClass + "Open a message category browser." + self default ifNil:[^self inform: 'Cannot open Browser']. + ^self default browseMessageCategory: aCategory inClass: aClass! From commits at source.squeak.org Fri Jan 22 13:28:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 22 13:28:07 2016 Subject: [squeak-dev] The Trunk: Tools-mt.667.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.667.mcz ==================== Summary ==================== Name: Tools-mt.667 Author: mt Time: 22 January 2016, 2:27:46.750541 pm UUID: be24b1d6-4343-49a7-a3fa-ccafb5215cdb Ancestors: Tools-kfr.666 Cleans up code regarding spawning system and hierarchy browsers. Adds support for browser message categories via toolsets. =============== Diff against Tools-kfr.666 =============== Item was changed: ----- Method: Browser class>>fullOnClass: (in category 'instance creation') ----- fullOnClass: aClass "Open a new full browser set to class." + + ^ self + openBrowserView: (self new + setClass: aClass; + openEditString: nil) + label: nil! - | brow | - brow := self new. - brow setClass: aClass selector: nil. - ^ self - openBrowserView: (brow openEditString: nil) - label: 'System Browser'! Item was added: + ----- Method: Browser class>>fullOnClass:category: (in category 'instance creation') ----- + fullOnClass: aClass category: category + + ^ self + openBrowserView: (self new + setClass: aClass; + selectMessageCategoryNamed: category; + openEditString: nil) + label: nil! Item was changed: ----- Method: Browser class>>fullOnClass:selector: (in category 'instance creation') ----- fullOnClass: aClass selector: aSelector "Open a new full browser set to class." + ^ self + openBrowserView: (self new + setClass: aClass selector: aSelector; + openEditString: nil) + label: nil! - | brow classToUse | - classToUse := SystemBrowser default. - brow := classToUse new. - brow setClass: aClass selector: aSelector. - ^ classToUse - openBrowserView: (brow openEditString: nil) - label: brow labelString! Item was changed: ----- Method: Browser class>>newOnClass:label: (in category 'instance creation') ----- newOnClass: aClass label: aLabel "Open a new class browser on this class." | newBrowser | newBrowser := self new. + newBrowser setClass: aClass. - newBrowser setClass: aClass selector: nil. ^ self openBrowserView: (newBrowser openOnClassWithEditString: nil) label: aLabel ! Item was added: + ----- Method: Browser class>>newOnMessageCategory:inClass: (in category 'instance creation') ----- + newOnMessageCategory: aCategory inClass: aClass + + ^ self + openBrowserView: (self new + setClass: aClass; + selectMessageCategoryNamed: aCategory; + openMessageCatEditString: nil) + label: 'Message Category Browser (' , aClass name, ')'.! Item was changed: ----- Method: Browser class>>openBrowserView:label: (in category 'instance creation') ----- openBrowserView: aBrowserView label: aString "Schedule aBrowserView, labelling the view aString." + + (aBrowserView isKindOf: ToolBuilderSpec) + ifTrue:[ + (self canUseMultiWindowBrowsers + and: [self useMultiWindowBrowsers]) + ifTrue: [aBrowserView multiWindowStyle: #labelButton]. + aString + ifNil: [ToolBuilder open: aBrowserView] + ifNotNil: [ToolBuilder open: aBrowserView label: aString]] + ifFalse:[ + aBrowserView isMorph + ifTrue: [ + aString ifNotNil: [aBrowserView setLabel: aString]. + aBrowserView openInWorld] + ifFalse: [ + aString ifNotNil: [aBrowserView label: aString]. + aBrowserView minimumSize: 300 @ 200. + aBrowserView subViews do: [:each | each controller]. + aBrowserView controller open]]. + - (aBrowserView isKindOf: ToolBuilderSpec) ifTrue:[ - (self canUseMultiWindowBrowsers - and: [self useMultiWindowBrowsers]) ifTrue: - [aBrowserView multiWindowStyle: #labelButton]. - ToolBuilder open: aBrowserView label: aString. - ] ifFalse:[ - aBrowserView isMorph - ifTrue: [(aBrowserView setLabel: aString) openInWorld] - ifFalse: [aBrowserView label: aString. - aBrowserView minimumSize: 300 @ 200. - aBrowserView subViews do: [:each | each controller]. - aBrowserView controller open]. - ]. ^ aBrowserView model ! Item was changed: ----- Method: Browser>>buildMessageCategoryBrowserEditString: (in category 'message category functions') ----- buildMessageCategoryBrowserEditString: aString "Create and schedule a message category browser for the currently selected message category. The initial text view contains the characters in aString." - "wod 6/24/1998: set newBrowser classListIndex so that it works whether the - receiver is a standard or a Hierarchy Browser." + ^ self hasMessageCategorySelected ifTrue: [ + (self class + newOnMessageCategory: self selectedMessageCategoryName + inClass: self selectedClassOrMetaClass) + "Select my message." + selectMessageNamed: self selectedMessageName; + yourself]! - | newBrowser | - ^ self hasMessageCategorySelected - ifFalse: [ nil ] - ifTrue: - [newBrowser := Browser new. - newBrowser selectSystemCategory: self selectedSystemCategory. - newBrowser selectClass: self selectedClass. - newBrowser metaClassIndicated: self metaClassIndicated. - newBrowser selectMessageCategoryNamed: self selectedMessageCategoryName. - newBrowser selectMessageNamed: self selectedMessageName. - self class openBrowserView: (newBrowser openMessageCatEditString: aString) - label: 'Message Category Browser (' , - newBrowser selectedClassOrMetaClassName , ')'. - newBrowser.].! Item was added: + ----- Method: Browser>>setClass: (in category 'initialize-release') ----- + setClass: aBehavior + "Set the state of a new, uninitialized Browser." + + | isMeta aClass | + aBehavior ifNil: [^ self]. + (aBehavior isKindOf: Metaclass) + ifTrue: [ + isMeta := true. + aClass := aBehavior soleInstance] + ifFalse: [ + isMeta := false. + aClass := aBehavior]. + + self + selectEnvironment: aClass environment; + selectCategoryForClass: aClass; + classListIndex: (self classListIndexOf: aClass name); + metaClassIndicated: isMeta.! Item was changed: ----- Method: Browser>>setClass:selector: (in category 'initialize-release') ----- setClass: aBehavior selector: aSymbol "Set the state of a new, uninitialized Browser." - | isMeta aClass | aBehavior ifNil: [^ self]. + - (aBehavior isKindOf: Metaclass) - ifTrue: [ - isMeta := true. - aClass := aBehavior soleInstance] - ifFalse: [ - isMeta := false. - aClass := aBehavior]. - self + setClass: aBehavior; - selectEnvironment: aClass environment; - selectCategoryForClass: aClass; - classListIndex: (self classListIndexOf: aClass name); - metaClassIndicated: isMeta; setSelector: aSymbol.! Item was changed: ----- Method: CodeHolder>>messageListKey:from: (in category 'message list menu') ----- messageListKey: aChar from: view "Respond to a Command key. I am a model with a code pane, and I also have a listView that has a list of methods. The view knows how to get the list and selection." | sel class | aChar == $D ifTrue: [^ self toggleDiffing]. sel := self selectedMessageName. aChar == $m ifTrue: "These next two put up a type in if no message selected" [^ self useSelector: sel orGetSelectorAndSendQuery: #browseAllImplementorsOf: to: self ]. aChar == $n ifTrue: [^ self useSelector: sel orGetSelectorAndSendQuery: #browseAllCallsOn: to: self ]. aChar == $d ifTrue: [^ self removeMessageFromBrowser]. "The following require a class selection" (class := self selectedClassOrMetaClass) ifNil: [^ self arrowKey: aChar from: view]. + aChar == $b ifTrue: [^ ToolSet browse: class selector: sel]. - aChar == $b ifTrue: [^ Browser fullOnClass: class selector: sel]. aChar == $N ifTrue: [^ self browseClassRefs]. aChar == $i ifTrue: [^ self methodHierarchy]. aChar == $h ifTrue: [^ self classHierarchy]. aChar == $p ifTrue: [^ self browseFullProtocol]. aChar == $r ifTrue: [^ self browseVariableReferences]. aChar == $a ifTrue: [^ self browseVariableAssignments]. "The following require a method selection" sel ifNotNil: [aChar == $o ifTrue: [^ self fileOutMessage]. aChar == $c ifTrue: [^ self copySelector]. aChar == $v ifTrue: [^ self browseVersions]. aChar == $x ifTrue: [^ self removeMessage]. aChar == $C ifTrue: [ self copyReference ]. (aChar == $Y and: [self canShowMultipleMessageCategories]) ifTrue: [^ self showHomeCategory]]. ^ self arrowKey: aChar from: view! Item was changed: ----- Method: CodeHolder>>spawnHierarchy (in category 'traits') ----- spawnHierarchy "Create and schedule a new hierarchy browser on the currently selected class or meta." + ^ ToolSet + browseHierarchy: self selectedClassOrMetaClass + selector: self selectedMessageName! - | newBrowser aSymbol selectedClassOrMetaClass | - (selectedClassOrMetaClass := self selectedClassOrMetaClass) - ifNil: [^ self]. - selectedClassOrMetaClass isTrait ifTrue: [^self]. - newBrowser := HierarchyBrowser new initHierarchyForClass: selectedClassOrMetaClass. - ((aSymbol := self selectedMessageName) notNil and: [(MessageSet isPseudoSelector: aSymbol) not]) - ifTrue: [newBrowser setSelector: aSymbol]. - Browser - openBrowserView: (newBrowser openSystemCatEditString: nil) - label: newBrowser labelString. - Smalltalk isMorphic - ifTrue: ["this workaround only needed in morphic" - newBrowser assureSelectionsShow]. - ^ newBrowser.! Item was removed: - ----- Method: HierarchyBrowser class>>newFor: (in category 'instance creation') ----- - newFor: aClass - "Open a new HierarchyBrowser on the given class" - | newBrowser | - newBrowser := HierarchyBrowser new initHierarchyForClass: aClass. - Browser openBrowserView: (newBrowser openSystemCatEditString: nil) - label: newBrowser labelString - - "HierarchyBrowser newFor: Boolean"! Item was removed: - ----- Method: HierarchyBrowser class>>newFor:labeled: (in category 'instance creation') ----- - newFor: aClass labeled: aLabel - "Open a new HierarchyBrowser on the given class, using aLabel as the window title." - - | newBrowser | - newBrowser := HierarchyBrowser new initHierarchyForClass: aClass. - Browser openBrowserView: (newBrowser openSystemCatEditString: nil) - label: aLabel - - "HierarchyBrowser newFor: Boolean labeled: 'Testing'"! Item was added: + ----- Method: HierarchyBrowser>>setClass: (in category 'initialization') ----- + setClass: aClass + + self initHierarchyForClass: aClass. + super setClass: aClass.! Item was changed: ----- Method: ProcessBrowser>>browseContext (in category 'stack list') ----- browseContext selectedContext ifNil: [^ self]. + ToolSet browse: self selectedClass selector: self selectedSelector! - Browser newOnClass: self selectedClass selector: self selectedSelector! Item was changed: ----- Method: SelectorBrowser>>classListIndex: (in category 'class list') ----- classListIndex: anInteger classListIndex := anInteger. classListIndex > 0 ifTrue: [self changed: #startNewBrowser. "MVC view will terminate control to prepare for new browser" + ToolSet browse: self selectedClass selector: self selectedMessageName. - Browser fullOnClass: self selectedClass selector: self selectedMessageName. "classListIndex := 0"] ! Item was added: + ----- Method: StandardToolSet class>>browseClass:category: (in category 'browsing') ----- + browseClass: aClass category: aCategory + "Open a browser for a class selecting a given message category." + + ^ SystemBrowser default + fullOnClass: aClass + category: aCategory! Item was changed: ----- Method: StandardToolSet class>>browseHierarchy:selector: (in category 'browsing') ----- browseHierarchy: aClass selector: aSelector "Open a browser" + + ^ HierarchyBrowser fullOnClass: aClass selector: aSelector.! - | newBrowser | - (aClass == nil) ifTrue: [^ self]. - (newBrowser := SystemBrowser default new) setClass: aClass selector: aSelector. - newBrowser spawnHierarchy.! Item was added: + ----- Method: StandardToolSet class>>browseMessageCategory:inClass: (in category 'browsing') ----- + browseMessageCategory: aCategory inClass: aClass + "Open a message category browser." + + ^ SystemBrowser default + newOnMessageCategory: aCategory inClass: aClass.! Item was changed: ----- Method: StringHolder>>messageListKey:from: (in category '*Tools') ----- messageListKey: aChar from: view "Respond to a Command key. I am a model with a code pane, and I also have a listView that has a list of methods. The view knows how to get the list and selection." | sel class | aChar == $D ifTrue: [^ self toggleDiffing]. sel := self selectedMessageName. aChar == $m ifTrue: "These next two put up a type in if no message selected" [^ self useSelector: sel orGetSelectorAndSendQuery: #browseAllImplementorsOf: to: self systemNavigation]. aChar == $n ifTrue: [^ self useSelector: sel orGetSelectorAndSendQuery: #browseAllCallsOn: to: self systemNavigation]. "The following require a class selection" (class := self selectedClassOrMetaClass) ifNil: [^ self arrowKey: aChar from: view]. + aChar == $b ifTrue: [^ ToolSet browse: class selector: sel]. - aChar == $b ifTrue: [^ Browser fullOnClass: class selector: sel]. aChar == $N ifTrue: [^ self browseClassRefs]. aChar == $i ifTrue: [^ self methodHierarchy]. aChar == $h ifTrue: [^ self classHierarchy]. aChar == $p ifTrue: [^ self browseFullProtocol]. "The following require a method selection" sel ifNotNil: [aChar == $o ifTrue: [^ self fileOutMessage]. aChar == $c ifTrue: [^ self copySelector]. aChar == $C ifTrue: [^ self copyReference]. aChar == $v ifTrue: [^ self browseVersions]. aChar == $x ifTrue: [^ self removeMessage]]. ^ self arrowKey: aChar from: view! From commits at source.squeak.org Fri Jan 22 13:28:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 22 13:29:00 2016 Subject: [squeak-dev] The Trunk: EToys-mt.132.mcz Message-ID: Marcel Taeumel uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-mt.132.mcz ==================== Summary ==================== Name: EToys-mt.132 Author: mt Time: 22 January 2016, 2:28:46.325541 pm UUID: f70ffb37-684a-4e38-b662-cc8ce9563c40 Ancestors: EToys-cmm.131 Use tool set to spawn hierarchy browser. =============== Diff against EToys-cmm.131 =============== Item was changed: ----- Method: StackMorph>>browseCardClass (in category 'card access') ----- browseCardClass "Browse the class of the current card" | suffix | suffix := self currentCard class name numericSuffix. + ToolSet browseHierarchy: self currentCard class selector: nil. - HierarchyBrowser newFor: self currentCard class labeled: 'Background ', suffix asString ! From Marcel.Taeumel at hpi.de Fri Jan 22 13:08:15 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Jan 22 13:30:39 2016 Subject: [squeak-dev] Re: Proposal for a 'category browser' method on Browser class In-Reply-To: <15251279694.c0be020963234.2341686453061756263@zoho.com> References: <15251279694.c0be020963234.2341686453061756263@zoho.com> Message-ID: <1453468095652-4873347.post@n4.nabble.com> Hi, please update. You can now browse message categories via ToolSet >> #browseClass:category: ToolSet >> #browseMessageCategory:inClass: There are two ways to distinguish between System Browser and Message Category Browser. Best, Marcel -- View this message in context: http://forum.world.st/Proposal-for-a-category-browser-method-on-Browser-class-tp4872150p4873347.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Fri Jan 22 14:23:43 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 22 14:23:48 2016 Subject: [squeak-dev] The Trunk: Tools-mt.665.mcz In-Reply-To: References: <56a0eb52.0c5c8c0a.e0013.5b16SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: +1. Having to select another folder to refresh in a complete pain. Please restore click-to-refresh. _,,,^..^,,,_ (phone) > On Jan 21, 2016, at 8:12 AM, Chris Muller wrote: > > Disable functionality because it might accidently be invoked? > > Shouldn't the requirement that the one being dragged be pre-selected > be requirement enough? That way it won't happen through accidently > clicking it, because its already clicked. > > Especially now that I can no longer refresh the file list by clicking > the _already selected_ folder, something taht got broken since 5.0... > Now I have to click on a different folder, then back to the folder I > wanted to refresh... > From karlramberg at gmail.com Fri Jan 22 15:00:09 2016 From: karlramberg at gmail.com (karl ramberg) Date: Fri Jan 22 15:00:13 2016 Subject: [squeak-dev] The Trunk: Tools-mt.665.mcz In-Reply-To: References: <56a0eb52.0c5c8c0a.e0013.5b16SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Click-to-refresh is enabled if you comment out a line in PluggableTreeMorph. I'm not sure if this has consequences for other users of PluggableTreeMorph. PluggableTreeMorph>>setSelectedMorph: aMorph "Avoid unnecessary model callbacks." --> "self selectedMorph == aMorph ifTrue: [^ self]." ... Best, Karl On Fri, Jan 22, 2016 at 3:23 PM, Eliot Miranda wrote: > +1. Having to select another folder to refresh in a complete pain. Please > restore click-to-refresh. > > _,,,^..^,,,_ (phone) > > > On Jan 21, 2016, at 8:12 AM, Chris Muller wrote: > > > > Disable functionality because it might accidently be invoked? > > > > Shouldn't the requirement that the one being dragged be pre-selected > > be requirement enough? That way it won't happen through accidently > > clicking it, because its already clicked. > > > > Especially now that I can no longer refresh the file list by clicking > > the _already selected_ folder, something taht got broken since 5.0... > > Now I have to click on a different folder, then back to the folder I > > wanted to refresh... > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160122/d9663658/attachment.htm From asqueaker at gmail.com Fri Jan 22 15:55:19 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Jan 22 15:56:01 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.665.mcz In-Reply-To: <1453451144207-4873270.post@n4.nabble.com> References: <1453451144207-4873270.post@n4.nabble.com> Message-ID: I'm still able to move files to other directories, as it should be able to, but not directories, I don't know whether its ever worked but I think it should.. Just FYI, there is another annoying problem wiht the FileList: When I open it via Shift+Command+L, and it happens to open with the directory tree directly under the Hand, it seems to be sending that 'L' key to the tree as a filter criteria, causing it to change its selection and scroll way out of view... On Fri, Jan 22, 2016 at 2:25 AM, marcel.taeumel wrote: > Actually, the code does not work for folders only for files. Does it on your > system? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Tools-mt-665-mcz-tp4873152p4873270.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From simon at joyful.com Fri Jan 22 16:42:21 2016 From: simon at joyful.com (Simon Michael) Date: Fri Jan 22 16:42:23 2016 Subject: [squeak-dev] Re: Smalltalk website tricks In-Reply-To: References: Message-ID: Hi Craig, since noone has mentioned it yet: this is really slick! :) Just need to fix the scary db upgrade alert on first visit, and the stop the automatic zoom-out on page load. From kilon.alios at gmail.com Fri Jan 22 17:47:06 2016 From: kilon.alios at gmail.com (Dimitris Chloupis) Date: Fri Jan 22 17:47:19 2016 Subject: [squeak-dev] Re: Smalltalk website tricks In-Reply-To: References: Message-ID: yeap this is very cool :) On Fri, Jan 22, 2016 at 6:42 PM Simon Michael wrote: > Hi Craig, > > since noone has mentioned it yet: this is really slick! :) > > Just need to fix the scary db upgrade alert on first visit, and the stop > the automatic zoom-out on page load. > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160122/4045d98c/attachment.htm From bernhard at pieber.com Fri Jan 22 21:27:34 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Fri Jan 22 21:27:38 2016 Subject: [squeak-dev] [OT] Desktop Neo Message-ID: This concept made it into one of Austria?s main daily papers today: http://derstandard.at/2000029476950/Neo-21-Jaehriger-Student-will-den-Desktop-radikal-neu-erfinden (in German) Here the original link: https://www.desktopneo.com I find the concept interesting and thought, others on the lists might, too. In the screenshots and the video you can see references to Alan Kay?s Wikipedia page, including Squeak, Etoys, Tweak, and Croquet. Cheers, Bernhard From craig at netjam.org Fri Jan 22 22:03:15 2016 From: craig at netjam.org (Craig Latta) Date: Fri Jan 22 22:03:25 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: References: Message-ID: Hi Simon-- > since noone has mentioned it yet: this is really slick! :) Thanks! :) And thanks to Bert for making SqueakJS. > Just need to fix the scary db upgrade alert on first visit... (That isn't necessary with every visiting browser.) > ...and the stop the automatic zoom-out on page load. Mm, I think I like that part. :) -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From bert at freudenbergs.de Fri Jan 22 22:37:03 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Fri Jan 22 22:37:06 2016 Subject: [squeak-dev] re: Smalltalk website tricks In-Reply-To: References: Message-ID: <45106A67-CA26-4C4D-A468-C4BCC7F3B133@freudenbergs.de> On 22.01.2016, at 23:03, Craig Latta wrote: > > > Hi Simon-- > >> since noone has mentioned it yet: this is really slick! :) > > Thanks! :) And thanks to Bert for making SqueakJS. > >> Just need to fix the scary db upgrade alert on first visit... > > (That isn't necessary with every visiting browser.) I saw that too and thought it was weird. Don?t really know why it happens. Should only happen if the IndexedDB database needs to be upgraded. But we?re still at version 1 so this should not happen. Anyways, I demoted it to a silent warning: https://github.com/bertfreudenberg/SqueakJS/commit/8980dcbe32cdab4d7ac4365869fec774fc9b7944 - 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/20160122/c09c93a3/smime.bin From commits at source.squeak.org Fri Jan 22 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 22 22:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160122225502.2034.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-January/009273.html Name: System-mt.788 Ancestors: System-eem.787 Add support for browsing message categories to toolsets. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009274.html Name: Tools-mt.667 Ancestors: Tools-kfr.666 Cleans up code regarding spawning system and hierarchy browsers. Adds support for browser message categories via toolsets. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009275.html Name: EToys-mt.132 Ancestors: EToys-cmm.131 Use tool set to spawn hierarchy browser. ============================================= From cunningham.cb at gmail.com Fri Jan 22 23:41:40 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Fri Jan 22 23:41:44 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? Message-ID: So, once again, I am bitten by these button labels. They just don't speak to me. >From back in 2013, there was a description by Nice that explained it thus: "If you say keep, then you accept the incoming version to replace your version. If you say reject, then refuse the incoming version and prefer to keep your own version." Then back in 2015, another discussion about what these values mean with several options thrown out. But it looks like we still have Keep and Reject - which still confuses me. Maybe we could just relabel them the way Nice suggested: Keep -> 'Keep Incoming' Reject -> 'Reject Incoming' ? Maybe also update the balloon help to take Nice's exact words? I'll push a change later tonight/tomorrow to the InBox unless I hear back that this is a horrible idea. Thanks, cbc -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160122/be88d7cb/attachment.htm From lists at fniephaus.com Sat Jan 23 00:00:56 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Sat Jan 23 00:01:09 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: Message-ID: I think that it's not only the naming but also the direction that is confusing. Sorry for being selfish, but I usually care about my own stuff more than about the stuff on the server, right? How about: Keep -> 'Replace Local' Reject -> 'Keep Local' This is also what most syncing services name the two options when you start using them (e.g. iCloud or Google Chrome Sync). Best, Fabio -- On Fri, Jan 22, 2016 at 11:41 PM Chris Cunningham wrote: > So, once again, I am bitten by these button labels. They just don't speak > to me. > > From back in 2013, there was a description by Nice that explained it thus: > "If you say keep, then you accept the incoming version to replace your > version. > If you say reject, then refuse the incoming version and prefer to keep your > own version." > > Then back in 2015, another discussion about what these values mean with > several options thrown out. But it looks like we still have Keep and > Reject - which still confuses me. > > Maybe we could just relabel them the way Nice suggested: > Keep -> 'Keep Incoming' > Reject -> 'Reject Incoming' > ? Maybe also update the balloon help to take Nice's exact words? > > I'll push a change later tonight/tomorrow to the InBox unless I hear back > that this is a horrible idea. > > Thanks, > cbc > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160123/2dbce633/attachment.htm From lewis at mail.msen.com Sat Jan 23 00:19:56 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Jan 23 00:19:59 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: Message-ID: <20160123001956.GA59324@shell.msen.com> +1 for Fabio's wording. "Replace/Keep Local" is easy for me to understand. +1000 to Chris for fixing this. I cannot understand the current labels at all. Thank you! Dave On Sat, Jan 23, 2016 at 12:00:56AM +0000, Fabio Niephaus wrote: > I think that it's not only the naming but also the direction that is > confusing. Sorry for being selfish, but I usually care about my own stuff > more than about the stuff on the server, right? > > How about: > > Keep -> 'Replace Local' > Reject -> 'Keep Local' > > This is also what most syncing services name the two options when you > start using them (e.g. iCloud or Google Chrome Sync). > > Best, > Fabio > > -- > > On Fri, Jan 22, 2016 at 11:41 PM Chris Cunningham > wrote: > > > So, once again, I am bitten by these button labels. They just don't speak > > to me. > > > > From back in 2013, there was a description by Nice that explained it thus: > > "If you say keep, then you accept the incoming version to replace your > > version. > > If you say reject, then refuse the incoming version and prefer to keep your > > own version." > > > > Then back in 2015, another discussion about what these values mean with > > several options thrown out. But it looks like we still have Keep and > > Reject - which still confuses me. > > > > Maybe we could just relabel them the way Nice suggested: > > Keep -> 'Keep Incoming' > > Reject -> 'Reject Incoming' > > ? Maybe also update the balloon help to take Nice's exact words? > > > > I'll push a change later tonight/tomorrow to the InBox unless I hear back > > that this is a horrible idea. > > > > Thanks, > > cbc > > > > > From commits at source.squeak.org Sat Jan 23 10:41:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 23 10:41:19 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.156.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.156.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.156 Author: mt Time: 23 January 2016, 11:41:12.364398 am UUID: e35cd3fa-7c53-4b6d-a989-867783958b05 Ancestors: ToolBuilder-Morphic-kfr.155 Fixes a regression in pluggable trees. Now models can again govern the behavior of double-selections. FileList, for example, uses it to refresh the list of files. =============== Diff against ToolBuilder-Morphic-kfr.155 =============== Item was changed: ----- Method: PluggableTreeMorph>>setSelectedMorph: (in category 'selection') ----- setSelectedMorph: aMorph - "Avoid unnecessary model callbacks." - self selectedMorph == aMorph ifTrue: [^ self]. - selectedWrapper := aMorph complexContents. "Let the model now about the selected object, not wrapper." setSelectionSelector ifNotNil: [:symbol | model perform: symbol with: (selectedWrapper ifNotNil: [:w | w item])]. "The model may not have access to the parent object in terms of this tree structure." setSelectedParentSelector ifNotNil: [:symbol | model perform: symbol with: (selectedWrapper ifNotNil: [:w | w parent ifNotNil: [:pw | pw item]])].! From commits at source.squeak.org Sat Jan 23 11:08:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 23 11:08:52 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.157.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.157.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.157 Author: mt Time: 23 January 2016, 12:08:47.304398 pm UUID: 85c03d29-bbf2-4737-affe-7b1752475575 Ancestors: ToolBuilder-Morphic-mt.156 Fixes a bug where text fields did not accept when they agreed to discard their edits silently. =============== Diff against ToolBuilder-Morphic-mt.156 =============== Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableText: (in category 'widgets required') ----- buildPluggableText: aSpec | widget | widget := self textPaneClass new. aSpec stylerClass ifNotNil: [:c | widget styler: (c new view: widget)]. widget on: aSpec model text: aSpec getText accept: aSpec setText readSelection: aSpec selection menu: aSpec menu. aSpec font ifNotNil: [:f | widget font: f]. widget readOnly: aSpec readOnly. widget editTextSelector: aSpec editText. widget wantsFrameAdornments: aSpec indicateUnacceptedChanges. + widget askBeforeDiscardingEdits: aSpec askBeforeDiscardingEdits. + widget setProperty: #alwaysAccept toValue: aSpec askBeforeDiscardingEdits not. aSpec softLineWrap ifNotNil: [:b | widget wrapFlag: b]. widget isAutoFit ifTrue: [widget hideHScrollBarIndefinitely] ifFalse: [widget showHScrollBarOnlyWhenNeeded]. self register: widget id: aSpec name. widget getColorSelector: 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]. widget borderColor: Color lightGray. widget color: Color white. ^widget! From commits at source.squeak.org Sat Jan 23 11:10:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 23 11:10:35 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.85.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.85.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.85 Author: mt Time: 23 January 2016, 12:10:31.113398 pm UUID: b57d1c05-9c97-4f30-8ca1-ea36ec62e045 Ancestors: HelpSystem-Core-mt.84 Updates help browser to not consider edits in the search field. Fixes the bug with annoying dialog popups for every search request. =============== Diff against HelpSystem-Core-mt.84 =============== Item was changed: ----- Method: HelpBrowser>>buildSearchWith: (in category 'toolbuilder') ----- buildSearchWith: builder ^ builder pluggableInputFieldSpec new model: self; getText: #searchTerm; setText: #searchTerm:; help: 'Search...'; + askBeforeDiscardingEdits: false; + indicateUnacceptedChanges: false; frame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0@ (Preferences standardDefaultTextFont height * 2))); yourself! From Marcel.Taeumel at hpi.de Sat Jan 23 10:50:57 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Jan 23 11:13:29 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.665.mcz In-Reply-To: References: Message-ID: <1453546257813-4873518.post@n4.nabble.com> Works again: http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-156-mcz-td4873508.html Sorry, I think I was too cautious. :-) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-665-mcz-tp4873152p4873518.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Jan 23 10:54:58 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Jan 23 11:17:28 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.665.mcz In-Reply-To: References: <1453451144207-4873270.post@n4.nabble.com> Message-ID: <1453546498329-4873520.post@n4.nabble.com> This is the thing with global keyboard shortcuts implemented as keyboard listeners: Events get duplicated. You might want to defer the spawning of the file list tool until the next world cycle via (pseudo code): self future spawnFileList. or Project current addDeferredUIMessage: [self spawnFileList]. Or something like that. Then, this behavior is less likely unless the user insists on pressing the keys for too long (see: key repetitions). Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-665-mcz-tp4873152p4873520.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Sat Jan 23 16:13:38 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Jan 23 16:13:44 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.665.mcz In-Reply-To: <1453546257813-4873518.post@n4.nabble.com> References: <1453546257813-4873518.post@n4.nabble.com> Message-ID: <42CD76D4-B129-4DDB-9E4F-88A80DABFC77@gmail.com> Thanks!! _,,,^..^,,,_ (phone) > On Jan 23, 2016, at 2:50 AM, marcel.taeumel wrote: > > Works again: > http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-156-mcz-td4873508.html > > Sorry, I think I was too cautious. :-) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Tools-mt-665-mcz-tp4873152p4873518.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From karlramberg at gmail.com Sat Jan 23 16:21:20 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sat Jan 23 16:21:23 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.665.mcz In-Reply-To: <1453546257813-4873518.post@n4.nabble.com> References: <1453546257813-4873518.post@n4.nabble.com> Message-ID: I wonder what it would take to make Explorers update on clicking ? It's a little annoying to collapse the three to get it to update. I know I can monitor changes but that is also inconvenient... Give me convenience or give me death ;-) Best, Karl On Sat, Jan 23, 2016 at 11:50 AM, marcel.taeumel wrote: > Works again: > > http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-156-mcz-td4873508.html > > Sorry, I think I was too cautious. :-) > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Tools-mt-665-mcz-tp4873152p4873518.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/20160123/d631860b/attachment-0001.htm From eliot.miranda at gmail.com Sat Jan 23 16:37:58 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sat Jan 23 16:38:09 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: Message-ID: Hi Fabio, Chris, > On Jan 22, 2016, at 4:00 PM, Fabio Niephaus wrote: > > I think that it's not only the naming but also the direction that is > confusing. Sorry for being selfish, but I usually care about my own stuff > more than about the stuff on the server, right? > > How about: > > Keep -> 'Replace Local' > Reject -> 'Keep Local' Let's try and search for more candidates. The two word ones are clunky and long. Keep is horrible because it conflicts with the sense of "keep what's mine". But some other duals are (where left is Replace Local and right is Keep Local) Import vs Exclude Accept vs Reject Merge vs Ignore Advance vs Remain Approve vs Disapprove More of a stretch but may trigger thought: Infect vs Quarantine Ingest vs Refuse and the question mark at the end of each suggestion is implicit ;-) Any other suggestions? > This is also what most syncing services name the two options when you > start using them (e.g. iCloud or Google Chrome Sync). > > Best, > Fabio > > -- > >> On Fri, Jan 22, 2016 at 11:41 PM Chris Cunningham wrote: >> So, once again, I am bitten by these button labels. They just don't speak to me. >> >> From back in 2013, there was a description by Nice that explained it thus: >> "If you say keep, then you accept the incoming version to replace your version. >> If you say reject, then refuse the incoming version and prefer to keep your own version." >> >> Then back in 2015, another discussion about what these values mean with several options thrown out. But it looks like we still have Keep and Reject - which still confuses me. >> >> Maybe we could just relabel them the way Nice suggested: >> Keep -> 'Keep Incoming' >> Reject -> 'Reject Incoming' >> ? Maybe also update the balloon help to take Nice's exact words? >> >> I'll push a change later tonight/tomorrow to the InBox unless I hear back that this is a horrible idea. >> >> Thanks, >> cbc > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160123/c31131d4/attachment.htm From herbertkoenig at gmx.net Sat Jan 23 17:45:36 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Sat Jan 23 17:45:36 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: Message-ID: <56A3BC40.5040206@gmx.net> Hi, to me Fabios suggestion makes clear what the buttons do (I took a note because I never knew). Clearer than the other suggestions. I like it _very_ clear. Cheers, Herbert Am 23.01.2016 um 17:37 schrieb Eliot Miranda: > Hi Fabio, Chris, > > On Jan 22, 2016, at 4:00 PM, Fabio Niephaus > wrote: > >> I think that it's not only the naming but also the direction that is >> confusing. Sorry for being selfish, but I usually care about my own stuff >> more than about the stuff on the server, right? >> >> How about: >> >> Keep -> 'Replace Local' >> Reject -> 'Keep Local' > > Let's try and search for more candidates. The two word ones are > clunky and long. Keep is horrible because it conflicts with the sense > of "keep what's mine". But some other duals are (where left is > Replace Local and right is Keep Local) > > Import vs Exclude > Accept vs Reject > Merge vs Ignore > Advance vs Remain > Approve vs Disapprove > > More of a stretch but may trigger thought: > Infect vs Quarantine > Ingest vs Refuse > > and the question mark at the end of each suggestion is implicit ;-) > > Any other suggestions? > >> This is also what most syncing services name the two options when you >> start using them (e.g. iCloud or Google Chrome Sync). >> >> Best, >> Fabio >> >> -- >> >> On Fri, Jan 22, 2016 at 11:41 PM Chris Cunningham >> > wrote: >> >> So, once again, I am bitten by these button labels. They just >> don't speak to me. >> >> From back in 2013, there was a description by Nice that explained >> it thus: >> "If you say keep, then you accept the incoming version to replace >> your version. >> If you say reject, then refuse the incoming version and prefer to >> keep your own version." >> >> Then back in 2015, another discussion about what these values >> mean with several options thrown out. But it looks like we still >> have Keep and Reject - which still confuses me. >> >> Maybe we could just relabel them the way Nice suggested: >> Keep -> 'Keep Incoming' >> Reject -> 'Reject Incoming' >> ? Maybe also update the balloon help to take Nice's exact words? >> >> I'll push a change later tonight/tomorrow to the InBox unless I >> hear back that this is a horrible idea. >> >> Thanks, >> cbc >> >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160123/f96ac773/attachment.htm From tim at rowledge.org Sat Jan 23 18:13:23 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Jan 23 18:13:29 2016 Subject: [squeak-dev] The Trunk: Tools-mt.665.mcz In-Reply-To: References: <1453546257813-4873518.post@n4.nabble.com> Message-ID: > On 23-01-2016, at 8:21 AM, karl ramberg wrote: > > Give me convenience or give me death ;-) When might be a convenient time, sir? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Nihil est--in vita priore ego imperator Romanus fui = That's nothing--in a previous life I was a Roman Emperor. From commits at source.squeak.org Sat Jan 23 22:55:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 23 22:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160123225501.26253.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-January/009276.html Name: ToolBuilder-Morphic-mt.156 Ancestors: ToolBuilder-Morphic-kfr.155 Fixes a regression in pluggable trees. Now models can again govern the behavior of double-selections. FileList, for example, uses it to refresh the list of files. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009277.html Name: ToolBuilder-Morphic-mt.157 Ancestors: ToolBuilder-Morphic-mt.156 Fixes a bug where text fields did not accept when they agreed to discard their edits silently. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009278.html Name: HelpSystem-Core-mt.85 Ancestors: HelpSystem-Core-mt.84 Updates help browser to not consider edits in the search field. Fixes the bug with annoying dialog popups for every search request. ============================================= From leves at caesar.elte.hu Sun Jan 24 01:47:25 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Jan 24 01:47:31 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: Message-ID: It's easy to find out what they do, when you think like you're deciding about changes, which is actually what you're doing. You either Keep the selected change or Reject it. Levente On Fri, 22 Jan 2016, Chris Cunningham wrote: > So, once again, I am bitten by these button labels.? They just don't speak to me. > From back in 2013, there was a description by Nice that explained it thus: > "If you say?keep, then you accept the incoming version to replace your version. > If you say?reject, then refuse the incoming version and prefer to?keep?your own version." > > Then back in 2015, another discussion about what these values mean with several options thrown out.? But it looks like we still have Keep and Reject - which still confuses me. > > Maybe we could just relabel them the way Nice suggested:? > ? ? Keep -> 'Keep Incoming' > ? ? Reject -> 'Reject Incoming' > ?? Maybe also update the balloon help to take Nice's exact words? > > I'll push a change later tonight/tomorrow to the InBox unless I hear back that this is a horrible idea. > > Thanks, > cbc > > From Marcel.Taeumel at hpi.de Sun Jan 24 10:57:56 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Jan 24 11:20:34 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.665.mcz In-Reply-To: References: <1453546257813-4873518.post@n4.nabble.com> Message-ID: <1453633076296-4873658.post@n4.nabble.com> Hi Karl, this is quite simple via "self changed: #objectChanged with: anObject" in ObjectExplorer >> #currentSelection:. However, IndentingListItemMorph >> #refresh has some specific side-effects regarding the monitoring feature in Object Explorers, meaning, the color of the label will change. We should fix/decouple that. Additionally, expanded sub-sub-trees will collapse on the update as described in PluggableTreeMorph >> #updateMorph:. ...oops, somebody should also implement PluggableTreeItemNode >> #refresh. ;o) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-665-mcz-tp4873152p4873658.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From jakob.reschke at student.hpi.de Sun Jan 24 12:21:47 2016 From: jakob.reschke at student.hpi.de (Jakob Reschke) Date: Sun Jan 24 12:22:10 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: For completeness sake, let me add how other tools call their options. In git, the nearest equivalent to these buttons would be "ours" and "theirs" as a merge strategy, "local" and "remote" in the mergetool pre-resolution overview and HEAD and to-be-merged-branch's-name in the diff. The latter could read like working copy and to-be-merged-version's-name in Monticello. Mercurial apparently calls them "local" and "other". SVN calls them "mine" and "theirs". If the diff display were not unified in Monticello, you could call one version "left" and the other "right" and name the buttons after them. Kdiff3 calls them A, B and C in a three-way merge and you "choose A", for example. Now that the diff is unified and colored, it would be possible to "choose red" or "choose blue" and easily match that up with what you see. But especially now that the interest in themes came up again, the colors might be changed. IMHO the designation of the origin (local/remote/mine/ours/theirs/other) should be added to the buttons. The verb then becomes less important which is good, because apparently there are different perspectives on the operation. Also, the other tools mentioned above all name the options after their origin, so it may be easier for newcomers if Monticello did so as well. If we include a verb, my personal favourites would be "keep local" and "accept/use remote" (in that order, which would mean to swap the buttons, but I understand if that is rejected). 2016-01-23 17:37 GMT+01:00 Eliot Miranda : > Hi Fabio, Chris, > > On Jan 22, 2016, at 4:00 PM, Fabio Niephaus wrote: > > I think that it's not only the naming but also the direction that is > confusing. Sorry for being selfish, but I usually care about my own stuff > more than about the stuff on the server, right? > > How about: > > Keep -> 'Replace Local' > Reject -> 'Keep Local' > > > Let's try and search for more candidates. The two word ones are clunky and > long. Keep is horrible because it conflicts with the sense of "keep what's > mine". But some other duals are (where left is Replace Local and right is > Keep Local) > > Import vs Exclude > Accept vs Reject > Merge vs Ignore > Advance vs Remain > Approve vs Disapprove > > More of a stretch but may trigger thought: > Infect vs Quarantine > Ingest vs Refuse > > and the question mark at the end of each suggestion is implicit ;-) > > Any other suggestions? > > This is also what most syncing services name the two options when you > start using them (e.g. iCloud or Google Chrome Sync). > > Best, > Fabio > > -- > > On Fri, Jan 22, 2016 at 11:41 PM Chris Cunningham > wrote: >> >> So, once again, I am bitten by these button labels. They just don't speak >> to me. >> >> From back in 2013, there was a description by Nice that explained it thus: >> "If you say keep, then you accept the incoming version to replace your >> version. >> If you say reject, then refuse the incoming version and prefer to keep >> your own version." >> >> Then back in 2015, another discussion about what these values mean with >> several options thrown out. But it looks like we still have Keep and Reject >> - which still confuses me. >> >> Maybe we could just relabel them the way Nice suggested: >> Keep -> 'Keep Incoming' >> Reject -> 'Reject Incoming' >> ? Maybe also update the balloon help to take Nice's exact words? >> >> I'll push a change later tonight/tomorrow to the InBox unless I hear back >> that this is a horrible idea. >> >> Thanks, >> cbc >> > From karlramberg at gmail.com Sun Jan 24 12:27:23 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sun Jan 24 12:27:25 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.665.mcz In-Reply-To: <1453633076296-4873658.post@n4.nabble.com> References: <1453546257813-4873518.post@n4.nabble.com> <1453633076296-4873658.post@n4.nabble.com> Message-ID: Thanks, I'll take a look at it Best, Karl On Sun, Jan 24, 2016 at 11:57 AM, marcel.taeumel wrote: > Hi Karl, > > this is quite simple via "self changed: #objectChanged with: anObject" in > ObjectExplorer >> #currentSelection:. However, IndentingListItemMorph >> > #refresh has some specific side-effects regarding the monitoring feature in > Object Explorers, meaning, the color of the label will change. We should > fix/decouple that. Additionally, expanded sub-sub-trees will collapse on > the > update as described in PluggableTreeMorph >> #updateMorph:. > > ...oops, somebody should also implement PluggableTreeItemNode >> #refresh. > ;o) > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Tools-mt-665-mcz-tp4873152p4873658.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/20160124/e203cbdc/attachment.htm From karlramberg at gmail.com Sun Jan 24 12:34:13 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sun Jan 24 12:34:16 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: On Sun, Jan 24, 2016 at 1:21 PM, Jakob Reschke wrote: > For completeness sake, let me add how other tools call their options. > In git, the nearest equivalent to these buttons would be "ours" and > "theirs" as a merge strategy, "local" and "remote" in the mergetool > pre-resolution overview and HEAD and to-be-merged-branch's-name in the > diff. The latter could read like working copy and > to-be-merged-version's-name in Monticello. Mercurial apparently calls > them "local" and "other". SVN calls them "mine" and "theirs". > > If the diff display were not unified in Monticello, you could call one > version "left" and the other "right" and name the buttons after them. > Kdiff3 calls them A, B and C in a three-way merge and you "choose A", > for example. Now that the diff is unified and colored, it would be > possible to "choose red" or "choose blue" and easily match that up > with what you see. So we could have Blue pill and Red pill ? :-) Best, Karl > But especially now that the interest in themes came > up again, the colors might be changed. > > IMHO the designation of the origin > (local/remote/mine/ours/theirs/other) should be added to the buttons. > The verb then becomes less important which is good, because apparently > there are different perspectives on the operation. Also, the other > tools mentioned above all name the options after their origin, so it > may be easier for newcomers if Monticello did so as well. If we > include a verb, my personal favourites would be "keep local" and > "accept/use remote" (in that order, which would mean to swap the > buttons, but I understand if that is rejected). > > 2016-01-23 17:37 GMT+01:00 Eliot Miranda : > > Hi Fabio, Chris, > > > > On Jan 22, 2016, at 4:00 PM, Fabio Niephaus wrote: > > > > I think that it's not only the naming but also the direction that is > > confusing. Sorry for being selfish, but I usually care about my own stuff > > more than about the stuff on the server, right? > > > > How about: > > > > Keep -> 'Replace Local' > > Reject -> 'Keep Local' > > > > > > Let's try and search for more candidates. The two word ones are clunky > and > > long. Keep is horrible because it conflicts with the sense of "keep > what's > > mine". But some other duals are (where left is Replace Local and right > is > > Keep Local) > > > > Import vs Exclude > > Accept vs Reject > > Merge vs Ignore > > Advance vs Remain > > Approve vs Disapprove > > > > More of a stretch but may trigger thought: > > Infect vs Quarantine > > Ingest vs Refuse > > > > and the question mark at the end of each suggestion is implicit ;-) > > > > Any other suggestions? > > > > This is also what most syncing services name the two options when you > > start using them (e.g. iCloud or Google Chrome Sync). > > > > Best, > > Fabio > > > > -- > > > > On Fri, Jan 22, 2016 at 11:41 PM Chris Cunningham < > cunningham.cb@gmail.com> > > wrote: > >> > >> So, once again, I am bitten by these button labels. They just don't > speak > >> to me. > >> > >> From back in 2013, there was a description by Nice that explained it > thus: > >> "If you say keep, then you accept the incoming version to replace your > >> version. > >> If you say reject, then refuse the incoming version and prefer to keep > >> your own version." > >> > >> Then back in 2015, another discussion about what these values mean with > >> several options thrown out. But it looks like we still have Keep and > Reject > >> - which still confuses me. > >> > >> Maybe we could just relabel them the way Nice suggested: > >> Keep -> 'Keep Incoming' > >> Reject -> 'Reject Incoming' > >> ? Maybe also update the balloon help to take Nice's exact words? > >> > >> I'll push a change later tonight/tomorrow to the InBox unless I hear > back > >> that this is a horrible idea. > >> > >> Thanks, > >> cbc > >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/d12bdc35/attachment.htm From karlramberg at gmail.com Sun Jan 24 12:35:30 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sun Jan 24 12:35:32 2016 Subject: [squeak-dev] The Trunk: Tools-mt.665.mcz In-Reply-To: References: <1453546257813-4873518.post@n4.nabble.com> Message-ID: :-) Best, Karl Best, Karl On Sat, Jan 23, 2016 at 7:13 PM, tim Rowledge wrote: > > > On 23-01-2016, at 8:21 AM, karl ramberg wrote: > > > > Give me convenience or give me death ;-) > > When might be a convenient time, sir? deathly tones> > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Useful Latin Phrases:- Nihil est--in vita priore ego imperator Romanus fui > = That's nothing--in a previous life I was a Roman Emperor. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/6ee4c5be/attachment.htm From bert at freudenbergs.de Sun Jan 24 14:31:27 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Sun Jan 24 14:31:32 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: Message-ID: <2302BA0E-2CAB-4BD9-B196-CD9C2A1EE71D@freudenbergs.de> On 23.01.2016, at 17:37, Eliot Miranda wrote: > > Any other suggestions? ?Keep mine? / ?Accept incoming? ? or shorter: ?Mine? / ?Incoming" ? and make the balloon help a little longer ?Keep the version in the image, rejecting the incoming change? ?Accept the incoming change, replacing the version in my image? - 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/20160124/a61c385f/smime.bin From eliot.miranda at gmail.com Sun Jan 24 16:34:36 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Jan 24 16:34:42 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: <2302BA0E-2CAB-4BD9-B196-CD9C2A1EE71D@freudenbergs.de> References: <2302BA0E-2CAB-4BD9-B196-CD9C2A1EE71D@freudenbergs.de> Message-ID: > On Jan 24, 2016, at 6:31 AM, Bert Freudenberg wrote: > >> On 23.01.2016, at 17:37, Eliot Miranda wrote: >> >> Any other suggestions? > > ?Keep mine? / ?Accept incoming? > > ? or shorter: > > ?Mine? / ?Incoming" +1. The two word ones are too long for button labels. But I much prefer "Mine" and "Theirs" because they're both short, both a pair, both intuitive and both common to another dvcs. > > ? and make the balloon help a little longer > ?Keep the version in the image, rejecting the incoming change? > ?Accept the incoming change, replacing the version in my image? > > - Bert - > > > From eliot.miranda at gmail.com Sun Jan 24 16:36:48 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Jan 24 16:36:53 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: > On Jan 24, 2016, at 4:21 AM, Jakob Reschke wrote: > > For completeness sake, let me add how other tools call their options. > In git, the nearest equivalent to these buttons would be "ours" and > "theirs" as a merge strategy, "local" and "remote" in the mergetool > pre-resolution overview and HEAD and to-be-merged-branch's-name in the > diff. The latter could read like working copy and > to-be-merged-version's-name in Monticello. Mercurial apparently calls > them "local" and "other". SVN calls them "mine" and "theirs". > > If the diff display were not unified in Monticello, you could call one > version "left" and the other "right" and name the buttons after them. > Kdiff3 calls them A, B and C in a three-way merge and you "choose A", > for example. Now that the diff is unified and colored, it would be > possible to "choose red" or "choose blue" and easily match that up > with what you see. But especially now that the interest in themes came > up again, the colors might be changed. > > IMHO the designation of the origin > (local/remote/mine/ours/theirs/other) should be added to the buttons. > The verb then becomes less important which is good, because apparently > there are different perspectives on the operation. Also, the other > tools mentioned above all name the options after their origin, so it > may be easier for newcomers if Monticello did so as well. If we > include a verb, my personal favourites would be "keep local" and > "accept/use remote" (in that order, which would mean to swap the > buttons, but I understand if that is rejected). Thanks Jakob. I didn't think of nouns, only verbs. I like "Mine" or "Ours" vs "Theirs". > > 2016-01-23 17:37 GMT+01:00 Eliot Miranda : >> Hi Fabio, Chris, >> >> On Jan 22, 2016, at 4:00 PM, Fabio Niephaus wrote: >> >> I think that it's not only the naming but also the direction that is >> confusing. Sorry for being selfish, but I usually care about my own stuff >> more than about the stuff on the server, right? >> >> How about: >> >> Keep -> 'Replace Local' >> Reject -> 'Keep Local' >> >> >> Let's try and search for more candidates. The two word ones are clunky and >> long. Keep is horrible because it conflicts with the sense of "keep what's >> mine". But some other duals are (where left is Replace Local and right is >> Keep Local) >> >> Import vs Exclude >> Accept vs Reject >> Merge vs Ignore >> Advance vs Remain >> Approve vs Disapprove >> >> More of a stretch but may trigger thought: >> Infect vs Quarantine >> Ingest vs Refuse >> >> and the question mark at the end of each suggestion is implicit ;-) >> >> Any other suggestions? >> >> This is also what most syncing services name the two options when you >> start using them (e.g. iCloud or Google Chrome Sync). >> >> Best, >> Fabio >> >> -- >> >> On Fri, Jan 22, 2016 at 11:41 PM Chris Cunningham >> wrote: >>> >>> So, once again, I am bitten by these button labels. They just don't speak >>> to me. >>> >>> From back in 2013, there was a description by Nice that explained it thus: >>> "If you say keep, then you accept the incoming version to replace your >>> version. >>> If you say reject, then refuse the incoming version and prefer to keep >>> your own version." >>> >>> Then back in 2015, another discussion about what these values mean with >>> several options thrown out. But it looks like we still have Keep and Reject >>> - which still confuses me. >>> >>> Maybe we could just relabel them the way Nice suggested: >>> Keep -> 'Keep Incoming' >>> Reject -> 'Reject Incoming' >>> ? Maybe also update the balloon help to take Nice's exact words? >>> >>> I'll push a change later tonight/tomorrow to the InBox unless I hear back >>> that this is a horrible idea. >>> >>> Thanks, >>> cbc > From vaidasd at gmail.com Sun Jan 24 18:06:11 2016 From: vaidasd at gmail.com (=?UTF-8?Q?Vaidotas_Did=C5=BEbalis?=) Date: Sun Jan 24 18:06:55 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: Hello, let's change labels from 'old: ' to 'existing: ', and 'new: ' to 'pending: '. Vaidotas -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/2e00bf9b/attachment.htm From eliot.miranda at gmail.com Sun Jan 24 18:41:11 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Jan 24 18:41:14 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: On Sun, Jan 24, 2016 at 10:06 AM, Vaidotas Did?balis wrote: > Hello, > let's change labels from 'old: ' to 'existing: ', and 'new: ' to 'pending: > '. > +1. 'current' is a little shorter than 'existing', 'extant' shorter still, but a little unusual. But I love 'pending' because it doesn't presuppose age, and sometimes one is merging something older than the existing change. > Vaidotas > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/c0b493fc/attachment.htm From cunningham.cb at gmail.com Sun Jan 24 19:31:49 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Sun Jan 24 19:31:52 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: On Sun, Jan 24, 2016 at 10:41 AM, Eliot Miranda wrote: > > > On Sun, Jan 24, 2016 at 10:06 AM, Vaidotas Did?balis > wrote: > >> Hello, >> let's change labels from 'old: ' to 'existing: ', and 'new: ' to >> 'pending: '. >> > > +1. 'current' is a little shorter than 'existing', 'extant' shorter > still, but a little unusual. But I love 'pending' because it doesn't > presuppose age, and sometimes one is merging something older than the > existing change. > > 'current' I like (mine is better - unless it isn't - it's just what was there). 'pending' is ok - but I would forget what it means in about a year. 'incoming' is less forgettable. And the baloon help definitely needs to be updated. I'm not signing up yet (until I figure out how hard it is), but I would also love to have the two button color-coded to show which code in the diff pane relates to which button. Same with the author initials/dates. That would help significantly in reducing the confusion as well. Not mention let us change the colors - and I right that the red code is the proposed new code, and the blue crossed out code is the code going away? Why those colors? But that I'll leave for others to debate - if there is any desire. -chris Vaidotas >> > > _,,,^..^,,,_ > best, Eliot > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/082be6eb/attachment-0001.htm From cunningham.cb at gmail.com Sun Jan 24 19:34:52 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Sun Jan 24 19:34:57 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: Ok, starting to look at the code. Should these name changes also apply to the top level buttons, currectly called 'Rest Local' and 'Rest Remote'? Or, should the bottom buttons reflect that word choice - Local and Remote? One argument against it is that I usually work off of a local directory - so both are 'local' - but that is an easy fix for my thinking. -cbc On Sun, Jan 24, 2016 at 11:31 AM, Chris Cunningham wrote: > > > On Sun, Jan 24, 2016 at 10:41 AM, Eliot Miranda > wrote: > >> >> >> On Sun, Jan 24, 2016 at 10:06 AM, Vaidotas Did?balis >> wrote: >> >>> Hello, >>> let's change labels from 'old: ' to 'existing: ', and 'new: ' to >>> 'pending: '. >>> >> >> +1. 'current' is a little shorter than 'existing', 'extant' shorter >> still, but a little unusual. But I love 'pending' because it doesn't >> presuppose age, and sometimes one is merging something older than the >> existing change. >> >> > 'current' I like (mine is better - unless it isn't - it's just what was > there). > 'pending' is ok - but I would forget what it means in about a year. > 'incoming' is less forgettable. > And the baloon help definitely needs to be updated. > > I'm not signing up yet (until I figure out how hard it is), but I would > also love to have the two button color-coded to show which code in the diff > pane relates to which button. Same with the author initials/dates. That > would help significantly in reducing the confusion as well. Not mention > let us change the colors - and I right that the red code is the proposed > new code, and the blue crossed out code is the code going away? Why those > colors? But that I'll leave for others to debate - if there is any desire. > -chris > > Vaidotas >>> >> >> _,,,^..^,,,_ >> best, Eliot >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/678b14ca/attachment.htm From cunningham.cb at gmail.com Sun Jan 24 19:43:11 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Sun Jan 24 19:43:14 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: On Sun, Jan 24, 2016 at 11:34 AM, Chris Cunningham wrote: > Ok, starting to look at the code. Should these name changes also apply to > the top level buttons, currectly called 'Rest Local' and 'Rest Remote'? > Or, should the bottom buttons reflect that word choice - Local and Remote? > > For that matter, ALL of the code is written around Remote and Local. Every bit of it - just several of the buttons and baloon help does not talk about Remote and Local. If we want to go to Current and Incoming, then we should probably update the code to match, right? -cbc -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/8623f832/attachment.htm From asqueaker at gmail.com Sun Jan 24 20:59:04 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Jan 24 20:59:46 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: Message-ID: > Let's try and search for more candidates. The two word ones are clunky +1. We want to balance a clean UI with one that is clear and obvious what it does. What about the balloon help for those? I feel the balloon help is very good UI feature to let the user "drill deeper" into the UI widgets to understand what they do, without intruding too much into the UI once the buttons are learned. I think we should keep utilizing this capability of the IDE to preserve the single-word elegance of whist expanding with any necessary clarity in the balloons. Presently, those balloon hints say, "Keep the selected change" and "Reject the selected change." If we need to choose new button labels, we should do it together with these balloon helps. From gettimothy at zoho.com Sun Jan 24 21:25:13 2016 From: gettimothy at zoho.com (gettimothy) Date: Sun Jan 24 21:25:18 2016 Subject: [squeak-dev] Re: Proposal for a 'category browser' method on Browser class In-Reply-To: <1453468095652-4873347.post@n4.nabble.com> References: <15251279694.c0be020963234.2341686453061756263@zoho.com> <1453468095652-4873347.post@n4.nabble.com> Message-ID: <1527586c97e.c834ca7874230.4173447404102134758@zoho.com> please update. You can now browse message categories via ToolSet >> #browseClass:category: ToolSet >> #browseMessageCategory:inClass: It worked perfectly. thank you. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/f056a4c7/attachment.htm From jeffgonis at fastmail.com Sun Jan 24 22:23:07 2016 From: jeffgonis at fastmail.com (Jeff Gonis) Date: Sun Jan 24 22:23:11 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> Message-ID: <1453674187.3081817.501259658.30AC9D5B@webmail.messagingengine.com> Hi Everyone, Thanks first off for the kind response.? I hope to do more demonstrations in the future and report back about those. Unfortunately I did not make a recording of this demo, as the setup in the meeting room was somewhat primitive.? To be honest though, the demo was aimed at people who had no experience with Smalltalk whatsoever and so it was pretty basic. I also tried to keep it short and sweet so it was probably only 20-25 minutes.? As I build up to a more full-featured demo I will work to figure out a recording setup so that I can share it with the list. My main motivation in sharing my story was thinking back a few months to a discussion on the list where some of the regular Squeakers lamented feeling a bit down about the usage of squeak and the community surrounding it, feeling sort of like they were shouting into the void and no one was using the things being developed.? So I just wanted to share a small success story to let people know that their work is being used, seen, and appreciated out in the "real world" (whatever that means). Anyway, thanks again to everyone for all the work that has gone into Squeak, and I hope to write back again with an update on another successful demo! Jeff On Fri, Jan 22, 2016, at 02:46 AM, Dimitris Chloupis wrote: > "Will you be publishing this Package in the SqueakMap or somewhere? > Could this work for other languages like Haskell to Smalltalk or > Haskell to C to Smalltalk?" Yes I will publish it in github. Yes it > can work for any language that gives access to memory mapped files . I > will implement it also for python. I currently use sockets for this > IPC , which allow me to use python libraries from pharo. But of course > sockets are nowhere as fast as shared memory. However my > implementation is not a magic pill and will need modifications to > satisfy personal needs, but I plan to document it with a set of video > tutorials that they will explain how it works. Currently you can use a > C++ library from pharo/squeak if you export it as a C library so it > does not do name mangling , however my approach with memory mapped > files does not allow you only to use C++ as a library but even "hack" > inside executables and even store the live state of those executables > together with the live state of your image. Essentially it will allows > to run pharo with C++ side by side and interface between the two in > many different ways. > > On Fri, Jan 22, 2016 at 4:20 AM Kjell Godo > wrote: >> Will you be publishing this Package in the SqueakMap or somewhere? >> Could this work for other languages like Haskell to Smalltalk or >> Haskell to C to Smalltalk? I have thought about trying this but i >> don't do C or C++ Although i did do a Bank kiosk in TurboC in the >> 1980s TuboC was nice ? ? it was good >> >> i got scarred for life trying to use an early Microsoft C compiler in >> the mid 1980s that was just awrful people in that class at the UW >> were dropping like flies one?girl was hiding under one of the tables >> in the lab on the final day the professor was getting pretty?sick and >> tired of getting software handed in?that didn't work so he was giving >> out zero grades for the class project to anyone who handed in a class >> project in Microsoft c that didn't work and i can tell you there were >> a lot of zeros handed?out?that day i think most of us got zeros even >> though we worked really hard using a c compiler that basically was >> pretty much just emitting random sequences of semi executable drivel >> i tried using the UNIX C compiler to get it going and then port it >> back to Microsoft c crashed and burned out of time no way hozay >> yyyyyyou get zero well if i was quick i would have gotten down on all >> fours and gone under the table with the girl she was a jolly?Asian >> girl at least i could have gotten a pretty good quip?out of the deal >> >> so >> >> i swore off of?c right then and there i swore off of?it for life the >> instant that zero hit the instant i could see zero?coming and my >> name on it and?no way to dodge it left just a helpless?prisoner of >> war kneeling?in the headlights with hands behind?my head that moment >> when you just give up because haint nothing more you can do but just >> get hit and it's too late to cheat too late?to band together with >> the cheaters and collaborate they probably all got zeroed out too >> anyway for being too similar or maybe the prof just rolled up?his >> eyes up and over and back?and said caint give every dang one of em?a >> zero today and i swore that on my death bed?i would say Haint >> touched it since >> >> but TurboC was pretty good yeah TurboC was almost Smalltalk like yeah >> TurboC was all right i made a bank kiosk out of TurboC?and >> TurboProlog which was noted for being error free >> >> probably Borland figured that based on all?our heinous experiences >> with c that building a C compiler that works a C compiler?that actual >> works would be pretty near to a wide open?blue ocean deal ie no >> competition exists >> >> >> >> >> On Thursday, January 21, 2016, Dimitris Chloupis >> wrote: >>> Great job, I think they will be suprised even more that you can use >>> smalltalk as scripting language for C++ projects which is currently >>> what I do :) Though I am using pharo instead of squeak , there is >>> little reason for the same concepts not to apply for squeak . I am >>> actually trying to make a shared memory(based on memory mapped >>> files)? frameworks where pharo shares memory with a c++ executable >>> and they can talk to each other, shared data and live state and use >>> each other's functions and libraries , sort of C++ being pharo's >>> best buddy and vice versa ;) >>> >>> On Thu, Jan 21, 2016 at 10:42 PM Jeff Gonis >>> wrote: >>>> Hi Squeakers, >>>> >>>> I just wanted to write in with a quick report on a recent demonstration >>>> I did for my my colleagues at work. >>>> >>>> At the company I work for we are given one Friday a month to work on any >>>> sort of project that interests us, whether or not it is related to the >>>> work we do for the company, and so I usually end up playing around with >>>> a project in Squeak. As part of the deal, we are asked to occasionally >>>> present what we are working on to our peers, in the hopes that they can >>>> do some learning from our projects as well. >>>> >>>> I didn't have any projects ready to demonstrate in a compelling way so I >>>> decided to instead just show off Squeak itself and give people kind of >>>> an introduction to Smalltalk and what I find so compelling about it. I >>>> decided to go ahead and live code a version of the bouncing atoms morph, >>>> using submorphs for the atoms, and developing the code as the parent >>>> morph "stepped" away on screen, updating its behavior seamlessly.? I >>>> demonstrated adding variables and method without stopping, changing the >>>> methods and debugging them when I made mistakes, changing the entire >>>> class of the onscreen morphs as the simulation ran and some of the cool >>>> things about the language itself as well, like "build-your-own" if >>>> statements and such. >>>> >>>> Overall I think that I kind of blew a bunch of people's minds, what with >>>> our day to day work being in C++ and always being in that >>>> edit-compile-run-test cycle. Several people came up to me afterwards to >>>> say how much they enjoyed seeing a different view of programming and >>>> what it could represent and I hope to put together a few more >>>> demonstrations in the coming months. >>>> >>>> Anyway, I just wanted to let you know that Smalltalk is still surprising >>>> people and exceeding their expectations 35 years on, and a large part of >>>> it is thanks to all the great work that goes into Squeak from its >>>> contributors. >>>> >>>> Thanks for your efforts! >>>> Jeff >>>> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160124/c2c06be8/attachment.htm From tim at rowledge.org Sun Jan 24 22:59:45 2016 From: tim at rowledge.org (tim Rowledge) Date: Sun Jan 24 22:59:50 2016 Subject: [squeak-dev] Monticello merge - what does Keep/Reject mean again? In-Reply-To: References: <8cc1fab3d2cd42b9947c271638c240ae@MX2015-DAG2.hpi.uni-potsdam.de> Message-ID: There?s an alternative way of handling this kind of issue and we even have a tool that sort of does it. Consider the Dual change sorter where one can move changes from one changeset to another by class, or by individual method and possibly other ways I don?t recall. Perhaps the list of conflicts in a merge could be better displayed with a list of conflicts on the left, an originally empty list on the right and buttons/drag/menu options to move them to the ?accept into my life? list on the right. This would provide a very clear indication of what is going to be loaded, with plenty of time to change one?s mind if needed. I used something like this in the VMMakerTool for similar reasons. I?d also like to urge some thought about what to do with methods where one already has a change but wants some of the incoming change too; an option to edit & add-to-load would be nice. Perhaps something relatively simple like adding the chosen method to a method browser just for those cases, with a nice label saying ?deal with in a moment?? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: NBR: Unconditional No BRanch From btc at openinworld.com Mon Jan 25 01:07:58 2016 From: btc at openinworld.com (Ben Coman) Date: Mon Jan 25 01:08:22 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: <1453674187.3081817.501259658.30AC9D5B@webmail.messagingengine.com> References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> <1453674187.3081817.501259658.30AC9D5B@webmail.messagingengine.com> Message-ID: On Mon, Jan 25, 2016 at 6:23 AM, Jeff Gonis wrote: > Hi Everyone, > > Thanks first off for the kind response. I hope to do more demonstrations in > the future and report back about those. Unfortunately I did not make a > recording of this demo, as the setup in the meeting room was somewhat > primitive. To be honest though, the demo was aimed at people who had no > experience with Smalltalk whatsoever and so it was pretty basic. Well that is the target market ;) There are more people not-using Smalltalk than are. > I also tried to keep it short and sweet so it was probably only 20-25 minutes. > I build up to a more full-featured demo I will work to figure out a > recording setup so that I can share it with the list. I think 20 minutes is a good length for office lunchtime, but even then, a series of short videos is better than one long one. https://www.vidyard.com/blog/optimal-length-for-b2b-video-funnel/ cheers -ben > > My main motivation in sharing my story was thinking back a few months to a > discussion on the list where some of the regular Squeakers lamented feeling > a bit down about the usage of squeak and the community surrounding it, > feeling sort of like they were shouting into the void and no one was using > the things being developed. So I just wanted to share a small success story > to let people know that their work is being used, seen, and appreciated out > in the "real world" (whatever that means). > > Anyway, thanks again to everyone for all the work that has gone into Squeak, > and I hope to write back again with an update on another successful demo! > > Jeff > > > On Fri, Jan 22, 2016, at 02:46 AM, Dimitris Chloupis wrote: > > "Will you be publishing this Package in the SqueakMap or somewhere? > Could this work for other languages like > Haskell to Smalltalk > or > Haskell to C to Smalltalk?" > Yes I will publish it in github. Yes it can work for any language that gives > access to memory mapped files . I will implement it also for python. I > currently use sockets for this IPC , which allow me to use python libraries > from pharo. But of course sockets are nowhere as fast as shared memory. > However my implementation is not a magic pill and will need modifications to > satisfy personal needs, but I plan to document it with a set of video > tutorials that they will explain how it works. Currently you can use a C++ > library from pharo/squeak if you export it as a C library so it does not do > name mangling , however my approach with memory mapped files does not allow > you only to use C++ as a library but even "hack" inside executables and even > store the live state of those executables together with the live state of > your image. Essentially it will allows to run pharo with C++ side by side > and interface between the two in many different ways. > > On Fri, Jan 22, 2016 at 4:20 AM Kjell Godo wrote: > > Will you be publishing this Package in the SqueakMap or somewhere? > Could this work for other languages like > Haskell to Smalltalk > or > Haskell to C to Smalltalk? > I have thought about trying this but i don't do C or C++ > Although i did do a Bank kiosk in TurboC in the 1980s > TuboC was nice it was good > > i got scarred for life trying to use an early > Microsoft C compiler > in the mid 1980s > that was just awrful > people in that class at the UW were dropping like flies > one girl was hiding under one of the tables in the lab on the final day > the professor was getting pretty sick and tired > of getting software handed in that didn't work > so he was giving out zero grades for the class project to anyone > who handed in a class project in Microsoft c > that didn't work > and i can tell you > there were a lot of zeros handed out that day > i think most of us got zeros > even though we worked really hard > using a c compiler that > basically was pretty much just emitting > random sequences of semi executable drivel > i tried using the UNIX C compiler to get it going > and then port it back to > Microsoft c > crashed and burned > out of time > no way hozay > yyyyyyou get zero > well if i was quick > i would have gotten down on all fours > and gone under the table with the girl > she was a jolly Asian girl > at least i could have gotten > a pretty good quip out of the deal > > so > > i swore off of c > right then and there > i swore off of it > for life > the instant that zero hit > the instant i could see zero coming and my name on it > and no way to dodge it left > just a helpless prisoner of war kneeling in the headlights > with hands behind my head > that moment when you just give up > because haint nothing more you can do > but just get hit > and it's too late to cheat > too late to band together with the cheaters and collaborate > they probably all got zeroed out too anyway for being too similar > or maybe the prof just rolled up his eyes up and over and back and said > caint give every dang one of em a zero today > and i swore that on my death bed i would say > Haint touched it since > > but TurboC was pretty good > yeah TurboC was almost Smalltalk like > yeah TurboC was all right > i made a bank kiosk out of > TurboC and TurboProlog > which was noted for being > error free > > probably Borland figured that > based on all our heinous experiences with c > that building a C compiler that works > a C compiler that actual works > would be pretty near to a > wide open blue ocean deal > ie > no competition exists > > > > > On Thursday, January 21, 2016, Dimitris Chloupis > wrote: > > Great job, I think they will be suprised even more that you can use > smalltalk as scripting language for C++ projects which is currently what I > do :) > Though I am using pharo instead of squeak , there is little reason for the > same concepts not to apply for squeak . I am actually trying to make a > shared memory(based on memory mapped files) frameworks where pharo shares > memory with a c++ executable and they can talk to each other, shared data > and live state and use each other's functions and libraries , sort of C++ > being pharo's best buddy and vice versa ;) > > On Thu, Jan 21, 2016 at 10:42 PM Jeff Gonis wrote: > > Hi Squeakers, > > I just wanted to write in with a quick report on a recent demonstration > I did for my my colleagues at work. > > At the company I work for we are given one Friday a month to work on any > sort of project that interests us, whether or not it is related to the > work we do for the company, and so I usually end up playing around with > a project in Squeak. As part of the deal, we are asked to occasionally > present what we are working on to our peers, in the hopes that they can > do some learning from our projects as well. > > I didn't have any projects ready to demonstrate in a compelling way so I > decided to instead just show off Squeak itself and give people kind of > an introduction to Smalltalk and what I find so compelling about it. I > decided to go ahead and live code a version of the bouncing atoms morph, > using submorphs for the atoms, and developing the code as the parent > morph "stepped" away on screen, updating its behavior seamlessly. I > demonstrated adding variables and method without stopping, changing the > methods and debugging them when I made mistakes, changing the entire > class of the onscreen morphs as the simulation ran and some of the cool > things about the language itself as well, like "build-your-own" if > statements and such. > > Overall I think that I kind of blew a bunch of people's minds, what with > our day to day work being in C++ and always being in that > edit-compile-run-test cycle. Several people came up to me afterwards to > say how much they enjoyed seeing a different view of programming and > what it could represent and I hope to put together a few more > demonstrations in the coming months. > > Anyway, I just wanted to let you know that Smalltalk is still surprising > people and exceeding their expectations 35 years on, and a large part of > it is thanks to all the great work that goes into Squeak from its > contributors. > > Thanks for your efforts! > Jeff > > > > > > > > From commits at source.squeak.org Mon Jan 25 03:37:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 25 03:37:57 2016 Subject: [squeak-dev] The Trunk: System-eem.789.mcz Message-ID: Eliot Miranda uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-eem.789.mcz ==================== Summary ==================== Name: System-eem.789 Author: eem Time: 25 January 2016, 7:37:27.08369 pm UUID: b86ef820-368a-49a4-925d-ea983158737f Ancestors: System-mt.788 Fix vmStatisticsReportString given recent clock changes. When available, use vmParameterAt: 20 to get the utc microsecond clock at startup, otherwise defer to the eventMillisecondClock. Remember to nil out LastStats on start-up to eliminate those whacky first queries where LastStats is left over from a prior snapshot. Also don't bother reestablishing event forwarding to Smalltalk unless starting up. =============== Diff against System-mt.788 =============== Item was removed: - ----- Method: SmalltalkImage class>>startUp (in category 'class initialization') ----- - startUp - SystemChangeNotifier uniqueInstance notify: Smalltalk ofAllSystemChangesUsing: #event:! Item was added: + ----- Method: SmalltalkImage class>>startUp: (in category 'class initialization') ----- + startUp: resuming + resuming ifTrue: + [LastStats := nil. + SystemChangeNotifier uniqueInstance notify: Smalltalk ofAllSystemChangesUsing: #event:]! Item was changed: ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') ----- vmStatisticsReportString "(Workspace new contents: Smalltalk vmStatisticsReportString) openLabel: 'VM Statistics'" "StringHolderView open: (StringHolder new contents: Smalltalk vmStatisticsReportString) label: 'VM Statistics'" + | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | - | params onSpur oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | params := self getVMParameters. - onSpur := (params at: 41 ifAbsent: [ 0 ]) anyMask: 16. oldSpaceEnd := params at: 1. youngSpaceEnd := params at: 2. memorySize := params at: 3. fullGCs := params at: 7. fullGCTime := params at: 8. incrGCs := params at: 9. incrGCTime := params at: 10. tenureCount := params at: 11. + upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in later Spur VMs" + ifTrue: [Time utcMicrosecondClock - (params at: 20) + 500 // 1000] + ifFalse: [Time eventMillisecondClock]. "Fall back on old microsecond clock; Good for 47.5 days" - upTime := Time millisecondClockValue. str := WriteStream on: (String new: 700). str nextPutAll: 'uptime '; print: (upTime / 1000 / 60 // 60); nextPut: $h; print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. str nextPutAll: 'memory '; nextPutAll: memorySize asStringWithCommas; nextPutAll: ' bytes'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. + youngSize := params at: 44. - youngSize := onSpur - ifTrue: [params at: 44 "eden size"] "Spur" - ifFalse: [youngSpaceEnd - oldSpaceEnd]. "Squeak V3" str nextPutAll: ' young '; nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes ('; print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. + youngSize := youngSpaceEnd. "used eden" + freeSize := (params at: 54) + (params at: 44) - youngSize. + used := youngSize + oldSpaceEnd - freeSize. - onSpur ifTrue: [youngSize := youngSpaceEnd "used eden"]. - freeSize := onSpur - ifTrue: [(params at: 54) + (params at: 44) - youngSize] "Spur" - ifFalse: [memorySize - youngSpaceEnd] "Squeak V3". - used := onSpur - ifTrue: [youngSize + oldSpaceEnd - freeSize] "Spur" - ifFalse: [youngSpaceEnd]. "Squeak V3" str nextPutAll: ' used '; nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. str nextPutAll: ' free '; nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes ('; print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. str nextPutAll: 'GCs '; nextPutAll: (fullGCs + incrGCs) asStringWithCommas. fullGCs + incrGCs > 0 ifTrue: [ str nextPutAll: ' ('; print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; nextPutAll: ' ms between GCs)' ]. str cr. str nextPutAll: ' full '; nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms ('; print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime)'. fullGCs = 0 ifFalse: [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms']. str cr. str nextPutAll: ' incr '; nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms ('; print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse: [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)']. str cr. LastStats ifNil: [LastStats := Array new: 6] ifNotNil: [ upTime2 := upTime - (LastStats at: 1). fullGCs2 := fullGCs - (LastStats at: 2). fullGCTime2 := fullGCTime - (LastStats at: 3). incrGCs2 := incrGCs - (LastStats at: 4). incrGCTime2 := incrGCTime - (LastStats at: 5). tenureCount2 := tenureCount - (LastStats at: 6). str nextPutAll: self textMarkerForShortReport ; nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. fullGCs2 + incrGCs2 > 0 ifTrue: [ str nextPutAll: ' ('; print: upTime2 // (fullGCs2 + incrGCs2); nextPutAll: ' ms between GCs)'. ]. str cr. str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr. str nextPutAll: ' full '; nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms ('; print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime)'. fullGCs2 = 0 ifFalse: [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms']. str cr. str nextPutAll: ' incr '; nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms ('; print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime), avg '. incrGCs2 > 0 ifTrue: [ str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms' ]. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount2 asStringWithCommas. tenureCount2 = 0 ifFalse: [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)']. str cr. ]. LastStats at: 1 put: upTime. LastStats at: 2 put: fullGCs. LastStats at: 3 put: fullGCTime. LastStats at: 4 put: incrGCs. LastStats at: 5 put: incrGCTime. LastStats at: 6 put: tenureCount. ^ str contents ! From commits at source.squeak.org Mon Jan 25 05:28:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 25 05:28:44 2016 Subject: [squeak-dev] The Trunk: SystemReporter-eem.25.mcz Message-ID: Eliot Miranda uploaded a new version of SystemReporter to project The Trunk: http://source.squeak.org/trunk/SystemReporter-eem.25.mcz ==================== Summary ==================== Name: SystemReporter-eem.25 Author: eem Time: 25 January 2016, 9:28:23.158198 pm UUID: 3f5c4a14-93be-4b52-adc1-05e51adf7f5e Ancestors: SystemReporter-mt.24 Update David's lovely reportVMParameters: to reflect reality and a few up-coming features. =============== Diff against SystemReporter-mt.24 =============== Item was changed: ----- Method: SystemReporter>>reportVMParameters: (in category 'reporting') ----- reportVMParameters: aStream + | vmParameters isStack isCog isSpur | - | vmParameters isCog isSpur | self header: 'Virtual Machine Parameters' on: aStream. vmParameters := Smalltalk vm getVMParameters. + isStack := (vmParameters at: 42 ifAbsent: [0]) ~= 0. "42 = number of stack pages available" + isCog := isStack and: [(vmParameters at: 46) ~= 0]. "46 is machine code zone size" + isSpur := isStack and: [(vmParameters at: 41) anyMask: 2r10000]. "41 is imageFormatVersion for the VM; bit 16 is the Spur bit" - isCog := (vmParameters at: 41 ifAbsent: [0]) anyMask: 1. "determine Cog/Stack via bit 0, requires native float order." - isSpur := isCog and: [(vmParameters at: 41 ifAbsent: [0]) anyMask: 2r10000]. "bit 16 is the Spur bit" (isSpur ifFalse: [#( 1 'size of old space' 2 'size of young+old space' + 3 'size of memory' + 4 'allocationCount' + 5 'allocations between GCs' + 6 'survivor count tenuring threshold')] - 3 'size of memory')] ifTrue: [#( 1 'size of old space' 2 'size of new space' 3 'size of heap')]), - (isSpur - ifFalse: - [#( 4 'allocationCount' - 5 'allocations between GCs' - 6 'survivor count tenuring threshold')] - ifTrue: [#()]), #( 7 'full GCs since startup' 8 'total milliseconds in full GCs since startup'), (isSpur ifFalse: [#( 9 'incremental GCs since startup' 10 'total milliseconds in incremental GCs since startup')] ifTrue: [#( 9 'scavenging GCs since startup' 10 'total milliseconds in scavenging GCs since startup')]), #( 11 'tenures of surving objects since startup'), + {12 to: 19. 'specific to the translating VM'}, + #( 20 'utc microseconds at startup (if non-zero)' + 21 'root table size' - (isCog - ifFalse: - [#( 12 'specific to the translating VM' - 13 'specific to the translating VM' - 14 'specific to the translating VM' - 15 'specific to the translating VM' - 16 'specific to the translating VM' - 17 'specific to the translating VM' - 18 'specific to the translating VM' - 19 'specific to the translating VM' - 20 'specific to the translating VM')] - ifTrue: - [{12 to: 20. 'specific to the translating VM'}]), - #( 21 'root table size' 22 'root table overflows since startup' 23 'bytes of extra memory to reserve for VM buffers, plugins, etc.' + 24 'free memory threshold above which object memory will be shrunk' - 24 'memory threshold above which shrinking object memory' 25 'memory headroom when growing object memory'), + (isStack - (isCog ifFalse: + [#( 26 'interruptChecksEveryNms - force an ioProcessEvents every N milliseconds, in case the image is not calling getNextEvent often')] - [#( 26 'interruptChecksEveryNms - force an ioProcessEvents every N milliseconds, in case the image is not calling getNextEvent often')] ifTrue: + [#( 26 'heartbeat period (ms; see #58)')]), - [#( 26 'heartbeat period (ms)')]), (isSpur ifFalse: [#( 27 'number of times mark loop iterated for current IGC/FGC includes ALL marking' 28 'number of times sweep loop iterated for current IGC/FGC' 29 'number of times make forward loop iterated for current IGC/FGC' 30 'number of times compact move loop iterated for current IGC/FGC')] ifTrue: [#()]), #( 31 'number of grow memory requests' 32 'number of shrink memory requests'), (isSpur ifFalse: [#( 33 'number of root table entries used for current IGC/FGC' 34 'number of allocations done before current IGC/FGC' 35 'number of survivor objects after current IGC/FGC' 36 'millisecond clock when current IGC/FGC completed' 37 'number of marked objects for Roots of the world, not including Root Table entries for current IGC/FGC' + 38 'milliseconds taken by current IGC' - 38 'milliseconds taken by current IGC ' 39 'Number of finalization signals for Weak Objects pending when current IGC/FGC completed')] ifTrue: + [#( 33 'number of root table entries at last scavenge' + 35 'number of survivor objects at last scavenge (if non-zero)' + 36 'millisecond clock when current scavenge completed' + 38 'milliseconds taken by current scavenge' - [#( 36 'millisecond clock when current SGC/FGC completed' - 38 'milliseconds taken by current SGC ' 39 'Number of finalization signals for Weak Objects pending when current SGC/FGC completed')]), #( 40 'VM word size - 4 or 8'), + (isStack - (isCog ifTrue: [#( 41 'imageFormatVersion for the VM' + 42 'number of stack pages available' - 42 'number of stack pages in use' 43 'desired number of stack pages (stored in image file header, max 65535)' 44 'size of eden, in bytes' 45 'desired size of eden, in bytes (stored in image file header)' + 46 'machine code zone size, in bytes (0 in Stack VM)' - 46 'machine code zone size, in bytes' 47 'desired machine code zone size (0 => default 1Mb)' 48 'various header flags. See getCogVMFlags.' 49 'max size the image promises to grow the external semaphore table to'), (isSpur ifFalse: [{ 50 to: 54. 'reserved for VM parameters that persist in the image (such as size of eden above)'. 55 to: 56. 'specific to Spur' }] ifTrue: + [{ 50 to: 51. 'reserved for VM parameters that persist in the image (such as size of eden above)' }, + #( 52 'root table capacity' + 53 'number of old space segments' + 54 'total free old space' - [{ 50 to: 53. 'reserved for VM parameters that persist in the image (such as size of eden above)' }, - #( 54 'total free old space' 55 'ratio of growth and image size at or above which a GC will be performed post scavenge')]), #( 56 'number of process switches since startup' 57 'number of ioProcessEvents calls since startup' 58 'number of forceInterruptCheck calls since startup' 59 'number of check event calls since startup' 60 'number of stack page overflows since startup' 61 'number of stack page divorces since startup' + 62 'compiled code compactions since startup'), + (isCog + ifFalse: + [#()] + ifTrue: + [#( 63 'total milliseconds in compiled code compactions since startup' + 64 'the number of methods that currently have jitted machine-code')]), + #( 65 'whether the VM supports MULTIPLE_BYTECODE_SETS or not.' - 62 'compiled code compactions since startup' - 63 'total milliseconds in compiled code compactions since startup' - 64 'the number of methods that currently have jitted machine-code' - 65 'whether the VM supports MULTIPLE_BYTECODE_SETS or not.' 66 'the byte size of a stack page'), + (isSpur + ifFalse: + [{ 67 to: 69. 'reserved for more Cog-related info' }] + ifTrue: + [#( 67 'the maximum allowed size of old space (if zero there is no limit)' + 68 'the average number of live stack pages when scanned by scavenge/gc/become' + 69 'the maximum number of live stack pages when scanned by scavenge/gc/become')]), - { 67 to: 69. 'reserved for more Cog-related info' }, #( 70 'the vmProxyMajorVersion (the interpreterProxy VM_MAJOR_VERSION)' 71 'the vmProxyMinorVersion (the interpreterProxy VM_MINOR_VERSION)')] ifFalse: [#()]) pairsDo: [:idx :desc | | value values | aStream nextPut: $#. idx isInteger ifTrue: [value := vmParameters at: idx. + aStream print: idx; tab: (idx < 10 ifTrue: [2] ifFalse: [1]); nextPutAll: ((value isInteger and: [idx ~= 41]) ifTrue: [value asStringWithCommas] ifFalse: [value printString])] - aStream print: idx; tab; nextPutAll: ((value isInteger and: [idx ~= 41]) ifTrue: [value asStringWithCommas] ifFalse: [value printString])] ifFalse: [value := vmParameters at: idx first. aStream print: idx first; next: 2 put: $.; print: idx last; tab. values := idx collect: [:i| vmParameters at: i]. values asSet size = 1 ifTrue: [aStream print: value] ifFalse: [values do: [:v| aStream print: v] separatedBy: [aStream nextPutAll: ', ']]]. aStream tab; nextPutAll: desc; cr]! From craig at netjam.org Mon Jan 25 10:01:55 2016 From: craig at netjam.org (Craig Latta) Date: Mon Jan 25 10:02:05 2016 Subject: [squeak-dev] re: Live Coding Demonstration Success! In-Reply-To: <1453674187.3081817.501259658.30AC9D5B@webmail.messagingengine.com> References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> <1453674187.3081817.501259658.30AC9D5B@webmail.messagingengine.com> Message-ID: Congrats again, Jeff! -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From mbaehr at email.archlab.tuwien.ac.at Mon Jan 25 14:34:11 2016 From: mbaehr at email.archlab.tuwien.ac.at (=?utf-8?q?Martin_B=C3=A4hr?=) Date: Mon Jan 25 14:34:17 2016 Subject: [squeak-dev] Live Coding Demonstration Success! In-Reply-To: <1453674187.3081817.501259658.30AC9D5B@webmail.messagingengine.com> References: <1453408953.2490266.498961130.454AF29F@webmail.messagingengine.com> <1453674187.3081817.501259658.30AC9D5B@webmail.messagingengine.com> Message-ID: <1453732293-sup-4941@email.archlab.tuwien.ac.at> Excerpts from Jeff Gonis's message of 2016-01-24 23:23:07 +0100: > Thanks first off for the kind response.? I hope to do more > demonstrations in the future and report back about those. Unfortunately > I did not make a recording of this demo, as the setup in the meeting > room was somewhat primitive.? To be honest though, the demo was aimed > at people who had no experience with Smalltalk whatsoever and so it was > pretty basic. I also tried to keep it short and sweet so it was > probably only 20-25 minutes.? As I build up to a more full-featured > demo I will work to figure out a recording setup so that I can share it > with the list. you could do the recording on your own laptop like a screencast. all we need is your voice and your screen anyways. greetings, martin. -- eKita - the online platform for your entire academic life -- chief engineer eKita.co pike programmer pike.lysator.liu.se caudium.net societyserver.org secretary beijinglug.org mentor fossasia.org foresight developer foresightlinux.org realss.com unix sysadmin Martin B?hr working in china http://societyserver.org/mbaehr/ From bert at freudenbergs.de Mon Jan 25 15:25:20 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Mon Jan 25 15:25:24 2016 Subject: [squeak-dev] [OT] Another live coding demo Message-ID: <82C3D0B2-2467-4028-BED1-C01285C21A7E@freudenbergs.de> Thanks to Masato Sumi, who recreated a classic demo using our Smalltalk-78 system: https://www.youtube.com/watch?v=eEz08IlcNMg "At one point (Steve) Jobs, watching some text scroll up the screen line by line in its normal fashion, remarked, 'It would be nice if it moved smoothly, pixel by pixel, like paper.' With (Dan) Ingalls at the keyboard, that was like asking a New Orleans jazz band to play 'Limehouse Blues.' He clicked the mouse on a window displaying several lines of Smalltalk code, made a minor edit, and returned to the text. Presto! The scrolling was now continuous." -- Dealers of Lightning: Xerox PARC and the Dawn of the Computer Age by Michael A. Hiltzik - 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/20160125/d904c391/smime.bin From ron at usmedrec.com Mon Jan 25 15:53:10 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Mon Jan 25 15:53:11 2016 Subject: [squeak-dev] Squeak Oversight Board 2016 Message-ID: <26ac01d15788$7e3b2870$7ab17950$@usmedrec.com> Hi all, We currently have 6 candidates for 7 board seats and one week until the election starts. Tim Rowledge Marcel Taeumel Craig Latta Bert Freudenberg Chris Muller David T. Lewis Squeak still needs you. We need at least one more candidate! Plus we still need you to vote starting next week. More information on voting in the next email. Please reach out to people in our community that you think should run. This community has some terrific people, many of whom, could and should run for the board. Remember that Bert says it doesn't take a huge commitment just a few hours a month. This is a great way for you to give back to your Squeak community. All the best, Ron Teitelbaum -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160125/27409b9b/attachment-0001.htm From frank.shearar at gmail.com Mon Jan 25 16:18:09 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Mon Jan 25 16:18:12 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? Message-ID: Kernel-Processes has Delay, Process, Monitor, Mutex, FutureMaker, Promise, etc. All these work together. They fit nicely in the category. And then there's InputSensor, EventSensor and EventSensorConstants. What. Where _should_ these classes belong? Maybe we should have a Kernel-Device or Kernel-Input category? (I'll not mention how Kernel's InputSensor >> #keyboard uses TextConverter that causes a dependency on Multilingual, which of course has a dependency on Kernel... oh, wait, I did.) frank From eliot.miranda at gmail.com Mon Jan 25 17:01:30 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Jan 25 17:01:33 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: Message-ID: Hi Frank, On Mon, Jan 25, 2016 at 8:18 AM, Frank Shearar wrote: > Kernel-Processes has Delay, Process, Monitor, Mutex, FutureMaker, > Promise, etc. All these work together. They fit nicely in the > category. > > And then there's InputSensor, EventSensor and EventSensorConstants. What. > > Where _should_ these classes belong? Maybe we should have a > Kernel-Device or Kernel-Input category? > IMO they don't belong in the Kernel at all. I would add a UserInterface package and put the prerequisites for Morphic, Smalltalk-80 and Graphics in there. I'd also consider Headful and Headless packages for precursors of headful and headless apps. (I'll not mention how Kernel's InputSensor >> #keyboard uses > TextConverter that causes a dependency on Multilingual, which of > course has a dependency on Kernel... oh, wait, I did.) > > frank > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160125/f15db4f8/attachment.htm From eliot.miranda at gmail.com Mon Jan 25 17:24:53 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Mon Jan 25 17:24:57 2016 Subject: [squeak-dev] via Arden Thomas, the annual stackoverflow programming language survey is open. Let's try and get visibility for Smalltalk Message-ID: http://meta.stackoverflow.com/questions/314186/stack-overflow-annual-survey-2016 Should take less than 10 minutes to fill out. You might want to send this on to programming teams working in companies using Smalltalk. _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160125/fb1b69f8/attachment.htm From Das.Linux at gmx.de Mon Jan 25 18:03:50 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Mon Jan 25 18:03:56 2016 Subject: [squeak-dev] Fwd: [Esug-list] Stack Overflow developer survey is now open! - action requested References: Message-ID: I thought this might be interesting for us. Best regards . Tobias -- Tobias Pape sent from a mobile device Anfang der weitergeleiteten E?Mail: > Von: "Thomas, Arden" > Datum: 25. Januar 2016 um 18:45:35 MEZ > An: "esug-list@lists.esug.org" > Betreff: [Esug-list] Stack Overflow developer survey is now open! - action requested > > Dear Cincom Smalltalkers, Smalltalkers; > > Last year at ESUG I noted that Smalltalk was not represented as a language on the Stack Overflow developer survey. > > Smalltalk is a powerful language that is still unsurpassed in many ways. > A new generation of developers may have never heard of it! > > I made it an action item to notify Smalltalk developers, customers and community, when the survey was open, so we could > collectively address this oversight. > > The Stack Overflow developer survey is now open! > > Question #9 & #10 on the second page asks about what language you use or want to use. > > I filled in "Smalltalk". Later on it asks which environment you work in. > > https://www.surveymonkey.com/r/so-2016 > > NOTE: Please fill-out as soon as possible as the survey will only be open for a short time and could close imminently. > > https://www.facebook.com/cincomsmalltalk/posts/10153340529408365?comment_id=10153340568823365 > > Regards > Arden Thomas > > Cincom Smalltalk Product Manager > > Arden Thomas > Cincom Smalltalk STAR Team and Cincom Smalltalk Product Manager > > > CINCOM SYSTEMS, INC. > 55 Merchant Street > Cincinnati, OH 45246 > > > > office > > website > email > > 513-612-2300 > > http://www.cincomsmalltalk.com > athomas@cincom.com > > Less is More > > > --- CONFIDENTIALITY STATEMENT --- > > This e-mail transmission contains information that is intended to be privileged and confidential. It is intended only for the addressee named above. If you receive this e-mail in error, please do not read, copy or disseminate it in any manner. If you are not the intended recipient, any disclosure, copying, distribution or use of the contents of this information is prohibited, please reply to the message immediately by informing the sender that the message was misdirected. After replying, please erase it from your computer system. Your assistance in correcting this error is appreciated. > > _______________________________________________ > Esug-list mailing list > Esug-list@lists.esug.org > http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160125/1f1bdf8b/attachment.htm From tim at rowledge.org Mon Jan 25 18:33:29 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Jan 25 18:33:35 2016 Subject: [squeak-dev] Fwd: [Esug-list] Stack Overflow developer survey is now open! - action requested In-Reply-To: References: Message-ID: > On 25-01-2016, at 10:03 AM, Tobias Pape wrote: > > I thought this might be interesting for us. But do yourselves a favour and remember *not* to get lost in the labyrinthine tangle that is the rest of stackoverflow. If for no better reason than you could starve to death in there. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: PHP: Put Hackers into Privileged mode From craig at netjam.org Mon Jan 25 20:12:01 2016 From: craig at netjam.org (Craig Latta) Date: Mon Jan 25 20:12:09 2016 Subject: [squeak-dev] re: [OT] Another live coding demo In-Reply-To: <82C3D0B2-2467-4028-BED1-C01285C21A7E@freudenbergs.de> References: <82C3D0B2-2467-4028-BED1-C01285C21A7E@freudenbergs.de> Message-ID: Sublime. :) -C -- Craig Latta Black Page Digital postbus 10784 1001ET Amsterdam, Netherlands craig@blackpagedigital.com +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) From tim at rowledge.org Mon Jan 25 21:26:02 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Jan 25 21:26:06 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: Message-ID: It?s probably time InputSensor was laid to rest, along with the ancient primitives supporting it. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim "Wibble" said Pooh the stress beginning to show. From commits at source.squeak.org Mon Jan 25 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Jan 25 22:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160125225502.30513.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-January/009279.html Name: System-eem.789 Ancestors: System-mt.788 Fix vmStatisticsReportString given recent clock changes. When available, use vmParameterAt: 20 to get the utc microsecond clock at startup, otherwise defer to the eventMillisecondClock. Remember to nil out LastStats on start-up to eliminate those whacky first queries where LastStats is left over from a prior snapshot. Also don't bother reestablishing event forwarding to Smalltalk unless starting up. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009280.html Name: SystemReporter-eem.25 Ancestors: SystemReporter-mt.24 Update David's lovely reportVMParameters: to reflect reality and a few up-coming features. ============================================= From smalltalker2 at mac.com Tue Jan 26 00:21:14 2016 From: smalltalker2 at mac.com (John Pfersich) Date: Tue Jan 26 00:21:14 2016 Subject: [squeak-dev] via Arden Thomas, the annual stackoverflow programming language survey is open. Let's try and get visibility for Smalltalk In-Reply-To: References: Message-ID: <572EBD2E-0BCB-4C46-B0EA-D1D6112CBCBC@mac.com> The survey is already closed. Sent from my iPad > On Jan 25, 2016, at 09:24, Eliot Miranda wrote: > > http://meta.stackoverflow.com/questions/314186/stack-overflow-annual-survey-2016 > > > Should take less than 10 minutes to fill out. You might want to send this on to programming teams working in companies using Smalltalk. > > _,,,^..^,,,_ > best, Eliot > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160125/01702cbe/attachment.htm From edgardec2005 at gmail.com Tue Jan 26 10:27:37 2016 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Tue Jan 26 10:27:46 2016 Subject: [squeak-dev] Squeak Oversight Board 2016 In-Reply-To: <26ac01d15788$7e3b2870$7ab17950$@usmedrec.com> Message-ID: I hear and respond. This days some old favorites of me show in different list. What I wish. Have a real minimal Squeak image and grow from here to any arbitrary project. Words are beautiful, work is what counts. So here http://squeakros.org/CuisSantafesino.1.zip http://squeakros.org/CuisSantafesino.2.zip http://squeakros.org/CuisSantafesino.3.zip http://squeakros.org/CuisSantafesino.4.zip This was my way of start of a minimal reduced Cuis 3.2 and add layer of complex The 4 have a complete HV2 and Kom minimal server and you could download classes of web repository in a recursive DNU from current Squeak until 3.7. Mostly works .... My old idea of SqueakLight times was grow until some complex like http://squeakros.org/FunSqueak4.6/FunSqueak4dot6-alpha.137921.0.zip But using this is not possible so I quit. But the Pharo guys is using my idea of "Class repository", with root as old as when Ralph Johnson lead 3.10 development Here http://ftp.squeak.org/Experiments/ You see. So if I elected put my best in a new attempt . And offers some smiles too from a far away country where we enjoy 35 C weather Edgar @morplenauta On 1/25/16, 12:53 PM, "Ron Teitelbaum" wrote: > Hi all, > > We currently have 6 candidates for 7 board seats and one week until the > election starts. > > Tim Rowledge > Marcel Taeumel > Craig Latta > Bert Freudenberg > Chris Muller > David T. Lewis > > Squeak still needs you. We need at least one more candidate! Plus we still > need you to vote starting next week. More information on voting in the next > email. > > Please reach out to people in our community that you think should run. This > community has some terrific people, many of whom, could and should run for the > board. Remember that Bert says it doesn?t take a huge commitment just a few > hours a month. This is a great way for you to give back to your Squeak > community. > > All the best, > > Ron Teitelbaum From lewis at mail.msen.com Tue Jan 26 13:27:14 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Jan 26 13:27:19 2016 Subject: [squeak-dev] Squeak Oversight Board 2016 In-Reply-To: References: <26ac01d15788$7e3b2870$7ab17950$@usmedrec.com> Message-ID: <20160126132714.GA98272@shell.msen.com> Yay! Thank you for running for the board this year Edgar. Dave On Tue, Jan 26, 2016 at 07:27:37AM -0300, Edgar J. De Cleene wrote: > I hear and respond. > > This days some old favorites of me show in different list. > > What I wish. > > Have a real minimal Squeak image and grow from here to any arbitrary > project. > Words are beautiful, work is what counts. > So here > > http://squeakros.org/CuisSantafesino.1.zip > http://squeakros.org/CuisSantafesino.2.zip > http://squeakros.org/CuisSantafesino.3.zip > http://squeakros.org/CuisSantafesino.4.zip > > This was my way of start of a minimal reduced Cuis 3.2 and add layer of > complex > The 4 have a complete HV2 and Kom minimal server and you could download > classes of web repository in a recursive DNU from current Squeak until 3.7. > > Mostly works .... > > My old idea of SqueakLight times was grow until some complex like > > http://squeakros.org/FunSqueak4.6/FunSqueak4dot6-alpha.137921.0.zip > > But using this is not possible so I quit. > But the Pharo guys is using my idea of "Class repository", with root as old > as when Ralph Johnson lead 3.10 development > > Here > http://ftp.squeak.org/Experiments/ > You see. > > So if I elected put my best in a new attempt . > And offers some smiles too from a far away country where we enjoy 35 C > weather > > > Edgar > @morplenauta > > > On 1/25/16, 12:53 PM, "Ron Teitelbaum" wrote: > > > Hi all, > > > > We currently have 6 candidates for 7 board seats and one week until the > > election starts. > > > > Tim Rowledge > > Marcel Taeumel > > Craig Latta > > Bert Freudenberg > > Chris Muller > > David T. Lewis > > > > Squeak still needs you. We need at least one more candidate! Plus we still > > need you to vote starting next week. More information on voting in the next > > email. > > > > Please reach out to people in our community that you think should run. This > > community has some terrific people, many of whom, could and should run for the > > board. Remember that Bert says it doesn?t take a huge commitment just a few > > hours a month. This is a great way for you to give back to your Squeak > > community. > > > > All the best, > > > > Ron Teitelbaum > > From lewis at mail.msen.com Tue Jan 26 23:13:38 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Jan 26 23:13:40 2016 Subject: [squeak-dev] Do upcoming double byte strings require Spur? (was: The Trunk: Kernel-eem.980.mcz) In-Reply-To: <201601180332.u0I3WfcU022463@shell.msen.com> References: <201601180332.u0I3WfcU022463@shell.msen.com> Message-ID: <20160126231338.GA2658@shell.msen.com> Do the upcoming changes for double-byte strings require the Spur object format, or are they something that would also work on a V3 object memory? Thanks, Dave On Mon, Jan 18, 2016 at 03:32:21AM +0000, commits@source.squeak.org wrote: > Eliot Miranda uploaded a new version of Kernel to project The Trunk: > http://source.squeak.org/trunk/Kernel-eem.980.mcz > > ==================== Summary ==================== > > Name: Kernel-eem.980 > Author: eem > Time: 18 January 2016, 7:32:08.6746 pm > UUID: 95543c3e-e2d1-4ec8-8ad2-a90fca9a2b06 > Ancestors: Kernel-tpr.979 > > Lay the ground work for double-byte strings (and possibly a 64-bit indexable bits type). > > Test shallowCopy's error code and report primitive failure if it has failed for other than being out of memory (which may simply imply the need for a GC). > > =============== Diff against Kernel-tpr.979 =============== > > Item was changed: > ----- Method: Behavior>>format (in category 'accessing') ----- > format > "Answer an Integer that encodes the kinds and numbers of variables of > + instances of the receiver. The format is (currently) composed of two fields, > + a 16-bit instSize, in the least significant bits, specifying the number of named > + inst vars, if any, and a 5-bit format field, describing the kind of class. c.f. instSpec. > + (msb)<5 bit format><16 bit #fixed fields>(lsb)" > - instances of the receiver." > > ^format! > > Item was changed: > ----- Method: Behavior>>instSpec (in category 'testing') ----- > instSpec > "Answer the instance specification part of the format that defines what kind of object > an instance of the receiver is. The formats are > 0 = 0 sized objects (UndefinedObject True False et al) > 1 = non-indexable objects with inst vars (Point et al) > 2 = indexable objects with no inst vars (Array et al) > 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al) > 4 = weak indexable objects with inst vars (WeakArray et al) > 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron) > 6 = unused > 7 = immediates (SmallInteger, Character) > 8 = unused > 9 = 64-bit indexable > + 10-11 = 32-bit indexable (Bitmap) (plus one odd bit, unused in 32-bits) > + 12-15 = 16-bit indexable (plus two odd bits, one unused in 32-bits) > + 16-23 = 8-bit indexable (plus three odd bits, one unused in 32-bits) > + 24-31 = compiled methods (CompiledMethod) (plus three odd bits, one unused in 32-bits) > + Note that in the VM instances also have a 5 bit format field that relates to their class's format. > + Formats 11, 13-15, 17-23 & 25-31 are unused in classes but used in instances to define the > + number of elements missing up to the slot size. For example, a 2-byte ByteString instance > + has format 18 in 32-bits, since its size is one 32-bit slot - 2 bytes ((18 bitAnd: 3) = 2), and > + 22 in 64 bits, since its size is one 64-bit slot - 6 bytes ((22 bitAnd: 7) = 6)." > - 10-11 = 32-bit indexable (Bitmap) > - 12-15 = 16-bit indexable > - 16-23 = 8-bit indexable > - 24-31 = compiled methods (CompiledMethod)" > ^(format bitShift: -16) bitAnd: 16r1F! > > Item was changed: > ----- Method: Behavior>>kindOfSubclass (in category 'testing class hierarchy') ----- > kindOfSubclass > "Answer a String that is the keyword that describes the receiver's kind of subclass, > either a regular subclass, a variableSubclass, a variableByteSubclass, > a variableWordSubclass, a weakSubclass, an ephemeronSubclass or an immediateSubclass. > + c.f. typeOfClass & instSpec" > + ^(#(' subclass: ' > + ' subclass: ' > + ' variableSubclass: ' > + ' variableSubclass: ' > + ' weakSubclass: ' > + ' ephemeronSubclass: ' > + nil > + ' immediateSubclass: ' > + nil > + ' variableDoubleWordSubclass: ' > + ' variableWordSubclass: ' nil > + ' variableDoubleByteSubclass: ' nil nil nil > + ' variableByteSubclass: ' nil nil nil nil nil nil nil > + ' variableByteSubclass: ' nil nil nil nil nil nil nil ) > + at: self instSpec + 1) ifNil: > + [self error: 'invalid class type']! > - c.f. typeOfClass" > - ^self isVariable > - ifTrue: > - [self isBits > - ifTrue: > - [self isBytes > - ifTrue: [' variableByteSubclass: '] > - ifFalse: [' variableWordSubclass: ']] > - ifFalse: > - [self isWeak > - ifTrue: [' weakSubclass: '] > - ifFalse: [' variableSubclass: ']]] > - ifFalse: > - [self isImmediateClass > - ifTrue: [' immediateSubclass: '] > - ifFalse: > - [self isEphemeronClass > - ifTrue: [' ephemeronSubclass: '] > - ifFalse: [' subclass: ']]]! > > Item was changed: > ----- Method: Behavior>>typeOfClass (in category 'accessing') ----- > typeOfClass > + "Answer a symbol uniquely describing the type of the receiver. c.f. kindOfSubclass, instSpec" > + ^(#(normal > + normal > + variable > + variable > + weak > + ephemeron > + nil > + immediate > + nil > + longs > + words nil > + shorts nil nil nil > + bytes nil nil nil nil nil nil nil > + compiledMethod nil nil nil nil nil nil nil) > + at: self instSpec + 1) ifNil: > + [self error: 'invalid class type']! > - "Answer a symbol uniquely describing the type of the receiver. c.f. kindOfSubclass" > - self isBytes ifTrue: > - [^self instSpec = CompiledMethod instSpec > - ifTrue: [#compiledMethod] "Very special!!" > - ifFalse: [#bytes]]. > - (self isWords and: [self isPointers not]) ifTrue: > - [^self instSpec = SmallInteger instSpec > - ifTrue: [#immediate] "Very special!!" > - ifFalse: [#words]]. > - self isWeak ifTrue: [^#weak]. > - self isVariable ifTrue: [^#variable]. > - self isEphemeronClass ifTrue: [^#ephemeron]. > - ^#normal! > > Item was changed: > ----- Method: ClassBuilder>>computeFormat:instSize:forSuper: (in category 'class format') ----- > computeFormat: type instSize: newInstSize forSuper: newSuper > "Compute the new format for making oldClass a subclass of newSuper. > Answer the format or nil if there is any problem." > + | instSize isVar isPointers isWeak bitsUnitSize | > - | instSize isVar isWords isPointers isWeak | > type == #compiledMethod ifTrue: > [newInstSize > 0 ifTrue: > [self error: 'A compiled method class cannot have named instance variables'. > ^nil]. > ^CompiledMethod format]. > instSize := newInstSize + (newSuper ifNil:[0] ifNotNil:[newSuper instSize]). > instSize > 65535 ifTrue: > [self error: 'Class has too many instance variables (', instSize printString,')'. > ^nil]. > + type == #normal ifTrue:[isVar := isWeak := false. isPointers := true]. > + type == #bytes ifTrue:[isVar := true. bitsUnitSize := 1. isPointers := isWeak := false]. > + type == #shorts ifTrue:[isVar := true. bitsUnitSize := 2. isPointers := isWeak := false]. > + type == #words ifTrue:[isVar := true. bitsUnitSize := 4. isPointers := isWeak := false]. > + type == #longs ifTrue:[isVar := true. bitsUnitSize := 8. isPointers := isWeak := false]. > + type == #variable ifTrue:[isVar := isPointers := true. isWeak := false]. > + type == #weak ifTrue:[isVar := isWeak := isPointers := true]. > + type == #ephemeron ifTrue:[isVar := false. isWeak := isPointers := true]. > + type == #immediate ifTrue:[isVar := isWeak := isPointers := false]. > - type == #normal ifTrue:[isVar := isWeak := false. isWords := isPointers := true]. > - type == #bytes ifTrue:[isVar := true. isWords := isPointers := isWeak := false]. > - type == #words ifTrue:[isVar := isWords := true. isPointers := isWeak := false]. > - type == #variable ifTrue:[isVar := isPointers := isWords := true. isWeak := false]. > - type == #weak ifTrue:[isVar := isWeak := isWords := isPointers := true]. > - type == #ephemeron ifTrue:[isVar := false. isWeak := isWords := isPointers := true]. > - type == #immediate ifTrue:[isVar := isWeak := isPointers := false. isWords := true]. > (isPointers not and: [instSize > 0]) ifTrue: > [self error: 'A non-pointer class cannot have named instance variables'. > ^nil]. > + ^self format: instSize variable: isVar bitsUnitSize: bitsUnitSize pointers: isPointers weak: isWeak! > - ^self format: instSize variable: isVar words: isWords pointers: isPointers weak: isWeak! > > Item was added: > + ----- Method: ClassBuilder>>format:variable:bitsUnitSize:pointers:weak: (in category 'class format') ----- > + format: nInstVars variable: isVar bitsUnitSize: bitsUnitSize pointers: isPointers weak: isWeak > + "Compute the format for the given instance specfication. > + Above Cog Spur the class format is > + <5 bits inst spec><16 bits inst size> > + where the 5-bit inst spec is > + 0 = 0 sized objects (UndefinedObject True False et al) > + 1 = non-indexable objects with inst vars (Point et al) > + 2 = indexable objects with no inst vars (Array et al) > + 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al) > + 4 = weak indexable objects with inst vars (WeakArray et al) > + 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron) > + 6 = unused > + 7 = immediates (SmallInteger, Character, SmallFloat64) > + 8 = unused > + 9 = 64-bit indexable > + 10-11 = 32-bit indexable (Bitmap, WideString) > + 12-15 = 16-bit indexable > + 16-23 = 8-bit indexable (ByteString) > + 24-31 = compiled methods (CompiledMethod)" > + | instSpec | > + instSpec := isWeak > + ifTrue: > + [isVar > + ifTrue: [4] > + ifFalse: [5]] > + ifFalse: > + [isPointers > + ifTrue: > + [isVar > + ifTrue: [nInstVars > 0 ifTrue: [3] ifFalse: [2]] > + ifFalse: [nInstVars > 0 ifTrue: [1] ifFalse: [0]]] > + ifFalse: > + [isVar > + ifTrue: [bitsUnitSize caseOf: { > + [1] -> [16]. > + [2] -> [12]. > + [4] -> [10]. > + [8] -> [9] }] > + ifFalse: [7]]]. > + ^(instSpec bitShift: 16) + nInstVars! > > Item was changed: > ----- Method: Object>>shallowCopy (in category 'copying') ----- > shallowCopy > "Answer a copy of the receiver which shares the receiver's instance variables." > | class newObject index | > + > + ec == #'insufficient object memory' ifFalse: > + [^self primitiveFailed]. > - > class := self class. > class isVariable > ifTrue: > [index := self basicSize. > + newObject := class basicNew: index. > + [index > 0] whileTrue: > + [newObject basicAt: index put: (self basicAt: index). > + index := index - 1]] > - newObject := class basicNew: index. > - [index > 0] > - whileTrue: > - [newObject basicAt: index put: (self basicAt: index). > - index := index - 1]] > ifFalse: [newObject := class basicNew]. > index := class instSize. > + [index > 0] whileTrue: > + [newObject instVarAt: index put: (self instVarAt: index). > + index := index - 1]. > + ^newObject! > - [index > 0] > - whileTrue: > - [newObject instVarAt: index put: (self instVarAt: index). > - index := index - 1]. > - ^ newObject! > From eliot.miranda at gmail.com Wed Jan 27 01:28:42 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Jan 27 01:28:44 2016 Subject: [squeak-dev] Do upcoming double byte strings require Spur? (was: The Trunk: Kernel-eem.980.mcz) In-Reply-To: <20160126231338.GA2658@shell.msen.com> References: <201601180332.u0I3WfcU022463@shell.msen.com> <20160126231338.GA2658@shell.msen.com> Message-ID: Hi David, > On Jan 26, 2016, at 3:13 PM, David T. Lewis wrote: > > Do the upcoming changes for double-byte strings require the Spur object > format, or are they something that would also work on a V3 object memory? Well, it would be possible to implement them in a different way, by adding 16-bit character access primitives, but it can't be done "naturally". The V3 object representation has a 4 bit format field in every object (it is also in the class's format field, the instSpec subfield). This is organized as follows: ObjectMemory methods for object access formatOf: oop " 0 no fields 1 fixed fields only (all containing pointers) 2 indexable fields only (all containing pointers) 3 both fixed and indexable fields (all containing pointers) 4 both fixed and indexable weak fields (all containing pointers). 5 unused (reserved for ephemerons?) 6 indexable word fields only (no pointers) 7 indexable long (64-bit) fields (only in 64-bit images) 8-11 indexable byte fields only (no pointers) (low 2 bits are low 2 bits of size) 12-15 compiled methods: # of literal oops specified in method header, followed by indexable bytes (same interpretation of low 2 bits as above) " ^((self baseHeader: oop) >> self instFormatFieldLSB) bitAnd: 16rF The low two bits of formats 8-11 and 12-15 are subtracted from the object's slot size to derive the size in bytes. So there is only one unused format, 7, and that isn't enough to express two short formats, one with the lsb set to indicate subtracting 2 bytes from the size. When I designed the Spur format field I made sure it would scale to 64-bits and provide 8- 16- 32- and 64-bit indexing. It is organized as follows: SpurMemoryManager methods for object access formatOf: objOop " 0 = 0 sized objects (UndefinedObject True False et al) 1 = non-indexable objects with inst vars (Point et al) 2 = indexable objects with no inst vars (Array et al) 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al) 4 = weak indexable objects with inst vars (WeakArray et al) 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron) 6 unused, reserved for exotic pointer objects? 7 Forwarded Object, 1st field is pointer, rest of fields are ignored 8 unused, reserved for exotic non-pointer objects? 9 (?) 64-bit indexable 10 - 11 32-bit indexable (11 unused in 32 bits) 12 - 15 16-bit indexable (14 & 15 unused in 32-bits) 16 - 23 byte indexable (20-23 unused in 32-bits) 24 - 31 compiled method (28-31 unused in 32-bits)" ^(self longAt: objOop) >> self formatShift bitAnd: self formatMask So this makes it natural to have the at:[put:] primitives in both normal (60 & 61, objects for pointer objects or integers for bits objects) and string (63 & 64, characters for bits objects) variations. And indeed when I finally get round to building new Spur VMs the primitives do already access 16-bits, and extending the ClassBuilder to allow specifying those classes is straight-forward. > Thanks, > Dave _,,,^..^,,,_ Eliot > > >> On Mon, Jan 18, 2016 at 03:32:21AM +0000, commits@source.squeak.org wrote: >> Eliot Miranda uploaded a new version of Kernel to project The Trunk: >> http://source.squeak.org/trunk/Kernel-eem.980.mcz >> >> ==================== Summary ==================== >> >> Name: Kernel-eem.980 >> Author: eem >> Time: 18 January 2016, 7:32:08.6746 pm >> UUID: 95543c3e-e2d1-4ec8-8ad2-a90fca9a2b06 >> Ancestors: Kernel-tpr.979 >> >> Lay the ground work for double-byte strings (and possibly a 64-bit indexable bits type). >> >> Test shallowCopy's error code and report primitive failure if it has failed for other than being out of memory (which may simply imply the need for a GC). >> >> =============== Diff against Kernel-tpr.979 =============== >> >> Item was changed: >> ----- Method: Behavior>>format (in category 'accessing') ----- >> format >> "Answer an Integer that encodes the kinds and numbers of variables of >> + instances of the receiver. The format is (currently) composed of two fields, >> + a 16-bit instSize, in the least significant bits, specifying the number of named >> + inst vars, if any, and a 5-bit format field, describing the kind of class. c.f. instSpec. >> + (msb)<5 bit format><16 bit #fixed fields>(lsb)" >> - instances of the receiver." >> >> ^format! >> >> Item was changed: >> ----- Method: Behavior>>instSpec (in category 'testing') ----- >> instSpec >> "Answer the instance specification part of the format that defines what kind of object >> an instance of the receiver is. The formats are >> 0 = 0 sized objects (UndefinedObject True False et al) >> 1 = non-indexable objects with inst vars (Point et al) >> 2 = indexable objects with no inst vars (Array et al) >> 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al) >> 4 = weak indexable objects with inst vars (WeakArray et al) >> 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron) >> 6 = unused >> 7 = immediates (SmallInteger, Character) >> 8 = unused >> 9 = 64-bit indexable >> + 10-11 = 32-bit indexable (Bitmap) (plus one odd bit, unused in 32-bits) >> + 12-15 = 16-bit indexable (plus two odd bits, one unused in 32-bits) >> + 16-23 = 8-bit indexable (plus three odd bits, one unused in 32-bits) >> + 24-31 = compiled methods (CompiledMethod) (plus three odd bits, one unused in 32-bits) >> + Note that in the VM instances also have a 5 bit format field that relates to their class's format. >> + Formats 11, 13-15, 17-23 & 25-31 are unused in classes but used in instances to define the >> + number of elements missing up to the slot size. For example, a 2-byte ByteString instance >> + has format 18 in 32-bits, since its size is one 32-bit slot - 2 bytes ((18 bitAnd: 3) = 2), and >> + 22 in 64 bits, since its size is one 64-bit slot - 6 bytes ((22 bitAnd: 7) = 6)." >> - 10-11 = 32-bit indexable (Bitmap) >> - 12-15 = 16-bit indexable >> - 16-23 = 8-bit indexable >> - 24-31 = compiled methods (CompiledMethod)" >> ^(format bitShift: -16) bitAnd: 16r1F! >> >> Item was changed: >> ----- Method: Behavior>>kindOfSubclass (in category 'testing class hierarchy') ----- >> kindOfSubclass >> "Answer a String that is the keyword that describes the receiver's kind of subclass, >> either a regular subclass, a variableSubclass, a variableByteSubclass, >> a variableWordSubclass, a weakSubclass, an ephemeronSubclass or an immediateSubclass. >> + c.f. typeOfClass & instSpec" >> + ^(#(' subclass: ' >> + ' subclass: ' >> + ' variableSubclass: ' >> + ' variableSubclass: ' >> + ' weakSubclass: ' >> + ' ephemeronSubclass: ' >> + nil >> + ' immediateSubclass: ' >> + nil >> + ' variableDoubleWordSubclass: ' >> + ' variableWordSubclass: ' nil >> + ' variableDoubleByteSubclass: ' nil nil nil >> + ' variableByteSubclass: ' nil nil nil nil nil nil nil >> + ' variableByteSubclass: ' nil nil nil nil nil nil nil ) >> + at: self instSpec + 1) ifNil: >> + [self error: 'invalid class type']! >> - c.f. typeOfClass" >> - ^self isVariable >> - ifTrue: >> - [self isBits >> - ifTrue: >> - [self isBytes >> - ifTrue: [' variableByteSubclass: '] >> - ifFalse: [' variableWordSubclass: ']] >> - ifFalse: >> - [self isWeak >> - ifTrue: [' weakSubclass: '] >> - ifFalse: [' variableSubclass: ']]] >> - ifFalse: >> - [self isImmediateClass >> - ifTrue: [' immediateSubclass: '] >> - ifFalse: >> - [self isEphemeronClass >> - ifTrue: [' ephemeronSubclass: '] >> - ifFalse: [' subclass: ']]]! >> >> Item was changed: >> ----- Method: Behavior>>typeOfClass (in category 'accessing') ----- >> typeOfClass >> + "Answer a symbol uniquely describing the type of the receiver. c.f. kindOfSubclass, instSpec" >> + ^(#(normal >> + normal >> + variable >> + variable >> + weak >> + ephemeron >> + nil >> + immediate >> + nil >> + longs >> + words nil >> + shorts nil nil nil >> + bytes nil nil nil nil nil nil nil >> + compiledMethod nil nil nil nil nil nil nil) >> + at: self instSpec + 1) ifNil: >> + [self error: 'invalid class type']! >> - "Answer a symbol uniquely describing the type of the receiver. c.f. kindOfSubclass" >> - self isBytes ifTrue: >> - [^self instSpec = CompiledMethod instSpec >> - ifTrue: [#compiledMethod] "Very special!!" >> - ifFalse: [#bytes]]. >> - (self isWords and: [self isPointers not]) ifTrue: >> - [^self instSpec = SmallInteger instSpec >> - ifTrue: [#immediate] "Very special!!" >> - ifFalse: [#words]]. >> - self isWeak ifTrue: [^#weak]. >> - self isVariable ifTrue: [^#variable]. >> - self isEphemeronClass ifTrue: [^#ephemeron]. >> - ^#normal! >> >> Item was changed: >> ----- Method: ClassBuilder>>computeFormat:instSize:forSuper: (in category 'class format') ----- >> computeFormat: type instSize: newInstSize forSuper: newSuper >> "Compute the new format for making oldClass a subclass of newSuper. >> Answer the format or nil if there is any problem." >> + | instSize isVar isPointers isWeak bitsUnitSize | >> - | instSize isVar isWords isPointers isWeak | >> type == #compiledMethod ifTrue: >> [newInstSize > 0 ifTrue: >> [self error: 'A compiled method class cannot have named instance variables'. >> ^nil]. >> ^CompiledMethod format]. >> instSize := newInstSize + (newSuper ifNil:[0] ifNotNil:[newSuper instSize]). >> instSize > 65535 ifTrue: >> [self error: 'Class has too many instance variables (', instSize printString,')'. >> ^nil]. >> + type == #normal ifTrue:[isVar := isWeak := false. isPointers := true]. >> + type == #bytes ifTrue:[isVar := true. bitsUnitSize := 1. isPointers := isWeak := false]. >> + type == #shorts ifTrue:[isVar := true. bitsUnitSize := 2. isPointers := isWeak := false]. >> + type == #words ifTrue:[isVar := true. bitsUnitSize := 4. isPointers := isWeak := false]. >> + type == #longs ifTrue:[isVar := true. bitsUnitSize := 8. isPointers := isWeak := false]. >> + type == #variable ifTrue:[isVar := isPointers := true. isWeak := false]. >> + type == #weak ifTrue:[isVar := isWeak := isPointers := true]. >> + type == #ephemeron ifTrue:[isVar := false. isWeak := isPointers := true]. >> + type == #immediate ifTrue:[isVar := isWeak := isPointers := false]. >> - type == #normal ifTrue:[isVar := isWeak := false. isWords := isPointers := true]. >> - type == #bytes ifTrue:[isVar := true. isWords := isPointers := isWeak := false]. >> - type == #words ifTrue:[isVar := isWords := true. isPointers := isWeak := false]. >> - type == #variable ifTrue:[isVar := isPointers := isWords := true. isWeak := false]. >> - type == #weak ifTrue:[isVar := isWeak := isWords := isPointers := true]. >> - type == #ephemeron ifTrue:[isVar := false. isWeak := isWords := isPointers := true]. >> - type == #immediate ifTrue:[isVar := isWeak := isPointers := false. isWords := true]. >> (isPointers not and: [instSize > 0]) ifTrue: >> [self error: 'A non-pointer class cannot have named instance variables'. >> ^nil]. >> + ^self format: instSize variable: isVar bitsUnitSize: bitsUnitSize pointers: isPointers weak: isWeak! >> - ^self format: instSize variable: isVar words: isWords pointers: isPointers weak: isWeak! >> >> Item was added: >> + ----- Method: ClassBuilder>>format:variable:bitsUnitSize:pointers:weak: (in category 'class format') ----- >> + format: nInstVars variable: isVar bitsUnitSize: bitsUnitSize pointers: isPointers weak: isWeak >> + "Compute the format for the given instance specfication. >> + Above Cog Spur the class format is >> + <5 bits inst spec><16 bits inst size> >> + where the 5-bit inst spec is >> + 0 = 0 sized objects (UndefinedObject True False et al) >> + 1 = non-indexable objects with inst vars (Point et al) >> + 2 = indexable objects with no inst vars (Array et al) >> + 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al) >> + 4 = weak indexable objects with inst vars (WeakArray et al) >> + 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron) >> + 6 = unused >> + 7 = immediates (SmallInteger, Character, SmallFloat64) >> + 8 = unused >> + 9 = 64-bit indexable >> + 10-11 = 32-bit indexable (Bitmap, WideString) >> + 12-15 = 16-bit indexable >> + 16-23 = 8-bit indexable (ByteString) >> + 24-31 = compiled methods (CompiledMethod)" >> + | instSpec | >> + instSpec := isWeak >> + ifTrue: >> + [isVar >> + ifTrue: [4] >> + ifFalse: [5]] >> + ifFalse: >> + [isPointers >> + ifTrue: >> + [isVar >> + ifTrue: [nInstVars > 0 ifTrue: [3] ifFalse: [2]] >> + ifFalse: [nInstVars > 0 ifTrue: [1] ifFalse: [0]]] >> + ifFalse: >> + [isVar >> + ifTrue: [bitsUnitSize caseOf: { >> + [1] -> [16]. >> + [2] -> [12]. >> + [4] -> [10]. >> + [8] -> [9] }] >> + ifFalse: [7]]]. >> + ^(instSpec bitShift: 16) + nInstVars! >> >> Item was changed: >> ----- Method: Object>>shallowCopy (in category 'copying') ----- >> shallowCopy >> "Answer a copy of the receiver which shares the receiver's instance variables." >> | class newObject index | >> + >> + ec == #'insufficient object memory' ifFalse: >> + [^self primitiveFailed]. >> - >> class := self class. >> class isVariable >> ifTrue: >> [index := self basicSize. >> + newObject := class basicNew: index. >> + [index > 0] whileTrue: >> + [newObject basicAt: index put: (self basicAt: index). >> + index := index - 1]] >> - newObject := class basicNew: index. >> - [index > 0] >> - whileTrue: >> - [newObject basicAt: index put: (self basicAt: index). >> - index := index - 1]] >> ifFalse: [newObject := class basicNew]. >> index := class instSize. >> + [index > 0] whileTrue: >> + [newObject instVarAt: index put: (self instVarAt: index). >> + index := index - 1]. >> + ^newObject! >> - [index > 0] >> - whileTrue: >> - [newObject instVarAt: index put: (self instVarAt: index). >> - index := index - 1]. >> - ^ newObject! > From lewis at mail.msen.com Wed Jan 27 01:38:13 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Jan 27 01:38:18 2016 Subject: [squeak-dev] Do upcoming double byte strings require Spur? (was: The Trunk: Kernel-eem.980.mcz) In-Reply-To: References: <201601180332.u0I3WfcU022463@shell.msen.com> <20160126231338.GA2658@shell.msen.com> Message-ID: <12473.70.194.1.30.1453858693.squirrel@webmail.msen.com> Thanks Eliot, that makes perfect sense. Dave > Hi David, > > >> On Jan 26, 2016, at 3:13 PM, David T. Lewis wrote: >> >> Do the upcoming changes for double-byte strings require the Spur object >> format, or are they something that would also work on a V3 object >> memory? > > Well, it would be possible to implement them in a different way, by > adding 16-bit character access primitives, but it can't be done > "naturally". The V3 object representation has a 4 bit format field in > every object (it is also in the class's format field, the instSpec > subfield). This is organized as follows: > > ObjectMemory methods for object access > formatOf: oop > " 0 no fields > 1 fixed fields only (all containing pointers) > 2 indexable fields only (all containing pointers) > 3 both fixed and indexable fields (all containing pointers) > 4 both fixed and indexable weak fields (all containing > pointers). > > 5 unused (reserved for ephemerons?) > 6 indexable word fields only (no pointers) > 7 indexable long (64-bit) fields (only in 64-bit images) > > 8-11 indexable byte fields only (no pointers) (low 2 bits are > low 2 bits of size) > 12-15 compiled methods: > # of literal oops specified in method header, > followed by indexable bytes (same interpretation of > low 2 bits as above) > " > > ^((self baseHeader: oop) >> self instFormatFieldLSB) bitAnd: 16rF > > The low two bits of formats 8-11 and 12-15 are subtracted from the > object's slot size to derive the size in bytes. So there is only one > unused format, 7, and that isn't enough to express two short formats, > one with the lsb set to indicate subtracting 2 bytes from the size. > > When I designed the Spur format field I made sure it would scale to > 64-bits and provide 8- 16- 32- and 64-bit indexing. It is organized > as follows: > > SpurMemoryManager methods for object access > formatOf: objOop > " 0 = 0 sized objects (UndefinedObject True False et al) > 1 = non-indexable objects with inst vars (Point et al) > 2 = indexable objects with no inst vars (Array et al) > 3 = indexable objects with inst vars (MethodContext > AdditionalMethodState et al) > 4 = weak indexable objects with inst vars (WeakArray et > al) > 5 = weak non-indexable objects with inst vars > (ephemerons) (Ephemeron) > 6 unused, reserved for exotic pointer objects? > 7 Forwarded Object, 1st field is pointer, rest of > fields are ignored > 8 unused, reserved for exotic non-pointer objects? > 9 (?) 64-bit indexable > 10 - 11 32-bit indexable (11 unused in 32 bits) > 12 - 15 16-bit indexable (14 & 15 unused in 32-bits) > 16 - 23 byte indexable (20-23 unused in 32-bits) > 24 - 31 compiled method (28-31 unused in 32-bits)" > ^(self longAt: objOop) >> self formatShift bitAnd: self formatMask > > > So this makes it natural to have the at:[put:] primitives in both > normal (60 & 61, objects for pointer objects or integers for bits > objects) and string (63 & 64, characters for bits objects) variations. > And indeed when I finally get round to building new Spur VMs the > primitives do already access 16-bits, and extending the ClassBuilder > to allow specifying those classes is straight-forward. > >> Thanks, >> Dave > > _,,,^..^,,,_ > Eliot > >> >> >>> On Mon, Jan 18, 2016 at 03:32:21AM +0000, commits@source.squeak.org >>> wrote: >>> Eliot Miranda uploaded a new version of Kernel to project The Trunk: >>> http://source.squeak.org/trunk/Kernel-eem.980.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Kernel-eem.980 >>> Author: eem >>> Time: 18 January 2016, 7:32:08.6746 pm >>> UUID: 95543c3e-e2d1-4ec8-8ad2-a90fca9a2b06 >>> Ancestors: Kernel-tpr.979 >>> >>> Lay the ground work for double-byte strings (and possibly a 64-bit >>> indexable bits type). >>> >>> Test shallowCopy's error code and report primitive failure if it has >>> failed for other than being out of memory (which may simply imply the >>> need for a GC). >>> >>> =============== Diff against Kernel-tpr.979 =============== >>> >>> Item was changed: >>> ----- Method: Behavior>>format (in category 'accessing') ----- >>> format >>> "Answer an Integer that encodes the kinds and numbers of variables >>> of >>> + instances of the receiver. The format is (currently) composed of >>> two fields, >>> + a 16-bit instSize, in the least significant bits, specifying the >>> number of named >>> + inst vars, if any, and a 5-bit format field, describing the kind >>> of class. c.f. instSpec. >>> + (msb)<5 bit format><16 bit #fixed fields>(lsb)" >>> - instances of the receiver." >>> >>> ^format! >>> >>> Item was changed: >>> ----- Method: Behavior>>instSpec (in category 'testing') ----- >>> instSpec >>> "Answer the instance specification part of the format that defines >>> what kind of object >>> an instance of the receiver is. The formats are >>> 0 = 0 sized objects (UndefinedObject True False et al) >>> 1 = non-indexable objects with inst vars (Point et al) >>> 2 = indexable objects with no inst vars (Array et al) >>> 3 = indexable objects with inst vars (MethodContext >>> AdditionalMethodState et al) >>> 4 = weak indexable objects with inst vars (WeakArray et >>> al) >>> 5 = weak non-indexable objects with inst vars >>> (ephemerons) (Ephemeron) >>> 6 = unused >>> 7 = immediates (SmallInteger, Character) >>> 8 = unused >>> 9 = 64-bit indexable >>> + 10-11 = 32-bit indexable (Bitmap) (plus >>> one odd bit, unused in 32-bits) >>> + 12-15 = 16-bit indexable (plus >>> two odd bits, one unused in 32-bits) >>> + 16-23 = 8-bit indexable (plus >>> three odd bits, one unused in 32-bits) >>> + 24-31 = compiled methods (CompiledMethod) (plus three >>> odd bits, one unused in 32-bits) >>> + Note that in the VM instances also have a 5 bit format field that >>> relates to their class's format. >>> + Formats 11, 13-15, 17-23 & 25-31 are unused in classes but used >>> in instances to define the >>> + number of elements missing up to the slot size. For example, a >>> 2-byte ByteString instance >>> + has format 18 in 32-bits, since its size is one 32-bit slot - 2 >>> bytes ((18 bitAnd: 3) = 2), and >>> + 22 in 64 bits, since its size is one 64-bit slot - 6 bytes ((22 >>> bitAnd: 7) = 6)." >>> - 10-11 = 32-bit indexable (Bitmap) >>> - 12-15 = 16-bit indexable >>> - 16-23 = 8-bit indexable >>> - 24-31 = compiled methods (CompiledMethod)" >>> ^(format bitShift: -16) bitAnd: 16r1F! >>> >>> Item was changed: >>> ----- Method: Behavior>>kindOfSubclass (in category 'testing class >>> hierarchy') ----- >>> kindOfSubclass >>> "Answer a String that is the keyword that describes the receiver's >>> kind of subclass, >>> either a regular subclass, a variableSubclass, a >>> variableByteSubclass, >>> a variableWordSubclass, a weakSubclass, an ephemeronSubclass or >>> an immediateSubclass. >>> + c.f. typeOfClass & instSpec" >>> + ^(#(' subclass: ' >>> + ' subclass: ' >>> + ' variableSubclass: ' >>> + ' variableSubclass: ' >>> + ' weakSubclass: ' >>> + ' ephemeronSubclass: ' >>> + nil >>> + ' immediateSubclass: ' >>> + nil >>> + ' variableDoubleWordSubclass: ' >>> + ' variableWordSubclass: ' nil >>> + ' variableDoubleByteSubclass: ' nil nil nil >>> + ' variableByteSubclass: ' nil nil nil nil nil nil nil >>> + ' variableByteSubclass: ' nil nil nil nil nil nil nil ) >>> + at: self instSpec + 1) ifNil: >>> + [self error: 'invalid class type']! >>> - c.f. typeOfClass" >>> - ^self isVariable >>> - ifTrue: >>> - [self isBits >>> - ifTrue: >>> - [self isBytes >>> - ifTrue: [' variableByteSubclass: '] >>> - ifFalse: [' variableWordSubclass: ']] >>> - ifFalse: >>> - [self isWeak >>> - ifTrue: [' weakSubclass: '] >>> - ifFalse: [' variableSubclass: ']]] >>> - ifFalse: >>> - [self isImmediateClass >>> - ifTrue: [' immediateSubclass: '] >>> - ifFalse: >>> - [self isEphemeronClass >>> - ifTrue: [' ephemeronSubclass: '] >>> - ifFalse: [' subclass: ']]]! >>> >>> Item was changed: >>> ----- Method: Behavior>>typeOfClass (in category 'accessing') ----- >>> typeOfClass >>> + "Answer a symbol uniquely describing the type of the receiver. >>> c.f. kindOfSubclass, instSpec" >>> + ^(#(normal >>> + normal >>> + variable >>> + variable >>> + weak >>> + ephemeron >>> + nil >>> + immediate >>> + nil >>> + longs >>> + words nil >>> + shorts nil nil nil >>> + bytes nil nil nil nil nil nil nil >>> + compiledMethod nil nil nil nil nil nil nil) >>> + at: self instSpec + 1) ifNil: >>> + [self error: 'invalid class type']! >>> - "Answer a symbol uniquely describing the type of the receiver. >>> c.f. kindOfSubclass" >>> - self isBytes ifTrue: >>> - [^self instSpec = CompiledMethod instSpec >>> - ifTrue: [#compiledMethod] "Very special!!" >>> - ifFalse: [#bytes]]. >>> - (self isWords and: [self isPointers not]) ifTrue: >>> - [^self instSpec = SmallInteger instSpec >>> - ifTrue: [#immediate] "Very special!!" >>> - ifFalse: [#words]]. >>> - self isWeak ifTrue: [^#weak]. >>> - self isVariable ifTrue: [^#variable]. >>> - self isEphemeronClass ifTrue: [^#ephemeron]. >>> - ^#normal! >>> >>> Item was changed: >>> ----- Method: ClassBuilder>>computeFormat:instSize:forSuper: (in >>> category 'class format') ----- >>> computeFormat: type instSize: newInstSize forSuper: newSuper >>> "Compute the new format for making oldClass a subclass of >>> newSuper. >>> Answer the format or nil if there is any problem." >>> + | instSize isVar isPointers isWeak bitsUnitSize | >>> - | instSize isVar isWords isPointers isWeak | >>> type == #compiledMethod ifTrue: >>> [newInstSize > 0 ifTrue: >>> [self error: 'A compiled method class cannot have named >>> instance variables'. >>> ^nil]. >>> ^CompiledMethod format]. >>> instSize := newInstSize + (newSuper ifNil:[0] ifNotNil:[newSuper >>> instSize]). >>> instSize > 65535 ifTrue: >>> [self error: 'Class has too many instance variables (', >>> instSize printString,')'. >>> ^nil]. >>> + type == #normal ifTrue:[isVar := isWeak := false. isPointers := >>> true]. >>> + type == #bytes ifTrue:[isVar := true. bitsUnitSize := 1. >>> isPointers := isWeak := false]. >>> + type == #shorts ifTrue:[isVar := true. bitsUnitSize := 2. >>> isPointers := isWeak := false]. >>> + type == #words ifTrue:[isVar := true. bitsUnitSize := 4. >>> isPointers := isWeak := false]. >>> + type == #longs ifTrue:[isVar := true. bitsUnitSize := 8. >>> isPointers := isWeak := false]. >>> + type == #variable ifTrue:[isVar := isPointers := true. isWeak := >>> false]. >>> + type == #weak ifTrue:[isVar := isWeak := isPointers := true]. >>> + type == #ephemeron ifTrue:[isVar := false. isWeak := isPointers := >>> true]. >>> + type == #immediate ifTrue:[isVar := isWeak := isPointers := >>> false]. >>> - type == #normal ifTrue:[isVar := isWeak := false. isWords := >>> isPointers := true]. >>> - type == #bytes ifTrue:[isVar := true. isWords := isPointers := >>> isWeak := false]. >>> - type == #words ifTrue:[isVar := isWords := true. isPointers := >>> isWeak := false]. >>> - type == #variable ifTrue:[isVar := isPointers := isWords := true. >>> isWeak := false]. >>> - type == #weak ifTrue:[isVar := isWeak := isWords := isPointers := >>> true]. >>> - type == #ephemeron ifTrue:[isVar := false. isWeak := isWords := >>> isPointers := true]. >>> - type == #immediate ifTrue:[isVar := isWeak := isPointers := false. >>> isWords := true]. >>> (isPointers not and: [instSize > 0]) ifTrue: >>> [self error: 'A non-pointer class cannot have named instance >>> variables'. >>> ^nil]. >>> + ^self format: instSize variable: isVar bitsUnitSize: bitsUnitSize >>> pointers: isPointers weak: isWeak! >>> - ^self format: instSize variable: isVar words: isWords pointers: >>> isPointers weak: isWeak! >>> >>> Item was added: >>> + ----- Method: >>> ClassBuilder>>format:variable:bitsUnitSize:pointers:weak: (in category >>> 'class format') ----- >>> + format: nInstVars variable: isVar bitsUnitSize: bitsUnitSize >>> pointers: isPointers weak: isWeak >>> + "Compute the format for the given instance specfication. >>> + Above Cog Spur the class format is >>> + <5 bits inst spec><16 bits inst size> >>> + where the 5-bit inst spec is >>> + 0 = 0 sized objects (UndefinedObject True False et al) >>> + 1 = non-indexable objects with inst vars (Point et al) >>> + 2 = indexable objects with no inst vars (Array et al) >>> + 3 = indexable objects with inst vars (MethodContext >>> AdditionalMethodState et al) >>> + 4 = weak indexable objects with inst vars (WeakArray et >>> al) >>> + 5 = weak non-indexable objects with inst vars >>> (ephemerons) (Ephemeron) >>> + 6 = unused >>> + 7 = immediates (SmallInteger, Character, SmallFloat64) >>> + 8 = unused >>> + 9 = 64-bit indexable >>> + 10-11 = 32-bit indexable (Bitmap, WideString) >>> + 12-15 = 16-bit indexable >>> + 16-23 = 8-bit indexable (ByteString) >>> + 24-31 = compiled methods (CompiledMethod)" >>> + | instSpec | >>> + instSpec := isWeak >>> + ifTrue: >>> + [isVar >>> + ifTrue: [4] >>> + ifFalse: [5]] >>> + ifFalse: >>> + [isPointers >>> + ifTrue: >>> + [isVar >>> + ifTrue: [nInstVars > 0 ifTrue: [3] >>> ifFalse: [2]] >>> + ifFalse: [nInstVars > 0 ifTrue: >>> [1] ifFalse: [0]]] >>> + ifFalse: >>> + [isVar >>> + ifTrue: [bitsUnitSize caseOf: { >>> + [1] -> [16]. >>> + [2] -> [12]. >>> + [4] -> [10]. >>> + [8] -> [9] }] >>> + ifFalse: [7]]]. >>> + ^(instSpec bitShift: 16) + nInstVars! >>> >>> Item was changed: >>> ----- Method: Object>>shallowCopy (in category 'copying') ----- >>> shallowCopy >>> "Answer a copy of the receiver which shares the receiver's >>> instance variables." >>> | class newObject index | >>> + >>> + ec == #'insufficient object memory' ifFalse: >>> + [^self primitiveFailed]. >>> - >>> class := self class. >>> class isVariable >>> ifTrue: >>> [index := self basicSize. >>> + newObject := class basicNew: index. >>> + [index > 0] whileTrue: >>> + [newObject basicAt: index put: (self basicAt: index). >>> + index := index - 1]] >>> - newObject := class basicNew: index. >>> - [index > 0] >>> - whileTrue: >>> - [newObject basicAt: index put: (self basicAt: >>> index). >>> - index := index - 1]] >>> ifFalse: [newObject := class basicNew]. >>> index := class instSize. >>> + [index > 0] whileTrue: >>> + [newObject instVarAt: index put: (self instVarAt: index). >>> + index := index - 1]. >>> + ^newObject! >>> - [index > 0] >>> - whileTrue: >>> - [newObject instVarAt: index put: (self instVarAt: index). >>> - index := index - 1]. >>> - ^ newObject! >> > From asqueaker at gmail.com Wed Jan 27 02:52:11 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Jan 27 02:52:53 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: Message-ID: +1 for Kernel-Input or Kernel-Device. Sensors are concerned with bringing information from the outside world into the software system; like the eyes and ears of the computer. User-interface is concerned with the interactions between the software and the user. On Mon, Jan 25, 2016 at 10:01 AM, Eliot Miranda wrote: > Hi Frank, > > On Mon, Jan 25, 2016 at 8:18 AM, Frank Shearar > wrote: >> >> Kernel-Processes has Delay, Process, Monitor, Mutex, FutureMaker, >> Promise, etc. All these work together. They fit nicely in the >> category. >> >> And then there's InputSensor, EventSensor and EventSensorConstants. What. >> >> Where _should_ these classes belong? Maybe we should have a >> Kernel-Device or Kernel-Input category? > > > IMO they don't belong in the Kernel at all. I would add a UserInterface > package and put the prerequisites for Morphic, Smalltalk-80 and Graphics in > there. I'd also consider Headful and Headless packages for precursors of > headful and headless apps. > >> (I'll not mention how Kernel's InputSensor >> #keyboard uses >> TextConverter that causes a dependency on Multilingual, which of >> course has a dependency on Kernel... oh, wait, I did.) >> >> frank > > > _,,,^..^,,,_ > best, Eliot > > > From frank.shearar at gmail.com Wed Jan 27 10:24:55 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Wed Jan 27 10:24:57 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: Message-ID: That was my thinking, Chris. But InputSensor is, as far as I can tell, entirely ST80-specific. It's all about keyboards and pointers _for ST80_: the equivalent of Morphic's UserInputEvent. The only packages that reference it are ST80 and System, and System references it only because of #initializeStartUpList & #initializeShutDownList. (System has, as far as I can see, had this "soft" dependency on ST80 since at least 2010.) Given that, ST80 actually seems like the right place for these classes. frank On 27 January 2016 at 02:52, Chris Muller wrote: > +1 for Kernel-Input or Kernel-Device. Sensors are concerned with > bringing information from the outside world into the software system; > like the eyes and ears of the computer. > > User-interface is concerned with the interactions between the software > and the user. > > > On Mon, Jan 25, 2016 at 10:01 AM, Eliot Miranda wrote: >> Hi Frank, >> >> On Mon, Jan 25, 2016 at 8:18 AM, Frank Shearar >> wrote: >>> >>> Kernel-Processes has Delay, Process, Monitor, Mutex, FutureMaker, >>> Promise, etc. All these work together. They fit nicely in the >>> category. >>> >>> And then there's InputSensor, EventSensor and EventSensorConstants. What. >>> >>> Where _should_ these classes belong? Maybe we should have a >>> Kernel-Device or Kernel-Input category? >> >> >> IMO they don't belong in the Kernel at all. I would add a UserInterface >> package and put the prerequisites for Morphic, Smalltalk-80 and Graphics in >> there. I'd also consider Headful and Headless packages for precursors of >> headful and headless apps. >> >>> (I'll not mention how Kernel's InputSensor >> #keyboard uses >>> TextConverter that causes a dependency on Multilingual, which of >>> course has a dependency on Kernel... oh, wait, I did.) >>> >>> frank >> >> >> _,,,^..^,,,_ >> best, Eliot >> >> >> > From frank.shearar at gmail.com Wed Jan 27 11:01:03 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Wed Jan 27 11:01:04 2016 Subject: [squeak-dev] OS X-using, Ruby-using guinea pig? Message-ID: I'm trying to run squeak-ci on OS X machines (courtesy of the good folk at Travis CI), and am trying to debug a build failure. The full log is here - https://travis-ci.org/squeak-smalltalk/squeak-ci/jobs/105019185 - but the juicy bit is this: spawning command 0 with timeout 600 seconds: unset DISPLAY && "/var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak VM Opt" "-vm-display-null" "/Users/travis/build/squeak-smalltalk/squeak-ci/target/TrunkImage.image" "../save-image.st" (Command started with PID 556) sh: /var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak VM Opt: Permission denied rake aborted! Process 556 failed with exit status 126 Would some kind soul please do the following, and report the results? * git clone https://github.com/squeak-smalltalk/squeak-ci * cd squeak-ci * comment out this line: https://github.com/squeak-smalltalk/squeak-ci/blob/master/lib/squeak-ci/build.rb#L48 * bundle install * bundle exec rake I'm particularly interested in whether this works on your machine. Hopefully it fails in the same way, giving us something debuggable. If so, what are the permissions of "Squeak VM Opt" ? frank From lists at fniephaus.com Wed Jan 27 11:07:40 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Jan 27 11:07:52 2016 Subject: [squeak-dev] OS X-using, Ruby-using guinea pig? In-Reply-To: References: Message-ID: I haven't played around much with squeak-ci yet, but does "Squeak VM Opt" even exist? Shouldn't it be just "Squeak"? On Wed, Jan 27, 2016 at 11:01 AM Frank Shearar wrote: > I'm trying to run squeak-ci on OS X machines (courtesy of the good > folk at Travis CI), and am trying to debug a build failure. The full > log is here - > https://travis-ci.org/squeak-smalltalk/squeak-ci/jobs/105019185 > - but the juicy bit is this: > > spawning command 0 with timeout 600 seconds: unset DISPLAY && > > "/var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak > VM Opt" "-vm-display-null" > "/Users/travis/build/squeak-smalltalk/squeak-ci/target/TrunkImage.image" > "../save-image.st" > (Command started with PID 556) > sh: > /var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak > VM Opt: Permission denied > rake aborted! > Process 556 failed with exit status 126 > > Would some kind soul please do the following, and report the results? > * git clone https://github.com/squeak-smalltalk/squeak-ci > * cd squeak-ci > * comment out this line: > > https://github.com/squeak-smalltalk/squeak-ci/blob/master/lib/squeak-ci/build.rb#L48 > * bundle install > * bundle exec rake > > I'm particularly interested in whether this works on your machine. > Hopefully it fails in the same way, giving us something debuggable. If > so, what are the permissions of "Squeak VM Opt" ? > > frank > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160127/14aae2ae/attachment.htm From Das.Linux at gmx.de Wed Jan 27 11:23:52 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Jan 27 11:23:56 2016 Subject: [squeak-dev] OS X-using, Ruby-using guinea pig? In-Reply-To: References: Message-ID: On 27.01.2016, at 12:07, Fabio Niephaus wrote: > I haven't played around much with squeak-ci yet, but does "Squeak VM Opt" even exist? > Shouldn't it be just "Squeak"? well, it depends on the vm app bundle. Some use Squeak VM Opt, some use Squeak, some use Croquet. I don't know off-hand which uses which. But indeed, the Cog.app which is used in the process uses "Squeak". Nota bene: I don't think we need the copy-vm-to-temp-dir for osx and/or travis-ci. This is entirely a jenkins thing. Frank, I noticed that you started playing around with the squeak-ci repo using travis/appveyor. That's great! Yet, IMHO the squeak-ci repo has suffered a tad from being bent and bent to make jenkins happy. What about a fresh start, probably even using smalltalkCI? What about a squeak-smalltalk/squeak repo? Kidding a bit but I actually want to be there in some year, don't y'all think? Best regards -Tobias > > > On Wed, Jan 27, 2016 at 11:01 AM Frank Shearar wrote: > I'm trying to run squeak-ci on OS X machines (courtesy of the good > folk at Travis CI), and am trying to debug a build failure. The full > log is here - https://travis-ci.org/squeak-smalltalk/squeak-ci/jobs/105019185 > - but the juicy bit is this: > > spawning command 0 with timeout 600 seconds: unset DISPLAY && > "/var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak > VM Opt" "-vm-display-null" > "/Users/travis/build/squeak-smalltalk/squeak-ci/target/TrunkImage.image" > "../save-image.st" > (Command started with PID 556) > sh: /var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak > VM Opt: Permission denied > rake aborted! > Process 556 failed with exit status 126 > > Would some kind soul please do the following, and report the results? > * git clone https://github.com/squeak-smalltalk/squeak-ci > * cd squeak-ci > * comment out this line: > https://github.com/squeak-smalltalk/squeak-ci/blob/master/lib/squeak-ci/build.rb#L48 > * bundle install > * bundle exec rake > > I'm particularly interested in whether this works on your machine. > Hopefully it fails in the same way, giving us something debuggable. If > so, what are the permissions of "Squeak VM Opt" ? > > frank > > From frank.shearar at gmail.com Wed Jan 27 11:25:32 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Wed Jan 27 11:25:34 2016 Subject: [squeak-dev] OS X-using, Ruby-using guinea pig? In-Reply-To: References: Message-ID: The file definitely exists: http://www.squeakvm.org/mac/release/Squeak%204.2.5beta1U.zip contains it. Is that _right_? I don't know. I last seriously worked on the OS X side of CI well over a year ago. frank On 27 January 2016 at 11:07, Fabio Niephaus wrote: > I haven't played around much with squeak-ci yet, but does "Squeak VM Opt" > even exist? > Shouldn't it be just "Squeak"? > > > On Wed, Jan 27, 2016 at 11:01 AM Frank Shearar > wrote: >> >> I'm trying to run squeak-ci on OS X machines (courtesy of the good >> folk at Travis CI), and am trying to debug a build failure. The full >> log is here - >> https://travis-ci.org/squeak-smalltalk/squeak-ci/jobs/105019185 >> - but the juicy bit is this: >> >> spawning command 0 with timeout 600 seconds: unset DISPLAY && >> >> "/var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak >> VM Opt" "-vm-display-null" >> "/Users/travis/build/squeak-smalltalk/squeak-ci/target/TrunkImage.image" >> "../save-image.st" >> (Command started with PID 556) >> sh: >> /var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak >> VM Opt: Permission denied >> rake aborted! >> Process 556 failed with exit status 126 >> >> Would some kind soul please do the following, and report the results? >> * git clone https://github.com/squeak-smalltalk/squeak-ci >> * cd squeak-ci >> * comment out this line: >> >> https://github.com/squeak-smalltalk/squeak-ci/blob/master/lib/squeak-ci/build.rb#L48 >> * bundle install >> * bundle exec rake >> >> I'm particularly interested in whether this works on your machine. >> Hopefully it fails in the same way, giving us something debuggable. If >> so, what are the permissions of "Squeak VM Opt" ? >> >> frank >> > > > From frank.shearar at gmail.com Wed Jan 27 11:35:59 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Wed Jan 27 11:36:01 2016 Subject: [squeak-dev] OS X-using, Ruby-using guinea pig? In-Reply-To: References: Message-ID: On 27 January 2016 at 11:23, Tobias Pape wrote: > > On 27.01.2016, at 12:07, Fabio Niephaus wrote: > >> I haven't played around much with squeak-ci yet, but does "Squeak VM Opt" even exist? >> Shouldn't it be just "Squeak"? > > well, it depends on the vm app bundle. > Some use Squeak VM Opt, some use Squeak, some use Croquet. > I don't know off-hand which uses which. > > But indeed, the Cog.app which is used in the process uses "Squeak". > Nota bene: I don't think we need the copy-vm-to-temp-dir for osx and/or > travis-ci. This is entirely a jenkins thing. > > > > Frank, I noticed that you started playing around with the squeak-ci repo > using travis/appveyor. > That's great! Mainly, I wanted to investigate the NuScratch image (reverse engineering the GPIO FFI) and squeak-ci provides a convenient way of building/installing whatever VM you want. And then I found that things were a bit broken on Windows, so figured that AppVeyor would let that stop happening :) Today (hence my other thread) I remembered that Travis also run images on OS X, and figured I'd try get that working too. Also makes keeping an OS X build slave available much easier! > Yet, IMHO the squeak-ci repo has suffered > a tad from being bent and bent to make jenkins happy. Has it been bent & bent? Jenkins doesn't care: it just invokes scripts, which have all the smarts. Which is exactly what we want, because it keeps us more or less independent of CI systems, hence more portable. > What about a fresh start, probably even using smalltalkCI? > What about a squeak-smalltalk/squeak repo? Kidding a bit but I actually want to > be there in some year, don't y'all think? I don't want want to sound like I _object_ to moving to smalltalkCI - I don't care what tech we use as long as we're testing Smalltalk images in a repeatable fashion. So maybe squeak-ci filled a need that we can now address in other fashions. I don't really know. I wrote it mainly to run the Squeak base image tests, and then noticed later that I could test packages too. I guess the nice thing about squeak-ci is that testing a new package means adding a how-to-load-a-package script, and how-to-run-the-tests script, for a package. That package can be hosted in squeaksource, SS3, GitHub, whatever. On the other hand smalltalkCI would require the packages to be hosted on GitHub, wouldn't they? But what's nice is that _the package maintainer_ bears the burden of making things work in CI. (I suppose actually that a package maintainer could write a _stub_ GitHub project that just had a .travis.yml with an install script describing how to download the package from, say, SS3?) frank > Best regards > -Tobias > > >> >> >> On Wed, Jan 27, 2016 at 11:01 AM Frank Shearar wrote: >> I'm trying to run squeak-ci on OS X machines (courtesy of the good >> folk at Travis CI), and am trying to debug a build failure. The full >> log is here - https://travis-ci.org/squeak-smalltalk/squeak-ci/jobs/105019185 >> - but the juicy bit is this: >> >> spawning command 0 with timeout 600 seconds: unset DISPLAY && >> "/var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak >> VM Opt" "-vm-display-null" >> "/Users/travis/build/squeak-smalltalk/squeak-ci/target/TrunkImage.image" >> "../save-image.st" >> (Command started with PID 556) >> sh: /var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak >> VM Opt: Permission denied >> rake aborted! >> Process 556 failed with exit status 126 >> >> Would some kind soul please do the following, and report the results? >> * git clone https://github.com/squeak-smalltalk/squeak-ci >> * cd squeak-ci >> * comment out this line: >> https://github.com/squeak-smalltalk/squeak-ci/blob/master/lib/squeak-ci/build.rb#L48 >> * bundle install >> * bundle exec rake >> >> I'm particularly interested in whether this works on your machine. >> Hopefully it fails in the same way, giving us something debuggable. If >> so, what are the permissions of "Squeak VM Opt" ? >> >> frank >> >> > > From eliot.miranda at gmail.com Wed Jan 27 12:29:22 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Jan 27 12:29:29 2016 Subject: [squeak-dev] OS X-using, Ruby-using guinea pig? In-Reply-To: References: Message-ID: <455E8E15-5D74-4C8A-B046-51060AA86EE5@gmail.com> Squeak VM Opt is a pre-Cog context interpreter VM. Just so you know, that definitely /won't/ run trunk Spur images. As yet we have no context interpreter Spur VMs. _,,,^..^,,,_ (phone) > On Jan 27, 2016, at 3:25 AM, Frank Shearar wrote: > > The file definitely exists: > http://www.squeakvm.org/mac/release/Squeak%204.2.5beta1U.zip contains > it. Is that _right_? I don't know. I last seriously worked on the OS X > side of CI well over a year ago. > > frank > >> On 27 January 2016 at 11:07, Fabio Niephaus wrote: >> I haven't played around much with squeak-ci yet, but does "Squeak VM Opt" >> even exist? >> Shouldn't it be just "Squeak"? >> >> >> On Wed, Jan 27, 2016 at 11:01 AM Frank Shearar >> wrote: >>> >>> I'm trying to run squeak-ci on OS X machines (courtesy of the good >>> folk at Travis CI), and am trying to debug a build failure. The full >>> log is here - >>> https://travis-ci.org/squeak-smalltalk/squeak-ci/jobs/105019185 >>> - but the juicy bit is this: >>> >>> spawning command 0 with timeout 600 seconds: unset DISPLAY && >>> >>> "/var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak >>> VM Opt" "-vm-display-null" >>> "/Users/travis/build/squeak-smalltalk/squeak-ci/target/TrunkImage.image" >>> "../save-image.st" >>> (Command started with PID 556) >>> sh: >>> /var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak >>> VM Opt: Permission denied >>> rake aborted! >>> Process 556 failed with exit status 126 >>> >>> Would some kind soul please do the following, and report the results? >>> * git clone https://github.com/squeak-smalltalk/squeak-ci >>> * cd squeak-ci >>> * comment out this line: >>> >>> https://github.com/squeak-smalltalk/squeak-ci/blob/master/lib/squeak-ci/build.rb#L48 >>> * bundle install >>> * bundle exec rake >>> >>> I'm particularly interested in whether this works on your machine. >>> Hopefully it fails in the same way, giving us something debuggable. If >>> so, what are the permissions of "Squeak VM Opt" ? >>> >>> frank > From lewis at mail.msen.com Wed Jan 27 13:16:27 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Jan 27 13:16:30 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: Message-ID: <20160127131627.GA52108@shell.msen.com> On Wed, Jan 27, 2016 at 10:24:55AM +0000, Frank Shearar wrote: > That was my thinking, Chris. But InputSensor is, as far as I can tell, > entirely ST80-specific. It's all about keyboards and pointers _for > ST80_: the equivalent of Morphic's UserInputEvent. > > The only packages that reference it are ST80 and System, and System > references it only because of #initializeStartUpList & > #initializeShutDownList. (System has, as far as I can see, had this > "soft" dependency on ST80 since at least 2010.) > > Given that, ST80 actually seems like the right place for these classes. That sounds reasonable, but one sanity check: ST80 is a reloadable package (or at least it was, and it definitely /should/ be). I think that will still be the case if we move InputSensor to ST80, but I'd want to check and make sure we don't break the unloadable/reloadable aspect. This is probably a non-issue, but I can't check it right now so I'm just mentioning it as a reminder. Dave > > frank > > On 27 January 2016 at 02:52, Chris Muller wrote: > > +1 for Kernel-Input or Kernel-Device. Sensors are concerned with > > bringing information from the outside world into the software system; > > like the eyes and ears of the computer. > > > > User-interface is concerned with the interactions between the software > > and the user. > > > > > > On Mon, Jan 25, 2016 at 10:01 AM, Eliot Miranda wrote: > >> Hi Frank, > >> > >> On Mon, Jan 25, 2016 at 8:18 AM, Frank Shearar > >> wrote: > >>> > >>> Kernel-Processes has Delay, Process, Monitor, Mutex, FutureMaker, > >>> Promise, etc. All these work together. They fit nicely in the > >>> category. > >>> > >>> And then there's InputSensor, EventSensor and EventSensorConstants. What. > >>> > >>> Where _should_ these classes belong? Maybe we should have a > >>> Kernel-Device or Kernel-Input category? > >> > >> > >> IMO they don't belong in the Kernel at all. I would add a UserInterface > >> package and put the prerequisites for Morphic, Smalltalk-80 and Graphics in > >> there. I'd also consider Headful and Headless packages for precursors of > >> headful and headless apps. > >> > >>> (I'll not mention how Kernel's InputSensor >> #keyboard uses > >>> TextConverter that causes a dependency on Multilingual, which of > >>> course has a dependency on Kernel... oh, wait, I did.) > >>> > >>> frank > >> > >> > >> _,,,^..^,,,_ > >> best, Eliot > >> > >> > >> > > From frank.shearar at gmail.com Wed Jan 27 14:41:54 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Wed Jan 27 14:41:57 2016 Subject: [squeak-dev] OS X-using, Ruby-using guinea pig? In-Reply-To: <455E8E15-5D74-4C8A-B046-51060AA86EE5@gmail.com> References: <455E8E15-5D74-4C8A-B046-51060AA86EE5@gmail.com> Message-ID: Yep: `rake build` in squeak-ci builds NON-Spur images, and tries to make the Interpreter-friendly as well, with ckformat. This works fine in Linux, and not so much in Windows and OS X. `rake spur_build` does the obvious :) I realise we'll eventually only have Spur images, but I'm trying to reinvigorate the non-Spur stuff to try get a stable baseline for the current world. frank On 27 January 2016 at 12:29, Eliot Miranda wrote: > Squeak VM Opt is a pre-Cog context interpreter VM. Just so you know, that definitely /won't/ run trunk Spur images. As yet we have no context interpreter Spur VMs. > > _,,,^..^,,,_ (phone) > >> On Jan 27, 2016, at 3:25 AM, Frank Shearar wrote: >> >> The file definitely exists: >> http://www.squeakvm.org/mac/release/Squeak%204.2.5beta1U.zip contains >> it. Is that _right_? I don't know. I last seriously worked on the OS X >> side of CI well over a year ago. >> >> frank >> >>> On 27 January 2016 at 11:07, Fabio Niephaus wrote: >>> I haven't played around much with squeak-ci yet, but does "Squeak VM Opt" >>> even exist? >>> Shouldn't it be just "Squeak"? >>> >>> >>> On Wed, Jan 27, 2016 at 11:01 AM Frank Shearar >>> wrote: >>>> >>>> I'm trying to run squeak-ci on OS X machines (courtesy of the good >>>> folk at Travis CI), and am trying to debug a build failure. The full >>>> log is here - >>>> https://travis-ci.org/squeak-smalltalk/squeak-ci/jobs/105019185 >>>> - but the juicy bit is this: >>>> >>>> spawning command 0 with timeout 600 seconds: unset DISPLAY && >>>> >>>> "/var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak >>>> VM Opt" "-vm-display-null" >>>> "/Users/travis/build/squeak-smalltalk/squeak-ci/target/TrunkImage.image" >>>> "../save-image.st" >>>> (Command started with PID 556) >>>> sh: >>>> /var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak >>>> VM Opt: Permission denied >>>> rake aborted! >>>> Process 556 failed with exit status 126 >>>> >>>> Would some kind soul please do the following, and report the results? >>>> * git clone https://github.com/squeak-smalltalk/squeak-ci >>>> * cd squeak-ci >>>> * comment out this line: >>>> >>>> https://github.com/squeak-smalltalk/squeak-ci/blob/master/lib/squeak-ci/build.rb#L48 >>>> * bundle install >>>> * bundle exec rake >>>> >>>> I'm particularly interested in whether this works on your machine. >>>> Hopefully it fails in the same way, giving us something debuggable. If >>>> so, what are the permissions of "Squeak VM Opt" ? >>>> >>>> frank >> > From ron at usmedrec.com Wed Jan 27 20:41:46 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Wed Jan 27 20:41:44 2016 Subject: [squeak-dev] Squeak Oversight Board 2016 and How do I vote? Message-ID: <316201d15943$23e95470$6bbbfd50$@usmedrec.com> Hi All, We currently have 7 candidates for 7 board seats. Tim Rowledge Marcel Taeumel Craig Latta Bert Freudenberg Chris Muller David T. Lewis Edgar J. De Cleene That is great but I know we can do better. This community is full of wonderful people. Please announce your candidacy soon if you are going to run. Voting is important! When voting starts on the 1st of February watch for your email ballot and VOTE! If you were invited to vote last year you are already on the list, no worries! If you are a new Squeaker and wish to vote do ONE of the following: 1. Get a "known" Squeaker to vouch for you. If a known Squeaker sends an email to voters@squeak.org giving me your name and email for you - I will add you. 2. Send an email to voters@squeak.org presenting yourself with information/arguments showing me that you are indeed serious about voting and that you are indeed a Squeaker. And no, I don't have any hints on what you should write! :) Unless you totally screw that up, you will probably be added. And no, don't send me a 10 page essay ;) When the voting period starts all voters will receive an email with instructions and a link to the voting website. Please get on the voter list before the voting starts! If your email has changed please let me know by sending an email to voters@squeak.org. 2016 is going to be a great year for Squeak and Smalltalk! All the best, Ron Teitelbaum -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160127/993ecf62/attachment.htm From lists at fniephaus.com Wed Jan 27 23:06:22 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Jan 27 23:06:35 2016 Subject: [squeak-dev] OS X-using, Ruby-using guinea pig? In-Reply-To: References: Message-ID: I'm also happy to help to get all of this working with smalltalkCI. Best, Fabio -- On Wed, Jan 27, 2016 at 11:23 AM Tobias Pape wrote: > > On 27.01.2016, at 12:07, Fabio Niephaus wrote: > > > I haven't played around much with squeak-ci yet, but does "Squeak VM > Opt" even exist? > > Shouldn't it be just "Squeak"? > > well, it depends on the vm app bundle. > Some use Squeak VM Opt, some use Squeak, some use Croquet. > I don't know off-hand which uses which. > > But indeed, the Cog.app which is used in the process uses "Squeak". > Nota bene: I don't think we need the copy-vm-to-temp-dir for osx and/or > travis-ci. This is entirely a jenkins thing. > > > > Frank, I noticed that you started playing around with the squeak-ci repo > using travis/appveyor. > That's great! > Yet, IMHO the squeak-ci repo has suffered > a tad from being bent and bent to make jenkins happy. > > What about a fresh start, probably even using smalltalkCI? > What about a squeak-smalltalk/squeak repo? Kidding a bit but I actually > want to > be there in some year, don't y'all think? > > > > Best regards > -Tobias > > > > > > > > On Wed, Jan 27, 2016 at 11:01 AM Frank Shearar > wrote: > > I'm trying to run squeak-ci on OS X machines (courtesy of the good > > folk at Travis CI), and am trying to debug a build failure. The full > > log is here - > https://travis-ci.org/squeak-smalltalk/squeak-ci/jobs/105019185 > > - but the juicy bit is this: > > > > spawning command 0 with timeout 600 seconds: unset DISPLAY && > > > "/var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak > > VM Opt" "-vm-display-null" > > "/Users/travis/build/squeak-smalltalk/squeak-ci/target/TrunkImage.image" > > "../save-image.st" > > (Command started with PID 556) > > sh: > /var/folders/gw/_2jq29095y7b__wtby9dg_5h0000gn/T/d20160126-547-19ihlo2/Contents/MacOS/Squeak > > VM Opt: Permission denied > > rake aborted! > > Process 556 failed with exit status 126 > > > > Would some kind soul please do the following, and report the results? > > * git clone https://github.com/squeak-smalltalk/squeak-ci > > * cd squeak-ci > > * comment out this line: > > > https://github.com/squeak-smalltalk/squeak-ci/blob/master/lib/squeak-ci/build.rb#L48 > > * bundle install > > * bundle exec rake > > > > I'm particularly interested in whether this works on your machine. > > Hopefully it fails in the same way, giving us something debuggable. If > > so, what are the permissions of "Squeak VM Opt" ? > > > > frank > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160127/28caf47c/attachment.htm From commits at source.squeak.org Thu Jan 28 02:26:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Jan 28 02:26:01 2016 Subject: [squeak-dev] The Inbox: Monticello-cbc.626.mcz Message-ID: A new version of Monticello was added to project The Inbox: http://source.squeak.org/inbox/Monticello-cbc.626.mcz ==================== Summary ==================== Name: Monticello-cbc.626 Author: cbc Time: 28 January 2016, 6:25:43.135067 pm UUID: f94312e2-6623-41f7-8ceb-07b756844a4d Ancestors: Monticello-eem.625 Improve the naming of the merge buttons in the MergeBrowser. Keep is now Incoming; Reject is not Current. Also, baloon text is updated to be more illuminating about what is happening. =============== Diff against Monticello-eem.625 =============== Item was changed: ----- Method: MCMergeBrowser>>buttonSpecs (in category 'as yet unclassified') ----- buttonSpecs ^ #((Merge merge 'Proceed with the merge' canMerge) (Cancel cancel 'Cancel the merge') ('All Newer' chooseAllNewerConflicts 'Choose all newer conflict versions') ('All Older' chooseAllOlderConflicts 'Choose all older conflict versions') + ('Rest Current' chooseAllUnchosenLocal 'Choose current versions in the image for all remaining conflicts') + ('Rest Incoming' chooseAllUnchosenRemote 'Choose incoming versions of all remaining conflicts') - ('Rest Local' chooseAllUnchosenLocal 'Choose local versions of all remaining conflicts') - ('Rest Remote' chooseAllUnchosenRemote 'Choose remote versions of all remaining conflicts') )! Item was changed: ----- Method: MCMergeBrowser>>getConflictMenu: (in category 'as yet unclassified') ----- getConflictMenu: aMenu selection remoteChosen + ifTrue: [aMenu add: 'undo accept incoming' target: self selector: #clearChoice] + ifFalse: [aMenu add: 'accept incoming' target: self selector: #chooseRemote]. - ifTrue: [aMenu add: 'undo keep change' target: self selector: #clearChoice] - ifFalse: [aMenu add: 'keep change' target: self selector: #chooseRemote]. selection localChosen + ifTrue: [aMenu add: 'undo current version' target: self selector: #clearChoice] + ifFalse: [aMenu add: 'current version' target: self selector: #chooseLocal]. - ifTrue: [aMenu add: 'undo reject change' target: self selector: #clearChoice] - ifFalse: [aMenu add: 'reject change' target: self selector: #chooseLocal]. ^ aMenu! Item was changed: ----- Method: MCMergeBrowser>>innerButtonSpecs (in category 'as yet unclassified') ----- innerButtonSpecs ^ + #((Incoming chooseRemote 'Accept the incoming change, replacing the version in my image' ) + (Current chooseLocal 'Keep the current version in the image, rejecting the incoming change' ))! - #((Keep chooseRemote 'keep the selected change' ) - (Reject chooseLocal 'reject the selected change' ))! From Das.Linux at gmx.de Thu Jan 28 05:59:56 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Jan 28 06:00:00 2016 Subject: [squeak-dev] The Inbox: Monticello-cbc.626.mcz Message-ID: <36E35CF0-F8AD-4E5F-8228-2F9051B0339D@gmx.de> Ok, I am late to the game, but If the tooltip already says 'Choose current versions in the image for all remaining conflicts' why not use 'choose image'? I think this is pretty understandable :) Just to mention it. Best regards -Tobias On 28.01.2016, at 02:25, commits@source.squeak.org wrote: > A new version of Monticello was added to project The Inbox: > http://source.squeak.org/inbox/Monticello-cbc.626.mcz > > ==================== Summary ==================== > > Name: Monticello-cbc.626 > Author: cbc > Time: 28 January 2016, 6:25:43.135067 pm > UUID: f94312e2-6623-41f7-8ceb-07b756844a4d > Ancestors: Monticello-eem.625 > > Improve the naming of the merge buttons in the MergeBrowser. Keep is now Incoming; Reject is not Current. > Also, baloon text is updated to be more illuminating about what is happening. > > =============== Diff against Monticello-eem.625 =============== > > Item was changed: > ----- Method: MCMergeBrowser>>buttonSpecs (in category 'as yet unclassified') ----- > buttonSpecs > ^ #((Merge merge 'Proceed with the merge' canMerge) > (Cancel cancel 'Cancel the merge') > ('All Newer' chooseAllNewerConflicts 'Choose all newer conflict versions') > ('All Older' chooseAllOlderConflicts 'Choose all older conflict versions') > + ('Rest Current' chooseAllUnchosenLocal 'Choose current versions in the image for all remaining conflicts') > + ('Rest Incoming' chooseAllUnchosenRemote 'Choose incoming versions of all remaining conflicts') > - ('Rest Local' chooseAllUnchosenLocal 'Choose local versions of all remaining conflicts') > - ('Rest Remote' chooseAllUnchosenRemote 'Choose remote versions of all remaining conflicts') > )! > > Item was changed: > ----- Method: MCMergeBrowser>>getConflictMenu: (in category 'as yet unclassified') ----- > getConflictMenu: aMenu > selection remoteChosen > + ifTrue: [aMenu add: 'undo accept incoming' target: self selector: #clearChoice] > + ifFalse: [aMenu add: 'accept incoming' target: self selector: #chooseRemote]. > - ifTrue: [aMenu add: 'undo keep change' target: self selector: #clearChoice] > - ifFalse: [aMenu add: 'keep change' target: self selector: #chooseRemote]. > selection localChosen > + ifTrue: [aMenu add: 'undo current version' target: self selector: #clearChoice] > + ifFalse: [aMenu add: 'current version' target: self selector: #chooseLocal]. > - ifTrue: [aMenu add: 'undo reject change' target: self selector: #clearChoice] > - ifFalse: [aMenu add: 'reject change' target: self selector: #chooseLocal]. > ^ aMenu! > > Item was changed: > ----- Method: MCMergeBrowser>>innerButtonSpecs (in category 'as yet unclassified') ----- > innerButtonSpecs > ^ > + #((Incoming chooseRemote 'Accept the incoming change, replacing the version in my image' ) > + (Current chooseLocal 'Keep the current version in the image, rejecting the incoming change' ))! > - #((Keep chooseRemote 'keep the selected change' ) > - (Reject chooseLocal 'reject the selected change' ))! > > From rpboland at gmail.com Thu Jan 28 06:13:35 2016 From: rpboland at gmail.com (Ralph Boland) Date: Thu Jan 28 06:13:38 2016 Subject: [squeak-dev] Tetris in Smalltalk Message-ID: Does anyone know of any version of Tetris implemented in Smalltalk preferably open source? I am investigating creating an educational game based on Tetris and would like to minimize my efforts so an implementation of the basic game would be of considerable value. I intend to make the game open source as well. Ralph Boland From squeaklist at gmail.com Thu Jan 28 06:18:09 2016 From: squeaklist at gmail.com (Kjell Godo) Date: Thu Jan 28 06:18:12 2016 Subject: [squeak-dev] Tetris in Smalltalk In-Reply-To: References: Message-ID: there is one or two in the Catalog of Packages In the Pharo image you get to via a subMenu of the world menu you get by left clicking on the background of the main Pharo window On Wednesday, January 27, 2016, Ralph Boland wrote: > Does anyone know of any version of Tetris implemented in Smalltalk > preferably open source? > I am investigating creating an educational game based on Tetris and > would like to minimize > my efforts so an implementation of the basic game would be of > considerable value. > > I intend to make the game open source as well. > > Ralph Boland > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160127/53631b34/attachment.htm From edgardec2005 at gmail.com Thu Jan 28 10:09:59 2016 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Thu Jan 28 10:10:11 2016 Subject: [squeak-dev] Tetris in Smalltalk In-Reply-To: Message-ID: Any Squeak with old Games have it. Try http://squeakros.org/FunSqueak4.6/FunSqueak4dot6-alpha.137921.0.zip On 1/28/16, 3:13 AM, "Ralph Boland" wrote: > Does anyone know of any version of Tetris implemented in Smalltalk > preferably open source? > I am investigating creating an educational game based on Tetris and > would like to minimize > my efforts so an implementation of the basic game would be of > considerable value. > > I intend to make the game open source as well. > > Ralph Boland From karlramberg at gmail.com Thu Jan 28 14:11:15 2016 From: karlramberg at gmail.com (karl ramberg) Date: Thu Jan 28 14:11:23 2016 Subject: [squeak-dev] Tetris in Smalltalk In-Reply-To: References: Message-ID: MCHttpRepository location: 'http://www.squeaksource.com/Games' user: '' password: '' Best, Karl On Thu, Jan 28, 2016 at 11:09 AM, Edgar J. De Cleene wrote: > Any Squeak with old Games have it. > > Try http://squeakros.org/FunSqueak4.6/FunSqueak4dot6-alpha.137921.0.zip > > > On 1/28/16, 3:13 AM, "Ralph Boland" wrote: > > > Does anyone know of any version of Tetris implemented in Smalltalk > > preferably open source? > > I am investigating creating an educational game based on Tetris and > > would like to minimize > > my efforts so an implementation of the basic game would be of > > considerable value. > > > > I intend to make the game open source as well. > > > > Ralph Boland > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160128/48f4c400/attachment-0001.htm From commits at source.squeak.org Fri Jan 29 04:38:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 29 04:38:11 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz Message-ID: David T. Lewis uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-dtl.790.mcz ==================== Summary ==================== Name: System-dtl.790 Author: dtl Time: 29 January 2016, 11:37:48.065507 pm UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07 Ancestors: System-eem.789 Update vmStatisticsReportString to restore memory stats when running on pre-spur VM. =============== Diff against System-eem.789 =============== Item was changed: ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') ----- vmStatisticsReportString "(Workspace new contents: Smalltalk vmStatisticsReportString) openLabel: 'VM Statistics'" "StringHolderView open: (StringHolder new contents: Smalltalk vmStatisticsReportString) label: 'VM Statistics'" | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | params := self getVMParameters. oldSpaceEnd := params at: 1. youngSpaceEnd := params at: 2. memorySize := params at: 3. fullGCs := params at: 7. fullGCTime := params at: 8. incrGCs := params at: 9. incrGCTime := params at: 10. tenureCount := params at: 11. upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in later Spur VMs" ifTrue: [Time utcMicrosecondClock - (params at: 20) + 500 // 1000] ifFalse: [Time eventMillisecondClock]. "Fall back on old microsecond clock; Good for 47.5 days" str := WriteStream on: (String new: 700). str nextPutAll: 'uptime '; print: (upTime / 1000 / 60 // 60); nextPut: $h; print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. str nextPutAll: 'memory '; nextPutAll: memorySize asStringWithCommas; nextPutAll: ' bytes'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. - youngSize := params at: 44. - str nextPutAll: ' young '; - nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes ('; - print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. - youngSize := youngSpaceEnd. "used eden" - freeSize := (params at: 54) + (params at: 44) - youngSize. - used := youngSize + oldSpaceEnd - freeSize. - str nextPutAll: ' used '; - nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; - print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. - str nextPutAll: ' free '; - nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes ('; - print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. + params size >= 54 ifTrue: [ "Spur object memory" + youngSize := params at: 44. + str nextPutAll: ' young '; + nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes ('; + print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. + youngSize := youngSpaceEnd. "used eden" + freeSize := (params at: 54) + (params at: 44) - youngSize. + used := youngSize + oldSpaceEnd - freeSize. + str nextPutAll: ' used '; + nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; + print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. + str nextPutAll: ' free '; + nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes ('; + print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr + ] ifFalse: [ "Earlier VM and V3 object memory" + str nextPutAll: ' young '; + nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; + print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. + str nextPutAll: ' used '; + nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; + print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. + str nextPutAll: ' free '; + nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; + print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. + ]. + str nextPutAll: 'GCs '; nextPutAll: (fullGCs + incrGCs) asStringWithCommas. fullGCs + incrGCs > 0 ifTrue: [ str nextPutAll: ' ('; print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; nextPutAll: ' ms between GCs)' ]. str cr. str nextPutAll: ' full '; nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms ('; print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime)'. fullGCs = 0 ifFalse: [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms']. str cr. str nextPutAll: ' incr '; nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms ('; print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse: [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)']. str cr. LastStats ifNil: [LastStats := Array new: 6] ifNotNil: [ upTime2 := upTime - (LastStats at: 1). fullGCs2 := fullGCs - (LastStats at: 2). fullGCTime2 := fullGCTime - (LastStats at: 3). incrGCs2 := incrGCs - (LastStats at: 4). incrGCTime2 := incrGCTime - (LastStats at: 5). tenureCount2 := tenureCount - (LastStats at: 6). str nextPutAll: self textMarkerForShortReport ; nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. fullGCs2 + incrGCs2 > 0 ifTrue: [ str nextPutAll: ' ('; print: upTime2 // (fullGCs2 + incrGCs2); nextPutAll: ' ms between GCs)'. ]. str cr. str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr. str nextPutAll: ' full '; nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms ('; print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime)'. fullGCs2 = 0 ifFalse: [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms']. str cr. str nextPutAll: ' incr '; nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms ('; print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime), avg '. incrGCs2 > 0 ifTrue: [ str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms' ]. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount2 asStringWithCommas. tenureCount2 = 0 ifFalse: [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)']. str cr. ]. LastStats at: 1 put: upTime. LastStats at: 2 put: fullGCs. LastStats at: 3 put: fullGCTime. LastStats at: 4 put: incrGCs. LastStats at: 5 put: incrGCTime. LastStats at: 6 put: tenureCount. ^ str contents ! From commits at source.squeak.org Fri Jan 29 05:06:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 29 05:06:52 2016 Subject: [squeak-dev] The Trunk: System-dtl.791.mcz Message-ID: David T. Lewis uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-dtl.791.mcz ==================== Summary ==================== Name: System-dtl.791 Author: dtl Time: 29 January 2016, 12:06:29.530002 am UUID: db0c4517-bf24-4a4d-bb7d-10d2962dac82 Ancestors: System-dtl.790 Fix cut and paste error in previous update =============== Diff against System-dtl.790 =============== Item was changed: ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') ----- vmStatisticsReportString "(Workspace new contents: Smalltalk vmStatisticsReportString) openLabel: 'VM Statistics'" "StringHolderView open: (StringHolder new contents: Smalltalk vmStatisticsReportString) label: 'VM Statistics'" | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | params := self getVMParameters. oldSpaceEnd := params at: 1. youngSpaceEnd := params at: 2. memorySize := params at: 3. fullGCs := params at: 7. fullGCTime := params at: 8. incrGCs := params at: 9. incrGCTime := params at: 10. tenureCount := params at: 11. upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in later Spur VMs" ifTrue: [Time utcMicrosecondClock - (params at: 20) + 500 // 1000] ifFalse: [Time eventMillisecondClock]. "Fall back on old microsecond clock; Good for 47.5 days" str := WriteStream on: (String new: 700). str nextPutAll: 'uptime '; print: (upTime / 1000 / 60 // 60); nextPut: $h; print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. str nextPutAll: 'memory '; nextPutAll: memorySize asStringWithCommas; nextPutAll: ' bytes'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. params size >= 54 ifTrue: [ "Spur object memory" youngSize := params at: 44. str nextPutAll: ' young '; nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes ('; print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. youngSize := youngSpaceEnd. "used eden" freeSize := (params at: 54) + (params at: 44) - youngSize. used := youngSize + oldSpaceEnd - freeSize. str nextPutAll: ' used '; nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. str nextPutAll: ' free '; nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes ('; print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr ] ifFalse: [ "Earlier VM and V3 object memory" str nextPutAll: ' young '; nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. str nextPutAll: ' used '; nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; + print: (youngSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. - print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. str nextPutAll: ' free '; + nextPutAll: (memorySize - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; + print: (memorySize - youngSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. - nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; - print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. ]. str nextPutAll: 'GCs '; nextPutAll: (fullGCs + incrGCs) asStringWithCommas. fullGCs + incrGCs > 0 ifTrue: [ str nextPutAll: ' ('; print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; nextPutAll: ' ms between GCs)' ]. str cr. str nextPutAll: ' full '; nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms ('; print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime)'. fullGCs = 0 ifFalse: [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms']. str cr. str nextPutAll: ' incr '; nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms ('; print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse: [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)']. str cr. LastStats ifNil: [LastStats := Array new: 6] ifNotNil: [ upTime2 := upTime - (LastStats at: 1). fullGCs2 := fullGCs - (LastStats at: 2). fullGCTime2 := fullGCTime - (LastStats at: 3). incrGCs2 := incrGCs - (LastStats at: 4). incrGCTime2 := incrGCTime - (LastStats at: 5). tenureCount2 := tenureCount - (LastStats at: 6). str nextPutAll: self textMarkerForShortReport ; nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. fullGCs2 + incrGCs2 > 0 ifTrue: [ str nextPutAll: ' ('; print: upTime2 // (fullGCs2 + incrGCs2); nextPutAll: ' ms between GCs)'. ]. str cr. str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr. str nextPutAll: ' full '; nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms ('; print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime)'. fullGCs2 = 0 ifFalse: [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms']. str cr. str nextPutAll: ' incr '; nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms ('; print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; nextPutAll: '% uptime), avg '. incrGCs2 > 0 ifTrue: [ str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms' ]. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount2 asStringWithCommas. tenureCount2 = 0 ifFalse: [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)']. str cr. ]. LastStats at: 1 put: upTime. LastStats at: 2 put: fullGCs. LastStats at: 3 put: fullGCTime. LastStats at: 4 put: incrGCs. LastStats at: 5 put: incrGCTime. LastStats at: 6 put: tenureCount. ^ str contents ! From ron at usmedrec.com Fri Jan 29 15:08:59 2016 From: ron at usmedrec.com (Ron Teitelbaum) Date: Fri Jan 29 15:09:05 2016 Subject: [squeak-dev] Squeak Board 2016 Candidates wanted Message-ID: <008801d15aa6$fb7e3b80$f27ab280$@usmedrec.com> Hi all, We currently have 7 candidates for 7 board seats. By order of announcement: Tim Rowledge Marcel Taeumel Craig Latta Bert Freudenberg Chris Muller David T. Lewis Edgar J. De Cleene That is great but it would be nice to have more candidates! You have until Monday to announce your candidacy. If you are going to run now is the time! Also please remember that it is important to VOTE! Even if we have 7 candidates and 7 seats please VOTE! I have heard from some of you that you feel very well represented by your board, which is great! Voting is one way to tell them you support them! You can follow the details of this election here: http://wiki.squeak.org/squeak/6346 All the best, Ron Teitelbaum Head Of Engineering 3D Immersive Collaboration Consulting ron@3Dicc.com Follow Me On Twitter: @RonTeitelbaum www.3Dicc.com https://www.google.com/+3Dicc -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160129/4aac417e/attachment.htm From eliot.miranda at gmail.com Fri Jan 29 15:36:22 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 29 15:36:28 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <56aaecb9.954a370a.4ef51.ffffde06SMTPIN_ADDED_MISSING@mx.google.com> References: <56aaecb9.954a370a.4ef51.ffffde06SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <2B304B48-1D33-44D0-B109-5FEE516111DE@gmail.com> Hi David, why bother? Since the two never need to coexist doesn't it make sense to have two different, simple, more readable versions? I find the code complex and since it is important, want to keep it as comprehensible as possible. I think in this case it is better to let the two diverge. You're just adding back cost we don't need to pay. _,,,^..^,,,_ (phone) > On Jan 29, 2016, at 7:31 AM, commits@source.squeak.org wrote: > > David T. Lewis uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-dtl.790.mcz > > ==================== Summary ==================== > > Name: System-dtl.790 > Author: dtl > Time: 29 January 2016, 11:37:48.065507 pm > UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07 > Ancestors: System-eem.789 > > Update vmStatisticsReportString to restore memory stats when running on pre-spur VM. > > =============== Diff against System-eem.789 =============== > > Item was changed: > ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') ----- > vmStatisticsReportString > "(Workspace new contents: Smalltalk vmStatisticsReportString) > openLabel: 'VM Statistics'" > "StringHolderView > open: (StringHolder new contents: Smalltalk vmStatisticsReportString) > label: 'VM Statistics'" > > | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | > params := self getVMParameters. > oldSpaceEnd := params at: 1. > youngSpaceEnd := params at: 2. > memorySize := params at: 3. > fullGCs := params at: 7. > fullGCTime := params at: 8. > incrGCs := params at: 9. > incrGCTime := params at: 10. > tenureCount := params at: 11. > upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in later Spur VMs" > ifTrue: [Time utcMicrosecondClock - (params at: 20) + 500 // 1000] > ifFalse: [Time eventMillisecondClock]. "Fall back on old microsecond clock; Good for 47.5 days" > > str := WriteStream on: (String new: 700). > str nextPutAll: 'uptime '; > print: (upTime / 1000 / 60 // 60); nextPut: $h; > print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; > print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. > > str nextPutAll: 'memory '; > nextPutAll: memorySize asStringWithCommas; nextPutAll: ' bytes'; cr. > str nextPutAll: ' old '; > nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; > print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > - youngSize := params at: 44. > - str nextPutAll: ' young '; > - nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes ('; > - print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > - youngSize := youngSpaceEnd. "used eden" > - freeSize := (params at: 54) + (params at: 44) - youngSize. > - used := youngSize + oldSpaceEnd - freeSize. > - str nextPutAll: ' used '; > - nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; > - print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > - str nextPutAll: ' free '; > - nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes ('; > - print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > > + params size >= 54 ifTrue: [ "Spur object memory" > + youngSize := params at: 44. > + str nextPutAll: ' young '; > + nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes ('; > + print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + youngSize := youngSpaceEnd. "used eden" > + freeSize := (params at: 54) + (params at: 44) - youngSize. > + used := youngSize + oldSpaceEnd - freeSize. > + str nextPutAll: ' used '; > + nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; > + print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + str nextPutAll: ' free '; > + nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes ('; > + print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr > + ] ifFalse: [ "Earlier VM and V3 object memory" > + str nextPutAll: ' young '; > + nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; > + print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + str nextPutAll: ' used '; > + nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; > + print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + str nextPutAll: ' free '; > + nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; > + print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + ]. > + > str nextPutAll: 'GCs '; > nextPutAll: (fullGCs + incrGCs) asStringWithCommas. > fullGCs + incrGCs > 0 ifTrue: [ > str > nextPutAll: ' ('; > print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; > nextPutAll: ' ms between GCs)' > ]. > str cr. > str nextPutAll: ' full '; > nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms ('; > print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; > nextPutAll: '% uptime)'. > fullGCs = 0 ifFalse: > [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms']. > str cr. > str nextPutAll: ' incr '; > nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms ('; > print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; > nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. > str nextPutAll: ' tenures '; > nextPutAll: tenureCount asStringWithCommas. > tenureCount = 0 ifFalse: > [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)']. > str cr. > > LastStats ifNil: [LastStats := Array new: 6] > ifNotNil: [ > upTime2 := upTime - (LastStats at: 1). > fullGCs2 := fullGCs - (LastStats at: 2). > fullGCTime2 := fullGCTime - (LastStats at: 3). > incrGCs2 := incrGCs - (LastStats at: 4). > incrGCTime2 := incrGCTime - (LastStats at: 5). > tenureCount2 := tenureCount - (LastStats at: 6). > > str nextPutAll: self textMarkerForShortReport ; > nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. > fullGCs2 + incrGCs2 > 0 ifTrue: [ > str > nextPutAll: ' ('; > print: upTime2 // (fullGCs2 + incrGCs2); > nextPutAll: ' ms between GCs)'. > ]. > str cr. > str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr. > str nextPutAll: ' full '; > nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms ('; > print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; > nextPutAll: '% uptime)'. > fullGCs2 = 0 ifFalse: > [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms']. > str cr. > str nextPutAll: ' incr '; > nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms ('; > print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; > nextPutAll: '% uptime), avg '. > incrGCs2 > 0 ifTrue: [ > str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms' > ]. > str cr. > str nextPutAll: ' tenures '; > nextPutAll: tenureCount2 asStringWithCommas. > tenureCount2 = 0 ifFalse: > [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)']. > str cr. > ]. > LastStats at: 1 put: upTime. > LastStats at: 2 put: fullGCs. > LastStats at: 3 put: fullGCTime. > LastStats at: 4 put: incrGCs. > LastStats at: 5 put: incrGCTime. > LastStats at: 6 put: tenureCount. > > ^ str contents > ! > > From asqueaker at gmail.com Fri Jan 29 16:43:38 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Jan 29 16:44:20 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <56aaecb7.4e9b8c0a.267b9.ffffa243SMTPIN_ADDED_MISSING@mx.google.com> References: <56aaecb7.4e9b8c0a.267b9.ffffa243SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Is "params size >= 54" supposed to be a check whether its running Spur or Cog? Note that we have Smalltalk isRunningSpur for that check. Besides that, however, is the question whether this shouldn't just be on the 4.6 branch? Dave, I've noticed this recurring theme that you don't want to move to Spur. Is it true? Why? On Thu, Jan 28, 2016 at 10:37 PM, wrote: > David T. Lewis uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-dtl.790.mcz > > ==================== Summary ==================== > > Name: System-dtl.790 > Author: dtl > Time: 29 January 2016, 11:37:48.065507 pm > UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07 > Ancestors: System-eem.789 > > Update vmStatisticsReportString to restore memory stats when running on pre-spur VM. > > =============== Diff against System-eem.789 =============== > > Item was changed: > ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm statistics') ----- > vmStatisticsReportString > "(Workspace new contents: Smalltalk vmStatisticsReportString) > openLabel: 'VM Statistics'" > "StringHolderView > open: (StringHolder new contents: Smalltalk vmStatisticsReportString) > label: 'VM Statistics'" > > | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | > params := self getVMParameters. > oldSpaceEnd := params at: 1. > youngSpaceEnd := params at: 2. > memorySize := params at: 3. > fullGCs := params at: 7. > fullGCTime := params at: 8. > incrGCs := params at: 9. > incrGCTime := params at: 10. > tenureCount := params at: 11. > upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in later Spur VMs" > ifTrue: [Time utcMicrosecondClock - (params at: 20) + 500 // 1000] > ifFalse: [Time eventMillisecondClock]. "Fall back on old microsecond clock; Good for 47.5 days" > > str := WriteStream on: (String new: 700). > str nextPutAll: 'uptime '; > print: (upTime / 1000 / 60 // 60); nextPut: $h; > print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; > print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. > > str nextPutAll: 'memory '; > nextPutAll: memorySize asStringWithCommas; nextPutAll: ' bytes'; cr. > str nextPutAll: ' old '; > nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; > print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > - youngSize := params at: 44. > - str nextPutAll: ' young '; > - nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes ('; > - print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > - youngSize := youngSpaceEnd. "used eden" > - freeSize := (params at: 54) + (params at: 44) - youngSize. > - used := youngSize + oldSpaceEnd - freeSize. > - str nextPutAll: ' used '; > - nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; > - print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > - str nextPutAll: ' free '; > - nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes ('; > - print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > > + params size >= 54 ifTrue: [ "Spur object memory" > + youngSize := params at: 44. > + str nextPutAll: ' young '; > + nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes ('; > + print: youngSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + youngSize := youngSpaceEnd. "used eden" > + freeSize := (params at: 54) + (params at: 44) - youngSize. > + used := youngSize + oldSpaceEnd - freeSize. > + str nextPutAll: ' used '; > + nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; > + print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + str nextPutAll: ' free '; > + nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes ('; > + print: freeSize / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: '%)'; cr > + ] ifFalse: [ "Earlier VM and V3 object memory" > + str nextPutAll: ' young '; > + nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; > + print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + str nextPutAll: ' used '; > + nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' bytes ('; > + print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + str nextPutAll: ' free '; > + nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; nextPutAll: ' bytes ('; > + print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: 1; nextPutAll: '%)'; cr. > + ]. > + > str nextPutAll: 'GCs '; > nextPutAll: (fullGCs + incrGCs) asStringWithCommas. > fullGCs + incrGCs > 0 ifTrue: [ > str > nextPutAll: ' ('; > print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; > nextPutAll: ' ms between GCs)' > ]. > str cr. > str nextPutAll: ' full '; > nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms ('; > print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; > nextPutAll: '% uptime)'. > fullGCs = 0 ifFalse: > [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) maxDecimalPlaces: 1; nextPutAll: ' ms']. > str cr. > str nextPutAll: ' incr '; > nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms ('; > print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; > nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. > str nextPutAll: ' tenures '; > nextPutAll: tenureCount asStringWithCommas. > tenureCount = 0 ifFalse: > [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; nextPutAll: ' GCs/tenure)']. > str cr. > > LastStats ifNil: [LastStats := Array new: 6] > ifNotNil: [ > upTime2 := upTime - (LastStats at: 1). > fullGCs2 := fullGCs - (LastStats at: 2). > fullGCTime2 := fullGCTime - (LastStats at: 3). > incrGCs2 := incrGCs - (LastStats at: 4). > incrGCTime2 := incrGCTime - (LastStats at: 5). > tenureCount2 := tenureCount - (LastStats at: 6). > > str nextPutAll: self textMarkerForShortReport ; > nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. > fullGCs2 + incrGCs2 > 0 ifTrue: [ > str > nextPutAll: ' ('; > print: upTime2 // (fullGCs2 + incrGCs2); > nextPutAll: ' ms between GCs)'. > ]. > str cr. > str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) maxDecimalPlaces: 1; nextPutAll: ' s'; cr. > str nextPutAll: ' full '; > nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: fullGCTime2 asStringWithCommas; nextPutAll: ' ms ('; > print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; > nextPutAll: '% uptime)'. > fullGCs2 = 0 ifFalse: > [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms']. > str cr. > str nextPutAll: ' incr '; > nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' totalling '; nextPutAll: incrGCTime2 asStringWithCommas; nextPutAll: ' ms ('; > print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; > nextPutAll: '% uptime), avg '. > incrGCs2 > 0 ifTrue: [ > str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; nextPutAll: ' ms' > ]. > str cr. > str nextPutAll: ' tenures '; > nextPutAll: tenureCount2 asStringWithCommas. > tenureCount2 = 0 ifFalse: > [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; nextPutAll: ' GCs/tenure)']. > str cr. > ]. > LastStats at: 1 put: upTime. > LastStats at: 2 put: fullGCs. > LastStats at: 3 put: fullGCTime. > LastStats at: 4 put: incrGCs. > LastStats at: 5 put: incrGCTime. > LastStats at: 6 put: tenureCount. > > ^ str contents > ! > > From asqueaker at gmail.com Fri Jan 29 16:45:23 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Jan 29 16:46:07 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: <20160127131627.GA52108@shell.msen.com> References: <20160127131627.GA52108@shell.msen.com> Message-ID: How could we possibly unload InputSensor? Isn't that what generates the events necessary to interact with the system? IOW, you wouldn't be able to reload ST80 without InputSensor, right? On Wed, Jan 27, 2016 at 7:16 AM, David T. Lewis wrote: > On Wed, Jan 27, 2016 at 10:24:55AM +0000, Frank Shearar wrote: >> That was my thinking, Chris. But InputSensor is, as far as I can tell, >> entirely ST80-specific. It's all about keyboards and pointers _for >> ST80_: the equivalent of Morphic's UserInputEvent. >> >> The only packages that reference it are ST80 and System, and System >> references it only because of #initializeStartUpList & >> #initializeShutDownList. (System has, as far as I can see, had this >> "soft" dependency on ST80 since at least 2010.) >> >> Given that, ST80 actually seems like the right place for these classes. > > That sounds reasonable, but one sanity check: ST80 is a reloadable package > (or at least it was, and it definitely /should/ be). I think that will > still be the case if we move InputSensor to ST80, but I'd want to check > and make sure we don't break the unloadable/reloadable aspect. > > This is probably a non-issue, but I can't check it right now so I'm just > mentioning it as a reminder. > > Dave > > >> >> frank >> >> On 27 January 2016 at 02:52, Chris Muller wrote: >> > +1 for Kernel-Input or Kernel-Device. Sensors are concerned with >> > bringing information from the outside world into the software system; >> > like the eyes and ears of the computer. >> > >> > User-interface is concerned with the interactions between the software >> > and the user. >> > >> > >> > On Mon, Jan 25, 2016 at 10:01 AM, Eliot Miranda wrote: >> >> Hi Frank, >> >> >> >> On Mon, Jan 25, 2016 at 8:18 AM, Frank Shearar >> >> wrote: >> >>> >> >>> Kernel-Processes has Delay, Process, Monitor, Mutex, FutureMaker, >> >>> Promise, etc. All these work together. They fit nicely in the >> >>> category. >> >>> >> >>> And then there's InputSensor, EventSensor and EventSensorConstants. What. >> >>> >> >>> Where _should_ these classes belong? Maybe we should have a >> >>> Kernel-Device or Kernel-Input category? >> >> >> >> >> >> IMO they don't belong in the Kernel at all. I would add a UserInterface >> >> package and put the prerequisites for Morphic, Smalltalk-80 and Graphics in >> >> there. I'd also consider Headful and Headless packages for precursors of >> >> headful and headless apps. >> >> >> >>> (I'll not mention how Kernel's InputSensor >> #keyboard uses >> >>> TextConverter that causes a dependency on Multilingual, which of >> >>> course has a dependency on Kernel... oh, wait, I did.) >> >>> >> >>> frank >> >> >> >> >> >> _,,,^..^,,,_ >> >> best, Eliot >> >> >> >> >> >> >> > > From tim at rowledge.org Fri Jan 29 17:35:07 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Jan 29 17:35:11 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: <20160127131627.GA52108@shell.msen.com> Message-ID: <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> > On 29-01-2016, at 8:45 AM, Chris Muller wrote: > > How could we possibly unload InputSensor? Isn't that what generates > the events necessary to interact with the system? IOW, you wouldn't > be able to reload ST80 without InputSensor, right? It?s been some time since I dug into it and I?m all wrapped up in transforms right now so I won?t be diverting back to it soon, but I?m reasonably certain that InputSensor is actually unused except as a superclass for EventSensor. I don't recall any places where an actual InputSensor ever gets to exist, let alone get used. In MVC projects the Sensor global is an EventSensor, for example. So ?anyButtonPressed' as I recall uses something like primMouseButtons, which actually goes via the EventSensor version and fetches events to update the variable rather than the ancient primitive. Some clean-up work could completely get rid of InputSensor tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Trojan: Storage device for replicating codes... From asqueaker at gmail.com Fri Jan 29 17:43:04 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Jan 29 17:43:47 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> Message-ID: You can't unload a superclass without unloading its subclasses. So, let me rephrase the question: How could EventSensor be unloaded and then reloaded? On Fri, Jan 29, 2016 at 11:35 AM, tim Rowledge wrote: > >> On 29-01-2016, at 8:45 AM, Chris Muller wrote: >> >> How could we possibly unload InputSensor? Isn't that what generates >> the events necessary to interact with the system? IOW, you wouldn't >> be able to reload ST80 without InputSensor, right? > > It?s been some time since I dug into it and I?m all wrapped up in transforms right now so I won?t be diverting back to it soon, but I?m reasonably certain that InputSensor is actually unused except as a superclass for EventSensor. I don't recall any places where an actual InputSensor ever gets to exist, let alone get used. In MVC projects the Sensor global is an EventSensor, for example. So ?anyButtonPressed' as I recall uses something like primMouseButtons, which actually goes via the EventSensor version and fetches events to update the variable rather than the ancient primitive. > > Some clean-up work could completely get rid of InputSensor > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Trojan: Storage device for replicating codes... > > > From tim at rowledge.org Fri Jan 29 18:07:20 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Jan 29 18:07:25 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> Message-ID: > On 29-01-2016, at 9:43 AM, Chris Muller wrote: > > You can't unload a superclass without unloading its subclasses. So, > let me rephrase the question: How could EventSensor be unloaded and > then reloaded? Ah, wrong question in this case. I suggest that we don?t need to even consider the issue of unloading either sensor class since it would be better to clean things up and simply get rid of InputSensor completely. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: DCBP: Detonate Chair on Bad Password From lewis at mail.msen.com Fri Jan 29 18:25:48 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Jan 29 18:25:50 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: References: <56aaecb7.4e9b8c0a.267b9.ffffa243SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <36428.136.2.1.105.1454091948.squirrel@webmail.msen.com> > Is "params size >= 54" supposed to be a check whether its running Spur > or Cog? Note that we have Smalltalk isRunningSpur for that check. > Besides that, however, is the question whether this shouldn't just be > on the 4.6 branch? The size of the parameter array varies in different VM code bases. > > Dave, I've noticed this recurring theme that you don't want to move to > Spur. Is it true? Why? No, that is not true. I like to maintain backward compatibility where possible, and I find that a little bit of effort on that front can prevent a great deal of pain and confusion down the road. Many years of maintaining OSProcess over a wide range image versions says I am not wrong. There is no need any ConfigurationOf or SqueakMap updates, you can pretty much load it into any image and it just works. Dave > > On Thu, Jan 28, 2016 at 10:37 PM, wrote: >> David T. Lewis uploaded a new version of System to project The Trunk: >> http://source.squeak.org/trunk/System-dtl.790.mcz >> >> ==================== Summary ==================== >> >> Name: System-dtl.790 >> Author: dtl >> Time: 29 January 2016, 11:37:48.065507 pm >> UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07 >> Ancestors: System-eem.789 >> >> Update vmStatisticsReportString to restore memory stats when running on >> pre-spur VM. >> >> =============== Diff against System-eem.789 =============== >> From lewis at mail.msen.com Fri Jan 29 18:52:40 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Jan 29 18:52:41 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <2B304B48-1D33-44D0-B109-5FEE516111DE@gmail.com> References: <56aaecb9.954a370a.4ef51.ffffde06SMTPIN_ADDED_MISSING@mx.google.com> <2B304B48-1D33-44D0-B109-5FEE516111DE@gmail.com> Message-ID: <64692.136.2.1.104.1454093560.squirrel@webmail.msen.com> Hi Eliot, I ran into in testing the V3 update stream I have been maintaining on http://www.squeaksource.com/TrunkUpdateStreamV3. I think it's an interesting experiment for a number or reasons, although I have not been discussing it on the list because I don't want to invite confusion or distract attention from our main Spur/trunk work. But please indulge me in my occasional private experiments :-) Dave > Hi David, > > why bother? Since the two never need to coexist doesn't it make sense > to have two different, simple, more readable versions? I find the > code complex and since it is important, want to keep it as > comprehensible as possible. I think in this case it is better to let > the two diverge. You're just adding back cost we don't need to pay. > > _,,,^..^,,,_ (phone) > >> On Jan 29, 2016, at 7:31 AM, commits@source.squeak.org wrote: >> >> David T. Lewis uploaded a new version of System to project The Trunk: >> http://source.squeak.org/trunk/System-dtl.790.mcz >> >> ==================== Summary ==================== >> >> Name: System-dtl.790 >> Author: dtl >> Time: 29 January 2016, 11:37:48.065507 pm >> UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07 >> Ancestors: System-eem.789 >> >> Update vmStatisticsReportString to restore memory stats when running on >> pre-spur VM. >> >> =============== Diff against System-eem.789 =============== >> >> Item was changed: >> ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm >> statistics') ----- >> vmStatisticsReportString >> "(Workspace new contents: Smalltalk vmStatisticsReportString) >> openLabel: 'VM Statistics'" >> "StringHolderView >> open: (StringHolder new contents: Smalltalk >> vmStatisticsReportString) >> label: 'VM Statistics'" >> >> | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime >> incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 >> incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | >> params := self getVMParameters. >> oldSpaceEnd := params at: 1. >> youngSpaceEnd := params at: 2. >> memorySize := params at: 3. >> fullGCs := params at: 7. >> fullGCTime := params at: 8. >> incrGCs := params at: 9. >> incrGCTime := params at: 10. >> tenureCount := params at: 11. >> upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in >> later Spur VMs" >> ifTrue: [Time utcMicrosecondClock - (params at: 20) + >> 500 // 1000] >> ifFalse: [Time eventMillisecondClock]. "Fall back on >> old microsecond clock; Good for 47.5 days" >> >> str := WriteStream on: (String new: 700). >> str nextPutAll: 'uptime '; >> print: (upTime / 1000 / 60 // 60); nextPut: $h; >> print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; >> print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. >> >> str nextPutAll: 'memory '; >> nextPutAll: memorySize asStringWithCommas; nextPutAll: ' >> bytes'; cr. >> str nextPutAll: ' old '; >> nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes >> ('; >> print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; >> nextPutAll: '%)'; cr. >> - youngSize := params at: 44. >> - str nextPutAll: ' young '; >> - nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes >> ('; >> - print: youngSize / memorySize * 100 maxDecimalPlaces: 1; >> nextPutAll: '%)'; cr. >> - youngSize := youngSpaceEnd. "used eden" >> - freeSize := (params at: 54) + (params at: 44) - youngSize. >> - used := youngSize + oldSpaceEnd - freeSize. >> - str nextPutAll: ' used '; >> - nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; >> - print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: >> '%)'; cr. >> - str nextPutAll: ' free '; >> - nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes >> ('; >> - print: freeSize / memorySize * 100 maxDecimalPlaces: 1; >> nextPutAll: '%)'; cr. >> >> + params size >= 54 ifTrue: [ "Spur object memory" >> + youngSize := params at: 44. >> + str nextPutAll: ' young '; >> + nextPutAll: youngSize asStringWithCommas; nextPutAll: ' >> bytes ('; >> + print: youngSize / memorySize * 100 maxDecimalPlaces: 1; >> nextPutAll: '%)'; cr. >> + youngSize := youngSpaceEnd. "used eden" >> + freeSize := (params at: 54) + (params at: 44) - youngSize. >> + used := youngSize + oldSpaceEnd - freeSize. >> + str nextPutAll: ' used '; >> + nextPutAll: used asStringWithCommas; nextPutAll: ' bytes >> ('; >> + print: used / memorySize * 100 maxDecimalPlaces: 1; >> nextPutAll: '%)'; cr. >> + str nextPutAll: ' free '; >> + nextPutAll: freeSize asStringWithCommas; nextPutAll: ' >> bytes ('; >> + print: freeSize / memorySize * 100 maxDecimalPlaces: 1; >> nextPutAll: '%)'; cr >> + ] ifFalse: [ "Earlier VM and V3 object memory" >> + str nextPutAll: ' young '; >> + nextPutAll: (youngSpaceEnd - oldSpaceEnd) >> asStringWithCommas; nextPutAll: ' bytes ('; >> + print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) >> maxDecimalPlaces: 1; nextPutAll: '%)'; cr. >> + str nextPutAll: ' used '; >> + nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' >> bytes ('; >> + print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: >> 1; nextPutAll: '%)'; cr. >> + str nextPutAll: ' free '; >> + nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; >> nextPutAll: ' bytes ('; >> + print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) >> maxDecimalPlaces: 1; nextPutAll: '%)'; cr. >> + ]. >> + >> str nextPutAll: 'GCs '; >> nextPutAll: (fullGCs + incrGCs) asStringWithCommas. >> fullGCs + incrGCs > 0 ifTrue: [ >> str >> nextPutAll: ' ('; >> print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; >> nextPutAll: ' ms between GCs)' >> ]. >> str cr. >> str nextPutAll: ' full '; >> nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling >> '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms >> ('; >> print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; >> nextPutAll: '% uptime)'. >> fullGCs = 0 ifFalse: >> [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) >> maxDecimalPlaces: 1; nextPutAll: ' ms']. >> str cr. >> str nextPutAll: ' incr '; >> nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling >> '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms >> ('; >> print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; >> nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) >> maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. >> str nextPutAll: ' tenures '; >> nextPutAll: tenureCount asStringWithCommas. >> tenureCount = 0 ifFalse: >> [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; >> nextPutAll: ' GCs/tenure)']. >> str cr. >> >> LastStats ifNil: [LastStats := Array new: 6] >> ifNotNil: [ >> upTime2 := upTime - (LastStats at: 1). >> fullGCs2 := fullGCs - (LastStats at: 2). >> fullGCTime2 := fullGCTime - (LastStats at: 3). >> incrGCs2 := incrGCs - (LastStats at: 4). >> incrGCTime2 := incrGCTime - (LastStats at: 5). >> tenureCount2 := tenureCount - (LastStats at: 6). >> >> str nextPutAll: self textMarkerForShortReport ; >> nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. >> fullGCs2 + incrGCs2 > 0 ifTrue: [ >> str >> nextPutAll: ' ('; >> print: upTime2 // (fullGCs2 + incrGCs2); >> nextPutAll: ' ms between GCs)'. >> ]. >> str cr. >> str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) >> maxDecimalPlaces: 1; nextPutAll: ' s'; cr. >> str nextPutAll: ' full '; >> nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' >> totalling '; nextPutAll: fullGCTime2 asStringWithCommas; >> nextPutAll: ' ms ('; >> print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; >> nextPutAll: '% uptime)'. >> fullGCs2 = 0 ifFalse: >> [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) >> maxDecimalPlaces: 1; nextPutAll: ' ms']. >> str cr. >> str nextPutAll: ' incr '; >> nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' >> totalling '; nextPutAll: incrGCTime2 asStringWithCommas; >> nextPutAll: ' ms ('; >> print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; >> nextPutAll: '% uptime), avg '. >> incrGCs2 > 0 ifTrue: [ >> str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; >> nextPutAll: ' ms' >> ]. >> str cr. >> str nextPutAll: ' tenures '; >> nextPutAll: tenureCount2 asStringWithCommas. >> tenureCount2 = 0 ifFalse: >> [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; >> nextPutAll: ' GCs/tenure)']. >> str cr. >> ]. >> LastStats at: 1 put: upTime. >> LastStats at: 2 put: fullGCs. >> LastStats at: 3 put: fullGCTime. >> LastStats at: 4 put: incrGCs. >> LastStats at: 5 put: incrGCTime. >> LastStats at: 6 put: tenureCount. >> >> ^ str contents >> ! >> >> > From eliot.miranda at gmail.com Fri Jan 29 19:43:42 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 29 19:43:47 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <36428.136.2.1.105.1454091948.squirrel@webmail.msen.com> References: <56aaecb7.4e9b8c0a.267b9.ffffa243SMTPIN_ADDED_MISSING@mx.google.com> <36428.136.2.1.105.1454091948.squirrel@webmail.msen.com> Message-ID: <00E4A709-1A86-4EFB-9A23-2D5BFDFB73DA@gmail.com> Hi David, On Jan 29, 2016, at 10:25 AM, David T. Lewis wrote: >> Is "params size >= 54" supposed to be a check whether its running Spur >> or Cog? Note that we have Smalltalk isRunningSpur for that check. >> Besides that, however, is the question whether this shouldn't just be >> on the 4.6 branch? > > The size of the parameter array varies in different VM code bases. > >> >> Dave, I've noticed this recurring theme that you don't want to move to >> Spur. Is it true? Why? > > No, that is not true. > > I like to maintain backward compatibility where possible, and I find that > a little bit of effort on that front can prevent a great deal of pain and > confusion down the road. Many years of maintaining OSProcess over a wide > range image versions says I am not wrong. There is no need any > ConfigurationOf or SqueakMap updates, you can pretty much load it into any > image and it just works. I get that and I don't want to debilitate developing packages that run I both variants. But in the case of memory management the two systems are very different. Spur can't support object age. Spur provides pinning. The two have very different garbage collectors and compactors. In developing policy code to control the gcs it will inevitably require a different approach to effectively control either. So in the realm of GC (including this, which is reporting GC stats) I think it makes sense to let them diverge. AFAIA OSProcess doesn't depend on GC control facilities so it shouldn't affect you. Where it may effect you is that pinning could conceivably allow you to lift up parameter processing to create the pointer arrays from that rather complex primitive into the image, given an addressOf: prim. Just as I hope the threaded FFI will make it possible to interact with output pipes much more reliably and efficiently. > > Dave _,,,^..^,,,_ (phone) best, Eliot >>> On Thu, Jan 28, 2016 at 10:37 PM, wrote: >>> David T. Lewis uploaded a new version of System to project The Trunk: >>> http://source.squeak.org/trunk/System-dtl.790.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: System-dtl.790 >>> Author: dtl >>> Time: 29 January 2016, 11:37:48.065507 pm >>> UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07 >>> Ancestors: System-eem.789 >>> >>> Update vmStatisticsReportString to restore memory stats when running on >>> pre-spur VM. >>> >>> =============== Diff against System-eem.789 =============== > > > From eliot.miranda at gmail.com Fri Jan 29 19:47:34 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 29 19:47:40 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <64692.136.2.1.104.1454093560.squirrel@webmail.msen.com> References: <56aaecb9.954a370a.4ef51.ffffde06SMTPIN_ADDED_MISSING@mx.google.com> <2B304B48-1D33-44D0-B109-5FEE516111DE@gmail.com> <64692.136.2.1.104.1454093560.squirrel@webmail.msen.com> Message-ID: <163EBBC4-2964-4C71-83EA-C1B030EBFA90@gmail.com> _,,,^..^,,,_ (phone) > On Jan 29, 2016, at 10:52 AM, David T. Lewis wrote: > > Hi Eliot, > > I ran into in testing the V3 update stream I have been maintaining on > http://www.squeaksource.com/TrunkUpdateStreamV3. I think it's an > interesting experiment for a number or reasons, although I have not been > discussing it on the list because I don't want to invite confusion or > distract attention from our main Spur/trunk work. But please indulge me in > my occasional private experiments :-) Ok, for the moment :-) > > Dave > >> Hi David, >> >> why bother? Since the two never need to coexist doesn't it make sense >> to have two different, simple, more readable versions? I find the >> code complex and since it is important, want to keep it as >> comprehensible as possible. I think in this case it is better to let >> the two diverge. You're just adding back cost we don't need to pay. >> >> _,,,^..^,,,_ (phone) >> >>> On Jan 29, 2016, at 7:31 AM, commits@source.squeak.org wrote: >>> >>> David T. Lewis uploaded a new version of System to project The Trunk: >>> http://source.squeak.org/trunk/System-dtl.790.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: System-dtl.790 >>> Author: dtl >>> Time: 29 January 2016, 11:37:48.065507 pm >>> UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07 >>> Ancestors: System-eem.789 >>> >>> Update vmStatisticsReportString to restore memory stats when running on >>> pre-spur VM. >>> >>> =============== Diff against System-eem.789 =============== >>> >>> Item was changed: >>> ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm >>> statistics') ----- >>> vmStatisticsReportString >>> "(Workspace new contents: Smalltalk vmStatisticsReportString) >>> openLabel: 'VM Statistics'" >>> "StringHolderView >>> open: (StringHolder new contents: Smalltalk >>> vmStatisticsReportString) >>> label: 'VM Statistics'" >>> >>> | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime >>> incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 >>> incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | >>> params := self getVMParameters. >>> oldSpaceEnd := params at: 1. >>> youngSpaceEnd := params at: 2. >>> memorySize := params at: 3. >>> fullGCs := params at: 7. >>> fullGCTime := params at: 8. >>> incrGCs := params at: 9. >>> incrGCTime := params at: 10. >>> tenureCount := params at: 11. >>> upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in >>> later Spur VMs" >>> ifTrue: [Time utcMicrosecondClock - (params at: 20) + >>> 500 // 1000] >>> ifFalse: [Time eventMillisecondClock]. "Fall back on >>> old microsecond clock; Good for 47.5 days" >>> >>> str := WriteStream on: (String new: 700). >>> str nextPutAll: 'uptime '; >>> print: (upTime / 1000 / 60 // 60); nextPut: $h; >>> print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; >>> print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. >>> >>> str nextPutAll: 'memory '; >>> nextPutAll: memorySize asStringWithCommas; nextPutAll: ' >>> bytes'; cr. >>> str nextPutAll: ' old '; >>> nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes >>> ('; >>> print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> - youngSize := params at: 44. >>> - str nextPutAll: ' young '; >>> - nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes >>> ('; >>> - print: youngSize / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> - youngSize := youngSpaceEnd. "used eden" >>> - freeSize := (params at: 54) + (params at: 44) - youngSize. >>> - used := youngSize + oldSpaceEnd - freeSize. >>> - str nextPutAll: ' used '; >>> - nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; >>> - print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: >>> '%)'; cr. >>> - str nextPutAll: ' free '; >>> - nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes >>> ('; >>> - print: freeSize / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> >>> + params size >= 54 ifTrue: [ "Spur object memory" >>> + youngSize := params at: 44. >>> + str nextPutAll: ' young '; >>> + nextPutAll: youngSize asStringWithCommas; nextPutAll: ' >>> bytes ('; >>> + print: youngSize / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> + youngSize := youngSpaceEnd. "used eden" >>> + freeSize := (params at: 54) + (params at: 44) - youngSize. >>> + used := youngSize + oldSpaceEnd - freeSize. >>> + str nextPutAll: ' used '; >>> + nextPutAll: used asStringWithCommas; nextPutAll: ' bytes >>> ('; >>> + print: used / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> + str nextPutAll: ' free '; >>> + nextPutAll: freeSize asStringWithCommas; nextPutAll: ' >>> bytes ('; >>> + print: freeSize / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr >>> + ] ifFalse: [ "Earlier VM and V3 object memory" >>> + str nextPutAll: ' young '; >>> + nextPutAll: (youngSpaceEnd - oldSpaceEnd) >>> asStringWithCommas; nextPutAll: ' bytes ('; >>> + print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) >>> maxDecimalPlaces: 1; nextPutAll: '%)'; cr. >>> + str nextPutAll: ' used '; >>> + nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' >>> bytes ('; >>> + print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: >>> 1; nextPutAll: '%)'; cr. >>> + str nextPutAll: ' free '; >>> + nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; >>> nextPutAll: ' bytes ('; >>> + print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) >>> maxDecimalPlaces: 1; nextPutAll: '%)'; cr. >>> + ]. >>> + >>> str nextPutAll: 'GCs '; >>> nextPutAll: (fullGCs + incrGCs) asStringWithCommas. >>> fullGCs + incrGCs > 0 ifTrue: [ >>> str >>> nextPutAll: ' ('; >>> print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; >>> nextPutAll: ' ms between GCs)' >>> ]. >>> str cr. >>> str nextPutAll: ' full '; >>> nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling >>> '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms >>> ('; >>> print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; >>> nextPutAll: '% uptime)'. >>> fullGCs = 0 ifFalse: >>> [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) >>> maxDecimalPlaces: 1; nextPutAll: ' ms']. >>> str cr. >>> str nextPutAll: ' incr '; >>> nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling >>> '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms >>> ('; >>> print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; >>> nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) >>> maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. >>> str nextPutAll: ' tenures '; >>> nextPutAll: tenureCount asStringWithCommas. >>> tenureCount = 0 ifFalse: >>> [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; >>> nextPutAll: ' GCs/tenure)']. >>> str cr. >>> >>> LastStats ifNil: [LastStats := Array new: 6] >>> ifNotNil: [ >>> upTime2 := upTime - (LastStats at: 1). >>> fullGCs2 := fullGCs - (LastStats at: 2). >>> fullGCTime2 := fullGCTime - (LastStats at: 3). >>> incrGCs2 := incrGCs - (LastStats at: 4). >>> incrGCTime2 := incrGCTime - (LastStats at: 5). >>> tenureCount2 := tenureCount - (LastStats at: 6). >>> >>> str nextPutAll: self textMarkerForShortReport ; >>> nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. >>> fullGCs2 + incrGCs2 > 0 ifTrue: [ >>> str >>> nextPutAll: ' ('; >>> print: upTime2 // (fullGCs2 + incrGCs2); >>> nextPutAll: ' ms between GCs)'. >>> ]. >>> str cr. >>> str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) >>> maxDecimalPlaces: 1; nextPutAll: ' s'; cr. >>> str nextPutAll: ' full '; >>> nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' >>> totalling '; nextPutAll: fullGCTime2 asStringWithCommas; >>> nextPutAll: ' ms ('; >>> print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; >>> nextPutAll: '% uptime)'. >>> fullGCs2 = 0 ifFalse: >>> [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) >>> maxDecimalPlaces: 1; nextPutAll: ' ms']. >>> str cr. >>> str nextPutAll: ' incr '; >>> nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' >>> totalling '; nextPutAll: incrGCTime2 asStringWithCommas; >>> nextPutAll: ' ms ('; >>> print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; >>> nextPutAll: '% uptime), avg '. >>> incrGCs2 > 0 ifTrue: [ >>> str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; >>> nextPutAll: ' ms' >>> ]. >>> str cr. >>> str nextPutAll: ' tenures '; >>> nextPutAll: tenureCount2 asStringWithCommas. >>> tenureCount2 = 0 ifFalse: >>> [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; >>> nextPutAll: ' GCs/tenure)']. >>> str cr. >>> ]. >>> LastStats at: 1 put: upTime. >>> LastStats at: 2 put: fullGCs. >>> LastStats at: 3 put: fullGCTime. >>> LastStats at: 4 put: incrGCs. >>> LastStats at: 5 put: incrGCTime. >>> LastStats at: 6 put: tenureCount. >>> >>> ^ str contents >>> ! > > > From eliot.miranda at gmail.com Fri Jan 29 19:49:27 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 29 19:49:33 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <64692.136.2.1.104.1454093560.squirrel@webmail.msen.com> References: <56aaecb9.954a370a.4ef51.ffffde06SMTPIN_ADDED_MISSING@mx.google.com> <2B304B48-1D33-44D0-B109-5FEE516111DE@gmail.com> <64692.136.2.1.104.1454093560.squirrel@webmail.msen.com> Message-ID: PS it strikes me that using number of available stack pages is the right discriminator between Interpreter and all the cog VMs. If we did get interpreter working with spur I'm sure we'd still have the full set of VM parameters, but more of them would be nil. _,,,^..^,,,_ (phone) > On Jan 29, 2016, at 10:52 AM, David T. Lewis wrote: > > Hi Eliot, > > I ran into in testing the V3 update stream I have been maintaining on > http://www.squeaksource.com/TrunkUpdateStreamV3. I think it's an > interesting experiment for a number or reasons, although I have not been > discussing it on the list because I don't want to invite confusion or > distract attention from our main Spur/trunk work. But please indulge me in > my occasional private experiments :-) > > Dave > >> Hi David, >> >> why bother? Since the two never need to coexist doesn't it make sense >> to have two different, simple, more readable versions? I find the >> code complex and since it is important, want to keep it as >> comprehensible as possible. I think in this case it is better to let >> the two diverge. You're just adding back cost we don't need to pay. >> >> _,,,^..^,,,_ (phone) >> >>> On Jan 29, 2016, at 7:31 AM, commits@source.squeak.org wrote: >>> >>> David T. Lewis uploaded a new version of System to project The Trunk: >>> http://source.squeak.org/trunk/System-dtl.790.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: System-dtl.790 >>> Author: dtl >>> Time: 29 January 2016, 11:37:48.065507 pm >>> UUID: 1ccde720-42a2-41fe-bcc4-cb9694d5af07 >>> Ancestors: System-eem.789 >>> >>> Update vmStatisticsReportString to restore memory stats when running on >>> pre-spur VM. >>> >>> =============== Diff against System-eem.789 =============== >>> >>> Item was changed: >>> ----- Method: SmalltalkImage>>vmStatisticsReportString (in category 'vm >>> statistics') ----- >>> vmStatisticsReportString >>> "(Workspace new contents: Smalltalk vmStatisticsReportString) >>> openLabel: 'VM Statistics'" >>> "StringHolderView >>> open: (StringHolder new contents: Smalltalk >>> vmStatisticsReportString) >>> label: 'VM Statistics'" >>> >>> | params oldSpaceEnd youngSpaceEnd memorySize fullGCs fullGCTime >>> incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 >>> incrGCs2 incrGCTime2 tenureCount2 str freeSize youngSize used | >>> params := self getVMParameters. >>> oldSpaceEnd := params at: 1. >>> youngSpaceEnd := params at: 2. >>> memorySize := params at: 3. >>> fullGCs := params at: 7. >>> fullGCTime := params at: 8. >>> incrGCs := params at: 9. >>> incrGCTime := params at: 10. >>> tenureCount := params at: 11. >>> upTime := (params at: 20) ~= 0 "utcMicrosecondClock at startupp in >>> later Spur VMs" >>> ifTrue: [Time utcMicrosecondClock - (params at: 20) + >>> 500 // 1000] >>> ifFalse: [Time eventMillisecondClock]. "Fall back on >>> old microsecond clock; Good for 47.5 days" >>> >>> str := WriteStream on: (String new: 700). >>> str nextPutAll: 'uptime '; >>> print: (upTime / 1000 / 60 // 60); nextPut: $h; >>> print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; >>> print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. >>> >>> str nextPutAll: 'memory '; >>> nextPutAll: memorySize asStringWithCommas; nextPutAll: ' >>> bytes'; cr. >>> str nextPutAll: ' old '; >>> nextPutAll: oldSpaceEnd asStringWithCommas; nextPutAll: ' bytes >>> ('; >>> print: (oldSpaceEnd / memorySize * 100) maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> - youngSize := params at: 44. >>> - str nextPutAll: ' young '; >>> - nextPutAll: youngSize asStringWithCommas; nextPutAll: ' bytes >>> ('; >>> - print: youngSize / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> - youngSize := youngSpaceEnd. "used eden" >>> - freeSize := (params at: 54) + (params at: 44) - youngSize. >>> - used := youngSize + oldSpaceEnd - freeSize. >>> - str nextPutAll: ' used '; >>> - nextPutAll: used asStringWithCommas; nextPutAll: ' bytes ('; >>> - print: used / memorySize * 100 maxDecimalPlaces: 1; nextPutAll: >>> '%)'; cr. >>> - str nextPutAll: ' free '; >>> - nextPutAll: freeSize asStringWithCommas; nextPutAll: ' bytes >>> ('; >>> - print: freeSize / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> >>> + params size >= 54 ifTrue: [ "Spur object memory" >>> + youngSize := params at: 44. >>> + str nextPutAll: ' young '; >>> + nextPutAll: youngSize asStringWithCommas; nextPutAll: ' >>> bytes ('; >>> + print: youngSize / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> + youngSize := youngSpaceEnd. "used eden" >>> + freeSize := (params at: 54) + (params at: 44) - youngSize. >>> + used := youngSize + oldSpaceEnd - freeSize. >>> + str nextPutAll: ' used '; >>> + nextPutAll: used asStringWithCommas; nextPutAll: ' bytes >>> ('; >>> + print: used / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr. >>> + str nextPutAll: ' free '; >>> + nextPutAll: freeSize asStringWithCommas; nextPutAll: ' >>> bytes ('; >>> + print: freeSize / memorySize * 100 maxDecimalPlaces: 1; >>> nextPutAll: '%)'; cr >>> + ] ifFalse: [ "Earlier VM and V3 object memory" >>> + str nextPutAll: ' young '; >>> + nextPutAll: (youngSpaceEnd - oldSpaceEnd) >>> asStringWithCommas; nextPutAll: ' bytes ('; >>> + print: (youngSpaceEnd - oldSpaceEnd / memorySize * 100) >>> maxDecimalPlaces: 1; nextPutAll: '%)'; cr. >>> + str nextPutAll: ' used '; >>> + nextPutAll: youngSpaceEnd asStringWithCommas; nextPutAll: ' >>> bytes ('; >>> + print: (youngSpaceEnd / memoryEnd * 100) maxDecimalPlaces: >>> 1; nextPutAll: '%)'; cr. >>> + str nextPutAll: ' free '; >>> + nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommas; >>> nextPutAll: ' bytes ('; >>> + print: (memoryEnd - youngSpaceEnd / memoryEnd * 100) >>> maxDecimalPlaces: 1; nextPutAll: '%)'; cr. >>> + ]. >>> + >>> str nextPutAll: 'GCs '; >>> nextPutAll: (fullGCs + incrGCs) asStringWithCommas. >>> fullGCs + incrGCs > 0 ifTrue: [ >>> str >>> nextPutAll: ' ('; >>> print: (upTime / (fullGCs + incrGCs)) maxDecimalPlaces: 1; >>> nextPutAll: ' ms between GCs)' >>> ]. >>> str cr. >>> str nextPutAll: ' full '; >>> nextPutAll: fullGCs asStringWithCommas; nextPutAll: ' totalling >>> '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: ' ms >>> ('; >>> print: (fullGCTime / upTime * 100) maxDecimalPlaces: 1; >>> nextPutAll: '% uptime)'. >>> fullGCs = 0 ifFalse: >>> [str nextPutAll: ', avg '; print: (fullGCTime / fullGCs) >>> maxDecimalPlaces: 1; nextPutAll: ' ms']. >>> str cr. >>> str nextPutAll: ' incr '; >>> nextPutAll: incrGCs asStringWithCommas; nextPutAll: ' totalling >>> '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: ' ms >>> ('; >>> print: (incrGCTime / upTime * 100) maxDecimalPlaces: 1; >>> nextPutAll: '% uptime), avg '; print: (incrGCTime / incrGCs) >>> maxDecimalPlaces: 1; nextPutAll: ' ms'; cr. >>> str nextPutAll: ' tenures '; >>> nextPutAll: tenureCount asStringWithCommas. >>> tenureCount = 0 ifFalse: >>> [str nextPutAll: ' (avg '; print: incrGCs // tenureCount; >>> nextPutAll: ' GCs/tenure)']. >>> str cr. >>> >>> LastStats ifNil: [LastStats := Array new: 6] >>> ifNotNil: [ >>> upTime2 := upTime - (LastStats at: 1). >>> fullGCs2 := fullGCs - (LastStats at: 2). >>> fullGCTime2 := fullGCTime - (LastStats at: 3). >>> incrGCs2 := incrGCs - (LastStats at: 4). >>> incrGCTime2 := incrGCTime - (LastStats at: 5). >>> tenureCount2 := tenureCount - (LastStats at: 6). >>> >>> str nextPutAll: self textMarkerForShortReport ; >>> nextPutAll: (fullGCs2 + incrGCs2) asStringWithCommas. >>> fullGCs2 + incrGCs2 > 0 ifTrue: [ >>> str >>> nextPutAll: ' ('; >>> print: upTime2 // (fullGCs2 + incrGCs2); >>> nextPutAll: ' ms between GCs)'. >>> ]. >>> str cr. >>> str nextPutAll: ' uptime '; print: (upTime2 / 1000.0) >>> maxDecimalPlaces: 1; nextPutAll: ' s'; cr. >>> str nextPutAll: ' full '; >>> nextPutAll: fullGCs2 asStringWithCommas; nextPutAll: ' >>> totalling '; nextPutAll: fullGCTime2 asStringWithCommas; >>> nextPutAll: ' ms ('; >>> print: (fullGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; >>> nextPutAll: '% uptime)'. >>> fullGCs2 = 0 ifFalse: >>> [str nextPutAll: ', avg '; print: (fullGCTime2 / fullGCs2) >>> maxDecimalPlaces: 1; nextPutAll: ' ms']. >>> str cr. >>> str nextPutAll: ' incr '; >>> nextPutAll: incrGCs2 asStringWithCommas; nextPutAll: ' >>> totalling '; nextPutAll: incrGCTime2 asStringWithCommas; >>> nextPutAll: ' ms ('; >>> print: (incrGCTime2 / upTime2 * 100) maxDecimalPlaces: 1; >>> nextPutAll: '% uptime), avg '. >>> incrGCs2 > 0 ifTrue: [ >>> str print: (incrGCTime2 / incrGCs2) maxDecimalPlaces: 1; >>> nextPutAll: ' ms' >>> ]. >>> str cr. >>> str nextPutAll: ' tenures '; >>> nextPutAll: tenureCount2 asStringWithCommas. >>> tenureCount2 = 0 ifFalse: >>> [str nextPutAll: ' (avg '; print: incrGCs2 // tenureCount2; >>> nextPutAll: ' GCs/tenure)']. >>> str cr. >>> ]. >>> LastStats at: 1 put: upTime. >>> LastStats at: 2 put: fullGCs. >>> LastStats at: 3 put: fullGCTime. >>> LastStats at: 4 put: incrGCs. >>> LastStats at: 5 put: incrGCTime. >>> LastStats at: 6 put: tenureCount. >>> >>> ^ str contents >>> ! > > > From frank.shearar at gmail.com Fri Jan 29 20:01:04 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Fri Jan 29 20:01:07 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> Message-ID: On 29 January 2016 at 18:07, tim Rowledge wrote: > >> On 29-01-2016, at 9:43 AM, Chris Muller wrote: >> >> You can't unload a superclass without unloading its subclasses. So, >> let me rephrase the question: How could EventSensor be unloaded and >> then reloaded? > > Ah, wrong question in this case. I suggest that we don?t need to even consider the issue of unloading either sensor class since it would be better to clean things up and simply get rid of InputSensor completely. In a Trunk image, only Smalltalk at: #Sensor points to EventSensor. Nothing points to InputSensor. Nothing points to EventPointerConstants. So why not in a postload of ST80, evaluate Environment current bind: #Sensor to: EventSensor ? frank > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: DCBP: Detonate Chair on Bad Password From lewis at mail.msen.com Fri Jan 29 20:05:16 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Jan 29 20:05:18 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <163EBBC4-2964-4C71-83EA-C1B030EBFA90@gmail.com> References: <56aaecb9.954a370a.4ef51.ffffde06SMTPIN_ADDED_MISSING@mx.google.com> <2B304B48-1D33-44D0-B109-5FEE516111DE@gmail.com> <64692.136.2.1.104.1454093560.squirrel@webmail.msen.com> <163EBBC4-2964-4C71-83EA-C1B030EBFA90@gmail.com> Message-ID: <30111.136.2.1.105.1454097916.squirrel@webmail.msen.com> >> On Jan 29, 2016, at 10:52 AM, David T. Lewis >> wrote: >> >> Hi Eliot, >> >> I ran into in testing the V3 update stream I have been maintaining on >> http://www.squeaksource.com/TrunkUpdateStreamV3. I think it's an >> interesting experiment for a number or reasons, although I have not been >> discussing it on the list because I don't want to invite confusion or >> distract attention from our main Spur/trunk work. But please indulge me >> in my occasional private experiments :-) > > Ok, for the moment :-) > Thanks :-) Dave From tim at rowledge.org Fri Jan 29 20:39:11 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Jan 29 20:39:16 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> Message-ID: <5976F5C9-B803-4228-A02D-3BE067D36FA6@rowledge.org> > On 29-01-2016, at 12:01 PM, Frank Shearar wrote: > > In a Trunk image, only Smalltalk at: #Sensor points to EventSensor. > Nothing points to InputSensor. Nothing points to > EventPointerConstants. > > So why not in a postload of ST80, evaluate > > Environment current bind: #Sensor to: EventSensor IIRC it?s just a global, so does even that much need doing? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Did you hear about Christopher Robin Hood? He stole from the rich to give to the Pooh From lewis at mail.msen.com Fri Jan 29 20:39:30 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Jan 29 20:39:32 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <00E4A709-1A86-4EFB-9A23-2D5BFDFB73DA@gmail.com> References: <56aaecb7.4e9b8c0a.267b9.ffffa243SMTPIN_ADDED_MISSING@mx.google.com> <36428.136.2.1.105.1454091948.squirrel@webmail.msen.com> <00E4A709-1A86-4EFB-9A23-2D5BFDFB73DA@gmail.com> Message-ID: <10129.136.2.1.105.1454099970.squirrel@webmail.msen.com> > Hi David, > > > I get that and I don't want to debilitate developing packages that run I > both variants. But in the case of memory management the two systems are > very different. Spur can't support object age. Spur provides pinning. > The two have very different garbage collectors and compactors. In > developing policy code to control the gcs it will inevitably require a > different approach to effectively control either. So in the realm of GC > (including this, which is reporting GC stats) I think it makes sense to > let them diverge. AFAIA OSProcess doesn't depend on GC control facilities > so it shouldn't affect you. Way off topic, but speaking of OSProcess and Spur, I'm very much looking forward to trying RemoteTask on 64 bit Spur. I am expecting it to be very memory efficient even for extremely large object memories, due to the much improved memory layout that should localize changes to the object memory and reduce GC impact. Dave > > Where it may effect you is that pinning could conceivably allow you to > lift up parameter processing to create the pointer arrays from that rather > complex primitive into the image, given an addressOf: prim. Just as I > hope the threaded FFI will make it possible to interact with output pipes > much more reliably and efficiently. > >> >> Dave > > _,,,^..^,,,_ (phone) > best, Eliot > From eliot.miranda at gmail.com Fri Jan 29 20:41:14 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 29 20:41:20 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> Message-ID: <908F9109-63B4-4567-A4B2-CC37FF9C47DF@gmail.com> Hi Frank, > On Jan 29, 2016, at 12:01 PM, Frank Shearar wrote: > >> On 29 January 2016 at 18:07, tim Rowledge wrote: >> >>> On 29-01-2016, at 9:43 AM, Chris Muller wrote: >>> >>> You can't unload a superclass without unloading its subclasses. So, >>> let me rephrase the question: How could EventSensor be unloaded and >>> then reloaded? >> >> Ah, wrong question in this case. I suggest that we don?t need to even consider the issue of unloading either sensor class since it would be better to clean things up and simply get rid of InputSensor completely. > > In a Trunk image, only Smalltalk at: #Sensor points to EventSensor. > Nothing points to InputSensor. Nothing points to > EventPointerConstants. > > So why not in a postload of ST80, evaluate > > Environment current bind: #Sensor to: EventSensor > > ? Sounds reasonable, but why not use (or add) EventSensor class>>initialize? The post load strikes me as too fancy. > > frank > >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> Strange OpCodes: DCBP: Detonate Chair on Bad Password > From eliot.miranda at gmail.com Fri Jan 29 21:08:14 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 29 21:08:19 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <10129.136.2.1.105.1454099970.squirrel@webmail.msen.com> References: <56aaecb7.4e9b8c0a.267b9.ffffa243SMTPIN_ADDED_MISSING@mx.google.com> <36428.136.2.1.105.1454091948.squirrel@webmail.msen.com> <00E4A709-1A86-4EFB-9A23-2D5BFDFB73DA@gmail.com> <10129.136.2.1.105.1454099970.squirrel@webmail.msen.com> Message-ID: <1957AB47-17CB-44F5-A8FC-03A1B557D134@gmail.com> On Jan 29, 2016, at 12:39 PM, David T. Lewis wrote: >> Hi David, > > > >> >> I get that and I don't want to debilitate developing packages that run I >> both variants. But in the case of memory management the two systems are >> very different. Spur can't support object age. Spur provides pinning. >> The two have very different garbage collectors and compactors. In >> developing policy code to control the gcs it will inevitably require a >> different approach to effectively control either. So in the realm of GC >> (including this, which is reporting GC stats) I think it makes sense to >> let them diverge. AFAIA OSProcess doesn't depend on GC control facilities >> so it shouldn't affect you. > > Way off topic, but speaking of OSProcess and Spur, I'm very much looking > forward to trying RemoteTask on 64 bit Spur. I am expecting it to be very > memory efficient even for extremely large object memories, due to the much > improved memory layout that should localize changes to the object memory > and reduce GC impact. > > Dave > > > >> >> Where it may effect you is that pinning could conceivably allow you to >> lift up parameter processing to create the pointer arrays from that rather >> complex primitive into the image, given an addressOf: prim. Just as I >> hope the threaded FFI will make it possible to interact with output pipes >> much more reliably and efficiently. Then I need to write Mac make files, which is the only thing standing between me and a new release that includes the 63-bit sour Cogit. >> >>> >>> Dave >> >> _,,,^..^,,,_ (phone) >> best, Eliot > > > From cunningham.cb at gmail.com Fri Jan 29 21:25:47 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Fri Jan 29 21:25:50 2016 Subject: [squeak-dev] The Trunk: System-dtl.790.mcz In-Reply-To: <00E4A709-1A86-4EFB-9A23-2D5BFDFB73DA@gmail.com> References: <56aaecb7.4e9b8c0a.267b9.ffffa243SMTPIN_ADDED_MISSING@mx.google.com> <36428.136.2.1.105.1454091948.squirrel@webmail.msen.com> <00E4A709-1A86-4EFB-9A23-2D5BFDFB73DA@gmail.com> Message-ID: On Fri, Jan 29, 2016 at 11:43 AM, Eliot Miranda wrote: > But in the case of memory management the two systems are very different. > Spur can't support object age. Spur provides pinning. The two have very > different garbage collectors and compactors. In developing policy code to > control the gcs it will inevitably require a different approach to > effectively control either. So in the realm of GC (including this, which > is reporting GC stats) I think it makes sense to let them diverge. So, would creating separate classes/pluggable instances for controlling garbageCollection be worthwhile? One is used for cog/nonSpur, one for cog/Spur, one for (maybe) interpreter/Spur? Wouldn't that let it be very focused, while still giving full relevance for the other forks as needed? Or am I just missing the point here? -cbc -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160129/fa4a0915/attachment.htm From frank.shearar at gmail.com Fri Jan 29 21:28:09 2016 From: frank.shearar at gmail.com (Frank Shearar) Date: Fri Jan 29 21:28:11 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: <908F9109-63B4-4567-A4B2-CC37FF9C47DF@gmail.com> References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> <908F9109-63B4-4567-A4B2-CC37FF9C47DF@gmail.com> Message-ID: On 29 January 2016 at 20:41, Eliot Miranda wrote: > Hi Frank, > >> On Jan 29, 2016, at 12:01 PM, Frank Shearar wrote: >> >>> On 29 January 2016 at 18:07, tim Rowledge wrote: >>> >>>> On 29-01-2016, at 9:43 AM, Chris Muller wrote: >>>> >>>> You can't unload a superclass without unloading its subclasses. So, >>>> let me rephrase the question: How could EventSensor be unloaded and >>>> then reloaded? >>> >>> Ah, wrong question in this case. I suggest that we don?t need to even consider the issue of unloading either sensor class since it would be better to clean things up and simply get rid of InputSensor completely. >> >> In a Trunk image, only Smalltalk at: #Sensor points to EventSensor. >> Nothing points to InputSensor. Nothing points to >> EventPointerConstants. >> >> So why not in a postload of ST80, evaluate >> >> Environment current bind: #Sensor to: EventSensor >> >> ? > > Sounds reasonable, but why not use (or add) EventSensor class>>initialize? The post load strikes me as too fancy. Because I'd forgotten I could do that :) There is an EventSensor class>>install which sounds like it would do the right thing, but it doesn't. It seems like the right thing to do then is to add an initialize like this: initialize Environment current bind: #Sensor to: EventSensor. Sound good? frank >> frank >> >>> tim >>> -- >>> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >>> Strange OpCodes: DCBP: Detonate Chair on Bad Password From bert at freudenbergs.de Fri Jan 29 22:08:34 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Fri Jan 29 22:08:39 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> <908F9109-63B4-4567-A4B2-CC37FF9C47DF@gmail.com> Message-ID: <390E1DBC-BEB4-4592-B9E3-CF9ACC20AE15@freudenbergs.de> On 29.01.2016, at 22:28, Frank Shearar wrote: > > initialize > Environment current bind: #Sensor to: EventSensor. > > Sound good? Nope. You don?t need to do anything special. MVC works fine using EventSensor. In every image ever since Morphic took over, Sensor has been an instance of EventSensor. Only before that it was an instance of InputSensor. The easiest thing would be to simply move InputSensor into the same package as EventSensor. Second-easiest would be to do the cleanup Tim suggested and get rid of InputSensor by moving all its still-needed methods to EventSensor and then deleting that class. Packaging-wise the result would be the same: no InputSensor in the St80 package. - 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/20160129/d163afad/smime.bin From eliot.miranda at gmail.com Fri Jan 29 22:30:00 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Jan 29 22:30:05 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> <908F9109-63B4-4567-A4B2-CC37FF9C47DF@gmail.com> Message-ID: > On Jan 29, 2016, at 1:28 PM, Frank Shearar wrote: > >> On 29 January 2016 at 20:41, Eliot Miranda wrote: >> Hi Frank, >> >>>> On Jan 29, 2016, at 12:01 PM, Frank Shearar wrote: >>>> >>>>> On 29 January 2016 at 18:07, tim Rowledge wrote: >>>>> >>>>> On 29-01-2016, at 9:43 AM, Chris Muller wrote: >>>>> >>>>> You can't unload a superclass without unloading its subclasses. So, >>>>> let me rephrase the question: How could EventSensor be unloaded and >>>>> then reloaded? >>>> >>>> Ah, wrong question in this case. I suggest that we don?t need to even consider the issue of unloading either sensor class since it would be better to clean things up and simply get rid of InputSensor completely. >>> >>> In a Trunk image, only Smalltalk at: #Sensor points to EventSensor. >>> Nothing points to InputSensor. Nothing points to >>> EventPointerConstants. >>> >>> So why not in a postload of ST80, evaluate >>> >>> Environment current bind: #Sensor to: EventSensor >>> >>> ? >> Yes :) >> Sounds reasonable, but why not use (or add) EventSensor class>>initialize? The post load strikes me as too fancy. > > Because I'd forgotten I could do that :) There is an EventSensor > class>>install which sounds like it would do the right thing, but it > doesn't. It seems like the right thing to do then is to add an > initialize like this: > > initialize > Environment current bind: #Sensor to: EventSensor. > > Sound good? > > frank > >>> frank >>> >>>> tim >>>> -- >>>> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >>>> Strange OpCodes: DCBP: Detonate Chair on Bad Password > From commits at source.squeak.org Fri Jan 29 22:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Jan 29 22:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160129225502.30472.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-January/009281.html Name: System-dtl.790 Ancestors: System-eem.789 Update vmStatisticsReportString to restore memory stats when running on pre-spur VM. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-January/009282.html Name: System-dtl.791 Ancestors: System-dtl.790 Fix cut and paste error in previous update ============================================= From lewis at mail.msen.com Sat Jan 30 00:03:37 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Jan 30 00:03:41 2016 Subject: [squeak-dev] InputSensor, EventSensor miscategorised? In-Reply-To: <390E1DBC-BEB4-4592-B9E3-CF9ACC20AE15@freudenbergs.de> References: <20160127131627.GA52108@shell.msen.com> <8812AA41-16B4-4848-8485-4B6A20ADEA51@rowledge.org> <908F9109-63B4-4567-A4B2-CC37FF9C47DF@gmail.com> <390E1DBC-BEB4-4592-B9E3-CF9ACC20AE15@freudenbergs.de> Message-ID: <20160130000337.GA10791@shell.msen.com> On Fri, Jan 29, 2016 at 11:08:34PM +0100, Bert Freudenberg wrote: > On 29.01.2016, at 22:28, Frank Shearar wrote: > > > > initialize > > Environment current bind: #Sensor to: EventSensor. > > > > Sound good? > > Nope. > > You don???t need to do anything special. MVC works fine using EventSensor. In every image ever since Morphic took over, Sensor has been an instance of EventSensor. Only before that it was an instance of InputSensor. > > The easiest thing would be to simply move InputSensor into the same package as EventSensor. > > Second-easiest would be to do the cleanup Tim suggested and get rid of InputSensor by moving all its still-needed methods to EventSensor and then deleting that class. > > Packaging-wise the result would be the same: no InputSensor in the St80 package. > > - Bert - > It looks to me like the proposed removal of InputSensor is a tiny project that was started in 2000 (*) and probably should be brought to completion one of these days. If we agree that it is a good idea, and if there is no big time pressure to get it done right away, then I'm interested in doing the work. Dave (*) The accessors for eventQueue are in InputSensor, but the actual instance variable is already moved to subclass EventSensor. That looks like a work in progress to me. And I'm always happy to try to polish up something that Andreas started for us :-) From tim at rowledge.org Sat Jan 30 01:24:04 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Jan 30 01:24:08 2016 Subject: [squeak-dev] DamageRecorder>recordInvalidRect: one truncate too far? Message-ID: <73704474-4EC0-45D9-855C-84C3BCE3B1FA@rowledge.org> I?m having *all sorts* of fun working on a TransformationMorph with optimised displaying of stuff scaled ?, 1 or 2X. One of the common irritations is occasional invalid rectangle misses so that gribblys are left on-screen. There are assorted places where i see an ?expandBy: 1? apparently thrown in to try to compensate for something. I think perhaps the issue is actually in DamageRecorder>recordInvalidRect: where we see several places with code like 'origin truncated corner: corner truncated? and maybe, just maybe, it ought to be ?origin truncated corner: corner ceiling? ? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: DCBP: Detonate Chair on Bad Password From Marcel.Taeumel at hpi.de Sat Jan 30 08:16:40 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Jan 30 08:40:02 2016 Subject: [squeak-dev] Re: DamageRecorder>recordInvalidRect: one truncate too far? In-Reply-To: <73704474-4EC0-45D9-855C-84C3BCE3B1FA@rowledge.org> References: <73704474-4EC0-45D9-855C-84C3BCE3B1FA@rowledge.org> Message-ID: <1454141800226-4874904.post@n4.nabble.com> Does that change fix it? Best, Marcel -- View this message in context: http://forum.world.st/DamageRecorder-recordInvalidRect-one-truncate-too-far-tp4874894p4874904.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Jan 30 16:11:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Jan 30 16:11:15 2016 Subject: [squeak-dev] The Inbox: Kernel-dtl.981.mcz Message-ID: David T. Lewis uploaded a new version of Kernel to project The Inbox: http://source.squeak.org/inbox/Kernel-dtl.981.mcz ==================== Summary ==================== Name: Kernel-dtl.981 Author: dtl Time: 30 January 2016, 11:08:34.12478 am UUID: f28a2de4-862d-4499-90cd-5eb04e0649d3 Ancestors: Kernel-eem.980 InputSensor removal step 1. Move instance methods to EventSensor, eliminate super calls, resolve primitive fallbacks, recategorize. Preserve original method stamps where possible. Class variables and system startup/shutdown to be addressed next. =============== Diff against Kernel-eem.980 =============== Item was added: + ----- Method: EventSensor>>anyButtonPressed (in category 'mouse') ----- + anyButtonPressed + "Answer whether at least one mouse button is currently being pressed." + + ^ self primMouseButtons anyMask: 7 + ! Item was added: + ----- Method: EventSensor>>anyModifierKeyPressed (in category 'modifier keys') ----- + anyModifierKeyPressed + "ignore, however, the shift keys 'cause that's not REALLY a command key" + + ^ self primMouseButtons anyMask: 16r70 "cmd | opt | ctrl"! Item was added: + ----- Method: EventSensor>>blueButtonPressed (in category 'mouse') ----- + blueButtonPressed + "Answer whether only the blue mouse button is being pressed. + This is the third mouse button or cmd+click on the Mac." + + ^ (self primMouseButtons bitAnd: 7) = 1 + ! Item was added: + ----- Method: EventSensor>>characterForKeycode: (in category 'keyboard') ----- + characterForKeycode: keycode + "Map the given keycode to a Smalltalk character object. Encoding: + A keycode is 12 bits: <4 modifer bits><8 bit ISO character> + Modifier bits are: