Error when opening the ProcessBrowser

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Error when opening the ProcessBrowser

Luca Bruno aka Lethalman
Hello,
i condensed changes then made changes and saved the image.
Now when i open squeak and try to open the process browser i get this  
error:

UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
        Receiver: nil
        Arguments and temporary variables:
                aMessage: allInstVarNames
        Receiver's instance variables:
nil

Message>>sentTo:
        Receiver: allInstVarNames
        Arguments and temporary variables:
                receiver: nil
        Receiver's instance variables:
                selector: #allInstVarNames
                args: #()
                lookupClass: UndefinedObject

UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
        Receiver: nil
        Arguments and temporary variables:
                aMessage: allInstVarNames
        Receiver's instance variables:
nil

Message>>sentTo:
        Receiver: allInstVarNames
        Arguments and temporary variables:
                receiver: nil
        Receiver's instance variables:
                selector: #allInstVarNames
                args: #()
                lookupClass: UndefinedObject


--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
Message>>sentTo:
UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
Message>>sentTo:
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
Encoder>>init:context:notifying:
[] in Parser>>parse:class:noPattern:context:notifying:ifFail: {[methNode  
:= self     method: noPattern     context: ctxt     encoder: (Enco...]}
BlockContext>>on:do:
Parser>>parse:class:noPattern:context:notifying:ifFail:
Parser>>parse:class:
CompiledMethod>>methodNode
Decompiler>>decompileBlock:
BlockContext>>decompile
BlockContext>>printOn:
[] in BlockContext(Object)>>printStringLimitedTo: {[:s | self printOn: s]}
String class(SequenceableCollection class)>>streamContents:limitedTo:
BlockContext(Object)>>printStringLimitedTo:
BlockContext(Object)>>printString
BlockContext(Object)>>asString
[] in ProcessBrowser>>stackNameList {[:each | each asString]}
OrderedCollection>>collect:
ProcessBrowser>>stackNameList
PluggableListMorph>>getList
PluggableListMorph>>getListSize
LazyListMorph>>getListSize
LazyListMorph>>listChanged
PluggableListMorph>>updateList
PluggableListMorph>>on:list:selected:changeSelected:menu:keystroke:
PluggableListMorph class>>on:list:selected:changeSelected:menu:keystroke:
ProcessBrowser>>asPrototypeInWindow
ProcessBrowser class>>prototypicalToolWindow
ProcessBrowser class(Object)>>launchPartVia:label:
[] in IconicButton(SimpleButtonMorph)>>doButtonAction {[target perform:  
actionSelector withArguments: arguments]}
BlockContext>>ensure:
CursorWithMask(Cursor)>>showWhile:
IconicButton(SimpleButtonMorph)>>doButtonAction
EventHandler>>send:to:withEvent:fromMorph:
EventHandler>>startDrag:fromMorph:
IconicButton(Morph)>>startDrag:
MouseClickState>>drag:
MouseClickState>>handleEvent:from:
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]}

