All members were present
- Colin is reviving the Squeak G+ page as a hub for Squeak Community
Meetings [1]
- The Board explored the monthly financial report provided by the
Software Freedom Conservancy. With a free server and a single server
costing money things look well in hand.
- SqueakSource [2] was down at the time of the meeting, which prompted a
discussion of how to move packages to SqS3 [3]. It was observed that
there is a Chilean mirror to SqueakSource [4]. Colin is planning to talk
to Dale about how packages could be moved. Chris Muller is investigating
the process also.
- The number of tests outstanding for the release of Squeak 4.4 is quite
low and it is likely that Squeak4.4 will be released soon
[1] https://plus.google.com/u/0/102330490592489316443/posts
[2] http://www.squeaksource.com
[3] http://ss3.gemstone.com/ss
[4] http://www.dsal.cl/squeaksource/
Good, except FakeClassPool is kind of obsolete (or I wish it were).
http://forum.world.st/FakeClassPool-adopt-Pouah-td3249925.htmlhttp://forum.world.st/Killing-FakeClassPool-and-failedDoit-references-td341…http://source.squeak.org/trunk/Tools-nice.304.mczhttp://source.squeak.org/trunk/Morphic-nice.527.mczhttp://source.squeak.org/trunk/ST80-nice.127.mcz
and for joke:
http://source.squeak.org/inbox/System-nice.423.mcz
2012/11/5 <commits(a)source.squeak.org>:
> A new version of Tools was added to project The Inbox:
> http://source.squeak.org/inbox/Tools-eem.426.mcz
>
> ==================== Summary ====================
>
> Name: Tools-eem.426
> Author: eem
> Time: 5 November 2012, 10:39:18.848 am
> UUID: d2507ad6-1423-4b1a-9922-41894ea2174a
> Ancestors: Tools-ul.425
>
> A serviceable "run until expression" for the debugger.
> Would be nice if the UI updated.
> WOuld be nice if there was some solution for temporaries
> that are undefined rather than writing explicit guards in the
> expressions.
> Hence publishing to inbox for now.
>
> =============== Diff against Tools-ul.425 ===============
>
> Item was changed:
> CodeHolder subclass: #Debugger
> + instanceVariableNames: 'interruptedProcess interruptedController contextStack contextStackIndex contextStackList receiverInspector contextVariablesInspector externalInterrupt proceedValue selectingPC savedCursor isolationHead failedProject errorWasInUIProcess labelString message untilExpression'
> - instanceVariableNames: 'interruptedProcess interruptedController contextStack contextStackIndex contextStackList receiverInspector contextVariablesInspector externalInterrupt proceedValue selectingPC savedCursor isolationHead failedProject errorWasInUIProcess labelString message'
> classVariableNames: 'ContextStackKeystrokes ErrorRecursion InterruptUIProcessIfBlockedOnErrorInBackgroundProcess'
> poolDictionaries: ''
> category: 'Tools-Debugger'!
>
> !Debugger commentStamp: '<historical>' prior: 0!
> I represent the machine state at the time of an interrupted process. I also represent a query path into the state of the process. The debugger is typically viewed through a window that views the stack of suspended contexts, the code for, and execution point in, the currently selected message, and inspectors on both the receiver of the currently selected message, and the variables in the current context.
>
> Special note on recursive errors:
> Some errors affect Squeak's ability to present a debugger. This is normally an unrecoverable situation. However, if such an error occurs in an isolation layer, Squeak will attempt to exit from the isolation layer and then present a debugger. Here is the chain of events in such a recovery.
>
> * A recursive error is detected.
> * The current project is queried for an isolationHead
> * Changes in the isolationHead are revoked
> * The parent project of isolated project is returned to
> * The debugger is opened there and execution resumes.
>
> If the user closes that debugger, execution continues in the outer project and layer. If, after repairing some damage, the user proceeds from the debugger, then the isolationHead is re-invoked, the failed project is re-entered, and execution resumes in that world. !
>
> Item was changed:
> ----- Method: Debugger>>codePaneMenu:shifted: (in category 'code pane menu') -----
> codePaneMenu: aMenu shifted: shifted
> + aMenu
> + add: 'run to here' target: self selector: #runToSelection: argument: thisContext sender receiver selectionInterval;
> + add: 'run until...' target: self selector: #runUntil;
> + addLine.
> - aMenu add: 'run to here' target: self selector: #runToSelection: argument: thisContext sender receiver selectionInterval.
> - aMenu addLine.
> super codePaneMenu: aMenu shifted: shifted.
> ^aMenu.!
>
> Item was added:
> + ----- Method: Debugger>>runUntil (in category 'code pane menu') -----
> + runUntil
> + | expression receiver context method value |
> + expression := UIManager default
> + request: 'run until expression is true'
> + initialAnswer: (untilExpression ifNil: 'boolean expression').
> + (expression isNil or: [expression isEmpty]) ifTrue:
> + [^self].
> + untilExpression := expression.
> + context := self selectedContext.
> + receiver := context receiver.
> + FakeClassPool adopt: receiver class.
> + method := receiver class evaluatorClass new
> + compiledMethodFor: untilExpression
> + in: context
> + to: receiver
> + notifying: nil
> + ifFail: [FakeClassPool adopt: nil. ^ #failedDoit]
> + logged: false.
> +
> + FakeClassPool adopt: nil.
> + [self selectedContext == context
> + and: [(value := receiver with: context executeMethod: method) == false]] whileTrue:
> + [self doStep].
> + (value ~~ false and: [value ~~ true]) ifTrue:
> + [UIManager default inform: 'expression ', (untilExpression contractTo: 40), ' answered ', (value printString contractTo: 20), '!!!!']
> + !
>
>
A new version of Tools was added to project The Inbox:
http://source.squeak.org/inbox/Tools-eem.426.mcz
==================== Summary ====================
Name: Tools-eem.426
Author: eem
Time: 5 November 2012, 10:39:18.848 am
UUID: d2507ad6-1423-4b1a-9922-41894ea2174a
Ancestors: Tools-ul.425
A serviceable "run until expression" for the debugger.
Would be nice if the UI updated.
WOuld be nice if there was some solution for temporaries
that are undefined rather than writing explicit guards in the
expressions.
Hence publishing to inbox for now.
=============== Diff against Tools-ul.425 ===============
Item was changed:
CodeHolder subclass: #Debugger
+ instanceVariableNames: 'interruptedProcess interruptedController contextStack contextStackIndex contextStackList receiverInspector contextVariablesInspector externalInterrupt proceedValue selectingPC savedCursor isolationHead failedProject errorWasInUIProcess labelString message untilExpression'
- instanceVariableNames: 'interruptedProcess interruptedController contextStack contextStackIndex contextStackList receiverInspector contextVariablesInspector externalInterrupt proceedValue selectingPC savedCursor isolationHead failedProject errorWasInUIProcess labelString message'
classVariableNames: 'ContextStackKeystrokes ErrorRecursion InterruptUIProcessIfBlockedOnErrorInBackgroundProcess'
poolDictionaries: ''
category: 'Tools-Debugger'!
!Debugger commentStamp: '<historical>' prior: 0!
I represent the machine state at the time of an interrupted process. I also represent a query path into the state of the process. The debugger is typically viewed through a window that views the stack of suspended contexts, the code for, and execution point in, the currently selected message, and inspectors on both the receiver of the currently selected message, and the variables in the current context.
Special note on recursive errors:
Some errors affect Squeak's ability to present a debugger. This is normally an unrecoverable situation. However, if such an error occurs in an isolation layer, Squeak will attempt to exit from the isolation layer and then present a debugger. Here is the chain of events in such a recovery.
* A recursive error is detected.
* The current project is queried for an isolationHead
* Changes in the isolationHead are revoked
* The parent project of isolated project is returned to
* The debugger is opened there and execution resumes.
If the user closes that debugger, execution continues in the outer project and layer. If, after repairing some damage, the user proceeds from the debugger, then the isolationHead is re-invoked, the failed project is re-entered, and execution resumes in that world. !
Item was changed:
----- Method: Debugger>>codePaneMenu:shifted: (in category 'code pane menu') -----
codePaneMenu: aMenu shifted: shifted
+ aMenu
+ add: 'run to here' target: self selector: #runToSelection: argument: thisContext sender receiver selectionInterval;
+ add: 'run until...' target: self selector: #runUntil;
+ addLine.
- aMenu add: 'run to here' target: self selector: #runToSelection: argument: thisContext sender receiver selectionInterval.
- aMenu addLine.
super codePaneMenu: aMenu shifted: shifted.
^aMenu.!
Item was added:
+ ----- Method: Debugger>>runUntil (in category 'code pane menu') -----
+ runUntil
+ | expression receiver context method value |
+ expression := UIManager default
+ request: 'run until expression is true'
+ initialAnswer: (untilExpression ifNil: 'boolean expression').
+ (expression isNil or: [expression isEmpty]) ifTrue:
+ [^self].
+ untilExpression := expression.
+ context := self selectedContext.
+ receiver := context receiver.
+ FakeClassPool adopt: receiver class.
+ method := receiver class evaluatorClass new
+ compiledMethodFor: untilExpression
+ in: context
+ to: receiver
+ notifying: nil
+ ifFail: [FakeClassPool adopt: nil. ^ #failedDoit]
+ logged: false.
+
+ FakeClassPool adopt: nil.
+ [self selectedContext == context
+ and: [(value := receiver with: context executeMethod: method) == false]] whileTrue:
+ [self doStep].
+ (value ~~ false and: [value ~~ true]) ifTrue:
+ [UIManager default inform: 'expression ', (untilExpression contractTo: 40), ' answered ', (value printString contractTo: 20), '!!!!']
+ !
Dear Smalltalkers,
I think it can be safely claimed that Aida/Web is a first Smalltalk web
framework, even more, one of the first frameworks at all to integrate
HTML5 WebSockets for so called realtime web apps. Realtime in sense that
values on the page are updated immediately when value changes on the
server, without needing to manually reload a page.
You can see that in action from WebSocket-capable browsers (latest
Firefox and Chrome) if you open in two browsers the online Aida realtime
counter demo, click buttons on one and observe changes instantly in both
browsers:
http://demo.aidaweb.si/demos?view=realtime
And how easy is using real-time in your code? See the simplified code of
above demo:
WebDemoApp>>viewRealtime
| e counterElement |
self enableRealtime.
counterElement := e add: self counterElement.
(e addButtonText: ' Decrement ')
noSubmit;
onClickDo: [self observee decCounter].
(e addButtonText: ' Increment ')
noSubmit;
onClickDo: [self observee incCounter].
self observee
onChangeDo: [counterElement update]
on: counterElement app: self.
self add: e.
WebDemoApp>>counterElement
| e |
e := WebElement newSpan.
e style: 'font-size: 40px'.
e addText: self observee counter printString.
^e
To describe this code a bit: you first enable realtime for this view of
demo App. Element on the webpage to update in realtime must be created
in a separate method (#counterElement). After buttons for increment and
decrement we come to the main part - registering the block to execute on
every change of domain object. Calling simply #update to the counter
element is enough to be updated on all browsers which currently observe
that counter demo.
How this works? Behind the scenes a so called realtime channel is open
between browser and Aida server. This WebSocket based channel is
bidirectional and full-duplex, meaning that Aida can send back to the
browser a message at any time. In above case a command to update the
counter element is sent back to all browsers immediately after counter
is changed.
New Aida 6.5 Interim release is released for Squeak, Pharo and
VisualWorks and available from usual places. See http://www.aidaweb.si
for more.
Everyone is welcome to try it and come with suggestions how to use this
new feature, how to improve it, ....
Further read:
http://www.aidaweb.si/websocket%20supporthttp://www.swazoo.org/websocket
Best regards
Janko
--
Janko Mivšek
Aida/Web
Smalltalk Web Application Server
http://www.aidaweb.si
Hi Folks,
is there a reason why Float>>printOn: aStream showingDecimalPlaces:
placesDesired
always prints '0.0' or was it just forgotten to deal with the desired
decimal places in this case? Nicolas?
Cheers
Herbert
****