Pascal, thanks for sharing. I like the idea of formless timers and I like
how this class abstracts the underlying wd commands. Some might argue it's
more complicated than necessary. I agree that it's more complicated to
follow than the vanilla code, but it's also useful if someone doesn't care
to know how timers work and just wants to use a library. I would probably
find it most useful as an abstraction if I was using formless timers and
had more than a few.

I don't have a solid application of multiple formless timers. Everything
that comes to mind is either a single timer or a timer for each form to
render something on the form. I enjoy seeing more OOP examples in J since
it's not my typical way of thinking. I'll keep this one in my file for
possible future use.




On Sat, May 31, 2014 at 9:54 AM, Pascal Jasmin <[email protected]>
wrote:

> There is a bug in the shader demo.  When you launch 2 instances only the
> window with mousefocus gets timer events.
>
>
> Thanks to Joe, here is a class that allows "formless timers".  It can be
> coinserted into another locale (renaming new if name conflict).  kill works
> without needing stop.  the stop,resume,kill verbs can be copied into a "
> real form" locale, as long as it holds/sets a form variable, and probably
> provide more reliable way to stop/resume timers from multiple form
> instances.
>
> cocurrent 'timer'
> create =: 3 : 0
>  form=:  'a', (> 18!:5 '')
>  wd 'pc ' , form
>  resume y
>
> )
> stop =: 3 : 0
>
>  wd 'psel '  , form
>  wd 'ptimer 0'
> )
> resume =: 3 : 0
>  wd 'psel '  , form
>  wd 'ptimer ', ": y
> )
> kill =: 3 : 0
>  wd 'psel '  , form
>  wd 'pclose'
>  codestroy ''
> )
> timerexample =: 3 : 'smoutput (> 18!:5 '''') ,'': '', ": (6!:0) '''''
> loc_z_=: (,&'_'@[ ,&'_'@, ":@>@])"1 0
>
> new =: 3 : 0
> '' new y
> :
> o =. y conew  (> 18!:5 '')
> if. 0=#x do. x =.'timerexample' loc o end.
> ('a', (> o), '_timer__o') =: 3 : (x , ' ''''')
> o
> )
>
>   a =. 'smoutput (> 18!:5 '''') ,'': '', ": (6!:0)' new_timer_ 5000
>   b =. new_timer_ 6000                  NB. uses locale's timerexample
> (overridable) as callback
>
>
> kill__a ''
> stop__b ''
> resume__b 3000
> kill__b ''
> ________________________________
> From: Joe Bogner <[email protected]>
> To: Pascal Jasmin <[email protected]>
> Cc: "[email protected]" <[email protected]>
> Sent: Saturday, May 31, 2014 5:46:51 AM
> Subject: Re: [Jprogramming] opportunity to show off jhs or qt
>
>
>
> You can use 'wd psel' to set the current form instance which is then used
> by 'wd ptimer 0'
>
> NB. run two timers
> NB. works on j802 beta from 5/28
> wd 'pc c'
> wd 'ptimer 1000'
>
> c_timer =: 3 : 'smoutput@:<''c'';(6!:0) '''''
>
> wd 'pc d'
> wd 'ptimer 1000'
>
> d_timer =: 3 : 'smoutput@:<''d'';(6!:0) '''''
>
> wd 'psel c'
>
> wd 'ptimer 0' NB. stop c
>
> wd 'psel d'
>
> wd 'ptimer 0' NB. stop d
>
> wd 'psel c'
> wd 'ptimer 1000' NB. resume c
>
>
> determined from source:
> http://www.jsoftware.com/download/j802/qtide/jqt-source.tar.gz
>
> A tip I used while testing is to use f8 to paste from keyboard. This keeps
> the output from interfering with the input
>
>
>
>
>
> On Sat, May 31, 2014 at 12:26 AM, Pascal Jasmin <[email protected]>
> wrote:
>
>
> >
> >skipping the pshow command,
> >
> >I can get both of your timers to run, but can only get one of them to
> stop.  It appears as though
> >wd 'ptimer xx' affects the most recent wd 'pc X' command, so for
> instance, this sequence of commands:
> >
> >
> >c_timer =: 3 : 'smoutput@:<''c'';(6!:0) '''''
> >
> >d_timer =: 3 : 'smoutput@:<''d'';(6!:0) '''''
> > wd 'pc c'
> >wd 'ptimer 6000'
> >NB. runs as expected
> >  wd 'ptimer 0' NB. stops as expected.
> > wd 'pc d'
> >wd 'ptimer 6000'  NB. runs only d
> > wd 'pc c'
> >NB. still runs only d
> >wd 'ptimer 6000' NB. will run both on independent timers
> >
> >wd 'timer 0' NB.only stops C
> > wd 'pc d'
> >wd 'timer 0' NB. still d won't stop.
> >
> >erase 'd_timer'  NB. stops d
> >
> >using pshow and pclose doesn't change the result.
> >
> >it turns out that I can get my object instance timers to also run, but
> have the same problems stopping them... except its worse due to difficulty
> setting timer off.
> >
> >a =. 6000 conew't'
> >b =. 7000 conew't'
> >runs both ok.
> >stop__a ''  NB. stops b... the last pc command.
> >kill__b '' NB. runs ok apparently.  But does not stop a timer
> >
> >cannot run stop__a '' or kill__a '' effectively.  erase 'a' does nothing.
>  Quitting J is easiest, even this direct command fails
> >
> >  kill_0_''
> >|pclose : no parent selected: wd
> >
> >though this works: (where 0 is first locale...one part of smoutput)
> >  erase 'a0_timer_0_'
> >
> >_________________________
> >From: Joe Bogner <[email protected]>
> >To: Pascal J <[email protected]>
> >Sent: Friday, May 30, 2014 11:20:26 PM
> >
> >Subject: Re: [Jprogramming] opportunity to show off jhs or qt
> >
> >
> >
> >[off list]
> >
> >Hey Pascal, did you try the code that I posted with multiple timers? That
> worked for me... I didn't run yours but perhaps it's something with the
> locales... Just wanted to check first to see if you were successful with a
> more basic implementation of multiple timers
> >
> >
> >
> >
> >
> >On Fri, May 30, 2014 at 11:00 PM, 'Pascal Jasmin' via Programming <
> [email protected]> wrote:
> >
> >thank you Bill and Joe, with new version it works.  Also wd 'pshow' is
> not necessary.
> >>
> >>multiple timers may not work though.
> >>
> >>cocurrent 't'
> >>create =: 3 : 0
> >>('a', (> 18!:5 ''), '_timer') =: 3 : 'smoutput (> 18!:5 '''') ,'': '',
> ": (6!:0) '''''
> >>wd 'pc ' , 'a', (> 18!:5 '')
> >>resume y
> >>)
> >>NB. a_timer =: 3 : 'smoutput (> 18!:5 '''') ,'': '', ": (6!:0) '''''
> >>stop =: 3 : 0
> >>wd 'ptimer 0'
> >>)
> >>resume =: 3 : 0
> >>wd 'ptimer ', ": y
> >>)
> >>kill =: 3 : 0
> >>wd 'pclose'
> >>codestroy ''
> >>)
> >>
> >>  a =. 4000 conew 't'  NB. will start timer
> >>
> >>stop__a '' NB. will stop timer
> >>
> >>   a
> >>┌─┐
> >>│1│
> >>└─┘
> >>
> >>  ] b =. 4000 conew 't'  NB. will start new timer ... replacing old.
> >>┌─┐
> >>│2│
> >>└─┘
> >> NB. you will see that only timer from b runs.   resume__a 2000 will run
> the timer from b.  This error will repeat if you create a 3rd instance.
>  Only timer from last instance runs, even though they all have different
> "forms" a1 and a2.  stop__a '' will stop the timer even if only b is
> running.
> >>
> >>  a1_timer__a ''  NB. a1 comes from using the locale number for variable
> a
> >>1: 2014 5 30 22 28 48.138
> >>
> >>   a2_timer__b ''  NB. a2 comes from using the locale number for
> variable b
> >>2: 2014 5 30 22 29 17.594
> >>
> >>If you kill either a or b, then resume__a 3000 will fail, as both
> "forms" are killed.
> >>
> >>   resume__a 3000
> >>|ptimer : no parent selected: wd
> >>
> >>
> >>Perhaps this is related to my poor understanding of how to run multiple
> copies of a form?
> >>
> >>
> >>
> >>----- Original Message -----
> >>From: Joe Bogner <[email protected]>
> >>To: [email protected]
> >>Cc:
> >>
> >>Sent: Friday, May 30, 2014 9:21:00 PM
> >>Subject: Re: [Jprogramming] opportunity to show off jhs or qt
> >>
> >>Pascal, you need to update to the latest.
> >>
> >>Engine: j701/2011-01-10/11:25
> >>
> >>Library: 8.02.06
> >>
> >>Qt IDE: 1.1.2/5.3.0
> >>
> >>Platform: Win 32
> >>
> >>Installer: J802 install
> >>
> >>InstallPath: c:/users/joe/j802
> >>
> >>
> >>
> >>This works on the latest
> >>
> >>
> >>NB. run two timers
> >>
> >>NB. works on j802 beta from 5/28
> >>
> >>wd 'pc c'
> >>
> >>wd 'pshow'  NB. shows empty form
> >>
> >>wd :: empty 'ptimer 1000'
> >>
> >>
> >>c_timer =: 3 : 'smoutput@:<''c'';(6!:0) '''''
> >>
> >>
> >>wd 'pc d'
> >>
> >>wd 'pshow'  NB. shows empty form
> >>
> >>wd :: empty 'ptimer 1000'
> >>
> >>
> >>d_timer =: 3 : 'smoutput@:<''d'';(6!:0) '''''
> >>
> >>
> >>
> >>This worked on the previous
> >>
> >>
> >>
> >>NB. worked previous j802 beta
> >>
> >>wd 'pc a'
> >>
> >>wd 'cc g opengl version 2.0 flush'
> >>
> >>wd 'pshow'  NB. shows empty form
> >>
> >>wd 'set g timer 1000'
> >>
> >>a_g_timer =: 3 : 'smoutput@:<''a'';(6!:0) '''''
> >>
> >>
> >>wd 'pc b'
> >>
> >>wd 'cc g opengl version 2.0 flush'
> >>
> >>wd 'pshow'  NB. shows empty form
> >>
> >>wd 'set g timer 1000'
> >>
> >>b_g_timer =: 3 : 'smoutput@:<''b'';(6!:0) '''''
> >>
> >>
> >>
> >>
> >>I was stuck on it too
> >>
> >>
> >>
> >>On Fri, May 30, 2014 at 9:12 PM, 'Pascal Jasmin' via Programming <
> >>[email protected]> wrote:
> >>
> >>> Engine: j701/2011-01-10/11:25
> >>> Library: 8.02.06
> >>> Qt IDE: 1.1.1/5.3.0
> >>> Platform: Win 64
> >>>
> >>>
> >>> ----- Original Message -----
> >>> From: bill lam <[email protected]>
> >>> To: "[email protected]" <[email protected]>
> >>> Cc:
> >>> Sent: Friday, May 30, 2014 8:12:21 PM
> >>> Subject: Re: [Jprogramming] opportunity to show off jhs or qt
> >>>
> >>> what is your JVERSION ?
> >>>
> >>> 31.05.2014, в 8:03, "'Pascal Jasmin' via Programming" <
> >>> [email protected]> написал(а):
> >>>
> >>> > the shader demo works.  cube rotates, etc...
> >>> >
> >>> > when I try those 3 lines from the base locale (jqt802 console
> session),
> >>> the error shown occurs.
> >>> >
> >>> >
> >>> > ----- Original Message -----
> >>> > From: bill lam <[email protected]>
> >>> > To: "[email protected]" <[email protected]>
> >>> > Cc:
> >>> > Sent: Friday, May 30, 2014 8:00:24 PM
> >>> > Subject: Re: [Jprogramming] opportunity to show off jhs or qt
> >>> >
> >>> > did the cube rotate? did you test on the latest j802/jqt beta?
> >>> >
> >>> > 31.05.2014, в 7:48, "'Pascal Jasmin' via Programming" <
> >>> [email protected]> написал(а):
> >>> >
> >>> >> from base,
> >>> >>
> >>> >>    wd 'pc a;'  NB. or 'pc a'
> >>> >>     wd 'pshow'  NB. shows empty form
> >>> >>     wd 'ptimer 2000'
> >>> >> |ptimer : parent command not found: ptimer: wd
> >>> >>
> >>> >>
> >>> >>     a_timer_base_
> >>> >> 3 : 'smoutput@:(6!:0) '''''
> >>> >>
> >>> >> is this something related to base locale?
> >>> >>
> >>> >> shader demo works ok.
> >>> >>
> >>> >>
> >>> >> ----- Original Message -----
> >>> >> From: bill lam <[email protected]>
> >>> >> To: "[email protected]" <[email protected]>
> >>> >> Cc:
> >>> >> Sent: Friday, May 30, 2014 6:40:53 PM
> >>> >> Subject: Re: [Jprogramming] opportunity to show off jhs or qt
> >>> >>
> >>> >> You didn't even create a form. To recap, a form is created using wd
> cmd
> >>> eg
> >>> >>
> >>> >> wd'pc  foo'
> >>> >>
> >>> >> the locale of a form is the current locale when that wd'pc foo' is
> >>> executed.
> >>> >>
> >>> >> 31.05.2014, в 0:49, "'Pascal Jasmin' via Programming" <
> >>> [email protected]> написал(а):
> >>> >>
> >>> >>> sorry for previous message, was running timer and not ptimer.
> >>> >>>
> >>> >>> It does not appear as though you can get a timer into an arbitrary
> >>> locale by just doing wd 'pc a' there.  The form has to be visible, or
> needs
> >>> an initial show?
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>> ----- Original Message -----
> >>> >>> From: 'Pascal Jasmin' via Programming <[email protected]>
> >>> >>> To: "[email protected]" <[email protected]>
> >>> >>> Cc:
> >>> >>> Sent: Friday, May 30, 2014 12:23:37 PM
> >>> >>> Subject: Re: [Jprogramming] opportunity to show off jhs or qt
> >>> >>>
> >>> >>> Nice, thank you.
> >>> >>>
> >>> >>> You can also use a timer in any arbitrary locale (I think)
> >>> >>>
> >>> >>>      a_timer_ =: show_base_
> >>> >>>      wd_a_ 'timer 2000'
> >>> >>>
> >>> >>> or
> >>> >>>
> >>> >>>    aa =. conew 'a'
> >>> >>>    wd__aa 'timer 2000'
> >>> >>>
> >>> >>> acts a little weird with just one plot window, but that might be
> plot
> >>> related?
> >>> >>>
> >>> >>>
> >>> >>> ----- Original Message -----
> >>> >>> From: bill lam <[email protected]>
> >>> >>> To: 'Pascal Jasmin' via Programming <[email protected]>
> >>> >>> Cc:
> >>> >>> Sent: Friday, May 30, 2014 11:19:17 AM
> >>> >>> Subject: Re: [Jprogramming] opportunity to show off jhs or qt
> >>> >>>
> >>> >>> Oh sorry!  I thought ptimer was documented but not yet. Basically
> >>> >>> it is very simple, if your form id is 'foo' then the name of the
> >>> >>> timer callback verb is 'foo_timer' in the form's locale.  Each form
> >>> >>> has its own timer. wd'ptimer xx' will start or stop timer attached
> >>> >>> to the current form.  Unlike the old wd timer, form timers will not
> >>> >>> break existing code. In qt shader demo, the cube is rotated by a
> >>> >>> form timer.
> >>> >>>
> >>> >>> Пт, 30 май 2014, jprogramming написал(а):
> >>> >>>> good news about wd 'timer' for forms.  A wishlist would include a
> way
> >>> for minimal library load for jconsole support.
> >>> >>>>
> >>> >>>> I don't see it mentioned here though
> >>> http://www.jsoftware.com/jwiki/System/ReleaseNotes/J802
> >>> >>>>
> >>> >>>> I did see that the timer qt demo app has been updated, but its
> hard
> >>> to understand without a "qtdemo form"
> >>> >>>>
> >>> >>>> there is no mention of wd 'ptimer' here:
> >>>
> http://www.jsoftware.com/jwiki/Guides/Window%20Driver/Command%20Reference
> >>> >>>>
> >>> >>>>
> >>> >>>> ----- Original Message -----
> >>> >>>> From: bill lam <[email protected]>
> >>> >>>> To: [email protected]
> >>> >>>> Cc:
> >>> >>>> Sent: Friday, May 30, 2014 10:08:14 AM
> >>> >>>> Subject: Re: [Jprogramming] opportunity to show off jhs or qt
> >>> >>>>
> >>> >>>> sleep will halt current thread, not a feature of jqt.  One can
> >>> >>>> use wd'timer' to fire event.  Furthermore J802 introduce form
> timer
> >>> >>>> for each form, see high-lights.
> >>> >>>>
> >>> >>>> Пт, 30 май 2014, Raul Miller написал(а):
> >>> >>>>> I made the hour hand be a 24 hour hour-hand. To make it the more
> >>> typical 12
> >>> >>>>> hour hour-hand, change 2r24p1 2r60p1 2r60p1 to 2r12p1 2r60p1
> 2r60p1.
> >>> >>>>>
> >>> >>>>> And the window freezing issue is a "feature" of jqt. To avoid
> that
> >>> issue
> >>> >>>>> with current versions of jqt, always close (or position) the plot
> >>> window
> >>> >>>>> before starting the clock.
> >>> >>>>>
> >>> >>>>> Thanks,
> >>> >>>>>
> >>> >>>>> --
> >>> >>>>> Raul
> >>> >>>>>
> >>> >>>>>
> >>> >>>>>
> >>> >>>>> On Fri, May 30, 2014 at 4:43 AM, Jan-Pieter Jacobs <
> >>> >>>>> [email protected]> wrote:
> >>> >>>>>
> >>> >>>>>> Nice!
> >>> >>>>>> I tried your code in JQT (on windows 8), some remarks:
> >>> >>>>>>
> >>> >>>>>> The hour hand is pointing about the exact oposite direction it
> >>> should.
> >>> >>>>>> Somehow, switching windows also causes the plot window to
> freeze,
> >>> and J to
> >>> >>>>>> become unresponsive
> >>> >>>>>>
> >>> >>>>>>
> >>> >>>>>> Jan-Pieter
> >>> >>>>>>
> >>> >>>>>>
> >>> >>>>>> 2014-05-30 3:18 GMT+02:00 Raul Miller <[email protected]>:
> >>> >>>>>>
> >>> >>>>>>> Here's another approach (beware of email induced line wrap in
> >>> definition
> >>> >>>>>> of
> >>> >>>>>>> show):
> >>> >>>>>>>
> >>> >>>>>>> N=:0.01*i.629
> >>> >>>>>>> O=: [: j./ 1 2 o./ ]
> >>> >>>>>>> delay=:6!:3    NB. "sleep"
> >>> >>>>>>>
> >>> >>>>>>> show=: [: plot (O N),N*/~0.07 0.11 0.15(*O) 2r24p1 2r60p1
> >>> 2r60p1*_3{.6!:0
> >>> >>>>>>> bind ''
> >>> >>>>>>>
> >>> >>>>>>> show@delay@1:^:9e9''
> >>> >>>>>>>
> >>> >>>>>>> I think this should work with both jqt and the j602 ide.
> >>> >>>>>>>
> >>> >>>>>>> Thanks,
> >>> >>>>>>>
> >>> >>>>>>> --
> >>> >>>>>>> Raul
> >>> >>>>>>>
> >>> >>>>>>>
> >>> >>>>>>>
> >>> >>>>>>> On Thu, May 29, 2014 at 1:39 PM, David Lambert <
> >>> [email protected]>
> >>> >>>>>>> wrote:
> >>> >>>>>>>
> >>> >>>>>>>> http://rosettacode.org/wiki/Draw_a_clock#J
> >>> >>>>>>>>
> >>> >>>>>>>> The next author need only replace the draw dyad, or rewrite
> the
> >>> >>>>>>>> contribution.
> >>> >>>>>>>> x is the current session time, y is the session time when the
> verb
> >>> >>>>>>> starts.
> >>> >>>>>>>>
> >>> >>>>>>>> round=: [: <. 0.5&+
> >>> >>>>>>>> PICTURES=: u:16b2190+i.4      NB. arrows
> >>> >>>>>>>> draw=: [: smoutput PICTURES ((|~ #)~ { [) [: round -
> >>> >>>>>>>>
> >>> >>>>>>>>
> >>> ----------------------------------------------------------------------
> >>> >>>>>>>> For information about J forums see
> >>> http://www.jsoftware.com/forums.htm
> >>> >>>>>>>>
> >>> >>>>>>>
> >>> ----------------------------------------------------------------------
> >>> >>>>>>> For information about J forums see
> >>> http://www.jsoftware.com/forums.htm
> >>> >>>>>>>
> >>> >>>>>>
> >>> ----------------------------------------------------------------------
> >>> >>>>>> For information about J forums see
> >>> http://www.jsoftware.com/forums.htm
> >>> >>>>>>
> >>> >>>>>
> >>> ----------------------------------------------------------------------
> >>> >>>>> For information about J forums see
> >>> http://www.jsoftware.com/forums.htm
> >>> >>>>
> >>> >>>> --
> >>> >>>> regards,
> >>> >>>> ====================================================
> >>> >>>> GPG key 1024D/4434BAB3 2008-08-24
> >>> >>>> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> >>> >>>> gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
> >>
> >>
> >>
> >>>
> >>>
> >>>
> >>> >
> >>> >
> >>> >
> >>> >>
> >>> >>
> >>> >>
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>>>
> >>> >>>>
> >>> >>>>
> >>> >>>>
> ----------------------------------------------------------------------
> >>> >>>> For information about J forums see
> >>> http://www.jsoftware.com/forums.htm
> >>> >>>>
> ----------------------------------------------------------------------
> >>> >>>> For information about J forums see
> >>> http://www.jsoftware.com/forums.htm
> >>> >>>
> >>> >>> --
> >>> >>> regards,
> >>> >>> ====================================================
> >>> >>> GPG key 1024D/4434BAB3 2008-08-24
> >>> >>> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> >>> >>> gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
> >>> >>>
> ----------------------------------------------------------------------
> >>> >>> For information about J forums see
> http://www.jsoftware.com/forums.htm
> >>> >>>
> ----------------------------------------------------------------------
> >>> >>> For information about J forums see
> http://www.jsoftware.com/forums.htm
> >>> >>>
> ----------------------------------------------------------------------
> >>> >>> For information about J forums see
> http://www.jsoftware.com/forums.htm
> >>> >>
> ----------------------------------------------------------------------
> >>> >> For information about J forums see
> http://www.jsoftware.com/forums.htm
> >>> >>
> ----------------------------------------------------------------------
> >>> >> For information about J forums see
> http://www.jsoftware.com/forums.htm
> >>> >
> ----------------------------------------------------------------------
> >>> > For information about J forums see
> http://www.jsoftware.com/forums.htm
> >>> >
> ----------------------------------------------------------------------
> >>> > For information about J forums see
> http://www.jsoftware.com/forums.htm
> >>> ----------------------------------------------------------------------
> >>> For information about J forums see http://www.jsoftware.com/forums.htm
> >>> ----------------------------------------------------------------------
> >>> For information about J forums see http://www.jsoftware.com/forums.htm
> >>>
> >>----------------------------------------------------------------------
> >>For information about J forums see http://www.jsoftware.com/forums.htm
> >>----------------------------------------------------------------------
> >>For information about J forums see http://www.jsoftware.com/forums.htm
> >
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to