Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- 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
October 2009
- 86 participants
- 1118 messages
[Pharo-project] (a = b) => (a hash = b hash)
by Andrew P. Black
The golden rule of hashing is (a = b) => (a hash = b hash). Right?
Look at this:
(1 to: 10) species ---> Array
#(1 2 3 4 5 6 7 8 9 10) species ---> Array
(1 to: 10) = #(1 2 3 4 5 6 7 8 9 10) ---> true
However,
(1 to: 10) hash = #(1 2 3 4 5 6 7 8 9 10) hash ---> false.
I believe that the last is a bug.
Andrew
Oct. 24, 2009
[Pharo-project] Broken "Recover Lost Changes"
by John Toohey
I have a 4 day old image that just froze. After restarting, I tried to
recover the code changes since I saved my image yesterday, but the list of
changes in the tool are an unordered list going back to February of this
year. Even old code of mine from that time was in the list. After about an
hour I managed to manually select the changes I've made since yesterday, and
file them out. When I try to file them back in, I get an error from the
debugger, and cannot continue. Anyone know what I can do to recover my
source, or point me in the right direction to recover from this.
This is the stacktrace from the debugger :-
From: jt(a)parspro.com
To: Pharo-project(a)lists.gforge.inria.fr
Subject: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #self
here insert explanation of what you were doing, suspect changes you've made
and so forth.
23 October 2009 4:19:05 pm
VM: Mac OS - intel - 1058 - Squeak3.8.1 of '28 Aug 2006' [latest update:
#6747] Squeak VM 4.1.1b2
Image: Pharo1.0beta [Latest update: #10477]
SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /Users/jpt/Dev/repos/Dev-Images/PharoCore-1.0-10477-BETA
Trusted Dir /foobar/tooBar/forSqueak/bogus
Untrusted Dir /Users/jpt/Library/Preferences/Squeak/Internet/My Squeak
UndefinedObject(Object)>>doesNotUnderstand: #self
Receiver: nil
Arguments and temporary variables:
aMessage: self
exception: MessageNotUnderstood: receiver of "self" is nil
resumeValue: nil
Receiver's instance variables:
nil
UndefinedObject>>DoIt
Receiver: nil
Arguments and temporary variables:
Receiver's instance variables:
nil
Compiler>>evaluate:in:to:notifying:ifFail:logged:
Receiver: a Compiler
Arguments and temporary variables:
textOrStream: 'publish
self status: #Opened
'
aContext: nil
receiver: nil
aRequestor: nil
failBlock: [closure] in Compiler class>>evaluate:for:notifying:logged:
logFlag: false
methodNode: DoIt
^ publish self status: #Opened
method: a CompiledMethod(982: UndefinedObject>>DoIt)
value: nil
toLog: nil
itsSelection: nil
itsSelectionString: nil
Receiver's instance variables:
sourceStream: a ReadStream 'publish
self status: #Opened
'
requestor: nil
class: UndefinedObject
category: nil
context: nil
parser: a Parser
Compiler class>>evaluate:for:notifying:logged:
Receiver: Compiler
Arguments and temporary variables:
textOrString: 'publish
self status: #Opened
'
anObject: nil
aController: nil
logFlag: false
Receiver's instance variables:
superclass: Object
methodDict: a MethodDictionary(#compile:in:classified:notifying:ifFail:->a
Comp...etc...
format: 142
instanceVariables: #('sourceStream' 'requestor' 'class' 'category' 'context'
'p...etc...
organization: ('deprecated' format:in:notifying:contentsSymbol:)
('error handli...etc...
subclasses: nil
name: #Compiler
classPool: a Dictionary()
sharedPools: nil
environment: Smalltalk
category: #'Compiler-Kernel'
traitComposition: nil
localSelectors: nil
Compiler class>>evaluate:for:logged:
Receiver: Compiler
Arguments and temporary variables:
textOrString: 'publish
self status: #Opened
'
anObject: nil
logFlag: false
Receiver's instance variables:
superclass: Object
methodDict: a MethodDictionary(#compile:in:classified:notifying:ifFail:->a
Comp...etc...
format: 142
instanceVariables: #('sourceStream' 'requestor' 'class' 'category' 'context'
'p...etc...
organization: ('deprecated' format:in:notifying:contentsSymbol:)
('error handli...etc...
subclasses: nil
name: #Compiler
classPool: a Dictionary()
sharedPools: nil
environment: Smalltalk
category: #'Compiler-Kernel'
traitComposition: nil
localSelectors: nil
Compiler class>>evaluate:
Receiver: Compiler
Arguments and temporary variables:
textOrString: 'publish
self status: #Opened
'
Receiver's instance variables:
superclass: Object
methodDict: a MethodDictionary(#compile:in:classified:notifying:ifFail:->a
Comp...etc...
format: 142
instanceVariables: #('sourceStream' 'requestor' 'class' 'category' 'context'
'p...etc...
organization: ('deprecated' format:in:notifying:contentsSymbol:)
('error handli...etc...
subclasses: nil
name: #Compiler
classPool: a Dictionary()
sharedPools: nil
environment: Smalltalk
category: #'Compiler-Kernel'
traitComposition: nil
localSelectors: nil
[] in ChangeRecord>>fileIn
Receiver: a ChangeRecord
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
file: MultiByteFileStream:
'/Users/jpt/Dev/repos/Dev-Images/PharoCore-1.0-10477...etc...
position: 29712
type: #doIt
class: nil
category: nil
meta: nil
stamp: nil
BlockClosure>>ensure:
Receiver: [closure] in ChangeRecord>>fileIn
Arguments and temporary variables:
aBlock: [closure] in CursorWithMask(Cursor)>>showWhile:
returnValue: nil
b: nil
Receiver's instance variables:
outerContext: ChangeRecord>>fileIn
startpc: 107
numArgs: 0
CursorWithMask(Cursor)>>showWhile:
Receiver: ((CursorWithMask
extent: 16@16
depth: 1
fromArray: #(
2r0
2r0
2r0
2r10000000010...etc...
Arguments and temporary variables:
aBlock: [closure] in ChangeRecord>>fileIn
oldcursor: ((CursorWithMask
extent: 16@16
depth: 1
fromArray: #(
2r0
2r1...etc...
Receiver's instance variables:
bits: a Bitmap of length 16
width: 16
height: 16
depth: 1
offset: -1@-1
maskForm: Form(16x16x1)
ChangeRecord>>fileIn
Receiver: a ChangeRecord
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
file: MultiByteFileStream:
'/Users/jpt/Dev/repos/Dev-Images/PharoCore-1.0-10477...etc...
position: 29712
type: #doIt
class: nil
category: nil
meta: nil
stamp: nil
[] in ChangeList>>fileInSelections
Receiver: a ChangeList
Arguments and temporary variables:
any: true
selected: a ChangeRecord
item: #(true)
Receiver's instance variables:
dependents: a DependentsArray(a SystemWindow(252) a
PluggableListMorphOfMany(33...etc...
contents: ''
currentCompiledMethod: nil
contentsSymbol: #showDiffs
changeList: an OrderedCollection(a ChangeRecord a ChangeRecord a
ChangeRecord a...etc...
list: an OrderedCollection('do it: ''From Pharo1.0beta of 16...ber 2009 at
3:57...etc...
listIndex: 0
listSelections: #(true true true true true true true true true true true
true t...etc...
file: MultiByteFileStream:
'/Users/jpt/Dev/repos/Dev-Images/PharoCore-1.0-10477...etc...
lostMethodPointer: nil
showsVersions: nil
Array(SequenceableCollection)>>with:do:
Receiver: #(true true true true true true true true true true true true true
true true true true tru...etc...
Arguments and temporary variables:
otherCollection: an OrderedCollection(a ChangeRecord a ChangeRecord a
ChangeRec...etc...
twoArgBlock: [closure] in ChangeList>>fileInSelections
index: 171
indexLimiT: 274
Receiver's instance variables:
#(true true true true true true true true true true true true true true true
true true tru...etc...
ChangeList>>fileInSelections
Receiver: a ChangeList
Arguments and temporary variables:
any: #(true)
Receiver's instance variables:
dependents: a DependentsArray(a SystemWindow(252) a
PluggableListMorphOfMany(33...etc...
contents: ''
currentCompiledMethod: nil
contentsSymbol: #showDiffs
changeList: an OrderedCollection(a ChangeRecord a ChangeRecord a
ChangeRecord a...etc...
list: an OrderedCollection('do it: ''From Pharo1.0beta of 16...ber 2009 at
3:57...etc...
listIndex: 0
listSelections: #(true true true true true true true true true true true
true t...etc...
file: MultiByteFileStream:
'/Users/jpt/Dev/repos/Dev-Images/PharoCore-1.0-10477...etc...
lostMethodPointer: nil
showsVersions: nil
PluggableButtonMorph>>performAction
Receiver: a PluggableButtonMorph(824)
Arguments and temporary variables:
Receiver's instance variables:
bounds: 1408@359 corner: 1749@383
owner: an AlignmentMorph(3699)
submorphs: an Array(an AlignmentMorph(921))
fullBounds: 1408@359 corner: 1749@383
color: (Color r: 0.827 g: 0.827 b: 0.827)
extension: a MorphExtension (1404) [balloonText] [other: (layoutPolicy ->
a T...etc...
borderWidth: 0
borderColor: Color transparent
model: a ChangeList
label: 'file in selections'
getStateSelector: nil
actionSelector: #fileInSelections
getLabelSelector: nil
getMenuSelector: nil
shortcutCharacter: nil
askBeforeChanging: true
triggerOnMouseDown: false
offColor: Color white
onColor: Color white
feedbackColor: nil
showSelectionFeedback: false
allButtons: nil
arguments: #()
argumentsProvider: nil
argumentsSelector: nil
[] in PluggableButtonMorph>>mouseUp:
Receiver: a PluggableButtonMorph(824)
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
bounds: 1408@359 corner: 1749@383
owner: an AlignmentMorph(3699)
submorphs: an Array(an AlignmentMorph(921))
fullBounds: 1408@359 corner: 1749@383
color: (Color r: 0.827 g: 0.827 b: 0.827)
extension: a MorphExtension (1404) [balloonText] [other: (layoutPolicy ->
a T...etc...
borderWidth: 0
borderColor: Color transparent
model: a ChangeList
label: 'file in selections'
getStateSelector: nil
actionSelector: #fileInSelections
getLabelSelector: nil
getMenuSelector: nil
shortcutCharacter: nil
askBeforeChanging: true
triggerOnMouseDown: false
offColor: Color white
onColor: Color white
feedbackColor: nil
showSelectionFeedback: false
allButtons: nil
arguments: #()
argumentsProvider: nil
argumentsSelector: nil
Array(SequenceableCollection)>>do:
Receiver: an Array(a PluggableButtonMorph(786) a PluggableButtonMorph(3485)
a PluggableButtonMorph(5...etc...
Arguments and temporary variables:
aBlock: [closure] in PluggableButtonMorph>>mouseUp:
index: 4
indexLimiT: 4
Receiver's instance variables:
an Array(a PluggableButtonMorph(786) a PluggableButtonMorph(3485) a
PluggableButtonMorph(5...etc...
PluggableButtonMorph>>mouseUp:
Receiver: a PluggableButtonMorph(824)
Arguments and temporary variables:
evt: [1518@375 mouseUp 3690378 nil]
all: an Array(a PluggableButtonMorph(786) a PluggableButtonMorph(3485) a
Plugga...etc...
Receiver's instance variables:
bounds: 1408@359 corner: 1749@383
owner: an AlignmentMorph(3699)
submorphs: an Array(an AlignmentMorph(921))
fullBounds: 1408@359 corner: 1749@383
color: (Color r: 0.827 g: 0.827 b: 0.827)
extension: a MorphExtension (1404) [balloonText] [other: (layoutPolicy ->
a T...etc...
borderWidth: 0
borderColor: Color transparent
model: a ChangeList
label: 'file in selections'
getStateSelector: nil
actionSelector: #fileInSelections
getLabelSelector: nil
getMenuSelector: nil
shortcutCharacter: nil
askBeforeChanging: true
triggerOnMouseDown: false
offColor: Color white
onColor: Color white
feedbackColor: nil
showSelectionFeedback: false
allButtons: nil
arguments: #()
argumentsProvider: nil
argumentsSelector: nil
PluggableButtonMorph(Morph)>>handleMouseUp:
Receiver: a PluggableButtonMorph(824)
Arguments and temporary variables:
anEvent: [1518@375 mouseUp 3690378 nil]
Receiver's instance variables:
bounds: 1408@359 corner: 1749@383
owner: an AlignmentMorph(3699)
submorphs: an Array(an AlignmentMorph(921))
fullBounds: 1408@359 corner: 1749@383
color: (Color r: 0.827 g: 0.827 b: 0.827)
extension: a MorphExtension (1404) [balloonText] [other: (layoutPolicy ->
a T...etc...
borderWidth: 0
borderColor: Color transparent
model: a ChangeList
label: 'file in selections'
getStateSelector: nil
actionSelector: #fileInSelections
getLabelSelector: nil
getMenuSelector: nil
shortcutCharacter: nil
askBeforeChanging: true
triggerOnMouseDown: false
offColor: Color white
onColor: Color white
feedbackColor: nil
showSelectionFeedback: false
allButtons: nil
arguments: #()
argumentsProvider: nil
argumentsSelector: nil
MouseButtonEvent>>sentTo:
Receiver: [1518@375 mouseUp 3690378 nil]
Arguments and temporary variables:
anObject: a PluggableButtonMorph(824)
Receiver's instance variables:
timeStamp: 3690378
source: a HandMorph(3216)
windowIndex: nil
type: #mouseUp
buttons: 0
position: 1518@375
handler: nil
wasHandled: true
whichButton: 4
PluggableButtonMorph(Morph)>>handleEvent:
Receiver: a PluggableButtonMorph(824)
Arguments and temporary variables:
anEvent: [1518@375 mouseUp 3690378 nil]
Receiver's instance variables:
bounds: 1408@359 corner: 1749@383
owner: an AlignmentMorph(3699)
submorphs: an Array(an AlignmentMorph(921))
fullBounds: 1408@359 corner: 1749@383
color: (Color r: 0.827 g: 0.827 b: 0.827)
extension: a MorphExtension (1404) [balloonText] [other: (layoutPolicy ->
a T...etc...
borderWidth: 0
borderColor: Color transparent
model: a ChangeList
label: 'file in selections'
getStateSelector: nil
actionSelector: #fileInSelections
getLabelSelector: nil
getMenuSelector: nil
shortcutCharacter: nil
askBeforeChanging: true
triggerOnMouseDown: false
offColor: Color white
onColor: Color white
feedbackColor: nil
showSelectionFeedback: false
allButtons: nil
arguments: #()
argumentsProvider: nil
argumentsSelector: nil
PluggableButtonMorph(Morph)>>handleFocusEvent:
Receiver: a PluggableButtonMorph(824)
Arguments and temporary variables:
anEvent: [1518@375 mouseUp 3690378 nil]
Receiver's instance variables:
bounds: 1408@359 corner: 1749@383
owner: an AlignmentMorph(3699)
submorphs: an Array(an AlignmentMorph(921))
fullBounds: 1408@359 corner: 1749@383
color: (Color r: 0.827 g: 0.827 b: 0.827)
extension: a MorphExtension (1404) [balloonText] [other: (layoutPolicy ->
a T...etc...
borderWidth: 0
borderColor: Color transparent
model: a ChangeList
label: 'file in selections'
getStateSelector: nil
actionSelector: #fileInSelections
getLabelSelector: nil
getMenuSelector: nil
shortcutCharacter: nil
askBeforeChanging: true
triggerOnMouseDown: false
offColor: Color white
onColor: Color white
feedbackColor: nil
showSelectionFeedback: false
allButtons: nil
arguments: #()
argumentsProvider: nil
argumentsSelector: nil
[] in HandMorph>>sendFocusEvent:to:clear:
Receiver: a HandMorph(3216)
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
bounds: 1661@782 corner: 1677@798
owner: a PasteUpMorph(1622) [world]
submorphs: #()
fullBounds: 1661@782 corner: 1677@798
color: Color blue
extension: a MorphExtension (539) [eventHandler = an EventHandler]
mouseFocus: nil
keyboardFocus: nil
eventListeners: nil
mouseListeners: nil
keyboardListeners: nil
mouseClickState: nil
mouseOverHandler: a MouseOverHandler
lastMouseEvent: [1661@782 mouseUp 3788444 nil]
targetOffset: 99@6
damageRecorder: a DamageRecorder
cacheCanvas: nil
cachedCanvasHasHoles: true
temporaryCursor: nil
temporaryCursorOffset: nil
hardwareCursor: nil
hasChanged: true
savedPatch: nil
userInitials: ''
lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
lastKeyScanCode: 126
combinedChar: nil
[] in PasteUpMorph>>becomeActiveDuring:
Receiver: a PasteUpMorph(1622) [world]
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
bounds: 0@0 corner: 1920@1178
owner: nil
submorphs: an Array(a TaskbarMorph(3095) a SystemWindow(3356) a
SystemWindow(25...etc...
fullBounds: nil
color: Color gray
extension: a MorphExtension (2543) [eventHandler = an EventHandler] [other:
(...etc...
borderWidth: 0
borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
presenter: a Presenter (1246)
model: a MorphicModel(1926)
cursor: 1
padding: 3
backgroundMorph: nil
isPartsBin: nil
autoLineLayout: false
indicateCursor: nil
resizeToFit: nil
wantsMouseOverHalos: nil
worldState: a WorldState
griddingOn: nil
BlockClosure>>on:do:
Receiver: [closure] in PasteUpMorph>>becomeActiveDuring:
Arguments and temporary variables:
exception: Error
handlerAction: [closure] in PasteUpMorph>>becomeActiveDuring:
handlerActive: false
Receiver's instance variables:
outerContext: PasteUpMorph>>becomeActiveDuring:
startpc: 67
numArgs: 0
PasteUpMorph>>becomeActiveDuring:
Receiver: a PasteUpMorph(1622) [world]
Arguments and temporary variables:
aBlock: [closure] in HandMorph>>sendFocusEvent:to:clear:
priorWorld: a PasteUpMorph(1622) [world]
priorHand: a HandMorph(3216)
priorEvent: [1518@375 mouseOver red nil nil]
Receiver's instance variables:
bounds: 0@0 corner: 1920@1178
owner: nil
submorphs: an Array(a TaskbarMorph(3095) a SystemWindow(3356) a
SystemWindow(25...etc...
fullBounds: nil
color: Color gray
extension: a MorphExtension (2543) [eventHandler = an EventHandler] [other:
(...etc...
borderWidth: 0
borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
presenter: a Presenter (1246)
model: a MorphicModel(1926)
cursor: 1
padding: 3
backgroundMorph: nil
isPartsBin: nil
autoLineLayout: false
indicateCursor: nil
resizeToFit: nil
wantsMouseOverHalos: nil
worldState: a WorldState
griddingOn: nil
HandMorph>>sendFocusEvent:to:clear:
Receiver: a HandMorph(3216)
Arguments and temporary variables:
anEvent: [1518@375 mouseUp 3690378 nil]
focusHolder: a PluggableButtonMorph(824)
aBlock: [closure] in HandMorph>>sendMouseEvent:
w: a PasteUpMorph(1622) [world]
result: #(nil)
Receiver's instance variables:
bounds: 1661@782 corner: 1677@798
owner: a PasteUpMorph(1622) [world]
submorphs: #()
fullBounds: 1661@782 corner: 1677@798
color: Color blue
extension: a MorphExtension (539) [eventHandler = an EventHandler]
mouseFocus: nil
keyboardFocus: nil
eventListeners: nil
mouseListeners: nil
keyboardListeners: nil
mouseClickState: nil
mouseOverHandler: a MouseOverHandler
lastMouseEvent: [1661@782 mouseUp 3788444 nil]
targetOffset: 99@6
damageRecorder: a DamageRecorder
cacheCanvas: nil
cachedCanvasHasHoles: true
temporaryCursor: nil
temporaryCursorOffset: nil
hardwareCursor: nil
hasChanged: true
savedPatch: nil
userInitials: ''
lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
lastKeyScanCode: 126
combinedChar: nil
HandMorph>>sendEvent:focus:clear:
Receiver: a HandMorph(3216)
Arguments and temporary variables:
anEvent: [1518@375 mouseUp 3690378 nil]
focusHolder: a PluggableButtonMorph(824)
aBlock: [closure] in HandMorph>>sendMouseEvent:
result: nil
Receiver's instance variables:
bounds: 1661@782 corner: 1677@798
owner: a PasteUpMorph(1622) [world]
submorphs: #()
fullBounds: 1661@782 corner: 1677@798
color: Color blue
extension: a MorphExtension (539) [eventHandler = an EventHandler]
mouseFocus: nil
keyboardFocus: nil
eventListeners: nil
mouseListeners: nil
keyboardListeners: nil
mouseClickState: nil
mouseOverHandler: a MouseOverHandler
lastMouseEvent: [1661@782 mouseUp 3788444 nil]
targetOffset: 99@6
damageRecorder: a DamageRecorder
cacheCanvas: nil
cachedCanvasHasHoles: true
temporaryCursor: nil
temporaryCursorOffset: nil
hardwareCursor: nil
hasChanged: true
savedPatch: nil
userInitials: ''
lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
lastKeyScanCode: 126
combinedChar: nil
HandMorph>>sendMouseEvent:
Receiver: a HandMorph(3216)
Arguments and temporary variables:
anEvent: [1518@375 mouseUp 3690378 nil]
Receiver's instance variables:
bounds: 1661@782 corner: 1677@798
owner: a PasteUpMorph(1622) [world]
submorphs: #()
fullBounds: 1661@782 corner: 1677@798
color: Color blue
extension: a MorphExtension (539) [eventHandler = an EventHandler]
mouseFocus: nil
keyboardFocus: nil
eventListeners: nil
mouseListeners: nil
keyboardListeners: nil
mouseClickState: nil
mouseOverHandler: a MouseOverHandler
lastMouseEvent: [1661@782 mouseUp 3788444 nil]
targetOffset: 99@6
damageRecorder: a DamageRecorder
cacheCanvas: nil
cachedCanvasHasHoles: true
temporaryCursor: nil
temporaryCursorOffset: nil
hardwareCursor: nil
hasChanged: true
savedPatch: nil
userInitials: ''
lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
lastKeyScanCode: 126
combinedChar: nil
HandMorph>>handleEvent:
Receiver: a HandMorph(3216)
Arguments and temporary variables:
anEvent: [1518@375 mouseUp 3690378 nil]
evt: [1518@375 mouseUp 3690378 nil]
ofs: nil
Receiver's instance variables:
bounds: 1661@782 corner: 1677@798
owner: a PasteUpMorph(1622) [world]
submorphs: #()
fullBounds: 1661@782 corner: 1677@798
color: Color blue
extension: a MorphExtension (539) [eventHandler = an EventHandler]
mouseFocus: nil
keyboardFocus: nil
eventListeners: nil
mouseListeners: nil
keyboardListeners: nil
mouseClickState: nil
mouseOverHandler: a MouseOverHandler
lastMouseEvent: [1661@782 mouseUp 3788444 nil]
targetOffset: 99@6
damageRecorder: a DamageRecorder
cacheCanvas: nil
cachedCanvasHasHoles: true
temporaryCursor: nil
temporaryCursorOffset: nil
hardwareCursor: nil
hasChanged: true
savedPatch: nil
userInitials: ''
lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
lastKeyScanCode: 126
combinedChar: nil
HandMorph>>processEvents
Receiver: a HandMorph(3216)
Arguments and temporary variables:
evt: [1518@375 mouseUp 3690378 nil]
evtBuf: #(1 3690378 1518 375 0 0 0 1)
type: 1
hadAny: false
Receiver's instance variables:
bounds: 1661@782 corner: 1677@798
owner: a PasteUpMorph(1622) [world]
submorphs: #()
fullBounds: 1661@782 corner: 1677@798
color: Color blue
extension: a MorphExtension (539) [eventHandler = an EventHandler]
mouseFocus: nil
keyboardFocus: nil
eventListeners: nil
mouseListeners: nil
keyboardListeners: nil
mouseClickState: nil
mouseOverHandler: a MouseOverHandler
lastMouseEvent: [1661@782 mouseUp 3788444 nil]
targetOffset: 99@6
damageRecorder: a DamageRecorder
cacheCanvas: nil
cachedCanvasHasHoles: true
temporaryCursor: nil
temporaryCursorOffset: nil
hardwareCursor: nil
hasChanged: true
savedPatch: nil
userInitials: ''
lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
lastKeyScanCode: 126
combinedChar: nil
[] in WorldState>>doOneCycleNowFor:
Receiver: a WorldState
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
hands: an Array(a HandMorph(3216))
viewBox: 0@0 corner: 1920@1178
canvas: a FormCanvas on: DisplayScreen(1920x1178x32)
damageRecorder: a DamageRecorder
stepList: a Heap(StepMessage(#stepAt: -> 3PButton(#togglePrettyDiffing
247))(3P...etc...
lastStepTime: 3788426
lastStepMessage: nil
lastCycleTime: 3788446
commandHistory: a CommandHistory
alarms: a Heap()
lastAlarmTime: 3788426
Array(SequenceableCollection)>>do:
Receiver: an Array(a HandMorph(3216))
Arguments and temporary variables:
aBlock: [closure] in WorldState>>doOneCycleNowFor:
index: 1
indexLimiT: 1
Receiver's instance variables:
an Array(a HandMorph(3216))
WorldState>>handsDo:
Receiver: a WorldState
Arguments and temporary variables:
aBlock: [closure] in WorldState>>doOneCycleNowFor:
Receiver's instance variables:
hands: an Array(a HandMorph(3216))
viewBox: 0@0 corner: 1920@1178
canvas: a FormCanvas on: DisplayScreen(1920x1178x32)
damageRecorder: a DamageRecorder
stepList: a Heap(StepMessage(#stepAt: -> 3PButton(#togglePrettyDiffing
247))(3P...etc...
lastStepTime: 3788426
lastStepMessage: nil
lastCycleTime: 3788446
commandHistory: a CommandHistory
alarms: a Heap()
lastAlarmTime: 3788426
WorldState>>doOneCycleNowFor:
Receiver: a WorldState
Arguments and temporary variables:
aWorld: a PasteUpMorph(1622) [world]
Receiver's instance variables:
hands: an Array(a HandMorph(3216))
viewBox: 0@0 corner: 1920@1178
canvas: a FormCanvas on: DisplayScreen(1920x1178x32)
damageRecorder: a DamageRecorder
stepList: a Heap(StepMessage(#stepAt: -> 3PButton(#togglePrettyDiffing
247))(3P...etc...
lastStepTime: 3788426
lastStepMessage: nil
lastCycleTime: 3788446
commandHistory: a CommandHistory
alarms: a Heap()
lastAlarmTime: 3788426
WorldState>>doOneCycleFor:
Receiver: a WorldState
Arguments and temporary variables:
aWorld: a PasteUpMorph(1622) [world]
Receiver's instance variables:
hands: an Array(a HandMorph(3216))
viewBox: 0@0 corner: 1920@1178
canvas: a FormCanvas on: DisplayScreen(1920x1178x32)
damageRecorder: a DamageRecorder
stepList: a Heap(StepMessage(#stepAt: -> 3PButton(#togglePrettyDiffing
247))(3P...etc...
lastStepTime: 3788426
lastStepMessage: nil
lastCycleTime: 3788446
commandHistory: a CommandHistory
alarms: a Heap()
lastAlarmTime: 3788426
PasteUpMorph>>doOneCycle
Receiver: a PasteUpMorph(1622) [world]
Arguments and temporary variables:
Receiver's instance variables:
bounds: 0@0 corner: 1920@1178
owner: nil
submorphs: an Array(a TaskbarMorph(3095) a SystemWindow(3356) a
SystemWindow(25...etc...
fullBounds: nil
color: Color gray
extension: a MorphExtension (2543) [eventHandler = an EventHandler] [other:
(...etc...
borderWidth: 0
borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
presenter: a Presenter (1246)
model: a MorphicModel(1926)
cursor: 1
padding: 3
backgroundMorph: nil
isPartsBin: nil
autoLineLayout: false
indicateCursor: nil
resizeToFit: nil
wantsMouseOverHalos: nil
worldState: a WorldState
griddingOn: nil
[] in Project class>>spawnNewProcess
Receiver: Project
Arguments and temporary variables:
Receiver's instance variables:
superclass: Model
methodDict: a MethodDictionary(size 167)
format: 172
instanceVariables: #('world' 'changeSet' 'transcript' 'parentProject'
'previous...etc...
organization: ('*Polymorph-Widgets' assureTaskbarPresenceMatchesPreference
crea...etc...
subclasses: nil
name: #Project
classPool: a Dictionary(#AllProjects->an OrderedCollection(a
Project(Juliet)) #...etc...
sharedPools: nil
environment: Smalltalk
category: #'System-Support'
traitComposition: {}
localSelectors: nil
[] in BlockClosure>>newProcess
Receiver: [closure] in Project class>>spawnNewProcess
Arguments and temporary variables:
Receiver's instance variables:
outerContext: Project class>>spawnNewProcess
startpc: 53
numArgs: 0
--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #self
UndefinedObject>>DoIt
Compiler>>evaluate:in:to:notifying:ifFail:logged:
Compiler class>>evaluate:for:notifying:logged:
Compiler class>>evaluate:for:logged:
Compiler class>>evaluate:
[] in ChangeRecord>>fileIn
BlockClosure>>ensure:
CursorWithMask(Cursor)>>showWhile:
ChangeRecord>>fileIn
[] in ChangeList>>fileInSelections
Array(SequenceableCollection)>>with:do:
ChangeList>>fileInSelections
PluggableButtonMorph>>performAction
[] in PluggableButtonMorph>>mouseUp:
Array(SequenceableCollection)>>do:
PluggableButtonMorph>>mouseUp:
PluggableButtonMorph(Morph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
PluggableButtonMorph(Morph)>>handleEvent:
PluggableButtonMorph(Morph)>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear:
[] in PasteUpMorph>>becomeActiveDuring:
BlockClosure>>on:do:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess
[] in BlockClosure>>newProcess
--
-JT
Oct. 23, 2009
Re: [Pharo-project] Shared directories: The bug is quicker than the eye
by John M McIntosh
Well the rate of change in the file i/o plugin is rather glacial.
The write code on unix systems is below, you'll note the magic,
"lastOp", "position" and a seek or two to ensure where you
thought you wrote to, is where you wrote to. Also setSize() is busy
updating the file size, which later fools you if you are reading
from a shared file because you don't actually ask for the real file
size, you get back the size we think it was in the past.
However the fwrite() does return the bytes written and there is a
check to see if it matches expectations, and
if not this it setups the primitive call to fail. So if the write
failed it would run the primitive failure call smalltalk code
what that does, or who handles the exception raised if any, I have no
idea...
size_t sqFileWriteFromAt(SQFile *f, size_t count, char*
byteArrayIndex, size_t startIndex) {
/* Write count bytes to the given writable file starting at startIndex
in the given byteArray. (See comment in sqFileReadIntoAt for
interpretation
of byteArray and startIndex).
*/
char *src;
size_t bytesWritten;
squeakFileOffsetType position;
FILE *file;
if (!(sqFileValid(f) && f->writable)) return interpreterProxy->success
(false);
file= getFile(f);
if (f->lastOp == READ_OP) fseek(file, 0, SEEK_CUR); /* seek between
reading and writing */
src = byteArrayIndex + startIndex;
bytesWritten = fwrite(src, 1, count, file);
position = ftell(file);
if (position > getSize(f)) {
setSize(f, position); /* update file size */
}
if (bytesWritten != count) {
interpreterProxy->success(false);
}
f->lastOp = WRITE_OP;
return bytesWritten;
}
On 2009-10-23, at 12:43 PM, Schwab,Wilhelm K wrote:
> John,
>
> That sounds badly, badly, broken. Is it "only" #flush that suffers,
> or will any of the I/O fail silently?
>
> Bill
>
>
>
> -----Original Message-----
> From: pharo-project-bounces(a)lists.gforge.inria.fr [mailto:pharo-
> project-bounces(a)lists.gforge.inria.fr] On Behalf Of John M McIntosh
> Sent: Friday, October 23, 2009 1:57 PM
> To: Pharo-project(a)lists.gforge.inria.fr
> Subject: Re: [Pharo-project] Shared directories: The bug is quicker
> than the eye
>
> If you invoke the flush primitive then it does this on unix/linux/
> mac- osx/iPhone http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPa…
> &
> http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPa…
>
> sqInt sqFileFlush(SQFile *f) {
> /* Return the length of the given file. */
>
> if (!sqFileValid(f)) return interpreterProxy->success(false);
> fflush(getFile(f));
> return 1;
> }
>
> On windows it does
> http://msdn.microsoft.com/en-us/library/aa364439(VS.85).aspx
>
> sqInt sqFileFlush(SQFile *f) {
> if (!sqFileValid(f)) FAIL();
> /* note: ignores the return value in case of read-only access */
> FlushFileBuffers(FILE_HANDLE(f));
> return 1;
> }
>
> I'll note the api doesn't actually check for errors, give feedback
> or whatever.
> *cough* it could be failing and give you a clue, but you would need
> to resort to FFI to do the file system calls to get the data to
> visualize, or build your own VM with that returns the result.
>
>
>
> On 2009-10-22, at 5:31 PM, Schwab,Wilhelm K wrote:
>
>> Hello all,
>>
>> I'm not sure what to make of this one. I just spent a couple of
>> hours
>> trying to find the "leak" in an algorithm of mine. It was reading
>> roughly 1200 records, claiming to have processed all of
>> them, and yet writing only about 450 rows into an output text file.
>> One clue should have been that the number of output rows was somewhat
>> random; I did not fully appreciate that until I worked around the
>> problme.
>>
>> I tried an explicit #flush - no help. I looked for logic errors and
>> found none. The file was being written to a Windows hosted share
>> mounted by CIFS (which I am learning to view with contempt) from
>> Ubuntu 9.04. You can see where this is going: writing the file
>> locally gave the expected result.
>>
>> Any ideas on how one might further isolate the problem? My trust in
>> Windows is well known<g>; I have never liked shared directories; I
>> _really_ do not like CIFS as compared (reliability wise) to SMBFS;
>> the
>> network between me and the server is in question too (long story).
>> All of that said, file support in Squeak, and hence so far inherited
>> by Pharo, is not the best code I have seen to date, so it is easy to
>> suspect too. Can one argue that since it worked locally, Pharo is
>> not
>> the problem?
>>
>> The little bit that I know of cifs is not encouraging. It sounds as
>> though things moved from an easily killed process into the kernel
>> which shows an almost Windows-like unwillingness to shut down when it
>> cannot see servers. I have found numerous reports of problems
>> copying
>> large files over cifs, and I have enountered them too.
>>
>> Bill
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
> --
> =
> =
> =
> =
> =
> ======================================================================
> John M. McIntosh <johnmci(a)smalltalkconsulting.com> Twitter:
> squeaker68882
> Corporate Smalltalk Consulting Ltd. http://
> www.smalltalkconsulting.com
> =
> =
> =
> =
> =
> ======================================================================
>
>
>
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
--
=
=
=
========================================================================
John M. McIntosh <johnmci(a)smalltalkconsulting.com> Twitter:
squeaker68882
Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com
=
=
=
========================================================================
Oct. 23, 2009
Re: [Pharo-project] Shared directories: The bug is quicker than the eye
by Schwab,Wilhelm K
John,
That sounds badly, badly, broken. Is it "only" #flush that suffers, or will any of the I/O fail silently?
Bill
-----Original Message-----
From: pharo-project-bounces(a)lists.gforge.inria.fr [mailto:pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of John M McIntosh
Sent: Friday, October 23, 2009 1:57 PM
To: Pharo-project(a)lists.gforge.inria.fr
Subject: Re: [Pharo-project] Shared directories: The bug is quicker than the eye
If you invoke the flush primitive then it does this on unix/linux/mac- osx/iPhone http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPa…
&
http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPa…
sqInt sqFileFlush(SQFile *f) {
/* Return the length of the given file. */
if (!sqFileValid(f)) return interpreterProxy->success(false);
fflush(getFile(f));
return 1;
}
On windows it does
http://msdn.microsoft.com/en-us/library/aa364439(VS.85).aspx
sqInt sqFileFlush(SQFile *f) {
if (!sqFileValid(f)) FAIL();
/* note: ignores the return value in case of read-only access */
FlushFileBuffers(FILE_HANDLE(f));
return 1;
}
I'll note the api doesn't actually check for errors, give feedback or whatever.
*cough* it could be failing and give you a clue, but you would need to resort to FFI to do the file system calls to get the data to visualize, or build your own VM with that returns the result.
On 2009-10-22, at 5:31 PM, Schwab,Wilhelm K wrote:
> Hello all,
>
> I'm not sure what to make of this one. I just spent a couple of hours
> trying to find the "leak" in an algorithm of mine. It was reading
> roughly 1200 records, claiming to have processed all of
> them, and yet writing only about 450 rows into an output text file.
> One clue should have been that the number of output rows was somewhat
> random; I did not fully appreciate that until I worked around the
> problme.
>
> I tried an explicit #flush - no help. I looked for logic errors and
> found none. The file was being written to a Windows hosted share
> mounted by CIFS (which I am learning to view with contempt) from
> Ubuntu 9.04. You can see where this is going: writing the file
> locally gave the expected result.
>
> Any ideas on how one might further isolate the problem? My trust in
> Windows is well known<g>; I have never liked shared directories; I
> _really_ do not like CIFS as compared (reliability wise) to SMBFS; the
> network between me and the server is in question too (long story).
> All of that said, file support in Squeak, and hence so far inherited
> by Pharo, is not the best code I have seen to date, so it is easy to
> suspect too. Can one argue that since it worked locally, Pharo is not
> the problem?
>
> The little bit that I know of cifs is not encouraging. It sounds as
> though things moved from an easily killed process into the kernel
> which shows an almost Windows-like unwillingness to shut down when it
> cannot see servers. I have found numerous reports of problems copying
> large files over cifs, and I have enountered them too.
>
> Bill
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
--
=
=
=
========================================================================
John M. McIntosh <johnmci(a)smalltalkconsulting.com> Twitter:
squeaker68882
Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com
=
=
=
========================================================================
_______________________________________________
Pharo-project mailing list
Pharo-project(a)lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Oct. 23, 2009
[Pharo-project] [update 1.1] #11015
by Stéphane Ducasse
11015
-----
1272 follow up part 3
Last part of cleanup, remove basicShallowCopy
Issue 1338: HostWindowTests>>testOne is failing in Windows
Oct. 23, 2009
Re: [Pharo-project] About built in plugins
by John M McIntosh
Well because if it takes more than a couple of minutes, many minutes
of messing about to build the xcode project to allow you to build a
plugin as an
external plugin, so no-one has bothered.
However if you want to override the default behaviour with a
B3DAcceleratorPlugin which has different logic you just stick your
pretty B3DAcceleratorPlugin in
the squeak vm.app/Resource folder.
On 2009-10-23, at 1:14 AM, Fernando olivero wrote:
> Hi, just curious..does somebody know why 'B3DAcceleratorPlugin' is
> built in into the mac vm ?
>
> SmalltalkImage current listLoadedModules #('B3DAcceleratorPlugin 2
> March 2009 (i)' 'SocketPlugin 2 March 2009 (i)' 'FloatArrayPlugin 2
> March 2009 (i)' 'B2DPlugin 2 March 2009 (i)' 'InternetConfigPlugin 2
> March 2009 (i)' 'FT2Plugin 24 April 2007 (e)' 'MacMenubarPlugin 2
> March 2009 (i)' 'LargeIntegers v1.5 2 March 2009 (i)' 'BitBltPlugin
> 2 March 2009 (i)' 'SecurityPlugin 2 March 2009 (i)' 'FilePlugin 2
> March 2009 (i)' 'DropPlugin 2 March 2009 (i)' 'MiscPrimitivePlugin 2
> March 2009 (i)')
>
> Saludos,
> Fernando
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
--
=
=
=
========================================================================
John M. McIntosh <johnmci(a)smalltalkconsulting.com> Twitter:
squeaker68882
Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com
=
=
=
========================================================================
Oct. 23, 2009
Re: [Pharo-project] Shared directories: The bug is quicker than the eye
by John M McIntosh
If you invoke the flush primitive then it does this on unix/linux/mac-
osx/iPhone
http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPa…
&
http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPa…
sqInt sqFileFlush(SQFile *f) {
/* Return the length of the given file. */
if (!sqFileValid(f)) return interpreterProxy->success(false);
fflush(getFile(f));
return 1;
}
On windows it does
http://msdn.microsoft.com/en-us/library/aa364439(VS.85).aspx
sqInt sqFileFlush(SQFile *f) {
if (!sqFileValid(f)) FAIL();
/* note: ignores the return value in case of read-only access */
FlushFileBuffers(FILE_HANDLE(f));
return 1;
}
I'll note the api doesn't actually check for errors, give feedback or
whatever.
*cough* it could be failing and give you a clue, but you would need to
resort to FFI to do the file system calls to
get the data to visualize, or build your own VM with that returns the
result.
On 2009-10-22, at 5:31 PM, Schwab,Wilhelm K wrote:
> Hello all,
>
> I'm not sure what to make of this one. I just spent a couple of
> hours trying to find the "leak" in an algorithm of mine. It was
> reading roughly 1200 records, claiming to have processed all of
> them, and yet writing only about 450 rows into an output text file.
> One clue should have been that the number of output rows was
> somewhat random; I did not fully appreciate that until I worked
> around the problme.
>
> I tried an explicit #flush - no help. I looked for logic errors and
> found none. The file was being written to a Windows hosted share
> mounted by CIFS (which I am learning to view with contempt) from
> Ubuntu 9.04. You can see where this is going: writing the file
> locally gave the expected result.
>
> Any ideas on how one might further isolate the problem? My trust in
> Windows is well known<g>; I have never liked shared directories; I
> _really_ do not like CIFS as compared (reliability wise) to SMBFS;
> the network between me and the server is in question too (long
> story). All of that said, file support in Squeak, and hence so far
> inherited by Pharo, is not the best code I have seen to date, so it
> is easy to suspect too. Can one argue that since it worked locally,
> Pharo is not the problem?
>
> The little bit that I know of cifs is not encouraging. It sounds as
> though things moved from an easily killed process into the kernel
> which shows an almost Windows-like unwillingness to shut down when
> it cannot see servers. I have found numerous reports of problems
> copying large files over cifs, and I have enountered them too.
>
> Bill
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
--
=
=
=
========================================================================
John M. McIntosh <johnmci(a)smalltalkconsulting.com> Twitter:
squeaker68882
Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com
=
=
=
========================================================================
Oct. 23, 2009
[Pharo-project] [update 1.1] #11014
by Stéphane Ducasse
11014
-----
1272 followup part one and two
Perform some additional cleaning after integration of
http://code.google.com/p/pharo/issues/detail?id=1272
Oct. 23, 2009
Re: [Pharo-project] Starting out: db and gui recommendation
by Rick Morrison
Thanks for all the responses. They have caused me to rethink a couple of
things already.
Sqlite is a holdover from thinking about a .Net version of this app. I just
need to persist my data. Something like Magma should be fine. I had been
looking at Sqlite as an embedded database since I didn't need (or don't want
to make the user manage) a database server.
I ran the UIThemes examples and I like the look. But I might just use the
browser and a local Seaside server to give me a chance to learn more about
web programming. It doesn't have to be a desktop app but my wife, who is
has a problem to be solved and is my customer, says she would not put the
data on the web. I will consider if some of the less personal data could be
web-based (and then more universally accessible) and some data restricted to
local storage. A hybrid if you will.
I have to admit that I stretched a little bit when I said "I am a Java &
.Net application programmer", "was" is almost more correct now. Like so
many, I do more project management now and really miss the coding. I've
been reading "The Passionate Programmer" and I'm following his advice to
learn something very different from what I know now.
Thanks again. Now off to review some of the things you have brought to my
attention.
Rick
On Thu, Oct 22, 2009 at 9:30 PM, Rick Morrison <rick(a)m45.us> wrote:
> I am a Java & .Net application programmer who has flirted with Smalltalk
> for a long time without doing the
>
> Thanks for any help,
> Rick
>
Oct. 23, 2009
Re: [Pharo-project] Starting out: db and gui recommendation
by Esteban Lorenzano
On 2009-10-23 02:08:20 -0200, Mariano Martinez Peck
<marianopeck(a)gmail.com> said:
>
>
> 2009/10/22 Rick Morrison <rick(a)m45.us>
>
>> I am a Java & .Net application programmer who has flirted with Smalltalk
>> for a long time without doing the "deep dive" to really understand it.
>> Pharo and Seaside are making me think that everything is coming together now
>> for another try. That and some micro-ISV ambitions to give me a real reason
>> to write some code outside of work.
>>
>>
> Welcome!!! I hope you enjoy this wonderful world ;)
>
>
>> For my type of project I really need a db package and a gui package. That
>> leads to the questions:
>> 1. Right now, is SqeakDBX my best choice for a db interface? Sqlite is my
>> db of choice for the project I have in mind.
>>
>
> Of course!!! hahahahaha (I am one of the SqueakDBX authors). But it is a
> joke. There are several persitence alternatives. You can see this link:
> http://www.seaside.st/documentation/persistence
> There others nice solutions like Magma, CouchDB and TokyoTyrant, etc. The
> good thing is that you have several approaches. There must be one that fits
> better your needs.
> BTW, SqueakDBX works perfect with Sqlite3 in Linux, Mac and Windows. Which
> OS do you want to use? You can even create (I can help you if you want) a
> seaside one-click with the Sqlite3 and OpenDBX dlls. So, this type of app is
> very "portable": just unzip and double click :)
> For more details about SqueakDBX you can see http://www.squeakdbx.org/
>
> 2. For the UI, I've been reading about the choices and I'm having a hard
>> time finding a currently supported project. Do I go with polymorph by
>> default?
>>
>> For the UI, what about "self-hosting" a Seaside instance and doing the UI
>> in the browser? Ie, the app starts a Seaside server and opens a browser
>> window pointed at the apps main window (home page). Can that be done? Is
>> it a good idea?
>>
>>
> Yes, I saw a lot of people doing this. They have a one click seaside image
> where you just do a double click and then open the browser with localhost
> And as I told you, you can have sqlite3 inside that zip.
> On there other hand, there is a very interesting project that let you build
> "heavy client apps" with Polymorph using a palette and drag and drop. You
> can see a video here: http://www.youtube.com/watch?v=CHbc1t83fEI
I'm also using xulrunner (runing seaside apps) with very good results,
and that gives me better control of "window close" event... and the app
looks much more "native" that unsing a regular browser.
Cheers,
Esteban
Oct. 23, 2009