Please help me :(

Bye.

--
www.lethalman.net - Thoughts about internet technologies

Reply | Threaded
Open this post in threaded view
|

Re: Error when opening the ProcessBrowser

Marcus Denker

On 02.08.2006, at 23:43, Bruno Luca wrote:

> Hello,
> i condensed changes then made changes and saved the image.
> Now when i open squeak and try to open the process browser i get  
> this error:
>

which version exactly?


> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
> Receiver: nil
> Arguments and temporary variables:
> aMessage: allInstVarNames
> Receiver's instance variables:
> nil
>
> Message>>sentTo:
> Receiver: allInstVarNames
> Arguments and temporary variables:
> receiver: nil
> Receiver's instance variables:
> selector: #allInstVarNames
> args: #()
> lookupClass: UndefinedObject
>
> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
> Receiver: nil
> Arguments and temporary variables:
> aMessage: allInstVarNames
> Receiver's instance variables:
> nil
>
> Message>>sentTo:
> Receiver: allInstVarNames
> Arguments and temporary variables:
> receiver: nil
> Receiver's instance variables:
> selector: #allInstVarNames
> args: #()
> lookupClass: UndefinedObject
>
>
> --- The full stack ---
> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
> Message>>sentTo:
> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
> Message>>sentTo:
>  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
> Encoder>>init:context:notifying:
> [] in Parser>>parse:class:noPattern:context:notifying:ifFail:  
> {[methNode := self     method: noPattern     context: ctxt      
> encoder: (Enco...]}
> BlockContext>>on:do:
> Parser>>parse:class:noPattern:context:notifying:ifFail:
> Parser>>parse:class:
> CompiledMethod>>methodNode
> Decompiler>>decompileBlock:
> BlockContext>>decompile
> BlockContext>>printOn:
> [] in BlockContext(Object)>>printStringLimitedTo: {[:s | self  
> printOn: s]}
> String class(SequenceableCollection class)>>streamContents:limitedTo:
> BlockContext(Object)>>printStringLimitedTo:
> BlockContext(Object)>>printString
> BlockContext(Object)>>asString
> [] in ProcessBrowser>>stackNameList {[:each | each asString]}
> OrderedCollection>>collect:
> ProcessBrowser>>stackNameList
> PluggableListMorph>>getList
> PluggableListMorph>>getListSize
> LazyListMorph>>getListSize
> LazyListMorph>>listChanged
> PluggableListMorph>>updateList
> PluggableListMorph>>on:list:selected:changeSelected:menu:keystroke:
> PluggableListMorph  
> class>>on:list:selected:changeSelected:menu:keystroke:
> ProcessBrowser>>asPrototypeInWindow
> ProcessBrowser class>>prototypicalToolWindow
> ProcessBrowser class(Object)>>launchPartVia:label:
> [] in IconicButton(SimpleButtonMorph)>>doButtonAction {[target  
> perform: actionSelector withArguments: arguments]}
> BlockContext>>ensure:
> CursorWithMask(Cursor)>>showWhile:
> IconicButton(SimpleButtonMorph)>>doButtonAction
> EventHandler>>send:to:withEvent:fromMorph:
> EventHandler>>startDrag:fromMorph:
> IconicButton(Morph)>>startDrag:
> MouseClickState>>drag:
> MouseClickState>>handleEvent:from:
> 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]}
>
> Please help me :(
>
> Bye.
>
> --
> www.lethalman.net - Thoughts about internet technologies
>



smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Error when opening the ProcessBrowser

Luca Bruno aka Lethalman
On Thu, 03 Aug 2006 00:06:20 +0200, Marcus Denker <[hidden email]>  
wrote:

>
> On 02.08.2006, at 23:43, Bruno Luca wrote:
>
>> Hello,
>> i condensed changes then made changes and saved the image.
>> Now when i open squeak and try to open the process browser i get
>> this error:
>>
>
> which version exactly?

Squeak 3.9-7

>
>
>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>> Receiver: nil
>> Arguments and temporary variables:
>> aMessage: allInstVarNames
>> Receiver's instance variables:
>> nil
>>
>> Message>>sentTo:
>> Receiver: allInstVarNames
>> Arguments and temporary variables:
>> receiver: nil
>> Receiver's instance variables:
>> selector: #allInstVarNames
>> args: #()
>> lookupClass: UndefinedObject
>>
>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>> Receiver: nil
>> Arguments and temporary variables:
>> aMessage: allInstVarNames
>> Receiver's instance variables:
>> nil
>>
>> Message>>sentTo:
>> Receiver: allInstVarNames
>> Arguments and temporary variables:
>> receiver: nil
>> Receiver's instance variables:
>> selector: #allInstVarNames
>> args: #()
>> lookupClass: UndefinedObject
>>
>>
>> --- The full stack ---
>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>> Message>>sentTo:
>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>> Message>>sentTo:
>>  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>> Encoder>>init:context:notifying:
>> [] in Parser>>parse:class:noPattern:context:notifying:ifFail:
>> {[methNode := self     method: noPattern     context: ctxt
>> encoder: (Enco...]}
>> BlockContext>>on:do:
>> Parser>>parse:class:noPattern:context:notifying:ifFail:
>> Parser>>parse:class:
>> CompiledMethod>>methodNode
>> Decompiler>>decompileBlock:
>> BlockContext>>decompile
>> BlockContext>>printOn:
>> [] in BlockContext(Object)>>printStringLimitedTo: {[:s | self
>> printOn: s]}
>> String class(SequenceableCollection class)>>streamContents:limitedTo:
>> BlockContext(Object)>>printStringLimitedTo:
>> BlockContext(Object)>>printString
>> BlockContext(Object)>>asString
>> [] in ProcessBrowser>>stackNameList {[:each | each asString]}
>> OrderedCollection>>collect:
>> ProcessBrowser>>stackNameList
>> PluggableListMorph>>getList
>> PluggableListMorph>>getListSize
>> LazyListMorph>>getListSize
>> LazyListMorph>>listChanged
>> PluggableListMorph>>updateList
>> PluggableListMorph>>on:list:selected:changeSelected:menu:keystroke:
>> PluggableListMorph
>> class>>on:list:selected:changeSelected:menu:keystroke:
>> ProcessBrowser>>asPrototypeInWindow
>> ProcessBrowser class>>prototypicalToolWindow
>> ProcessBrowser class(Object)>>launchPartVia:label:
>> [] in IconicButton(SimpleButtonMorph)>>doButtonAction {[target
>> perform: actionSelector withArguments: arguments]}
>> BlockContext>>ensure:
>> CursorWithMask(Cursor)>>showWhile:
>> IconicButton(SimpleButtonMorph)>>doButtonAction
>> EventHandler>>send:to:withEvent:fromMorph:
>> EventHandler>>startDrag:fromMorph:
>> IconicButton(Morph)>>startDrag:
>> MouseClickState>>drag:
>> MouseClickState>>handleEvent:from:
>> 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]}
>>
>> Please help me :(
>>
>> Bye.
>>
>> --
>> www.lethalman.net - Thoughts about internet technologies
>>
>



--
www.lethalman.net - Thoughts about internet technologies

Reply | Threaded
Open this post in threaded view
|

Re: Error when opening the ProcessBrowser

Luca Bruno aka Lethalman
In reply to this post by Marcus Denker
Maybe the problem is that condenseChanges doesn't work with Traits.
Please help me :(
When i click on a Trait method in the browser i get the following error:

VM: unix - a SmalltalkImage
Image: Squeak3.9alpha [latest update: #7024]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /home/luca/smalltalk/squeak
Trusted Dir /home/luca/smalltalk/squeak/secure
Untrusted Dir /home/luca/smalltalk/squeak/My Squeak

Array(Object)>>error:
        Receiver: #()
        Arguments and temporary variables:
                aString: 'subscript is out of bounds: 1'
        Receiver's instance variables:
#()

Array(Object)>>errorSubscriptBounds:
        Receiver: #()
        Arguments and temporary variables:
                index: 1
        Receiver's instance variables:
#()

Array(Object)>>at:
        Receiver: #()
        Arguments and temporary variables:
                index: 1
        Receiver's instance variables:
#()

Array(SequenceableCollection)>>replaceFrom:to:with:startingAt:
        Receiver: #(nil)
        Arguments and temporary variables:
                start: 1
                stop: 1
                replacement: #()
                repStart: 1
                index: 1
                repOff: 0
        Receiver's instance variables:
#(nil)


--- The full stack ---
Array(Object)>>error:
Array(Object)>>errorSubscriptBounds:
Array(Object)>>at:
Array(SequenceableCollection)>>replaceFrom:to:with:startingAt:
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Array>>replaceFrom:to:with:startingAt:
Array(SequenceableCollection)>>copyFrom:to:
CompiledMethod>>replace:with:in:
CompiledMethod>>getSourceFor:in:
Trait(TraitBehavior)>>sourceCodeAt:ifAbsent:
Trait(TraitBehavior)>>ultimateSourceCodeAt:ifAbsent:
Browser(CodeHolder)>>sourceStringPrettifiedAndDiffed
Browser>>selectedMessage
Browser>>contents
PluggableShoutMorph(PluggableTextMorph)>>getText
PluggableShoutMorph(PluggableTextMorph)>>update:
[] in Browser(Object)>>changed: {[:aDependent | aDependent update:  
aParameter]}
DependentsArray>>do:
Browser(Object)>>changed:
Browser(Object)>>contentsChanged
Browser(CodeHolder)>>contentsChanged
Browser>>messageListIndex:
PluggableListMorph>>changeModelSelection:
PluggableListMorph>>mouseUp:
PluggableListMorph(Morph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
PluggableListMorph(Morph)>>handleEvent:
PluggableListMorph(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>>sendMouseEvent:
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]}


--
www.lethalman.net - Thoughts about internet technologies

Reply | Threaded
Open this post in threaded view
|

Re: Error when opening the ProcessBrowser

stéphane ducasse-2
In reply to this post by Luca Bruno aka Lethalman
Hi bruno

please use Squeak3.9-7048 or 7049
since ***lot of fixes*** have been integrated

Marcus did you remove the broken ones from the server?

Stef

On 3 août 06, at 00:55, Bruno Luca wrote:

> On Thu, 03 Aug 2006 00:06:20 +0200, Marcus Denker  
> <[hidden email]> wrote:
>
>>
>> On 02.08.2006, at 23:43, Bruno Luca wrote:
>>
>>> Hello,
>>> i condensed changes then made changes and saved the image.
>>> Now when i open squeak and try to open the process browser i get
>>> this error:
>>>
>>
>> which version exactly?
>
> Squeak 3.9-7
>
>>
>>
>>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>>> Receiver: nil
>>> Arguments and temporary variables:
>>> aMessage: allInstVarNames
>>> Receiver's instance variables:
>>> nil
>>>
>>> Message>>sentTo:
>>> Receiver: allInstVarNames
>>> Arguments and temporary variables:
>>> receiver: nil
>>> Receiver's instance variables:
>>> selector: #allInstVarNames
>>> args: #()
>>> lookupClass: UndefinedObject
>>>
>>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>>> Receiver: nil
>>> Arguments and temporary variables:
>>> aMessage: allInstVarNames
>>> Receiver's instance variables:
>>> nil
>>>
>>> Message>>sentTo:
>>> Receiver: allInstVarNames
>>> Arguments and temporary variables:
>>> receiver: nil
>>> Receiver's instance variables:
>>> selector: #allInstVarNames
>>> args: #()
>>> lookupClass: UndefinedObject
>>>
>>>
>>> --- The full stack ---
>>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>>> Message>>sentTo:
>>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>>> Message>>sentTo:
>>>  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>> UndefinedObject(Object)>>doesNotUnderstand: #allInstVarNames
>>> Encoder>>init:context:notifying:
>>> [] in Parser>>parse:class:noPattern:context:notifying:ifFail:
>>> {[methNode := self     method: noPattern     context: ctxt
>>> encoder: (Enco...]}
>>> BlockContext>>on:do:
>>> Parser>>parse:class:noPattern:context:notifying:ifFail:
>>> Parser>>parse:class:
>>> CompiledMethod>>methodNode
>>> Decompiler>>decompileBlock:
>>> BlockContext>>decompile
>>> BlockContext>>printOn:
>>> [] in BlockContext(Object)>>printStringLimitedTo: {[:s | self
>>> printOn: s]}
>>> String class(SequenceableCollection class)
>>> >>streamContents:limitedTo:
>>> BlockContext(Object)>>printStringLimitedTo:
>>> BlockContext(Object)>>printString
>>> BlockContext(Object)>>asString
>>> [] in ProcessBrowser>>stackNameList {[:each | each asString]}
>>> OrderedCollection>>collect:
>>> ProcessBrowser>>stackNameList
>>> PluggableListMorph>>getList
>>> PluggableListMorph>>getListSize
>>> LazyListMorph>>getListSize
>>> LazyListMorph>>listChanged
>>> PluggableListMorph>>updateList
>>> PluggableListMorph>>on:list:selected:changeSelected:menu:keystroke:
>>> PluggableListMorph
>>> class>>on:list:selected:changeSelected:menu:keystroke:
>>> ProcessBrowser>>asPrototypeInWindow
>>> ProcessBrowser class>>prototypicalToolWindow
>>> ProcessBrowser class(Object)>>launchPartVia:label:
>>> [] in IconicButton(SimpleButtonMorph)>>doButtonAction {[target
>>> perform: actionSelector withArguments: arguments]}
>>> BlockContext>>ensure:
>>> CursorWithMask(Cursor)>>showWhile:
>>> IconicButton(SimpleButtonMorph)>>doButtonAction
>>> EventHandler>>send:to:withEvent:fromMorph:
>>> EventHandler>>startDrag:fromMorph:
>>> IconicButton(Morph)>>startDrag:
>>> MouseClickState>>drag:
>>> MouseClickState>>handleEvent:from:
>>> 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]}
>>>
>>> Please help me :(
>>>
>>> Bye.
>>>
>>> --
>>> www.lethalman.net - Thoughts about internet technologies
>>>
>>
>
>
>
> --
> www.lethalman.net - Thoughts about internet technologies
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Error when opening the ProcessBrowser

Marcus Denker

On 03.08.2006, at 10:20, stéphane ducasse wrote:

> Hi bruno
>
> please use Squeak3.9-7048 or 7049
> since ***lot of fixes*** have been integrated
>
> Marcus did you remove the broken ones from the server?
>

Yes.


smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Error when opening the ProcessBrowser

Luca Bruno aka Lethalman
In reply to this post by stéphane ducasse-2
On Thu, 03 Aug 2006 10:20:59 +0200, stéphane ducasse  
<[hidden email]> wrote:

> Hi bruno
>
> please use Squeak3.9-7048 or 7049
> since ***lot of fixes*** have been integrated
>
> Marcus did you remove the broken ones from the server?
>
> Stef
>

Ok, since after condenseChanges i've done a bunch of changes because i  
didn't know of these problem yet, how can i solve this problem and at the  
same time upgrade to the latest squeak release? I've a 56k...

Thanks... bye.

--
www.lethalman.net - Thoughts about internet technologies

Reply | Threaded
Open this post in threaded view
|

Re: Error when opening the ProcessBrowser

stéphane ducasse-2
Ooops, did you get a backup image before doing the condensechanges?
Did you save your code in another way?
MC ? for example because I do not know if you can simply recover now  
since the changes was damaged.
I'm really sorry and I hope that you have a backup solution. Else you  
can recover partly the code by decompiling the bytecode and  
fileouting it but this is a terrible solution.

Stef

On 3 août 06, at 12:05, Bruno Luca wrote:

> On Thu, 03 Aug 2006 10:20:59 +0200, stéphane ducasse  
> <[hidden email]> wrote:
>
>> Hi bruno
>>
>> please use Squeak3.9-7048 or 7049
>> since ***lot of fixes*** have been integrated
>>
>> Marcus did you remove the broken ones from the server?
>>
>> Stef
>>
>
> Ok, since after condenseChanges i've done a bunch of changes  
> because i didn't know of these problem yet, how can i solve this  
> problem and at the same time upgrade to the latest squeak release?  
> I've a 56k...
>
> Thanks... bye.
>
> --
> www.lethalman.net - Thoughts about internet technologies
>