Hi, anyone knows the seaside example from the pharo by example book:SBE2-SeasideRPN-on.1 MCSqueaksourceRepository location: 'http://www.squeaksource.com/SqueakByExample' user: '' password: '' I don't have much experience with seaside. thanks in advance._______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
2016-12-15 14:46 GMT+01:00 Nicolai Hess <[hidden email]>:
Ah, on seaside 3.0 the current (initial state) of the StackMachine is saved once before the rendering (WASnapshot), and if we modify the stack machine state (the OrderedCollection) during #renderContentsOn:, the prior state (with the empty stack) is restored before executing the callbacks. This had changed, in seaside 2.8, saving the state snapshots happens first after the initial rendering. Was this change on purpose ? Is there some information about, when it is allowed to modify the state during rendering ? I guess we may have to make sure that any state changes are happening outside of the rendering, is there some ~pattern~ to follow, when it is save to change states ? thanks in advance nicolai _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
2016-12-16 22:06 GMT+01:00 Nicolai Hess <[hidden email]>:
Ok I found a hint in http://book.seaside.st/book/fundamentals/anchors/about-callbacks "Important : Do not change state while rendering....." Ok, so the old RPNCalculator example does not work anymore if we try to "ensure the stack is not empty" during then renderContentsOn: method. Now I need to find a way to ensure the stackmachine non-emptyness before doing the rendering. Is there a hook, called before the rendering, that *can* change the component state ? _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
Hi Nicolai,
This article of mine: https://medium.com/concerning-pharo/rediscovering-the-ux-of-the-legendary-hp-35-scientific-pocket-calculator-d1d497ece999 contains two Seaside RPN calculator web apps based on a pure domain model. You can find the web stuff towards the end, you will probably have to skip some intro stuff in between. The appendix explains how to get the code. I hope it all still works. Sven > On 18 Dec 2016, at 13:27, Nicolai Hess <[hidden email]> wrote: > > > > 2016-12-16 22:06 GMT+01:00 Nicolai Hess <[hidden email]>: > > > 2016-12-15 14:46 GMT+01:00 Nicolai Hess <[hidden email]>: > Hi, > > anyone knows the seaside example from the pharo by example book: > > SBE2-SeasideRPN-on.1 > > MCSqueaksourceRepository > location: 'http://www.squeaksource.com/SqueakByExample' > user: '' > password: '' > > I can not get it to work. On Seaside 3.0 you need to change the class initialization, > because the application registration had changed. > But despite that, the calculator does not work. Everytime I push on a number > I get a empty-collection-error. > I don't understand why, because the rendering of the calculator stack > calls a method ensureStackMachineNotEmpty, that puts a 0 onto the stack. > Now, pushing a keypad button for a number, will pop this element and convert both > the existing number and the new number to a new number. > But somehow the stack is empty, eventhough we call ensureStackMachineNotEmpty. > > Anyone has experience with this example or can find out what is wrong ? > I don't have much experience with seaside. > > thanks in advance. > > Ah, on seaside 3.0 the current (initial state) of the StackMachine is saved once before the rendering (WASnapshot), and if we modify the stack machine state (the OrderedCollection) > during #renderContentsOn:, the prior state (with the empty stack) is restored before executing the callbacks. > This had changed, in seaside 2.8, saving the state snapshots happens first after the initial rendering. > Was this change on purpose ? Is there some information about, when it is allowed to modify the state during rendering ? > > I guess we may have to make sure that any state changes are happening outside of the rendering, is there some ~pattern~ to follow, when it is save to change states ? > > thanks in advance > > nicolai > > > > Ok I found a hint in http://book.seaside.st/book/fundamentals/anchors/about-callbacks > "Important : Do not change state while rendering....." > > Ok, so the old RPNCalculator example does not work anymore if we try to "ensure the stack is not empty" during then renderContentsOn: method. > Now I need to find a way to ensure the stackmachine non-emptyness before doing the rendering. > > Is there a hook, called before the rendering, that *can* change the component state ? > > > _______________________________________________ > seaside mailing list > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
2016-12-18 14:06 GMT+01:00 Sven Van Caekenberghe <[hidden email]>: Hi Nicolai, Thanks for your response, yes, it still works, but it does not really helps me, as it does not have to care about an empty stack or changes state before rendering.
_______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
> On 18 Dec 2016, at 16:42, Nicolai Hess <[hidden email]> wrote: > > > > 2016-12-18 14:06 GMT+01:00 Sven Van Caekenberghe <[hidden email]>: > Hi Nicolai, > > This article of mine: https://medium.com/concerning-pharo/rediscovering-the-ux-of-the-legendary-hp-35-scientific-pocket-calculator-d1d497ece999 contains two Seaside RPN calculator web apps based on a pure domain model. You can find the web stuff towards the end, you will probably have to skip some intro stuff in between. The appendix explains how to get the code. I hope it all still works. > > Thanks for your response, > yes, it still works, but it does not really helps me, as it does not have to care about an empty stack or changes state before rendering. I will (re)read section 12.7 in my physical copy of the book and come back to you. But from a theoretical standpoint, the model should just always be consistent in itself, independent of the (web) UI, in my opinion. > Sven > > > On 18 Dec 2016, at 13:27, Nicolai Hess <[hidden email]> wrote: > > > > > > > > 2016-12-16 22:06 GMT+01:00 Nicolai Hess <[hidden email]>: > > > > > > 2016-12-15 14:46 GMT+01:00 Nicolai Hess <[hidden email]>: > > Hi, > > > > anyone knows the seaside example from the pharo by example book: > > > > SBE2-SeasideRPN-on.1 > > > > MCSqueaksourceRepository > > location: 'http://www.squeaksource.com/SqueakByExample' > > user: '' > > password: '' > > > > I can not get it to work. On Seaside 3.0 you need to change the class initialization, > > because the application registration had changed. > > But despite that, the calculator does not work. Everytime I push on a number > > I get a empty-collection-error. > > I don't understand why, because the rendering of the calculator stack > > calls a method ensureStackMachineNotEmpty, that puts a 0 onto the stack. > > Now, pushing a keypad button for a number, will pop this element and convert both > > the existing number and the new number to a new number. > > But somehow the stack is empty, eventhough we call ensureStackMachineNotEmpty. > > > > Anyone has experience with this example or can find out what is wrong ? > > I don't have much experience with seaside. > > > > thanks in advance. > > > > Ah, on seaside 3.0 the current (initial state) of the StackMachine is saved once before the rendering (WASnapshot), and if we modify the stack machine state (the OrderedCollection) > > during #renderContentsOn:, the prior state (with the empty stack) is restored before executing the callbacks. > > This had changed, in seaside 2.8, saving the state snapshots happens first after the initial rendering. > > Was this change on purpose ? Is there some information about, when it is allowed to modify the state during rendering ? > > > > I guess we may have to make sure that any state changes are happening outside of the rendering, is there some ~pattern~ to follow, when it is save to change states ? > > > > thanks in advance > > > > nicolai > > > > > > > > Ok I found a hint in http://book.seaside.st/book/fundamentals/anchors/about-callbacks > > "Important : Do not change state while rendering....." > > > > Ok, so the old RPNCalculator example does not work anymore if we try to "ensure the stack is not empty" during then renderContentsOn: method. > > Now I need to find a way to ensure the stackmachine non-emptyness before doing the rendering. > > > > Is there a hook, called before the rendering, that *can* change the component state ? > > > > > > _______________________________________________ > > seaside mailing list > > [hidden email] > > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > > _______________________________________________ > seaside mailing list > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside > > _______________________________________________ > seaside mailing list > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
Hi Nicolai,
I used the code that I found @ MCSmalltalkhubRepository owner: 'onierstrasz' project: 'PharoByExample' user: '' password: ''. (SqueakSource acted really strange). I had to change the registration, like you said. Inside callbacks it is safe to change state. I got the code to work by modifying (added line before last) RPNKeypad>>#type: aString self inPushMode ifTrue: [ stackMachine push: stackMachine top. self stackClearTop ]. self inClearMode ifTrue: [ self stackClearTop ]. stackMachine isEmpty ifTrue: [ stackMachine push: 0 ]. stackMachine push: (stackMachine pop asString, aString) asNumber. #type: is called from inside callbacks. Removing the #ensureStackMachineNotEmpty call in #renderContentOn: does not work, so this remain all quite fishy. StackMachine is a model of a mathematical RPN calculator, not one with a keypad and modes. In my HP-35 code, there is RPNCalculatorCore for the mathematical abstraction and HP35CalculatorModel for the thing with the keys, input modes, etc. If the example UI cannot work with an empty stack, then maybe it should always be initialized with one containing 0, as an invariant ? The problem is that too many operations allow the model to go into error (esp. depleting the stack). Sven > On 18 Dec 2016, at 17:42, Sven Van Caekenberghe <[hidden email]> wrote: > >> >> On 18 Dec 2016, at 16:42, Nicolai Hess <[hidden email]> wrote: >> >> >> >> 2016-12-18 14:06 GMT+01:00 Sven Van Caekenberghe <[hidden email]>: >> Hi Nicolai, >> >> This article of mine: https://medium.com/concerning-pharo/rediscovering-the-ux-of-the-legendary-hp-35-scientific-pocket-calculator-d1d497ece999 contains two Seaside RPN calculator web apps based on a pure domain model. You can find the web stuff towards the end, you will probably have to skip some intro stuff in between. The appendix explains how to get the code. I hope it all still works. >> >> Thanks for your response, >> yes, it still works, but it does not really helps me, as it does not have to care about an empty stack or changes state before rendering. > > I will (re)read section 12.7 in my physical copy of the book and come back to you. > > But from a theoretical standpoint, the model should just always be consistent in itself, independent of the (web) UI, in my opinion. > >> Sven >> >>> On 18 Dec 2016, at 13:27, Nicolai Hess <[hidden email]> wrote: >>> >>> >>> >>> 2016-12-16 22:06 GMT+01:00 Nicolai Hess <[hidden email]>: >>> >>> >>> 2016-12-15 14:46 GMT+01:00 Nicolai Hess <[hidden email]>: >>> Hi, >>> >>> anyone knows the seaside example from the pharo by example book: >>> >>> SBE2-SeasideRPN-on.1 >>> >>> MCSqueaksourceRepository >>> location: 'http://www.squeaksource.com/SqueakByExample' >>> user: '' >>> password: '' >>> >>> I can not get it to work. On Seaside 3.0 you need to change the class initialization, >>> because the application registration had changed. >>> But despite that, the calculator does not work. Everytime I push on a number >>> I get a empty-collection-error. >>> I don't understand why, because the rendering of the calculator stack >>> calls a method ensureStackMachineNotEmpty, that puts a 0 onto the stack. >>> Now, pushing a keypad button for a number, will pop this element and convert both >>> the existing number and the new number to a new number. >>> But somehow the stack is empty, eventhough we call ensureStackMachineNotEmpty. >>> >>> Anyone has experience with this example or can find out what is wrong ? >>> I don't have much experience with seaside. >>> >>> thanks in advance. >>> >>> Ah, on seaside 3.0 the current (initial state) of the StackMachine is saved once before the rendering (WASnapshot), and if we modify the stack machine state (the OrderedCollection) >>> during #renderContentsOn:, the prior state (with the empty stack) is restored before executing the callbacks. >>> This had changed, in seaside 2.8, saving the state snapshots happens first after the initial rendering. >>> Was this change on purpose ? Is there some information about, when it is allowed to modify the state during rendering ? >>> >>> I guess we may have to make sure that any state changes are happening outside of the rendering, is there some ~pattern~ to follow, when it is save to change states ? >>> >>> thanks in advance >>> >>> nicolai >>> >>> >>> >>> Ok I found a hint in http://book.seaside.st/book/fundamentals/anchors/about-callbacks >>> "Important : Do not change state while rendering....." >>> >>> Ok, so the old RPNCalculator example does not work anymore if we try to "ensure the stack is not empty" during then renderContentsOn: method. >>> Now I need to find a way to ensure the stackmachine non-emptyness before doing the rendering. >>> >>> Is there a hook, called before the rendering, that *can* change the component state ? >>> >>> >>> _______________________________________________ >>> seaside mailing list >>> [hidden email] >>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside >> >> _______________________________________________ >> seaside mailing list >> [hidden email] >> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside >> >> _______________________________________________ >> seaside mailing list >> [hidden email] >> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
2016-12-18 21:31 GMT+01:00 Sven Van Caekenberghe <[hidden email]>: Hi Nicolai, Hi :) Thanks for looking into this. I used the code that I found @ I think I will stick with the ensureStackMachineNotEmpty call, otherwise I need to initialize the stack with 0 as top. And I will guard the keypad stack operations to not operate on an empty stack.
_______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
Free forum by Nabble | Edit this page |