Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 3 participants
- 144616 messages
Re: [Pharo-project] About projects with Metacello
by George Herolyants
Hi
I think it would be better to have ConfigurationOfRefactoring and two
other: ConfigurationOfOB and ConfigurationOfO2, which have the former
as a required project (and IIUC it was your first intention, right?).
This will reduce duplication of dependencies between projects.
2009/12/19 Mariano Martinez Peck <marianopeck(a)gmail.com>:
> Hi folks. Now that I am starting to write some configurations, I realized
> that we have a "change of concept" with Metacello. With Gofer or Installer
> (someone tell me if I am wrong) we are use to manage projects that are a
> certain repository of squeaksource or similar. And then we have the
> packages. So, for example we are talking about the RefactoringBrowser, you
> have:
>
> www.squeaksource.com/rb
>
> and the packages AST-Core, Refactoring-Core and Refactoring-Spelling.
>
> Then there is the project OB where you have also OB-Refactory and OB-Regex
> for example.
>
> At first, of course, I thought to have one ConfigurationOf per project. I
> mean, map one to one. But now...I was wondering that I can have a
> ConfigurationOfRefactoring for example, that can deals with ALL the things
> related to RB. In this case AST-Core, Refactoring-Core and
> Refactoring-Spelling from rb repo and OB-Refactory and OB-Regex from OB
> repo....and see all of them like a project.
>
> What do you think ? Do you have any thoughts with this? pors and cons? I
> would like to listen opinions.
>
> Cheers,
>
> Mariano
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Dec. 20, 2009
[Pharo-project] [BUG]ByteSymbol(Object)>>error:
by csrabak@bol.com.br
I also opened an issue http://code.google.com/p/pharo/issues/detail?id=1638 where the stack and a screenshot can be seen.
In a nutshell, when you use Method Finder and from there start a Browser, you get an MNU ByteSymbol>>hasWideCharacterFrom:to:.
Steps to reproduce:
1. Start the Method Finder
2. in the search pane write 'max:' and accept it
3. click in (first in my image) method 'detectMax:'
4. on the right upper pane click in "Collection detectMax:"
More details:
As can be seen in the screenshoot in the issue tracker, the method source *is
shown* but the Browser fails to render the method name's list and instead a
red with a yellow crossings appears instead.
If "venturously" another protocol is selected, the same red with yellow
crossing is shown and no more navigation to the method sources is possible.
19 December 2009 11:25 pm
VM: Win32 - IX86 - NT - Squeak3.10.2 of '5 June 2008' [latest update: #7179]
Image: PharoCore1.0rc1 [Latest update: #10502]
SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir E:\Pharo
Trusted Dir E:\Pharo\Cesar S. Rabak
Untrusted Dir C:\Documents and Settings\Cesar S. Rabak\Meus documentos\My Squeak
ByteSymbol(Object)>>error:
Receiver: #do:
Arguments and temporary variables:
aString: 'MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:'
Receiver's instance variables:
#do:
[] in WorldState>>displayWorldSafely:
Receiver: a WorldState
Arguments and temporary variables:
err: 'MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:'
rcvr: #do:
errCtx: O2LazyListMorph>>display:atRow:on:
errMorph: an O2LazyListMorph(3958)
Receiver's instance variables:
hands: an Array(a HandMorph(3216))
viewBox: 0@0 corner: 976@720
canvas: a FormCanvas on: DisplayScreen(976x720x32)
damageRecorder: a DamageRecorder
stepList: a Heap(StepMessage(#stepAt: -> a SystemWindow(1419))(a SystemWindow(1...etc...
lastStepTime: 22201329
lastStepMessage: nil
lastCycleTime: 22201348
commandHistory: a CommandHistory
alarms: a Heap()
lastAlarmTime: 22201329
BlockClosure>>valueWithPossibleArgs:
Receiver: [closure] in WorldState>>displayWorldSafely:
Arguments and temporary variables:
anArray: #('MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:' #do:)
Receiver's instance variables:
outerContext: WorldState>>displayWorldSafely:
startpc: 73
numArgs: 2
[] in BlockClosure>>ifError:
Receiver: [closure] in WorldState>>displayWorldSafely:
Arguments and temporary variables:
errorHandlerBlock: MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:
ex: [closure] in WorldState>>displayWorldSafely:
Receiver's instance variables:
outerContext: WorldState>>displayWorldSafely:
startpc: 66
numArgs: 0
BlockClosure>>valueWithPossibleArgs:
Receiver: [closure] in BlockClosure>>ifError:
Arguments and temporary variables:
anArray: an Array(MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:)
Receiver's instance variables:
outerContext: BlockClosure>>ifError:
startpc: 40
numArgs: 1
[] in MethodContext(ContextPart)>>handleSignal:
Receiver: BlockClosure>>on:do:
Arguments and temporary variables:
exception: MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:
Receiver's instance variables:
sender: BlockClosure>>ifError:
pc: 17
stackp: 3
method: a CompiledMethod(3772: BlockClosure>>on:do:)
closureOrNil: nil
receiver: [closure] in WorldState>>displayWorldSafely:
BlockClosure>>ensure:
Receiver: [closure] in MethodContext(ContextPart)>>handleSignal:
Arguments and temporary variables:
aBlock: [closure] in MethodContext(ContextPart)>>handleSignal:
returnValue: nil
b: nil
Receiver's instance variables:
outerContext: MethodContext(ContextPart)>>handleSignal:
startpc: 90
numArgs: 0
MethodContext(ContextPart)>>handleSignal:
Receiver: BlockClosure>>on:do:
Arguments and temporary variables:
exception: MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:
val: nil
Receiver's instance variables:
sender: BlockClosure>>ifError:
pc: 17
stackp: 3
method: a CompiledMethod(3772: BlockClosure>>on:do:)
closureOrNil: nil
receiver: [closure] in WorldState>>displayWorldSafely:
MessageNotUnderstood(Exception)>>signal
Receiver: MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:
Arguments and temporary variables:
Receiver's instance variables:
messageText: nil
tag: nil
signalContext: MessageNotUnderstood(Exception)>>signal
handlerContext: BlockClosure>>on:do:
outerContext: nil
message: hasWideCharacterFrom: 1 to: 3
receiver: #do:
reachedDefaultHandler: false
ByteSymbol(Object)>>doesNotUnderstand: #hasWideCharacterFrom:to:
Receiver: #do:
Arguments and temporary variables:
aMessage: hasWideCharacterFrom: 1 to: 3
exception: MessageNotUnderstood: ByteSymbol>>hasWideCharacterFrom:to:
resumeValue: nil
Receiver's instance variables:
#do:
StrikeFont>>displayString:on:from:to:at:kern:
Receiver: a StrikeFont(Bitmap DejaVu Sans 9 14)
Arguments and temporary variables:
aString: #do:
aBitBlt: a GrafPort
startIndex: 1
stopIndex: 3
aPoint: 768@130
kernDelta: 0
Receiver's instance variables:
characterToGlyphMap: #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...etc...
xTable: #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 7...etc...
glyphs: Form(1646x14x16)
name: 'Bitmap DejaVu Sans 9'
type: 0
minAscii: 32
maxAscii: 255
maxWidth: 0
strikeLength: nil
ascent: 11
descent: 3
xOffset: nil
raster: nil
subscript: -3
superscript: 2
emphasis: 0
derivativeFonts: an Array(a StrikeFont(Bitmap DejaVu Sans 9B 14) a StrikeFont(B...etc...
pointSize: 9
fallbackFont: a FixedFaceFont
charIndex: nil
FormCanvas>>drawString:from:to:in:font:color:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aString: a Text for #do:
firstIndex: 1
lastIndex: 3
bounds: 12@195 corner: 233@210
fontOrNil: a StrikeFont(Bitmap DejaVu Sans 9 14)
c: Color blue
font: a StrikeFont(Bitmap DejaVu Sans 9 14)
portRect: 753@61 corner: 935@222
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 756@-65
clipRect: 753@61 corner: 935@222
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
FormCanvas(Canvas)>>drawString:in:font:color:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
s: a Text for #do:
boundsRect: 12@195 corner: 233@210
fontOrNil: a StrikeFont(Bitmap DejaVu Sans 9 14)
c: Color blue
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 756@-65
clipRect: 753@61 corner: 935@222
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
O2LazyListMorph>>display:atRow:on:
Receiver: an O2LazyListMorph(3958)
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
bounds: 0@0 corner: 233@435
owner: a TransformMorph(2393)
submorphs: #()
fullBounds: 0@0 corner: 233@435
color: Color black
extension: a MorphExtension (2535) [other: (errorOnDraw -> true)]
listItems: #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ni...etc...
font: a StrikeFont(Bitmap DejaVu Sans 9 14)
selectedRow: 10
selectedRows: a PluggableSet()
listSource: an O2PluggableListMorph(3401)
maxWidth: 213
handPoint: nil
balloonShown: nil
O2LazyListMorph(LazyListMorph)>>drawOn:
Receiver: an O2LazyListMorph(3958)
Arguments and temporary variables:
aCanvas: a FormCanvas on: DisplayScreen(976x720x32)
row: 14
rowLimiT: 20
Receiver's instance variables:
bounds: 0@0 corner: 233@435
owner: a TransformMorph(2393)
submorphs: #()
fullBounds: 0@0 corner: 233@435
color: Color black
extension: a MorphExtension (2535) [other: (errorOnDraw -> true)]
listItems: #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ni...etc...
font: a StrikeFont(Bitmap DejaVu Sans 9 14)
selectedRow: 10
selectedRows: a PluggableSet()
listSource: an O2PluggableListMorph(3401)
maxWidth: 213
handPoint: nil
balloonShown: nil
FormCanvas(Canvas)>>draw:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
anObject: an O2LazyListMorph(3958)
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 756@-65
clipRect: 753@61 corner: 935@222
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
FormCanvas(Canvas)>>drawMorph:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aMorph: an O2LazyListMorph(3958)
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 756@-65
clipRect: 753@61 corner: 935@222
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
[] in O2LazyListMorph(Morph)>>fullDrawOn:
Receiver: an O2LazyListMorph(3958)
Arguments and temporary variables:
aCanvas: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 0@0 corner: 233@435
owner: a TransformMorph(2393)
submorphs: #()
fullBounds: 0@0 corner: 233@435
color: Color black
extension: a MorphExtension (2535) [other: (errorOnDraw -> true)]
listItems: #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ni...etc...
font: a StrikeFont(Bitmap DejaVu Sans 9 14)
selectedRow: 10
selectedRows: a PluggableSet()
listSource: an O2PluggableListMorph(3401)
maxWidth: 213
handPoint: nil
balloonShown: nil
FormCanvas>>roundCornersOf:in:during:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aMorph: an O2LazyListMorph(3958)
bounds: 0@0 corner: 233@435
aBlock: [closure] in O2LazyListMorph(Morph)>>fullDrawOn:
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 756@-65
clipRect: 753@61 corner: 935@222
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
FormCanvas(Canvas)>>roundCornersOf:during:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aMorph: an O2LazyListMorph(3958)
aBlock: [closure] in O2LazyListMorph(Morph)>>fullDrawOn:
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 756@-65
clipRect: 753@61 corner: 935@222
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
O2LazyListMorph(Morph)>>fullDrawOn:
Receiver: an O2LazyListMorph(3958)
Arguments and temporary variables:
aCanvas: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 0@0 corner: 233@435
owner: a TransformMorph(2393)
submorphs: #()
fullBounds: 0@0 corner: 233@435
color: Color black
extension: a MorphExtension (2535) [other: (errorOnDraw -> true)]
listItems: #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil ni...etc...
font: a StrikeFont(Bitmap DejaVu Sans 9 14)
selectedRow: 10
selectedRows: a PluggableSet()
listSource: an O2PluggableListMorph(3401)
maxWidth: 213
handPoint: nil
balloonShown: nil
FormCanvas(Canvas)>>fullDraw:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
anObject: an O2LazyListMorph(3958)
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 756@-65
clipRect: 753@61 corner: 935@222
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
FormCanvas(Canvas)>>fullDrawMorph:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aMorph: an O2LazyListMorph(3958)
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 756@-65
clipRect: 753@61 corner: 935@222
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
[] in [] in TransformMorph>>drawSubmorphsOn:
Receiver: a TransformMorph(2393)
Arguments and temporary variables:
myCanvas: an O2LazyListMorph(3958)
m: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 595@0 corner: 777@161
owner: an O2PluggableListMorph(3401)
submorphs: an Array(an O2LazyListMorph(3958))
fullBounds: 595@0 corner: 777@161
color: Color transparent
extension: nil
transform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = -598@0)
smoothing: 1
localBounds: nil
Array(SequenceableCollection)>>reverseDo:
Receiver: an Array(an O2LazyListMorph(3958))
Arguments and temporary variables:
aBlock: [closure] in [] in TransformMorph>>drawSubmorphsOn:
index: 1
Receiver's instance variables:
an Array(an O2LazyListMorph(3958))
[] in TransformMorph>>drawSubmorphsOn:
Receiver: a TransformMorph(2393)
Arguments and temporary variables:
myCanvas: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 595@0 corner: 777@161
owner: an O2PluggableListMorph(3401)
submorphs: an Array(an O2LazyListMorph(3958))
fullBounds: 595@0 corner: 777@161
color: Color transparent
extension: nil
transform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = -598@0)
smoothing: 1
localBounds: nil
FormCanvas>>transformBy:clippingTo:during:smoothing:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aDisplayTransform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = -598@1...etc...
aClipRect: 595@0 corner: 777@161
aBlock: [closure] in TransformMorph>>drawSubmorphsOn:
cellSize: 1
innerRect: nil
patchRect: nil
sourceQuad: nil
warp: nil
start: nil
subCanvas: nil
i: nil
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 158@61
clipRect: 753@61 corner: 948@235
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
TransformMorph>>drawSubmorphsOn:
Receiver: a TransformMorph(2393)
Arguments and temporary variables:
aCanvas: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 595@0 corner: 777@161
owner: an O2PluggableListMorph(3401)
submorphs: an Array(an O2LazyListMorph(3958))
fullBounds: 595@0 corner: 777@161
color: Color transparent
extension: nil
transform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = -598@0)
smoothing: 1
localBounds: nil
[] in TransformMorph(Morph)>>fullDrawOn:
Receiver: a TransformMorph(2393)
Arguments and temporary variables:
aCanvas: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 595@0 corner: 777@161
owner: an O2PluggableListMorph(3401)
submorphs: an Array(an O2LazyListMorph(3958))
fullBounds: 595@0 corner: 777@161
color: Color transparent
extension: nil
transform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = -598@0)
smoothing: 1
localBounds: nil
FormCanvas>>roundCornersOf:in:during:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aMorph: a TransformMorph(2393)
bounds: 595@0 corner: 777@161
aBlock: [closure] in TransformMorph(Morph)>>fullDrawOn:
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 158@61
clipRect: 753@61 corner: 948@235
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
FormCanvas(Canvas)>>roundCornersOf:during:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aMorph: a TransformMorph(2393)
aBlock: [closure] in TransformMorph(Morph)>>fullDrawOn:
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 158@61
clipRect: 753@61 corner: 948@235
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
TransformMorph(Morph)>>fullDrawOn:
Receiver: a TransformMorph(2393)
Arguments and temporary variables:
aCanvas: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 595@0 corner: 777@161
owner: an O2PluggableListMorph(3401)
submorphs: an Array(an O2LazyListMorph(3958))
fullBounds: 595@0 corner: 777@161
color: Color transparent
extension: nil
transform: a MorphicTransform(angle = 0.0; scale = 1.0; offset = -598@0)
smoothing: 1
localBounds: nil
FormCanvas(Canvas)>>fullDraw:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
anObject: a TransformMorph(2393)
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 158@61
clipRect: 753@61 corner: 948@235
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
FormCanvas(Canvas)>>fullDrawMorph:
Receiver: a FormCanvas on: DisplayScreen(976x720x32)
Arguments and temporary variables:
aMorph: a TransformMorph(2393)
Receiver's instance variables:
target: nil
filterSelector: nil
origin: 158@61
clipRect: 753@61 corner: 948@235
form: DisplayScreen(976x720x32)
port: a GrafPort
shadowColor: nil
[] in [] in O2PluggableListMorph(Morph)>>drawSubmorphsOn:
Receiver: an O2PluggableListMorph(3401)
Arguments and temporary variables:
canvas: a TransformMorph(2393)
m: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 595@0 corner: 790@174
owner: an O2Pane(2662)
submorphs: an Array(a ScrollBar(2523) a ScrollBar(800) a TransformMorph(2393))
fullBounds: 595@0 corner: 790@174
color: Color white
extension: a MorphExtension (2227) [other: (dragEnabled -> true) (dropEnabled ...etc...
borderWidth: 0
borderColor: Color black
model: an O2EnhancementColumn(detectMax:)
slotName: nil
open: false
scrollBar: a ScrollBar(800)
scroller: a TransformMorph(2393)
retractableScrollBar: false
scrollBarOnLeft: false
getMenuSelector: #menu:
getMenuTitleSelector: nil
hasFocus: false
hScrollBar: a ScrollBar(2523)
list: nil
getListSelector: #list
getListSizeSelector: #listSize
getListElementSelector: #listAt:
getIndexSelector: #selection
setIndexSelector: #selection:
keystrokeActionSelector: #keystroke:from:
autoDeselect: false
lastKeystrokeTime: 0
lastKeystrokes: ''
doubleClickSelector: nil
handlesBasicKeys: nil
potentialDropRow: nil
listMorph: an O2LazyListMorph(3958)
hScrollRangeCache: nil
Array(SequenceableCollection)>>reverseDo:
Receiver: an Array(a ScrollBar(2523) a ScrollBar(800) a TransformMorph(2393))
Arguments and temporary variables:
aBlock: [closure] in [] in O2PluggableListMorph(Morph)>>drawSubmorphsOn:
index: 3
Receiver's instance variables:
an Array(a ScrollBar(2523) a ScrollBar(800) a TransformMorph(2393))
[] in O2PluggableListMorph(Morph)>>drawSubmorphsOn:
Receiver: an O2PluggableListMorph(3401)
Arguments and temporary variables:
canvas: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 595@0 corner: 790@174
owner: an O2Pane(2662)
submorphs: an Array(a ScrollBar(2523) a ScrollBar(800) a TransformMorph(2393))
fullBounds: 595@0 corner: 790@174
color: Color white
extension: a MorphExtension (2227) [other: (dragEnabled -> true) (dropEnabled ...etc...
borderWidth: 0
borderColor: Color black
model: an O2EnhancementColumn(detectMax:)
slotName: nil
open: false
scrollBar: a ScrollBar(800)
scroller: a TransformMorph(2393)
retractableScrollBar: false
scrollBarOnLeft: false
getMenuSelector: #menu:
getMenuTitleSelector: nil
hasFocus: false
hScrollBar: a ScrollBar(2523)
list: nil
getListSelector: #list
getListSizeSelector: #listSize
getListElementSelector: #listAt:
getIndexSelector: #selection
setIndexSelector: #selection:
keystrokeActionSelector: #keystroke:from:
autoDeselect: false
lastKeystrokeTime: 0
lastKeystrokes: ''
doubleClickSelector: nil
handlesBasicKeys: nil
potentialDropRow: nil
listMorph: an O2LazyListMorph(3958)
hScrollRangeCache: nil
O2PluggableListMorph(Morph)>>drawSubmorphsOn:
Receiver: an O2PluggableListMorph(3401)
Arguments and temporary variables:
aCanvas: a FormCanvas on: DisplayScreen(976x720x32)
drawBlock: [closure] in O2PluggableListMorph(Morph)>>drawSubmorphsOn:
Receiver's instance variables:
bounds: 595@0 corner: 790@174
owner: an O2Pane(2662)
submorphs: an Array(a ScrollBar(2523) a ScrollBar(800) a TransformMorph(2393))
fullBounds: 595@0 corner: 790@174
color: Color white
extension: a MorphExtension (2227) [other: (dragEnabled -> true) (dropEnabled ...etc...
borderWidth: 0
borderColor: Color black
model: an O2EnhancementColumn(detectMax:)
slotName: nil
open: false
scrollBar: a ScrollBar(800)
scroller: a TransformMorph(2393)
retractableScrollBar: false
scrollBarOnLeft: false
getMenuSelector: #menu:
getMenuTitleSelector: nil
hasFocus: false
hScrollBar: a ScrollBar(2523)
list: nil
getListSelector: #list
getListSizeSelector: #listSize
getListElementSelector: #listAt:
getIndexSelector: #selection
setIndexSelector: #selection:
keystrokeActionSelector: #keystroke:from:
autoDeselect: false
lastKeystrokeTime: 0
lastKeystrokes: ''
doubleClickSelector: nil
handlesBasicKeys: nil
potentialDropRow: nil
listMorph: an O2LazyListMorph(3958)
hScrollRangeCache: nil
O2PluggableListMorph(PluggableListMorph)>>drawSubmorphsOn:
Receiver: an O2PluggableListMorph(3401)
Arguments and temporary variables:
aCanvas: a FormCanvas on: DisplayScreen(976x720x32)
Receiver's instance variables:
bounds: 595@0 corner: 790@174
owner: an O2Pane(2662)
submorphs: an Array(a ScrollBar(2523) a ScrollBar(800) a TransformMorph(2393))
fullBounds: 595@0 corner: 790@174
color: Color white
extension: a MorphExtension (2227) [other: (dragEnabled -> true) (dropEnabled ...etc...
borderWidth: 0
borderColor: Color black
model: an O2EnhancementColumn(detectMax:)
slotName: nil
open: false
scrollBar: a ScrollBar(800)
scroller: a TransformMorph(2393)
retractableScrollBar: false
scrollBarOnLeft: false
getMenuSelector: #menu:
getMenuTitleSelector: nil
hasFocus: false
hScrollBar: a ScrollBar(2523)
list: nil
getListSelector: #list
getListSizeSelector: #listSize
getListElementSelector: #listAt:
getIndexSelector: #selection
setIndexSelector: #selection:
keystrokeActionSelector: #keystroke:from:
autoDeselect: false
lastKeystrokeTime: 0
lastKeystrokes: ''
doubleClickSelector: nil
handlesBasicKeys: nil
potentialDropRow: nil
listMorph: an O2LazyListMorph(3958)
hScrollRangeCache: nil
--- The full stack ---
ByteSymbol(Object)>>error:
[] in WorldState>>displayWorldSafely:
BlockClosure>>valueWithPossibleArgs:
[] in BlockClosure>>ifError:
BlockClosure>>valueWithPossibleArgs:
[] in MethodContext(ContextPart)>>handleSignal:
BlockClosure>>ensure:
MethodContext(ContextPart)>>handleSignal:
MessageNotUnderstood(Exception)>>signal
ByteSymbol(Object)>>doesNotUnderstand: #hasWideCharacterFrom:to:
StrikeFont>>displayString:on:from:to:at:kern:
FormCanvas>>drawString:from:to:in:font:color:
FormCanvas(Canvas)>>drawString:in:font:color:
O2LazyListMorph>>display:atRow:on:
O2LazyListMorph(LazyListMorph)>>drawOn:
FormCanvas(Canvas)>>draw:
FormCanvas(Canvas)>>drawMorph:
[] in O2LazyListMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
O2LazyListMorph(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in TransformMorph>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in TransformMorph>>drawSubmorphsOn:
FormCanvas>>transformBy:clippingTo:during:smoothing:
TransformMorph>>drawSubmorphsOn:
[] in TransformMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
TransformMorph(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in O2PluggableListMorph(Morph)>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in O2PluggableListMorph(Morph)>>drawSubmorphsOn:
O2PluggableListMorph(Morph)>>drawSubmorphsOn:
O2PluggableListMorph(PluggableListMorph)>>drawSubmorphsOn:
- - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - -
[] in O2PluggableListMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
O2PluggableListMorph(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in O2Pane(Morph)>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in O2Pane(Morph)>>drawSubmorphsOn:
FormCanvas>>clipBy:during:
O2Pane(Morph)>>drawSubmorphsOn:
[] in O2Pane(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
O2Pane(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in TransformMorph>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in TransformMorph>>drawSubmorphsOn:
FormCanvas>>transformBy:clippingTo:during:smoothing:
TransformMorph>>drawSubmorphsOn:
[] in TransformMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
TransformMorph(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in O2PaneScroller(Morph)>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in O2PaneScroller(Morph)>>drawSubmorphsOn:
O2PaneScroller(Morph)>>drawSubmorphsOn:
[] in O2PaneScroller(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
O2PaneScroller(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in O2GroupingMorph(Morph)>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in O2GroupingMorph(Morph)>>drawSubmorphsOn:
O2GroupingMorph(Morph)>>drawSubmorphsOn:
[] in O2GroupingMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
O2GroupingMorph(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in SystemWindow(Morph)>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in SystemWindow(Morph)>>drawSubmorphsOn:
FormCanvas>>clipBy:during:
SystemWindow(Morph)>>drawSubmorphsOn:
[] in SystemWindow(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
SystemWindow(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in WorldState>>drawWorld:submorphs:invalidAreasOn:
Rectangle>>allAreasOutsideList:startingAt:do:
Rectangle>>allAreasOutsideList:do:
[] in WorldState>>drawWorld:submorphs:invalidAreasOn:
Array(SequenceableCollection)>>do:
WorldState>>drawWorld:submorphs:invalidAreasOn:
[] in WorldState>>displayWorld:submorphs:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>>roundCornersOf:during:
WorldState>>displayWorld:submorphs:
PasteUpMorph>>privateOuterDisplayWorld
PasteUpMorph>>displayWorld
[] in WorldState>>displayWorldSafely:
BlockClosure>>on:do:
BlockClosure>>ifError:
WorldState>>displayWorldSafely:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess
[] in BlockClosure>>newProcess
Dec. 20, 2009
Re: [Pharo-project] Issue 1634: Object allSubInstances slooooow
by Eliot Miranda
On Sat, Dec 19, 2009 at 9:11 AM, Stan Shepherd
<stan.shepherd414(a)gmail.com>wrote:
>
>
> Eliot Miranda-2 wrote:
> >
> > On Fri, Dec 18, 2009 at 6:04 PM, Martin McClure
> > <martin(a)hand2mouse.com>wrote:
> >
> >> Stan Shepherd wrote:
> >> > Pharo image: Pharo | Pharo-core
> >> > PharoCore1.0rc1 Latest update: #10502
> >> > VM: unix - i686 - linux-gnu - Pharo0.1 of 16 May 2008 [latest update:
> >> > #10074]
> >> >
> >> > Steps to reproduce:
> >> > 1.[Object allSubInstances size inspect] timeToRun 375479 (6 minutes)
> >> >
> >> > with fix
> >> > [Object allSubInstances size inspect] timeToRun 22335 (22 seconds)
> >> >
> >> > Attached treats Object as a special case, and takes advantage of
> >> primitive
> >> > in SystemNavigation>>allObjectsDo:
> >>
> >> It looks like with this change, Object allSubInstances would return
> >> instances of classes that do not inherit from Object, for instance
> >> objects that inherit from ProtoObject.
> >>
> >> Perhaps the special case should go on ProtoObject? Or a test could be
> >> made of how many subclasses a class has, and if it's over some arbitrary
> >> number just iterate through all objects and test each one for isKindOf:?
> >> Don't know how fast that would be, maybe it's not faster. But probably
> >> slow is preferable to incorrect. If you just want "all objects" and
> >> don't care about their class then you can always use
> >> SystemNavigation>>allObjectsDo: rather than allSubInstances.
> >>
> >
> > +1.
> >
> > I don't think there's any justification for this hack. It's possible to
> > have another root to the hierarchy apart from ProtoObject. Further, a
> bit
> > weak, but allSubInstancesDo: has ordering properties; it will evaluate
> the
> > block with all instances of a class followed by all instances of another
> > and
> > so on; it will visit all instances of any superclass before it visits any
> > instances of subclasses, and that could be useful. If you want to use
> > allObjectsDo: use it. Of course allSubInstancesDo: is slow; it makes as
> > many scans of the system as there are classes (Metaclass avoids the scan
> > by
> > evaluating with soleInstance). But that's not a justification for
> > special-casing one use of it to a freely accessible but different
> > alternative.
> >
> >
> >> Regards,
> >>
> >> -Martin
> >>
> >> _______________________________________________
> >> Pharo-project mailing list
> >> Pharo-project(a)lists.gforge.inria.fr
> >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
> >>
> >
> > _______________________________________________
> > Pharo-project mailing list
> > Pharo-project(a)lists.gforge.inria.fr
> > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
> >
>
>
> Eliot Miranda-2 wrote:
> >
> > I don't think there's any justification for this hack.
> >
>
> Quite so. It was late, and I'd thought better of it by morning. However,
> don't feel you need to spare my feelings ;)
>
Sorry Sam :) I had to be blunt. I knew you'd understand :)
Forgive me.
>
> Taking a step back, Object allSubinstances size seems to be a common proxy
> measure for the size/bloat/complexity of an image.
> (E.g. http://www.object-arts.com/docs/index.html?how_many_objects.htm ).
> Running it on a large production system would potentially be very slow.
> It could also be something a current Smalltaker would run to check out
> Pharo,
> in which case a coffee break would be warranted. So from a marketing of
> Pharo
> perspective, 6 minutes seems too long to me. Yes, an experienced user will
> avoid it.
> I have no proposal as to how to catch that case while avoiding a hack.
> Adding a specific
> allSubinstances to Object class would break inheritance chain to Behavior.
>
>
> In the meantime, perhaps there should be an alternative simple measure
> available:
>
> SystemNavigation>>allObjects
> "A fast way to list all current objects in the image.
> n.b. this will include the classes ImageSegmentRootStub
> MessageCatcher
> TestCoverage DynamicBindingsInfo, and possibly others, that do not
> inherit from Object. These classes probably have no instances, but
> it is not safe to assume this"
> | aCollection |
> aCollection := OrderedCollection new.
> self allObjectsDo:
> [:x | x == aCollection ifFalse: [aCollection add: x]].
> ^ aCollection
>
> with a comment in allSubInstances
> "for Prototype>>allSubInstances, Object>>allSubInstances,consider
> using
> SystemNavigation>>allObjects. This is much faster. see comment
> there"
>
>
> Martin McClure wrote:
> >
> > It looks like with this change, Object allSubInstances would return
> > instances of classes that do not inherit from Object, for instance
> > objects that inherit from ProtoObject.
> >
> Yes. It doesn't currently, but it could. See comment above.
>
>
> Martin McClure wrote:
> >
> > Or a test could be made of how many subclasses a class has, and if it's
> > over some arbitrarynumber just iterate through all objects and test each
> > one for isKindOf:?
> > Don't know how fast that would be, maybe it's not faster.
> >
> Yes, I looked at that:
> multi single
> pass pass
> Collection 18650 29448 82 subclasses, multipass 50% faster
>
> BorderedMorph 26301 7464 206 subclasses, singlepass 3x faster
>
> GRObject 113717 6969 742 subclasses, singlepass 14x faster.
>
> Breakeven point is around 100 subclasses.
>
> Mostly allSubInstances is used in housekeeping tasks, so it's not a big
> issue.
> As it's mostly used in housekeeping, a lot of the applications would
> probably be
> fine with the unordered, one pass version.
>
> I'll do a bit of digging into whether there are any meaningful performance
> implications.
>
> ...Stan
>
> Behavior>>allSubInstancesDoInOnePass: attached if anyone wants to
> benchmark
> http://n2.nabble.com/file/n4192013/Behavior-allSubInstancesDoInOnePass.st
> Behavior-allSubInstancesDoInOnePass.st
> --
> View this message in context:
> http://n2.nabble.com/Issue-1634-Object-allSubInstances-slooooow-tp4189848p4…
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Dec. 20, 2009
Re: [Pharo-project] Default code browser
by Schwab,Wilhelm K
I tried whisker on Squeak years ago and hated it. A clean CHB that offers easy ways to spawn new browsers, can be filtered to subsets of the class hierarchy, and has a history for easy forward-back/recent navigation is the way to go IMHO.
Bill
-----Original Message-----
From: pharo-project-bounces(a)lists.gforge.inria.fr [mailto:pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Stéphane Ducasse
Sent: Saturday, December 19, 2009 3:44 AM
To: Pharo-project(a)lists.gforge.inria.fr
Subject: Re: [Pharo-project] Default code browser
On of the idea is to use glamour to experiment new browsers and probably to write it from scratch when we know what is really good.
Ideally
I like the multiple method showing of whisker but not the rest
david implemented that in OB.
I like the fact that O2 supports the view of class extension view per packages
Now I avoid to talk about browsers because we do not have somebody in the community
working heavily on that beside david and david may leave once he will finish his PhD.
Now OB metamodel does not support tree and make it difficult to have something like the class comment visible close to the class definition.
On Dec 18, 2009, at 3:47 PM, GeertClaes wrote:
>
>
> George Herolyants-3 wrote:
>>
>> Though I think WhiskerBrowser still covers the above use case better.
>> Unfortunately it doesn't run on Pharo.
>>
>
> Maybe WhiskerBrowser can be created using Glamour?
> --
> View this message in context:
> http://n2.nabble.com/Default-code-browser-tp4183317p4186933.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________
Pharo-project mailing list
Pharo-project(a)lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 19, 2009
[Pharo-project] OCompletion and the O2PackageBrowser search panel problem
by Adrian Lienhard
There is an issue with OCompletion and the O2PackageBrowser in the
latest 1.0 dev image. I created issue 1635: OCompletion
+O2PackageBrowser: mercury search bar backspace delete error.
http://code.google.com/p/pharo/issues/detail?id=1635
Adrian
Dec. 19, 2009
[Pharo-project] Seaside2.8 and Seaside3.0 configs online in MetacelloRepository
by Dale Henrichs
Just published ConfigurationOfSeaside28 to http://www.squeaksource.com/MetacelloRepository.
In a pharo dev image:
Gofer new
squeaksource: 'MetacelloRepository';
addPackage: 'ConfigurationOfSeaside28';
load.
(Smalltalk at: #ConfigurationOfSeaside28) perform: #load.
ConfigurationOfSeaside28 was published a while ago, but I'll mention the Seaside3.0 config for completeness:
Gofer new
squeaksource: 'MetacelloRepository';
addPackage: 'ConfigurationOfSeaside30';
load.
(Smalltalk at: #ConfigurationOfSeaside30) perform: #load.
Note that Seaside2.8 and Seaside3.0 cannot be loaded into the same image as there are class name conflicts.
Both of these configurations have been successfully loaded into 'Pharo1.0rc1 #10493' and 'Squeak3.10.2-trunk' (Squeak requires manual load of configuration package:).
I will be integrating ConfigurationOfSeaside28 for use with GLASS. ConfigurationOfSeaside30 is already integrated into GLASS (for GemStone/S 2.4).
Dale
Dec. 19, 2009
[Pharo-project] About projects with Metacello
by Mariano Martinez Peck
Hi folks. Now that I am starting to write some configurations, I realized
that we have a "change of concept" with Metacello. With Gofer or Installer
(someone tell me if I am wrong) we are use to manage projects that are a
certain repository of squeaksource or similar. And then we have the
packages. So, for example we are talking about the RefactoringBrowser, you
have:
www.squeaksource.com/rb
and the packages AST-Core, Refactoring-Core and Refactoring-Spelling.
Then there is the project OB where you have also OB-Refactory and OB-Regex
for example.
At first, of course, I thought to have one ConfigurationOf per project. I
mean, map one to one. But now...I was wondering that I can have a
ConfigurationOfRefactoring for example, that can deals with ALL the things
related to RB. In this case AST-Core, Refactoring-Core and
Refactoring-Spelling from rb repo and OB-Refactory and OB-Regex from OB
repo....and see all of them like a project.
What do you think ? Do you have any thoughts with this? pors and cons? I
would like to listen opinions.
Cheers,
Mariano
Dec. 19, 2009
Re: [Pharo-project] Issue 1634: Object allSubInstances slooooow
by Stéphane Ducasse
Stan
did you compare/have a look at spaceTally because it is also reporting memory consumption
and may be we could make everything better. (I just read my mails between two houses fixes).
I will take more time this evening if I can.
Anyway thanks. I like these kinds of discussions. Because I learn stuff or they make me think
and rethink what I think I know
Stef
On Dec 19, 2009, at 6:11 PM, Stan Shepherd wrote:
>
>
> Eliot Miranda-2 wrote:
>>
>> On Fri, Dec 18, 2009 at 6:04 PM, Martin McClure
>> <martin(a)hand2mouse.com>wrote:
>>
>>> Stan Shepherd wrote:
>>>> Pharo image: Pharo | Pharo-core
>>>> PharoCore1.0rc1 Latest update: #10502
>>>> VM: unix - i686 - linux-gnu - Pharo0.1 of 16 May 2008 [latest update:
>>>> #10074]
>>>>
>>>> Steps to reproduce:
>>>> 1.[Object allSubInstances size inspect] timeToRun 375479 (6 minutes)
>>>>
>>>> with fix
>>>> [Object allSubInstances size inspect] timeToRun 22335 (22 seconds)
>>>>
>>>> Attached treats Object as a special case, and takes advantage of
>>> primitive
>>>> in SystemNavigation>>allObjectsDo:
>>>
>>> It looks like with this change, Object allSubInstances would return
>>> instances of classes that do not inherit from Object, for instance
>>> objects that inherit from ProtoObject.
>>>
>>> Perhaps the special case should go on ProtoObject? Or a test could be
>>> made of how many subclasses a class has, and if it's over some arbitrary
>>> number just iterate through all objects and test each one for isKindOf:?
>>> Don't know how fast that would be, maybe it's not faster. But probably
>>> slow is preferable to incorrect. If you just want "all objects" and
>>> don't care about their class then you can always use
>>> SystemNavigation>>allObjectsDo: rather than allSubInstances.
>>>
>>
>> +1.
>>
>> I don't think there's any justification for this hack. It's possible to
>> have another root to the hierarchy apart from ProtoObject. Further, a bit
>> weak, but allSubInstancesDo: has ordering properties; it will evaluate the
>> block with all instances of a class followed by all instances of another
>> and
>> so on; it will visit all instances of any superclass before it visits any
>> instances of subclasses, and that could be useful. If you want to use
>> allObjectsDo: use it. Of course allSubInstancesDo: is slow; it makes as
>> many scans of the system as there are classes (Metaclass avoids the scan
>> by
>> evaluating with soleInstance). But that's not a justification for
>> special-casing one use of it to a freely accessible but different
>> alternative.
>>
>>
>>> Regards,
>>>
>>> -Martin
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project(a)lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
> Eliot Miranda-2 wrote:
>>
>> I don't think there's any justification for this hack.
>>
>
> Quite so. It was late, and I'd thought better of it by morning. However,
> don't feel you need to spare my feelings ;)
>
>
> Taking a step back, Object allSubinstances size seems to be a common proxy
> measure for the size/bloat/complexity of an image.
> (E.g. http://www.object-arts.com/docs/index.html?how_many_objects.htm ).
> Running it on a large production system would potentially be very slow.
> It could also be something a current Smalltaker would run to check out
> Pharo,
> in which case a coffee break would be warranted. So from a marketing of
> Pharo
> perspective, 6 minutes seems too long to me. Yes, an experienced user will
> avoid it.
> I have no proposal as to how to catch that case while avoiding a hack.
> Adding a specific
> allSubinstances to Object class would break inheritance chain to Behavior.
>
>
> In the meantime, perhaps there should be an alternative simple measure
> available:
>
> SystemNavigation>>allObjects
> "A fast way to list all current objects in the image.
> n.b. this will include the classes ImageSegmentRootStub MessageCatcher
> TestCoverage DynamicBindingsInfo, and possibly others, that do not
> inherit from Object. These classes probably have no instances, but
> it is not safe to assume this"
> | aCollection |
> aCollection := OrderedCollection new.
> self allObjectsDo:
> [:x | x == aCollection ifFalse: [aCollection add: x]].
> ^ aCollection
>
> with a comment in allSubInstances
> "for Prototype>>allSubInstances, Object>>allSubInstances,consider using
> SystemNavigation>>allObjects. This is much faster. see comment there"
>
>
> Martin McClure wrote:
>>
>> It looks like with this change, Object allSubInstances would return
>> instances of classes that do not inherit from Object, for instance
>> objects that inherit from ProtoObject.
>>
> Yes. It doesn't currently, but it could. See comment above.
>
>
> Martin McClure wrote:
>>
>> Or a test could be made of how many subclasses a class has, and if it's
>> over some arbitrarynumber just iterate through all objects and test each
>> one for isKindOf:?
>> Don't know how fast that would be, maybe it's not faster.
>>
> Yes, I looked at that:
> multi single
> pass pass
> Collection 18650 29448 82 subclasses, multipass 50% faster
>
> BorderedMorph 26301 7464 206 subclasses, singlepass 3x faster
>
> GRObject 113717 6969 742 subclasses, singlepass 14x faster.
>
> Breakeven point is around 100 subclasses.
>
> Mostly allSubInstances is used in housekeeping tasks, so it's not a big
> issue.
> As it's mostly used in housekeeping, a lot of the applications would
> probably be
> fine with the unordered, one pass version.
>
> I'll do a bit of digging into whether there are any meaningful performance
> implications.
>
> ...Stan
>
> Behavior>>allSubInstancesDoInOnePass: attached if anyone wants to benchmark
> http://n2.nabble.com/file/n4192013/Behavior-allSubInstancesDoInOnePass.st
> Behavior-allSubInstancesDoInOnePass.st
> --
> View this message in context: http://n2.nabble.com/Issue-1634-Object-allSubInstances-slooooow-tp4189848p4…
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dec. 19, 2009
Re: [Pharo-project] Need someone to commit on RoelTyper
by Mariano Martinez Peck
In addition, it would be cool if someone can move the tests of RoleTyper to
a separate package special for tests. Can someone do this and commit my .mcz
?
Please...
On Fri, Dec 18, 2009 at 3:00 PM, Mariano Martinez Peck <
marianopeck(a)gmail.com> wrote:
> Hi Fréd!
>
> I fixed the _ in assignment problem in RoelTyper. I don't have access to
> commit as I am not as developer and the global setting in ss is read. I
> attach the .mcz. Can you commit it please or give me access?
>
> Thanks
>
> Mariano
>
Dec. 19, 2009
Re: [Pharo-project] Issue 1634: Object allSubInstances slooooow
by Stan Shepherd
Eliot Miranda-2 wrote:
>
> On Fri, Dec 18, 2009 at 6:04 PM, Martin McClure
> <martin(a)hand2mouse.com>wrote:
>
>> Stan Shepherd wrote:
>> > Pharo image: Pharo | Pharo-core
>> > PharoCore1.0rc1 Latest update: #10502
>> > VM: unix - i686 - linux-gnu - Pharo0.1 of 16 May 2008 [latest update:
>> > #10074]
>> >
>> > Steps to reproduce:
>> > 1.[Object allSubInstances size inspect] timeToRun 375479 (6 minutes)
>> >
>> > with fix
>> > [Object allSubInstances size inspect] timeToRun 22335 (22 seconds)
>> >
>> > Attached treats Object as a special case, and takes advantage of
>> primitive
>> > in SystemNavigation>>allObjectsDo:
>>
>> It looks like with this change, Object allSubInstances would return
>> instances of classes that do not inherit from Object, for instance
>> objects that inherit from ProtoObject.
>>
>> Perhaps the special case should go on ProtoObject? Or a test could be
>> made of how many subclasses a class has, and if it's over some arbitrary
>> number just iterate through all objects and test each one for isKindOf:?
>> Don't know how fast that would be, maybe it's not faster. But probably
>> slow is preferable to incorrect. If you just want "all objects" and
>> don't care about their class then you can always use
>> SystemNavigation>>allObjectsDo: rather than allSubInstances.
>>
>
> +1.
>
> I don't think there's any justification for this hack. It's possible to
> have another root to the hierarchy apart from ProtoObject. Further, a bit
> weak, but allSubInstancesDo: has ordering properties; it will evaluate the
> block with all instances of a class followed by all instances of another
> and
> so on; it will visit all instances of any superclass before it visits any
> instances of subclasses, and that could be useful. If you want to use
> allObjectsDo: use it. Of course allSubInstancesDo: is slow; it makes as
> many scans of the system as there are classes (Metaclass avoids the scan
> by
> evaluating with soleInstance). But that's not a justification for
> special-casing one use of it to a freely accessible but different
> alternative.
>
>
>> Regards,
>>
>> -Martin
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Eliot Miranda-2 wrote:
>
> I don't think there's any justification for this hack.
>
Quite so. It was late, and I'd thought better of it by morning. However,
don't feel you need to spare my feelings ;)
Taking a step back, Object allSubinstances size seems to be a common proxy
measure for the size/bloat/complexity of an image.
(E.g. http://www.object-arts.com/docs/index.html?how_many_objects.htm ).
Running it on a large production system would potentially be very slow.
It could also be something a current Smalltaker would run to check out
Pharo,
in which case a coffee break would be warranted. So from a marketing of
Pharo
perspective, 6 minutes seems too long to me. Yes, an experienced user will
avoid it.
I have no proposal as to how to catch that case while avoiding a hack.
Adding a specific
allSubinstances to Object class would break inheritance chain to Behavior.
In the meantime, perhaps there should be an alternative simple measure
available:
SystemNavigation>>allObjects
"A fast way to list all current objects in the image.
n.b. this will include the classes ImageSegmentRootStub MessageCatcher
TestCoverage DynamicBindingsInfo, and possibly others, that do not
inherit from Object. These classes probably have no instances, but
it is not safe to assume this"
| aCollection |
aCollection := OrderedCollection new.
self allObjectsDo:
[:x | x == aCollection ifFalse: [aCollection add: x]].
^ aCollection
with a comment in allSubInstances
"for Prototype>>allSubInstances, Object>>allSubInstances,consider using
SystemNavigation>>allObjects. This is much faster. see comment there"
Martin McClure wrote:
>
> It looks like with this change, Object allSubInstances would return
> instances of classes that do not inherit from Object, for instance
> objects that inherit from ProtoObject.
>
Yes. It doesn't currently, but it could. See comment above.
Martin McClure wrote:
>
> Or a test could be made of how many subclasses a class has, and if it's
> over some arbitrarynumber just iterate through all objects and test each
> one for isKindOf:?
> Don't know how fast that would be, maybe it's not faster.
>
Yes, I looked at that:
multi single
pass pass
Collection 18650 29448 82 subclasses, multipass 50% faster
BorderedMorph 26301 7464 206 subclasses, singlepass 3x faster
GRObject 113717 6969 742 subclasses, singlepass 14x faster.
Breakeven point is around 100 subclasses.
Mostly allSubInstances is used in housekeeping tasks, so it's not a big
issue.
As it's mostly used in housekeeping, a lot of the applications would
probably be
fine with the unordered, one pass version.
I'll do a bit of digging into whether there are any meaningful performance
implications.
...Stan
Behavior>>allSubInstancesDoInOnePass: attached if anyone wants to benchmark
http://n2.nabble.com/file/n4192013/Behavior-allSubInstancesDoInOnePass.st
Behavior-allSubInstancesDoInOnePass.st
--
View this message in context: http://n2.nabble.com/Issue-1634-Object-allSubInstances-slooooow-tp4189848p4…
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
Dec. 19, 2009