Hi,
I've tried this code :
(HTTPSocket httpShowGif: 'http://www.google.fr/intl/fr_fr/images/logo.gif') display
It displays the logo but a bug too :
VM: unix - a SmalltalkImage Image: Squeak3.7gamma [latest update: #5985]
SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /home/quetzalcoatl/squeak-3.7 Trusted Dir /home/quetzalcoatl/squeak-3.7/secure Untrusted Dir /home/quetzalcoatl/squeak-3.7/untrusted
HTTPSocket class(Object)>>doesNotUnderstand: #display Receiver: HTTPSocket Arguments and temporary variables: aMessage: display Receiver's instance variables: superclass: OldSimpleClientSocket methodDict: a MethodDictionary(#contentType->a CompiledMethod (492) #contentTyp...etc... format: 150 instanceVariables: #('headerTokens' 'headers' 'responseCode') organization: ('as yet unclassified' contentType contentType: contentsLength: g...etc... subclasses: nil name: #HTTPSocket classPool: a Dictionary(#HTTPBlabEmail->'' #HTTPPort->80 #HTTPProxyCredentials-...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: 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: a ReadWriteStream 'Transcript show: ''Début du test'' ; cr. Trans...etc... aContext: nil receiver: nil aRequestor: a TextMorphEditor failBlock: [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection {[FakeClas...etc... logFlag: true methodNode: DoIt ^ (HTTPSocket httpShowGif: 'http://www.google.fr/intl/fr_fr/i...etc... method: a CompiledMethod (3854) value: nil selector: #DoIt Receiver's instance variables: sourceStream: a ReadWriteStream 'Transcript show: ''Début du test'' ; cr. Trans...etc... requestor: a TextMorphEditor class: UndefinedObject context: nil parserClass: Parser cacheDoItNode: true
[] in TextMorphEditor(ParagraphEditor)>>evaluateSelection {[rcvr class evaluatorClass new evaluate: self selectionAsStream in: ctxt...]} Arguments and temporary variables: result: nil rcvr: nil ctxt: nil ex: nil
--- The full stack --- HTTPSocket class(Object)>>doesNotUnderstand: #display UndefinedObject>>DoIt Compiler>>evaluate:in:to:notifying:ifFail:logged: [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection {[rcvr class evaluatorClass new evaluate: self selectionAsStream in: ctxt...]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BlockContext>>on:do: TextMorphEditor(ParagraphEditor)>>evaluateSelection TextMorphEditor(ParagraphEditor)>>doIt [] in TextMorphEditor(ParagraphEditor)>>doIt: {[self doIt]} TextMorphEditor(Controller)>>terminateAndInitializeAround: TextMorphEditor(ParagraphEditor)>>doIt: TextMorphEditor(ParagraphEditor)>>dispatchOnCharacter:with: TextMorphEditor>>dispatchOnCharacter:with: TextMorphEditor(ParagraphEditor)>>readKeyboard TextMorphEditor>>readKeyboard [] in TextMorphForEditView(TextMorph)>>keyStroke: {[editor readKeyboard]} TextMorphForEditView(TextMorph)>>handleInteraction:fromEvent: TextMorphForEditView>>handleInteraction:fromEvent: TextMorphForEditView(TextMorph)>>keyStroke: TextMorphForEditView>>keyStroke: TextMorphForEditView(TextMorph)>>handleKeystroke: KeyboardEvent>>sentTo: TextMorphForEditView(Morph)>>handleEvent: TextMorphForEditView(Morph)>>handleFocusEvent: [] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self. ActiveEvent := anEvent. result := focusHolder han...]} [] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]} BlockContext>>on:do: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendKeyboardEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h processEvents. capturingGesture := capturingGest...]} Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in Project class>>spawnNewProcess {[[World doOneCycle. Processor yield. false] whileFalse. nil]} [] in BlockContext>>newProcess {[self value. Processor terminateActive]}
Hi Damien,
I've tried this code :
(HTTPSocket httpShowGif: 'http://www.google.fr/intl/fr_fr/images/logo.gif') display
It looks like #httpShowGif: displays the image without needing anything further. It then returns a reference to the HTTPSocket class. This is by convention: if a Squeak method doesn't return anything specific, it returns the receiver.
HTTPSocket class doesn't implement #display, so that's what is causing the error - but in this case, there's no need to send another message, since #httpShowGif: does the showing by itself.
Hope this helps, Ben Schroeder
Ben Schroeder a écrit :
Hi Damien,
I've tried this code :
(HTTPSocket httpShowGif: 'http://www.google.fr/intl/fr_fr/images/logo.gif') display
It looks like #httpShowGif: displays the image without needing anything further. It then returns a reference to the HTTPSocket class. This is by convention: if a Squeak method doesn't return anything specific, it returns the receiver.
HTTPSocket class doesn't implement #display, so that's what is causing the error - but in this case, there's no need to send another message, since #httpShowGif: does the showing by itself.
Hope this helps, Ben Schroeder
Thanks for your explication. It helps a lot
Damien
apparently this changed since 3.0. so you do not need to send display anymore. In 3.6 there was a big rewrite of the network packages.
Stef On 3 sept. 04, at 17:37, Damien Cassou wrote:
Hi,
I've tried this code :
(HTTPSocket httpShowGif: 'http://www.google.fr/intl/fr_fr/images/logo.gif') display
It displays the logo but a bug too :
VM: unix - a SmalltalkImage Image: Squeak3.7gamma [latest update: #5985]
SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /home/quetzalcoatl/squeak-3.7 Trusted Dir /home/quetzalcoatl/squeak-3.7/secure Untrusted Dir /home/quetzalcoatl/squeak-3.7/untrusted
HTTPSocket class(Object)>>doesNotUnderstand: #display Receiver: HTTPSocket Arguments and temporary variables: aMessage: display Receiver's instance variables: superclass: OldSimpleClientSocket methodDict: a MethodDictionary(#contentType->a CompiledMethod (492) #contentTyp...etc... format: 150 instanceVariables: #('headerTokens' 'headers' 'responseCode') organization: ('as yet unclassified' contentType contentType: contentsLength: g...etc... subclasses: nil name: #HTTPSocket classPool: a Dictionary(#HTTPBlabEmail->'' #HTTPPort->80 #HTTPProxyCredentials-...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: 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: a ReadWriteStream 'Transcript show: ''Début du test'' ; cr. Trans...etc... aContext: nil receiver: nil aRequestor: a TextMorphEditor failBlock: [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection {[FakeClas...etc... logFlag: true methodNode: DoIt ^ (HTTPSocket httpShowGif: 'http://www.google.fr/intl/fr_fr/i...etc... method: a CompiledMethod (3854) value: nil selector: #DoIt Receiver's instance variables: sourceStream: a ReadWriteStream 'Transcript show: ''Début du test'' ; cr. Trans...etc... requestor: a TextMorphEditor class: UndefinedObject context: nil parserClass: Parser cacheDoItNode: true
[] in TextMorphEditor(ParagraphEditor)>>evaluateSelection {[rcvr class evaluatorClass new evaluate: self selectionAsStream in: ctxt...]} Arguments and temporary variables: result: nil rcvr: nil ctxt: nil ex: nil
--- The full stack --- HTTPSocket class(Object)>>doesNotUnderstand: #display UndefinedObject>>DoIt Compiler>>evaluate:in:to:notifying:ifFail:logged: [] in TextMorphEditor(ParagraphEditor)>>evaluateSelection {[rcvr class evaluatorClass new evaluate: self selectionAsStream in: ctxt...]}
BlockContext>>on:do: TextMorphEditor(ParagraphEditor)>>evaluateSelection TextMorphEditor(ParagraphEditor)>>doIt [] in TextMorphEditor(ParagraphEditor)>>doIt: {[self doIt]} TextMorphEditor(Controller)>>terminateAndInitializeAround: TextMorphEditor(ParagraphEditor)>>doIt: TextMorphEditor(ParagraphEditor)>>dispatchOnCharacter:with: TextMorphEditor>>dispatchOnCharacter:with: TextMorphEditor(ParagraphEditor)>>readKeyboard TextMorphEditor>>readKeyboard [] in TextMorphForEditView(TextMorph)>>keyStroke: {[editor readKeyboard]} TextMorphForEditView(TextMorph)>>handleInteraction:fromEvent: TextMorphForEditView>>handleInteraction:fromEvent: TextMorphForEditView(TextMorph)>>keyStroke: TextMorphForEditView>>keyStroke: TextMorphForEditView(TextMorph)>>handleKeystroke: KeyboardEvent>>sentTo: TextMorphForEditView(Morph)>>handleEvent: TextMorphForEditView(Morph)>>handleFocusEvent: [] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self. ActiveEvent := anEvent. result := focusHolder han...]} [] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]} BlockContext>>on:do: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendKeyboardEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h processEvents. capturingGesture := capturingGest...]} Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in Project class>>spawnNewProcess {[[World doOneCycle. Processor yield. false] whileFalse. nil]} [] in BlockContext>>newProcess {[self value. Processor terminateActive]}
squeak-dev@lists.squeakfoundation.org