Hi Guys,
I would like to call irsend (a program that is part of lirc package) from Squeak on the Raspberry Pi. Can anyone please post some sample code.
Lou ----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On Mon, Feb 04, 2013 at 02:07:12PM -0500, Louis LaBrunda wrote:
Hi Guys,
I would like to call irsend (a program that is part of lirc package) from Squeak on the Raspberry Pi. Can anyone please post some sample code.
I'm not familiar with it myself, but if irsend is just a simple command line program then I should think that you could call it easily using OSProcess.
Dave
Hi Dave,
Thanks for the reply. OSProcess sounds like it is what I need but I can't find any install instructions, probably because I don't know much about Squeak and Linux and I'm not sure where to look.
Lou
On Mon, Feb 04, 2013 at 02:07:12PM -0500, Louis LaBrunda wrote:
Hi Guys,
I would like to call irsend (a program that is part of lirc package) from Squeak on the Raspberry Pi. Can anyone please post some sample code.
I'm not familiar with it myself, but if irsend is just a simple command line program then I should think that you could call it easily using OSProcess.
Dave
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On Tue, Feb 05, 2013 at 03:55:14PM -0500, Louis LaBrunda wrote:
On Mon, Feb 04, 2013 at 02:07:12PM -0500, Louis LaBrunda wrote:
Hi Guys,
I would like to call irsend (a program that is part of lirc package) from Squeak on the Raspberry Pi. Can anyone please post some sample code.
I'm not familiar with it myself, but if irsend is just a simple command line program then I should think that you could call it easily using OSProcess.
Thanks for the reply. OSProcess sounds like it is what I need but I can't find any install instructions, probably because I don't know much about Squeak and Linux and I'm not sure where to look.
Open a SqueakMap Package Loader:
world -> open... -> SqueakMap Catalog
In the SqueakMap Package Loader, select package OSProcess. Expand that category and you will find entries for version 4.4.11 and for "head". Either one is fine, but I usually recommend just using the latest version, so select "head" and install it.
Assuming that you want to run irsend with some command line parameters, try inspecting the following expression (but use some command parameters that actually do something):
OSProcess command: 'irsend foo bar baz'
The result will be an instance of ExternalUnixOSProcess that is a proxy for the actual irsend program that you just executed. You can send it #succeeded to see if the command was evaluated without error.
I think this is sufficient for what you are trying to do, but you can also do fancier things with external programs if you load CommandShell (also on SqueakMap).
For additional background see http://wiki.squeak.org/squeak/708 and http://wiki.squeak.org/squeak/1914.
Follow up questions welcome :)
Dave
Hey Dave,
Again, many thanks for the reply. Your instructions worked great and so did my test of the irsend command.
Lou
Open a SqueakMap Package Loader:
world -> open... -> SqueakMap Catalog
In the SqueakMap Package Loader, select package OSProcess. Expand that category and you will find entries for version 4.4.11 and for "head". Either one is fine, but I usually recommend just using the latest version, so select "head" and install it.
Assuming that you want to run irsend with some command line parameters, try inspecting the following expression (but use some command parameters that actually do something):
OSProcess command: 'irsend foo bar baz'
The result will be an instance of ExternalUnixOSProcess that is a proxy for the actual irsend program that you just executed. You can send it #succeeded to see if the command was evaluated without error.
I think this is sufficient for what you are trying to do, but you can also do fancier things with external programs if you load CommandShell (also on SqueakMap).
For additional background see http://wiki.squeak.org/squeak/708 and http://wiki.squeak.org/squeak/1914.
Follow up questions welcome :)
Dave
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On 05-02-2013, at 3:15 PM, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hey Dave,
Again, many thanks for the reply. Your instructions worked great and so did my test of the irsend command.
Now you just owe us an explanation of what you're getting up to with your Pi; irsend sounds like maybe doing an IR remote control thingy? Nosy buggers need to know...
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim A)bort, R)etry, I)nfluence with large hammer.
Hi Tim,
Now you just owe us an explanation of what you're getting up to with your Pi; irsend sounds like maybe doing an IR remote control thingy? Nosy buggers need to know...
Glad you asked. I know, you know a lot of what I'm about to say here but it may help other Nosy buggers.
I have a very old Windows 2000 computer (I call it the TV computer, it is cobble together from old parts, one of which came from a neighbor kid who bent the CPU pins pulling it out to upgrade the motherboard and CPU) that I use to record some TV shows in the evening. It is (and has to be) connected to a cable box. To record different channels as the night goes on, the cable box channel needs to be changed at the right time. This tried to do this from the TV computer but it is too old and slow to record and change the channels reliably at the same time. Enter the Raspberry Pi http://www.raspberrypi.org/.
I use an IR transmitter I got from Iguanaworks http://iguanaworks.net and LIRC http://www.lirc.org/ (there is also a Windows version at http://winlirc.sourceforge.net/) to send it commands to change the channel. I was using the Iguana from an other Windows computer but that is a lot of horsepower just to change the channels.
I use Raspbian (http://www.raspbian.org/ a Debian version of Linux) because I felt it would be easier to run Squeak and the LIRC code. I wrote a class to hold the IguanaIR/LIRC info to change the channel at a given time and reschedule for another day. It considers things like the individual weekdays and all weekdays.
LIRC has a command called irsend that (after some set up) can send a request to the IguanaIR to send some IR codes, like change the channel. Dave's "OSProcess command:" works great to run the irsend command with data from my class to change the channel.
I plan to write code in a workspace that will instantiate this class for each time I need to change the channel during the week. These instances will be put in a collection that is run through every second or so to see if it is time to change the channel. I expect to start Squeak on the RasPi, load the workspace, start it up and leave it running. At least until I want to play with the RasPi for something else.
Lou ----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hi Dave,
Last night I left the RasPi running my Squeak code to change the channels. Most worked just fine. One of the calls to "OSProcess command:..." says it had a "... normal termination with status 1". It didn't change the channel. I will look through the code for what this and other status codes mean but can you tell me or point me to some docs.
I would like to test for errors and retry. For now I think I will just test for non zero.
Lou
On Tue, 5 Feb 2013 17:22:50 -0500, "David T. Lewis" lewis@mail.msen.com wrote:
On Tue, Feb 05, 2013 at 03:55:14PM -0500, Louis LaBrunda wrote:
On Mon, Feb 04, 2013 at 02:07:12PM -0500, Louis LaBrunda wrote:
Hi Guys,
I would like to call irsend (a program that is part of lirc package) from Squeak on the Raspberry Pi. Can anyone please post some sample code.
I'm not familiar with it myself, but if irsend is just a simple command line program then I should think that you could call it easily using OSProcess.
Thanks for the reply. OSProcess sounds like it is what I need but I can't find any install instructions, probably because I don't know much about Squeak and Linux and I'm not sure where to look.
Open a SqueakMap Package Loader:
world -> open... -> SqueakMap Catalog
In the SqueakMap Package Loader, select package OSProcess. Expand that category and you will find entries for version 4.4.11 and for "head". Either one is fine, but I usually recommend just using the latest version, so select "head" and install it.
Assuming that you want to run irsend with some command line parameters, try inspecting the following expression (but use some command parameters that actually do something):
OSProcess command: 'irsend foo bar baz'
The result will be an instance of ExternalUnixOSProcess that is a proxy for the actual irsend program that you just executed. You can send it #succeeded to see if the command was evaluated without error.
I think this is sufficient for what you are trying to do, but you can also do fancier things with external programs if you load CommandShell (also on SqueakMap).
For additional background see http://wiki.squeak.org/squeak/708 and http://wiki.squeak.org/squeak/1914.
Follow up questions welcome :)
Dave
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
There are a couple of ways that a unix program can provide error output. The exit status is a simple way to communicate either success, or one of possibly several not so successful outcomes. This is useful for programs that are used in shell scripts for example. The other way is for the program to write error messages to its stderr output stream. This is common for programs for which which a user is expected to read the error messages.
I don't see anything in the man page for irsend that explains the exit status values, so it's a good bet that 0 means goodness and anything else means not so good. That might not be enough information to change the channel on your TV, but as you say I'd go ahead and try that first and see if it is good enough.
If you need to read the error output from the stdout stream (i.e. the error messages that would normally go to the console when you run the irsend program), you can do this by loading the CommandShell package from SqueakMap, then do something like this:
irsend := ProxyPipeline command: 'irsend foo bar baz'.
irsend last processProxy ==> an ExternalUnixOSProcess with pid 4157 on /usr/bin/irsend (complete, normal termination with status 1)
irsend errorUpToEnd ==> 'irsend: could not connect to socket irsend: No such file or directory '
But I think this is more complexity than you really need for this, so definitely you should first try just checking for exit status 0 and see if that does what you need.
Dave
On Thu, Feb 07, 2013 at 11:37:17AM -0500, Louis LaBrunda wrote:
Hi Dave,
Last night I left the RasPi running my Squeak code to change the channels. Most worked just fine. One of the calls to "OSProcess command:..." says it had a "... normal termination with status 1". It didn't change the channel. I will look through the code for what this and other status codes mean but can you tell me or point me to some docs.
I would like to test for errors and retry. For now I think I will just test for non zero.
Lou
On Tue, 5 Feb 2013 17:22:50 -0500, "David T. Lewis" lewis@mail.msen.com wrote:
On Tue, Feb 05, 2013 at 03:55:14PM -0500, Louis LaBrunda wrote:
On Mon, Feb 04, 2013 at 02:07:12PM -0500, Louis LaBrunda wrote:
Hi Guys,
I would like to call irsend (a program that is part of lirc package) from Squeak on the Raspberry Pi. Can anyone please post some sample code.
I'm not familiar with it myself, but if irsend is just a simple command line program then I should think that you could call it easily using OSProcess.
Thanks for the reply. OSProcess sounds like it is what I need but I can't find any install instructions, probably because I don't know much about Squeak and Linux and I'm not sure where to look.
Open a SqueakMap Package Loader:
world -> open... -> SqueakMap Catalog
In the SqueakMap Package Loader, select package OSProcess. Expand that category and you will find entries for version 4.4.11 and for "head". Either one is fine, but I usually recommend just using the latest version, so select "head" and install it.
Assuming that you want to run irsend with some command line parameters, try inspecting the following expression (but use some command parameters that actually do something):
OSProcess command: 'irsend foo bar baz'
The result will be an instance of ExternalUnixOSProcess that is a proxy for the actual irsend program that you just executed. You can send it #succeeded to see if the command was evaluated without error.
I think this is sufficient for what you are trying to do, but you can also do fancier things with external programs if you load CommandShell (also on SqueakMap).
For additional background see http://wiki.squeak.org/squeak/708 and http://wiki.squeak.org/squeak/1914.
Follow up questions welcome :)
Dave
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hey Dave,
Thanks for the info. Looking at the code, I see that ExternalUnixOSProcess is returned from "OSProcess command:...". It has some nice methods for checking if the command finished ok.
I added some code to the method that calls irsend to check if the command is finished and if it was successful, looping on a small delay. If after awhile it has not finished successfully I try again for a few times and then give up. Since I'm sure the irsend command is fine, the errors should just be transient of the odd timing nature and retrying should work.
Lou
There are a couple of ways that a unix program can provide error output. The exit status is a simple way to communicate either success, or one of possibly several not so successful outcomes. This is useful for programs that are used in shell scripts for example. The other way is for the program to write error messages to its stderr output stream. This is common for programs for which which a user is expected to read the error messages.
I don't see anything in the man page for irsend that explains the exit status values, so it's a good bet that 0 means goodness and anything else means not so good. That might not be enough information to change the channel on your TV, but as you say I'd go ahead and try that first and see if it is good enough.
If you need to read the error output from the stdout stream (i.e. the error messages that would normally go to the console when you run the irsend program), you can do this by loading the CommandShell package from SqueakMap, then do something like this:
irsend := ProxyPipeline command: 'irsend foo bar baz'.
irsend last processProxy ==> an ExternalUnixOSProcess with pid 4157 on /usr/bin/irsend (complete, normal termination with status 1)
irsend errorUpToEnd ==> 'irsend: could not connect to socket irsend: No such file or directory '
But I think this is more complexity than you really need for this, so definitely you should first try just checking for exit status 0 and see if that does what you need.
Dave
On Thu, Feb 07, 2013 at 11:37:17AM -0500, Louis LaBrunda wrote:
Hi Dave,
Last night I left the RasPi running my Squeak code to change the channels. Most worked just fine. One of the calls to "OSProcess command:..." says it had a "... normal termination with status 1". It didn't change the channel. I will look through the code for what this and other status codes mean but can you tell me or point me to some docs.
I would like to test for errors and retry. For now I think I will just test for non zero.
Lou
On Tue, 5 Feb 2013 17:22:50 -0500, "David T. Lewis" lewis@mail.msen.com wrote:
On Tue, Feb 05, 2013 at 03:55:14PM -0500, Louis LaBrunda wrote:
On Mon, Feb 04, 2013 at 02:07:12PM -0500, Louis LaBrunda wrote:
Hi Guys,
I would like to call irsend (a program that is part of lirc package) from Squeak on the Raspberry Pi. Can anyone please post some sample code.
I'm not familiar with it myself, but if irsend is just a simple command line program then I should think that you could call it easily using OSProcess.
Thanks for the reply. OSProcess sounds like it is what I need but I can't find any install instructions, probably because I don't know much about Squeak and Linux and I'm not sure where to look.
Open a SqueakMap Package Loader:
world -> open... -> SqueakMap Catalog
In the SqueakMap Package Loader, select package OSProcess. Expand that category and you will find entries for version 4.4.11 and for "head". Either one is fine, but I usually recommend just using the latest version, so select "head" and install it.
Assuming that you want to run irsend with some command line parameters, try inspecting the following expression (but use some command parameters that actually do something):
OSProcess command: 'irsend foo bar baz'
The result will be an instance of ExternalUnixOSProcess that is a proxy for the actual irsend program that you just executed. You can send it #succeeded to see if the command was evaluated without error.
I think this is sufficient for what you are trying to do, but you can also do fancier things with external programs if you load CommandShell (also on SqueakMap).
For additional background see http://wiki.squeak.org/squeak/708 and http://wiki.squeak.org/squeak/1914.
Follow up questions welcome :)
Dave
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
That sound right to me. The exit status of the program is set some time after it exits (by means of a unix signal triggering a Smalltalk semaphore which wakes up a process that updates the status in the ExternalUnixOSProcess).
For a simple command line program like this, just waiting a couple hundred milliseconds after you evaluate the command will allow time for the program to run and for Squeak to be informed of the outcome. So a retry loop with 200ms delay is probably fine in this case. Come to think of it, there's an OSProcess class>>waitForCommand: that will probably do exactly what you want in this case.
Dave
On Fri, Feb 08, 2013 at 10:17:29AM -0500, Louis LaBrunda wrote:
Hey Dave,
Thanks for the info. Looking at the code, I see that ExternalUnixOSProcess is returned from "OSProcess command:...". It has some nice methods for checking if the command finished ok.
I added some code to the method that calls irsend to check if the command is finished and if it was successful, looping on a small delay. If after awhile it has not finished successfully I try again for a few times and then give up. Since I'm sure the irsend command is fine, the errors should just be transient of the odd timing nature and retrying should work.
Lou
There are a couple of ways that a unix program can provide error output. The exit status is a simple way to communicate either success, or one of possibly several not so successful outcomes. This is useful for programs that are used in shell scripts for example. The other way is for the program to write error messages to its stderr output stream. This is common for programs for which which a user is expected to read the error messages.
I don't see anything in the man page for irsend that explains the exit status values, so it's a good bet that 0 means goodness and anything else means not so good. That might not be enough information to change the channel on your TV, but as you say I'd go ahead and try that first and see if it is good enough.
If you need to read the error output from the stdout stream (i.e. the error messages that would normally go to the console when you run the irsend program), you can do this by loading the CommandShell package from SqueakMap, then do something like this:
irsend := ProxyPipeline command: 'irsend foo bar baz'.
irsend last processProxy ==> an ExternalUnixOSProcess with pid 4157 on /usr/bin/irsend (complete, normal termination with status 1)
irsend errorUpToEnd ==> 'irsend: could not connect to socket irsend: No such file or directory '
But I think this is more complexity than you really need for this, so definitely you should first try just checking for exit status 0 and see if that does what you need.
Dave
On Thu, Feb 07, 2013 at 11:37:17AM -0500, Louis LaBrunda wrote:
Hi Dave,
Last night I left the RasPi running my Squeak code to change the channels. Most worked just fine. One of the calls to "OSProcess command:..." says it had a "... normal termination with status 1". It didn't change the channel. I will look through the code for what this and other status codes mean but can you tell me or point me to some docs.
I would like to test for errors and retry. For now I think I will just test for non zero.
Lou
On Tue, 5 Feb 2013 17:22:50 -0500, "David T. Lewis" lewis@mail.msen.com wrote:
On Tue, Feb 05, 2013 at 03:55:14PM -0500, Louis LaBrunda wrote:
On Mon, Feb 04, 2013 at 02:07:12PM -0500, Louis LaBrunda wrote: > Hi Guys, > > I would like to call irsend (a program that is part of lirc package) from > Squeak on the Raspberry Pi. Can anyone please post some sample code. >
I'm not familiar with it myself, but if irsend is just a simple command line program then I should think that you could call it easily using OSProcess.
Thanks for the reply. OSProcess sounds like it is what I need but I can't find any install instructions, probably because I don't know much about Squeak and Linux and I'm not sure where to look.
Open a SqueakMap Package Loader:
world -> open... -> SqueakMap Catalog
In the SqueakMap Package Loader, select package OSProcess. Expand that category and you will find entries for version 4.4.11 and for "head". Either one is fine, but I usually recommend just using the latest version, so select "head" and install it.
Assuming that you want to run irsend with some command line parameters, try inspecting the following expression (but use some command parameters that actually do something):
OSProcess command: 'irsend foo bar baz'
The result will be an instance of ExternalUnixOSProcess that is a proxy for the actual irsend program that you just executed. You can send it #succeeded to see if the command was evaluated without error.
I think this is sufficient for what you are trying to do, but you can also do fancier things with external programs if you load CommandShell (also on SqueakMap).
For additional background see http://wiki.squeak.org/squeak/708 and http://wiki.squeak.org/squeak/1914.
Follow up questions welcome :)
Dave
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hi Dave,
OSProcess class>>waitForCommand: (and what it calls) looks good but what if runState never gets to #complete? Would it loop forever or can't that happen. For now, I wait a second and after 50 tries give up and try the command again. I retry the command 50 times and then give up and reschedule the request for the next time.
If I could be sure of completion (or if you added a completion limit, not that I'm asking) it would simplify my code.
Lou
That sound right to me. The exit status of the program is set some time after it exits (by means of a unix signal triggering a Smalltalk semaphore which wakes up a process that updates the status in the ExternalUnixOSProcess).
For a simple command line program like this, just waiting a couple hundred milliseconds after you evaluate the command will allow time for the program to run and for Squeak to be informed of the outcome. So a retry loop with 200ms delay is probably fine in this case. Come to think of it, there's an OSProcess class>>waitForCommand: that will probably do exactly what you want in this case.
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On Fri, Feb 08, 2013 at 12:00:06PM -0500, Louis LaBrunda wrote:
Hi Dave,
OSProcess class>>waitForCommand: (and what it calls) looks good but what if runState never gets to #complete? Would it loop forever or can't that happen. For now, I wait a second and after 50 tries give up and try the command again. I retry the command 50 times and then give up and reschedule the request for the next time.
I wouldn't say that it can't happen, but the completion notification is fairly reliable and I doubt there is any way for your irsend command to not exit. Since you are just running a simple command, I don't think you have anything to worry about, it should just work.
Dave
If I could be sure of completion (or if you added a completion limit, not that I'm asking) it would simplify my code.
Lou
That sound right to me. The exit status of the program is set some time after it exits (by means of a unix signal triggering a Smalltalk semaphore which wakes up a process that updates the status in the ExternalUnixOSProcess).
For a simple command line program like this, just waiting a couple hundred milliseconds after you evaluate the command will allow time for the program to run and for Squeak to be informed of the outcome. So a retry loop with 200ms delay is probably fine in this case. Come to think of it, there's an OSProcess class>>waitForCommand: that will probably do exactly what you want in this case.
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hi Dave,
I have written two classes to manage a bunch of irsend command calls (to change the cable box channel) at a given time and reschedule it for another day. I have two questions.
1) Where would be a good place in Squeak to document how each class works? The classes are fairly simple. One class holds the information for what command should be run and when. The other class manages a group of similar (by programmer choice) commands and run then at the proper time. How they work together requires some documenting.
2) It seems to me the two classes I have written would fit nicely into your OSProcess... group of classes. I would like to make these classes available under the MIT licence and I hoping you will accept them into the fold and distribute them with your package. I'm not familiar enough with Squeak to even know where to start to distribute them on my own.
Lou ----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On 2013-02-18, at 18:09, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hi Dave,
I have written two classes to manage a bunch of irsend command calls (to change the cable box channel) at a given time and reschedule it for another day. I have two questions.
- Where would be a good place in Squeak to document how each class works?
The classes are fairly simple. One class holds the information for what command should be run and when. The other class manages a group of similar (by programmer choice) commands and run then at the proper time. How they work together requires some documenting.
The class comment.
- It seems to me the two classes I have written would fit nicely into your
OSProcess... group of classes. I would like to make these classes available under the MIT licence and I hoping you will accept them into the fold and distribute them with your package. I'm not familiar enough with Squeak to even know where to start to distribute them on my own.
Certainly calling out to a special-purpose tool does not belong in the generic OSProcess package.
Besides, why did you make it so complicated in the first place? Why not connect to LIRC's TCP socket directly? irsend is a trivial little program that does nothing more than forward its command line arguments to the LIRC demon. Then you wouldn't even need OSProcess. The protocol is straight-forward:
http://www.lirc.org/html/technical.html#applications
- Bert -
Hi Bert,
Thanks for the reply.
On 2013-02-18, at 18:09, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hi Dave,
I have written two classes to manage a bunch of irsend command calls (to change the cable box channel) at a given time and reschedule it for another day. I have two questions.
- Where would be a good place in Squeak to document how each class works?
The classes are fairly simple. One class holds the information for what command should be run and when. The other class manages a group of similar (by programmer choice) commands and run then at the proper time. How they work together requires some documenting.
The class comment.
I thought about the class comment but it looks like it takes only one line. Unless I'm looking in the wrong place or at it wrong?
- It seems to me the two classes I have written would fit nicely into your
OSProcess... group of classes. I would like to make these classes available under the MIT licence and I hoping you will accept them into the fold and distribute them with your package. I'm not familiar enough with Squeak to even know where to start to distribute them on my own.
Certainly calling out to a special-purpose tool does not belong in the generic OSProcess package.
It is not a special-purpose tool. There is no mention of LIRC or irsend in either class. The classes run and schedule any command that Dave's OSProcess>command: can handle. It does things like run the command every Tuesday at 20:00 hours.
Besides, why did you make it so complicated in the first place? Why not connect to LIRC's TCP socket directly? irsend is a trivial little program that does nothing more than forward its command line arguments to the LIRC demon. Then you wouldn't even need OSProcess. The protocol is straight-forward:
I will take a look at it. I don't really know much about LIRC and got on the to WinLIRC>transmit.exe and LIRC>irsend early on and never got much more involved in how LIRC works. It would be nice to do more than irsend does so controlling LIRC via a socket could be nice. I would still need the scheduling code but then it would be special purpose to LIRC. But still something to look into.
Lou ----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On 2013-02-18, at 19:28, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hi Bert,
Thanks for the reply.
On 2013-02-18, at 18:09, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hi Dave,
I have written two classes to manage a bunch of irsend command calls (to change the cable box channel) at a given time and reschedule it for another day. I have two questions.
- Where would be a good place in Squeak to document how each class works?
The classes are fairly simple. One class holds the information for what command should be run and when. The other class manages a group of similar (by programmer choice) commands and run then at the proper time. How they work together requires some documenting.
The class comment.
I thought about the class comment but it looks like it takes only one line. Unless I'm looking in the wrong place or at it wrong?
Click the the question mark button between instance and class in the system browser.
The one line is just an annotation for convenience.
- It seems to me the two classes I have written would fit nicely into your
OSProcess... group of classes. I would like to make these classes available under the MIT licence and I hoping you will accept them into the fold and distribute them with your package. I'm not familiar enough with Squeak to even know where to start to distribute them on my own.
Certainly calling out to a special-purpose tool does not belong in the generic OSProcess package.
It is not a special-purpose tool. There is no mention of LIRC or irsend in either class. The classes run and schedule any command that Dave's OSProcess>command: can handle. It does things like run the command every Tuesday at 20:00 hours.
It's up to Dave then. Still seems rather special-purpose to me ;)
- Bert -
Besides, why did you make it so complicated in the first place? Why not connect to LIRC's TCP socket directly? irsend is a trivial little program that does nothing more than forward its command line arguments to the LIRC demon. Then you wouldn't even need OSProcess. The protocol is straight-forward:
I will take a look at it. I don't really know much about LIRC and got on the to WinLIRC>transmit.exe and LIRC>irsend early on and never got much more involved in how LIRC works. It would be nice to do more than irsend does so controlling LIRC via a socket could be nice. I would still need the scheduling code but then it would be special purpose to LIRC. But still something to look into.
Lou
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On Mon, Feb 18, 2013 at 07:32:29PM +0100, Bert Freudenberg wrote:
On 2013-02-18, at 19:28, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hi Bert,
Thanks for the reply.
On 2013-02-18, at 18:09, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hi Dave,
I have written two classes to manage a bunch of irsend command calls (to change the cable box channel) at a given time and reschedule it for another day. I have two questions.
- Where would be a good place in Squeak to document how each class works?
The classes are fairly simple. One class holds the information for what command should be run and when. The other class manages a group of similar (by programmer choice) commands and run then at the proper time. How they work together requires some documenting.
The class comment.
I thought about the class comment but it looks like it takes only one line. Unless I'm looking in the wrong place or at it wrong?
Click the the question mark button between instance and class in the system browser.
The one line is just an annotation for convenience.
- It seems to me the two classes I have written would fit nicely into your
OSProcess... group of classes. I would like to make these classes available under the MIT licence and I hoping you will accept them into the fold and distribute them with your package. I'm not familiar enough with Squeak to even know where to start to distribute them on my own.
Certainly calling out to a special-purpose tool does not belong in the generic OSProcess package.
It is not a special-purpose tool. There is no mention of LIRC or irsend in either class. The classes run and schedule any command that Dave's OSProcess>command: can handle. It does things like run the command every Tuesday at 20:00 hours.
It's up to Dave then. Still seems rather special-purpose to me ;)
Well sure, by all means, please send a copy :) If it's not too big you can just post it to the list here.
If it looks like a good fit, we can put it in OSProcess. There is also nothing wrong with you just making a small project on SqueakSource (or whatever is replacing it, I'm not sure I've figured that out). You could just say your project depends on OSProcess, and that would be fine too. That way you could enter it on SqueakMap (the package catalog) so that someone looking for irsend could spot it more easily.
Dave
On Mon, 18 Feb 2013 15:16:21 -0500, "David T. Lewis" lewis@mail.msen.com wrote:
On Mon, Feb 18, 2013 at 07:32:29PM +0100, Bert Freudenberg wrote:
On 2013-02-18, at 19:28, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hi Bert,
Thanks for the reply.
On 2013-02-18, at 18:09, Louis LaBrunda Lou@Keystone-Software.com wrote:
Hi Dave,
I have written two classes to manage a bunch of irsend command calls (to change the cable box channel) at a given time and reschedule it for another day. I have two questions.
- Where would be a good place in Squeak to document how each class works?
The classes are fairly simple. One class holds the information for what command should be run and when. The other class manages a group of similar (by programmer choice) commands and run then at the proper time. How they work together requires some documenting.
The class comment.
I thought about the class comment but it looks like it takes only one line. Unless I'm looking in the wrong place or at it wrong?
Click the the question mark button between instance and class in the system browser.
The one line is just an annotation for convenience.
- It seems to me the two classes I have written would fit nicely into your
OSProcess... group of classes. I would like to make these classes available under the MIT licence and I hoping you will accept them into the fold and distribute them with your package. I'm not familiar enough with Squeak to even know where to start to distribute them on my own.
Certainly calling out to a special-purpose tool does not belong in the generic OSProcess package.
It is not a special-purpose tool. There is no mention of LIRC or irsend in either class. The classes run and schedule any command that Dave's OSProcess>command: can handle. It does things like run the command every Tuesday at 20:00 hours.
It's up to Dave then. Still seems rather special-purpose to me ;)
Well sure, by all means, please send a copy :) If it's not too big you can just post it to the list here.
If it looks like a good fit, we can put it in OSProcess. There is also nothing wrong with you just making a small project on SqueakSource (or whatever is replacing it, I'm not sure I've figured that out). You could just say your project depends on OSProcess, and that would be fine too. That way you could enter it on SqueakMap (the package catalog) so that someone looking for irsend could spot it more easily. Dave
Now that Bert has clued me in on how to use the class comment for some documentation, I will spend some time doing that. I have some less fun stuff to deal with, so it may take me a little while.
Again, the two classes are really about scheduling calls to OSProcess>command: and not the command being called. I just needed them to call irsend. Anyway, I will post the code when I can (after I write some class comments) and you can decide if it is a good fit. Thanks for all the help.
Lou ----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hey Dave,
I'm close to being ready to give you my code but first one last question (hopefully). There are two classes:
ScheduledOSCall -- Instances of this class hold the command to be run and the time and frequency to run it.
ScheduledOSCalls -- Instances of this class hold groups of instances of ScheduledOSCall.
I'm not pleased with these names, especially ScheduledOSCalls because it's name only vaguely refers to its function. I would love a better name for ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please give it some thought and help me out with better names.
Lou ----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote:
Hey Dave,
I'm close to being ready to give you my code but first one last question (hopefully). There are two classes:
ScheduledOSCall -- Instances of this class hold the command to be run and the time and frequency to run it.
ScheduledOSCalls -- Instances of this class hold groups of instances of ScheduledOSCall.
I'm not pleased with these names, especially ScheduledOSCalls because it's name only vaguely refers to its function. I would love a better name for ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please give it some thought and help me out with better names.
Hi Lou,
My thought for naming would be to think in terms of the responsibilities of the ScheduledOSCalls class. I expect that it is more that just a collection of ScheduledOSCall instances (otherwise you might have just used an ordinary collection).
I would guess that in addition to knowing about the instances of ScheduledOSCall, it might have responsibities along the lines of one of these two possibilities:
1) Using the collection of ScheduledOSCall instances, tell me the next OS command to be evaluated, and what duration to wait before doing so. Or you might have it wait until the next OS command is due to be run (blocking on a Semaphore or Delay), then answer the next OS command to be evaluated. With these kinds responsibilities, the class would behave like a stream of next-up commands to be evaluated, so you might give it a name such as ScheduledJobQueue or OSCallQueue.
2) Alternatively, you might have given your ScheduledOSCalls class the responsibility for actually executing the various commands at their scheduled times. It would know about the instances of ScheduledOSCall, and it would be resposible for executing the scheduled OS commands at the appropriate times. In that case, you might choose to give it a name such as OSCallScheduler.
HTH, Dave
Hi Dave,
Thanks for the reply. Your second assumption is closest. Instances of ScheduledOSCalls manage instances of ScheduledOSCall, determines when the call should be made and then tells ScheduledOSCall to make the call because it has the command, can rescheduled itself and save the result. So, I think I'm going to go with ScheduledOSCallMgr as its new name.
I am a little busy at the moment but I should post the code soon. Is a zip of a fileout of both classes okay?
Lou
On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote:
Hey Dave,
I'm close to being ready to give you my code but first one last question (hopefully). There are two classes:
ScheduledOSCall -- Instances of this class hold the command to be run and the time and frequency to run it.
ScheduledOSCalls -- Instances of this class hold groups of instances of ScheduledOSCall.
I'm not pleased with these names, especially ScheduledOSCalls because it's name only vaguely refers to its function. I would love a better name for ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please give it some thought and help me out with better names.
Hi Lou,
My thought for naming would be to think in terms of the responsibilities of the ScheduledOSCalls class. I expect that it is more that just a collection of ScheduledOSCall instances (otherwise you might have just used an ordinary collection).
I would guess that in addition to knowing about the instances of ScheduledOSCall, it might have responsibities along the lines of one of these two possibilities:
- Using the collection of ScheduledOSCall instances, tell me the next OS
command to be evaluated, and what duration to wait before doing so. Or you might have it wait until the next OS command is due to be run (blocking on a Semaphore or Delay), then answer the next OS command to be evaluated. With these kinds responsibilities, the class would behave like a stream of next-up commands to be evaluated, so you might give it a name such as ScheduledJobQueue or OSCallQueue.
- Alternatively, you might have given your ScheduledOSCalls class the
responsibility for actually executing the various commands at their scheduled times. It would know about the instances of ScheduledOSCall, and it would be resposible for executing the scheduled OS commands at the appropriate times. In that case, you might choose to give it a name such as OSCallScheduler.
HTH, Dave
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
On Fri, Feb 22, 2013 at 09:59:38AM -0500, Louis LaBrunda wrote:
Hi Dave,
Thanks for the reply. Your second assumption is closest. Instances of ScheduledOSCalls manage instances of ScheduledOSCall, determines when the call should be made and then tells ScheduledOSCall to make the call because it has the command, can rescheduled itself and save the result. So, I think I'm going to go with ScheduledOSCallMgr as its new name.
Perfect :)
I am a little busy at the moment but I should post the code soon. Is a zip of a fileout of both classes okay?
No rush of course. Zipped fileouts are fine, or you can put them in a changeset if you like, which has the advantage that you can add a changeset preamble that would identify you as the author and let you provide a paragraph of text explaining what your program is.
Tip: Do the fileouts first, then in a Dual Changes Sorter, right-click and "make new change set...". Give the change set a name such as "ScheduledOSCalls". This will be the active change set for your project. Now file in your two saved fileouts, and these will now be the "new" changes in your new change set. Add a preamble to the change set (right click, "add preamble"), then save the change set as a file (right click, "file out"). This is the old school way to create a change set for distribution. Monticello has more or less taken over for these things nowadays, but in a case like this it's hard to beat a good old fashioned change set :)
Lou
On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote:
Hey Dave,
I'm close to being ready to give you my code but first one last question (hopefully). There are two classes:
ScheduledOSCall -- Instances of this class hold the command to be run and the time and frequency to run it.
ScheduledOSCalls -- Instances of this class hold groups of instances of ScheduledOSCall.
I'm not pleased with these names, especially ScheduledOSCalls because it's name only vaguely refers to its function. I would love a better name for ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please give it some thought and help me out with better names.
Hi Lou,
My thought for naming would be to think in terms of the responsibilities of the ScheduledOSCalls class. I expect that it is more that just a collection of ScheduledOSCall instances (otherwise you might have just used an ordinary collection).
I would guess that in addition to knowing about the instances of ScheduledOSCall, it might have responsibities along the lines of one of these two possibilities:
- Using the collection of ScheduledOSCall instances, tell me the next OS
command to be evaluated, and what duration to wait before doing so. Or you might have it wait until the next OS command is due to be run (blocking on a Semaphore or Delay), then answer the next OS command to be evaluated. With these kinds responsibilities, the class would behave like a stream of next-up commands to be evaluated, so you might give it a name such as ScheduledJobQueue or OSCallQueue.
- Alternatively, you might have given your ScheduledOSCalls class the
responsibility for actually executing the various commands at their scheduled times. It would know about the instances of ScheduledOSCall, and it would be resposible for executing the scheduled OS commands at the appropriate times. In that case, you might choose to give it a name such as OSCallScheduler.
HTH, Dave
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hey Dave,
Attached is a zip of the change set. I think I built it okay.
The class comments tell you how to use the classes. The ScheduledOSCallMgr class comment give an overview of how both classes work. There is an example based upon irsend of LIRC. I realize it is not the best of examples (because few people will have or know how to use LIRC) but if one substitutes a different command all of my code (and yours) should be fine.
Many thanks for all the help. Please let me know if anything needs fixing. I'm good with the MIT licence but haven't stated that anywhere but here. Feel free to add it to the change set (preamble?) by hand if you like.
Lou
On Fri, Feb 22, 2013 at 09:59:38AM -0500, Louis LaBrunda wrote:
Hi Dave,
Thanks for the reply. Your second assumption is closest. Instances of ScheduledOSCalls manage instances of ScheduledOSCall, determines when the call should be made and then tells ScheduledOSCall to make the call because it has the command, can rescheduled itself and save the result. So, I think I'm going to go with ScheduledOSCallMgr as its new name.
Perfect :)
I am a little busy at the moment but I should post the code soon. Is a zip of a fileout of both classes okay?
No rush of course. Zipped fileouts are fine, or you can put them in a changeset if you like, which has the advantage that you can add a changeset preamble that would identify you as the author and let you provide a paragraph of text explaining what your program is.
Tip: Do the fileouts first, then in a Dual Changes Sorter, right-click and "make new change set...". Give the change set a name such as "ScheduledOSCalls". This will be the active change set for your project. Now file in your two saved fileouts, and these will now be the "new" changes in your new change set. Add a preamble to the change set (right click, "add preamble"), then save the change set as a file (right click, "file out"). This is the old school way to create a change set for distribution. Monticello has more or less taken over for these things nowadays, but in a case like this it's hard to beat a good old fashioned change set :)
Lou
On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote:
Hey Dave,
I'm close to being ready to give you my code but first one last question (hopefully). There are two classes:
ScheduledOSCall -- Instances of this class hold the command to be run and the time and frequency to run it.
ScheduledOSCalls -- Instances of this class hold groups of instances of ScheduledOSCall.
I'm not pleased with these names, especially ScheduledOSCalls because it's name only vaguely refers to its function. I would love a better name for ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please give it some thought and help me out with better names.
Hi Lou,
My thought for naming would be to think in terms of the responsibilities of the ScheduledOSCalls class. I expect that it is more that just a collection of ScheduledOSCall instances (otherwise you might have just used an ordinary collection).
I would guess that in addition to knowing about the instances of ScheduledOSCall, it might have responsibities along the lines of one of these two possibilities:
- Using the collection of ScheduledOSCall instances, tell me the next OS
command to be evaluated, and what duration to wait before doing so. Or you might have it wait until the next OS command is due to be run (blocking on a Semaphore or Delay), then answer the next OS command to be evaluated. With these kinds responsibilities, the class would behave like a stream of next-up commands to be evaluated, so you might give it a name such as ScheduledJobQueue or OSCallQueue.
- Alternatively, you might have given your ScheduledOSCalls class the
responsibility for actually executing the various commands at their scheduled times. It would know about the instances of ScheduledOSCall, and it would be resposible for executing the scheduled OS commands at the appropriate times. In that case, you might choose to give it a name such as OSCallScheduler.
HTH, Dave
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Thanks Lou,
I am having trouble loading the change set. I think the change set is missing the class definitions, so the tip I gave you for how to create the change set was probably not such a great idea, sorry about that. Can you please send the fileouts of the two classes? (As you originally intended to do before I tried to be helpful ;)
Thanks! Dave
On Mon, Feb 25, 2013 at 04:16:56PM -0500, Louis LaBrunda wrote:
Hey Dave,
Attached is a zip of the change set. I think I built it okay.
The class comments tell you how to use the classes. The ScheduledOSCallMgr class comment give an overview of how both classes work. There is an example based upon irsend of LIRC. I realize it is not the best of examples (because few people will have or know how to use LIRC) but if one substitutes a different command all of my code (and yours) should be fine.
Many thanks for all the help. Please let me know if anything needs fixing. I'm good with the MIT licence but haven't stated that anywhere but here. Feel free to add it to the change set (preamble?) by hand if you like.
Lou
On Fri, Feb 22, 2013 at 09:59:38AM -0500, Louis LaBrunda wrote:
Hi Dave,
Thanks for the reply. Your second assumption is closest. Instances of ScheduledOSCalls manage instances of ScheduledOSCall, determines when the call should be made and then tells ScheduledOSCall to make the call because it has the command, can rescheduled itself and save the result. So, I think I'm going to go with ScheduledOSCallMgr as its new name.
Perfect :)
I am a little busy at the moment but I should post the code soon. Is a zip of a fileout of both classes okay?
No rush of course. Zipped fileouts are fine, or you can put them in a changeset if you like, which has the advantage that you can add a changeset preamble that would identify you as the author and let you provide a paragraph of text explaining what your program is.
Tip: Do the fileouts first, then in a Dual Changes Sorter, right-click and "make new change set...". Give the change set a name such as "ScheduledOSCalls". This will be the active change set for your project. Now file in your two saved fileouts, and these will now be the "new" changes in your new change set. Add a preamble to the change set (right click, "add preamble"), then save the change set as a file (right click, "file out"). This is the old school way to create a change set for distribution. Monticello has more or less taken over for these things nowadays, but in a case like this it's hard to beat a good old fashioned change set :)
Lou
On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote:
Hey Dave,
I'm close to being ready to give you my code but first one last question (hopefully). There are two classes:
ScheduledOSCall -- Instances of this class hold the command to be run and the time and frequency to run it.
ScheduledOSCalls -- Instances of this class hold groups of instances of ScheduledOSCall.
I'm not pleased with these names, especially ScheduledOSCalls because it's name only vaguely refers to its function. I would love a better name for ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please give it some thought and help me out with better names.
Hi Lou,
My thought for naming would be to think in terms of the responsibilities of the ScheduledOSCalls class. I expect that it is more that just a collection of ScheduledOSCall instances (otherwise you might have just used an ordinary collection).
I would guess that in addition to knowing about the instances of ScheduledOSCall, it might have responsibities along the lines of one of these two possibilities:
- Using the collection of ScheduledOSCall instances, tell me the next OS
command to be evaluated, and what duration to wait before doing so. Or you might have it wait until the next OS command is due to be run (blocking on a Semaphore or Delay), then answer the next OS command to be evaluated. With these kinds responsibilities, the class would behave like a stream of next-up commands to be evaluated, so you might give it a name such as ScheduledJobQueue or OSCallQueue.
- Alternatively, you might have given your ScheduledOSCalls class the
responsibility for actually executing the various commands at their scheduled times. It would know about the instances of ScheduledOSCall, and it would be resposible for executing the scheduled OS commands at the appropriate times. In that case, you might choose to give it a name such as OSCallScheduler.
HTH, Dave
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hi Dave,
I think I have fixed the change set. This time I removed my classes before creating the change set. Then proceeded as you said.
The first change set did contain the classes but must have assumed they were in the image (which they were). Instead of first defining the classes (it assumed they were there) and called #commentStamp:prior: this went boom for you because the classes were not in your image.
Just in case, the new zip file has both the change set and the file outs.
Lou
Thanks Lou, I am having trouble loading the change set. I think the change set is missing the class definitions, so the tip I gave you for how to create the change set was probably not such a great idea, sorry about that. Can you please send the fileouts of the two classes? (As you originally intended to do before I tried to be helpful ;)
Thanks! Dave
On Mon, Feb 25, 2013 at 04:16:56PM -0500, Louis LaBrunda wrote:
Hey Dave,
Attached is a zip of the change set. I think I built it okay.
The class comments tell you how to use the classes. The ScheduledOSCallMgr class comment give an overview of how both classes work. There is an example based upon irsend of LIRC. I realize it is not the best of examples (because few people will have or know how to use LIRC) but if one substitutes a different command all of my code (and yours) should be fine.
Many thanks for all the help. Please let me know if anything needs fixing. I'm good with the MIT licence but haven't stated that anywhere but here. Feel free to add it to the change set (preamble?) by hand if you like.
Lou
On Fri, Feb 22, 2013 at 09:59:38AM -0500, Louis LaBrunda wrote:
Hi Dave,
Thanks for the reply. Your second assumption is closest. Instances of ScheduledOSCalls manage instances of ScheduledOSCall, determines when the call should be made and then tells ScheduledOSCall to make the call because it has the command, can rescheduled itself and save the result. So, I think I'm going to go with ScheduledOSCallMgr as its new name.
Perfect :)
I am a little busy at the moment but I should post the code soon. Is a zip of a fileout of both classes okay?
No rush of course. Zipped fileouts are fine, or you can put them in a changeset if you like, which has the advantage that you can add a changeset preamble that would identify you as the author and let you provide a paragraph of text explaining what your program is.
Tip: Do the fileouts first, then in a Dual Changes Sorter, right-click and "make new change set...". Give the change set a name such as "ScheduledOSCalls". This will be the active change set for your project. Now file in your two saved fileouts, and these will now be the "new" changes in your new change set. Add a preamble to the change set (right click, "add preamble"), then save the change set as a file (right click, "file out"). This is the old school way to create a change set for distribution. Monticello has more or less taken over for these things nowadays, but in a case like this it's hard to beat a good old fashioned change set :)
Lou
On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote:
Hey Dave,
I'm close to being ready to give you my code but first one last question (hopefully). There are two classes:
ScheduledOSCall -- Instances of this class hold the command to be run and the time and frequency to run it.
ScheduledOSCalls -- Instances of this class hold groups of instances of ScheduledOSCall.
I'm not pleased with these names, especially ScheduledOSCalls because it's name only vaguely refers to its function. I would love a better name for ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please give it some thought and help me out with better names.
Hi Lou,
My thought for naming would be to think in terms of the responsibilities of the ScheduledOSCalls class. I expect that it is more that just a collection of ScheduledOSCall instances (otherwise you might have just used an ordinary collection).
I would guess that in addition to knowing about the instances of ScheduledOSCall, it might have responsibities along the lines of one of these two possibilities:
- Using the collection of ScheduledOSCall instances, tell me the next OS
command to be evaluated, and what duration to wait before doing so. Or you might have it wait until the next OS command is due to be run (blocking on a Semaphore or Delay), then answer the next OS command to be evaluated. With these kinds responsibilities, the class would behave like a stream of next-up commands to be evaluated, so you might give it a name such as ScheduledJobQueue or OSCallQueue.
- Alternatively, you might have given your ScheduledOSCalls class the
responsibility for actually executing the various commands at their scheduled times. It would know about the instances of ScheduledOSCall, and it would be resposible for executing the scheduled OS commands at the appropriate times. In that case, you might choose to give it a name such as OSCallScheduler.
HTH, Dave
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Got it, thanks.
I have uploaded your ScheduledOSCalls package to the main OSProcess repository at http://www.squeaksource.com/OSProcess. Your package can now be loaded directly from the OSProcess repository by selecting the ScheduledOSCalls package. Note that someone who loads OSProcess will not automatically get ScheduledOSCalls, because it is categorized with a different package name (which is exactly as it should be).
If you create an account for yourself on www.squeaksource.com I will add you as a developer on OSProcess so that you can do future updates yourself. Or better yet, create an account on the new SqueakSource3 repository at http://ss3.gemstone.com/ss, and we can copy your package to that server. I would recommend doing this because A) the old squeaksource.com server is going away, and I will need to migrate OSProcess and other packages pretty soon anyway, and B) you might as well have your own account on the SS3 server so you can take credit for your work :)
Another good thing to do is register your package on SqueakMap (the "application store" for Squeak) so that people can easily find it and see a description of what it does. But save that exercise for another day, after you have opened your account on squeaksource and/or SS3.
Dave
On Tue, Feb 26, 2013 at 02:17:57PM -0500, Louis LaBrunda wrote:
Hi Dave,
I think I have fixed the change set. This time I removed my classes before creating the change set. Then proceeded as you said.
The first change set did contain the classes but must have assumed they were in the image (which they were). Instead of first defining the classes (it assumed they were there) and called #commentStamp:prior: this went boom for you because the classes were not in your image.
Just in case, the new zip file has both the change set and the file outs.
Lou
Thanks Lou, I am having trouble loading the change set. I think the change set is missing the class definitions, so the tip I gave you for how to create the change set was probably not such a great idea, sorry about that. Can you please send the fileouts of the two classes? (As you originally intended to do before I tried to be helpful ;)
Thanks! Dave
On Mon, Feb 25, 2013 at 04:16:56PM -0500, Louis LaBrunda wrote:
Hey Dave,
Attached is a zip of the change set. I think I built it okay.
The class comments tell you how to use the classes. The ScheduledOSCallMgr class comment give an overview of how both classes work. There is an example based upon irsend of LIRC. I realize it is not the best of examples (because few people will have or know how to use LIRC) but if one substitutes a different command all of my code (and yours) should be fine.
Many thanks for all the help. Please let me know if anything needs fixing. I'm good with the MIT licence but haven't stated that anywhere but here. Feel free to add it to the change set (preamble?) by hand if you like.
Lou
On Fri, Feb 22, 2013 at 09:59:38AM -0500, Louis LaBrunda wrote:
Hi Dave,
Thanks for the reply. Your second assumption is closest. Instances of ScheduledOSCalls manage instances of ScheduledOSCall, determines when the call should be made and then tells ScheduledOSCall to make the call because it has the command, can rescheduled itself and save the result. So, I think I'm going to go with ScheduledOSCallMgr as its new name.
Perfect :)
I am a little busy at the moment but I should post the code soon. Is a zip of a fileout of both classes okay?
No rush of course. Zipped fileouts are fine, or you can put them in a changeset if you like, which has the advantage that you can add a changeset preamble that would identify you as the author and let you provide a paragraph of text explaining what your program is.
Tip: Do the fileouts first, then in a Dual Changes Sorter, right-click and "make new change set...". Give the change set a name such as "ScheduledOSCalls". This will be the active change set for your project. Now file in your two saved fileouts, and these will now be the "new" changes in your new change set. Add a preamble to the change set (right click, "add preamble"), then save the change set as a file (right click, "file out"). This is the old school way to create a change set for distribution. Monticello has more or less taken over for these things nowadays, but in a case like this it's hard to beat a good old fashioned change set :)
Lou
On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote: > Hey Dave, > > I'm close to being ready to give you my code but first one last question > (hopefully). There are two classes: > > ScheduledOSCall -- Instances of this class hold the command to be run and > the time and frequency to run it. > > ScheduledOSCalls -- Instances of this class hold groups of instances of > ScheduledOSCall. > > I'm not pleased with these names, especially ScheduledOSCalls because it's > name only vaguely refers to its function. I would love a better name for > ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please > give it some thought and help me out with better names.
Hi Lou,
My thought for naming would be to think in terms of the responsibilities of the ScheduledOSCalls class. I expect that it is more that just a collection of ScheduledOSCall instances (otherwise you might have just used an ordinary collection).
I would guess that in addition to knowing about the instances of ScheduledOSCall, it might have responsibities along the lines of one of these two possibilities:
- Using the collection of ScheduledOSCall instances, tell me the next OS
command to be evaluated, and what duration to wait before doing so. Or you might have it wait until the next OS command is due to be run (blocking on a Semaphore or Delay), then answer the next OS command to be evaluated. With these kinds responsibilities, the class would behave like a stream of next-up commands to be evaluated, so you might give it a name such as ScheduledJobQueue or OSCallQueue.
- Alternatively, you might have given your ScheduledOSCalls class the
responsibility for actually executing the various commands at their scheduled times. It would know about the instances of ScheduledOSCall, and it would be resposible for executing the scheduled OS commands at the appropriate times. In that case, you might choose to give it a name such as OSCallScheduler.
HTH, Dave
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Dave, thanks for all the help. I'm not sure how much time I will have to work with Squeak but if it turns out that I do have more to contribute I will follow your suggestions.
Lou
On Tue, 26 Feb 2013 15:49:28 -0500, "David T. Lewis" lewis@mail.msen.com wrote:
Got it, thanks.
I have uploaded your ScheduledOSCalls package to the main OSProcess repository at http://www.squeaksource.com/OSProcess. Your package can now be loaded directly from the OSProcess repository by selecting the ScheduledOSCalls package. Note that someone who loads OSProcess will not automatically get ScheduledOSCalls, because it is categorized with a different package name (which is exactly as it should be).
If you create an account for yourself on www.squeaksource.com I will add you as a developer on OSProcess so that you can do future updates yourself. Or better yet, create an account on the new SqueakSource3 repository at http://ss3.gemstone.com/ss, and we can copy your package to that server. I would recommend doing this because A) the old squeaksource.com server is going away, and I will need to migrate OSProcess and other packages pretty soon anyway, and B) you might as well have your own account on the SS3 server so you can take credit for your work :)
Another good thing to do is register your package on SqueakMap (the "application store" for Squeak) so that people can easily find it and see a description of what it does. But save that exercise for another day, after you have opened your account on squeaksource and/or SS3.
Dave
On Tue, Feb 26, 2013 at 02:17:57PM -0500, Louis LaBrunda wrote:
Hi Dave,
I think I have fixed the change set. This time I removed my classes before creating the change set. Then proceeded as you said.
The first change set did contain the classes but must have assumed they were in the image (which they were). Instead of first defining the classes (it assumed they were there) and called #commentStamp:prior: this went boom for you because the classes were not in your image.
Just in case, the new zip file has both the change set and the file outs.
Lou
Thanks Lou, I am having trouble loading the change set. I think the change set is missing the class definitions, so the tip I gave you for how to create the change set was probably not such a great idea, sorry about that. Can you please send the fileouts of the two classes? (As you originally intended to do before I tried to be helpful ;)
Thanks! Dave
On Mon, Feb 25, 2013 at 04:16:56PM -0500, Louis LaBrunda wrote:
Hey Dave,
Attached is a zip of the change set. I think I built it okay.
The class comments tell you how to use the classes. The ScheduledOSCallMgr class comment give an overview of how both classes work. There is an example based upon irsend of LIRC. I realize it is not the best of examples (because few people will have or know how to use LIRC) but if one substitutes a different command all of my code (and yours) should be fine.
Many thanks for all the help. Please let me know if anything needs fixing. I'm good with the MIT licence but haven't stated that anywhere but here. Feel free to add it to the change set (preamble?) by hand if you like.
Lou
On Fri, Feb 22, 2013 at 09:59:38AM -0500, Louis LaBrunda wrote:
Hi Dave,
Thanks for the reply. Your second assumption is closest. Instances of ScheduledOSCalls manage instances of ScheduledOSCall, determines when the call should be made and then tells ScheduledOSCall to make the call because it has the command, can rescheduled itself and save the result. So, I think I'm going to go with ScheduledOSCallMgr as its new name.
Perfect :)
I am a little busy at the moment but I should post the code soon. Is a zip of a fileout of both classes okay?
No rush of course. Zipped fileouts are fine, or you can put them in a changeset if you like, which has the advantage that you can add a changeset preamble that would identify you as the author and let you provide a paragraph of text explaining what your program is.
Tip: Do the fileouts first, then in a Dual Changes Sorter, right-click and "make new change set...". Give the change set a name such as "ScheduledOSCalls". This will be the active change set for your project. Now file in your two saved fileouts, and these will now be the "new" changes in your new change set. Add a preamble to the change set (right click, "add preamble"), then save the change set as a file (right click, "file out"). This is the old school way to create a change set for distribution. Monticello has more or less taken over for these things nowadays, but in a case like this it's hard to beat a good old fashioned change set :)
Lou
>On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote: >> Hey Dave, >> >> I'm close to being ready to give you my code but first one last question >> (hopefully). There are two classes: >> >> ScheduledOSCall -- Instances of this class hold the command to be run and >> the time and frequency to run it. >> >> ScheduledOSCalls -- Instances of this class hold groups of instances of >> ScheduledOSCall. >> >> I'm not pleased with these names, especially ScheduledOSCalls because it's >> name only vaguely refers to its function. I would love a better name for >> ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please >> give it some thought and help me out with better names. > >Hi Lou, > >My thought for naming would be to think in terms of the responsibilities of >the ScheduledOSCalls class. I expect that it is more that just a collection >of ScheduledOSCall instances (otherwise you might have just used an ordinary >collection). > >I would guess that in addition to knowing about the instances of ScheduledOSCall, >it might have responsibities along the lines of one of these two possibilities: > >1) Using the collection of ScheduledOSCall instances, tell me the next OS >command to be evaluated, and what duration to wait before doing so. Or you >might have it wait until the next OS command is due to be run (blocking on >a Semaphore or Delay), then answer the next OS command to be evaluated. >With these kinds responsibilities, the class would behave like a stream of >next-up commands to be evaluated, so you might give it a name such as >ScheduledJobQueue or OSCallQueue. > >2) Alternatively, you might have given your ScheduledOSCalls class the >responsibility for actually executing the various commands at their scheduled >times. It would know about the instances of ScheduledOSCall, and it would be >resposible for executing the scheduled OS commands at the appropriate times. >In that case, you might choose to give it a name such as OSCallScheduler. > >HTH, >Dave >
>
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hi Dave,
I created a SqueakSource account for myself, I'm not sure why as you said it is going away. I also created an SS3 account and uploaded a slighter newer version of my code (if I did it correctly).
I added you to the account or package as an administrator (I hope that's okay).
Lou
Got it, thanks. I have uploaded your ScheduledOSCalls package to the main OSProcess repository at http://www.squeaksource.com/OSProcess. Your package can now be loaded directly from the OSProcess repository by selecting the ScheduledOSCalls package. Note that someone who loads OSProcess will not automatically get ScheduledOSCalls, because it is categorized with a different package name (which is exactly as it should be).
If you create an account for yourself on www.squeaksource.com I will add you as a developer on OSProcess so that you can do future updates yourself. Or better yet, create an account on the new SqueakSource3 repository at http://ss3.gemstone.com/ss, and we can copy your package to that server. I would recommend doing this because A) the old squeaksource.com server is going away, and I will need to migrate OSProcess and other packages pretty soon anyway, and B) you might as well have your own account on the SS3 server so you can take credit for your work :)
Another good thing to do is register your package on SqueakMap (the "application store" for Squeak) so that people can easily find it and see a description of what it does. But save that exercise for another day, after you have opened your account on squeaksource and/or SS3.
Dave
On Tue, Feb 26, 2013 at 02:17:57PM -0500, Louis LaBrunda wrote:
Hi Dave,
I think I have fixed the change set. This time I removed my classes before creating the change set. Then proceeded as you said.
The first change set did contain the classes but must have assumed they were in the image (which they were). Instead of first defining the classes (it assumed they were there) and called #commentStamp:prior: this went boom for you because the classes were not in your image.
Just in case, the new zip file has both the change set and the file outs.
Lou
Thanks Lou, I am having trouble loading the change set. I think the change set is missing the class definitions, so the tip I gave you for how to create the change set was probably not such a great idea, sorry about that. Can you please send the fileouts of the two classes? (As you originally intended to do before I tried to be helpful ;)
Thanks! Dave
On Mon, Feb 25, 2013 at 04:16:56PM -0500, Louis LaBrunda wrote:
Hey Dave,
Attached is a zip of the change set. I think I built it okay.
The class comments tell you how to use the classes. The ScheduledOSCallMgr class comment give an overview of how both classes work. There is an example based upon irsend of LIRC. I realize it is not the best of examples (because few people will have or know how to use LIRC) but if one substitutes a different command all of my code (and yours) should be fine.
Many thanks for all the help. Please let me know if anything needs fixing. I'm good with the MIT licence but haven't stated that anywhere but here. Feel free to add it to the change set (preamble?) by hand if you like.
Lou
On Fri, Feb 22, 2013 at 09:59:38AM -0500, Louis LaBrunda wrote:
Hi Dave,
Thanks for the reply. Your second assumption is closest. Instances of ScheduledOSCalls manage instances of ScheduledOSCall, determines when the call should be made and then tells ScheduledOSCall to make the call because it has the command, can rescheduled itself and save the result. So, I think I'm going to go with ScheduledOSCallMgr as its new name.
Perfect :)
I am a little busy at the moment but I should post the code soon. Is a zip of a fileout of both classes okay?
No rush of course. Zipped fileouts are fine, or you can put them in a changeset if you like, which has the advantage that you can add a changeset preamble that would identify you as the author and let you provide a paragraph of text explaining what your program is.
Tip: Do the fileouts first, then in a Dual Changes Sorter, right-click and "make new change set...". Give the change set a name such as "ScheduledOSCalls". This will be the active change set for your project. Now file in your two saved fileouts, and these will now be the "new" changes in your new change set. Add a preamble to the change set (right click, "add preamble"), then save the change set as a file (right click, "file out"). This is the old school way to create a change set for distribution. Monticello has more or less taken over for these things nowadays, but in a case like this it's hard to beat a good old fashioned change set :)
Lou
>On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote: >> Hey Dave, >> >> I'm close to being ready to give you my code but first one last question >> (hopefully). There are two classes: >> >> ScheduledOSCall -- Instances of this class hold the command to be run and >> the time and frequency to run it. >> >> ScheduledOSCalls -- Instances of this class hold groups of instances of >> ScheduledOSCall. >> >> I'm not pleased with these names, especially ScheduledOSCalls because it's >> name only vaguely refers to its function. I would love a better name for >> ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please >> give it some thought and help me out with better names. > >Hi Lou, > >My thought for naming would be to think in terms of the responsibilities of >the ScheduledOSCalls class. I expect that it is more that just a collection >of ScheduledOSCall instances (otherwise you might have just used an ordinary >collection). > >I would guess that in addition to knowing about the instances of ScheduledOSCall, >it might have responsibities along the lines of one of these two possibilities: > >1) Using the collection of ScheduledOSCall instances, tell me the next OS >command to be evaluated, and what duration to wait before doing so. Or you >might have it wait until the next OS command is due to be run (blocking on >a Semaphore or Delay), then answer the next OS command to be evaluated. >With these kinds responsibilities, the class would behave like a stream of >next-up commands to be evaluated, so you might give it a name such as >ScheduledJobQueue or OSCallQueue. > >2) Alternatively, you might have given your ScheduledOSCalls class the >responsibility for actually executing the various commands at their scheduled >times. It would know about the instances of ScheduledOSCall, and it would be >resposible for executing the scheduled OS commands at the appropriate times. >In that case, you might choose to give it a name such as OSCallScheduler. > >HTH, >Dave >
>
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
----------------------------------------------------------- Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Hi Lou,
On Mon, Mar 04, 2013 at 11:54:20AM -0500, Louis LaBrunda wrote:
Hi Dave,
I created a SqueakSource account for myself, I'm not sure why as you said it is going away. I also created an SS3 account and uploaded a slighter newer version of my code (if I did it correctly).
That sounds great, thanks. SqueakSource is still running, but they are not allowing anyone to start new projects on it, and there is an alarming warning on the home page, so that's why I suggested starting with something else. There are a couple of replacement servers in the works (SmalltalkHub and SS3), but most of the folks on the Squeak list seem to be going with SS3, so that's probably what I'll do whenever I get up enough time and patience to do the move.
I added you to the account or package as an administrator (I hope that's okay).
Sure, that's great, thanks!
Lou
Got it, thanks. I have uploaded your ScheduledOSCalls package to the main OSProcess repository at http://www.squeaksource.com/OSProcess. Your package can now be loaded directly from the OSProcess repository by selecting the ScheduledOSCalls package. Note that someone who loads OSProcess will not automatically get ScheduledOSCalls, because it is categorized with a different package name (which is exactly as it should be).
If you create an account for yourself on www.squeaksource.com I will add you as a developer on OSProcess so that you can do future updates yourself. Or better yet, create an account on the new SqueakSource3 repository at http://ss3.gemstone.com/ss, and we can copy your package to that server. I would recommend doing this because A) the old squeaksource.com server is going away, and I will need to migrate OSProcess and other packages pretty soon anyway, and B) you might as well have your own account on the SS3 server so you can take credit for your work :)
Another good thing to do is register your package on SqueakMap (the "application store" for Squeak) so that people can easily find it and see a description of what it does. But save that exercise for another day, after you have opened your account on squeaksource and/or SS3.
Dave
On Tue, Feb 26, 2013 at 02:17:57PM -0500, Louis LaBrunda wrote:
Hi Dave,
I think I have fixed the change set. This time I removed my classes before creating the change set. Then proceeded as you said.
The first change set did contain the classes but must have assumed they were in the image (which they were). Instead of first defining the classes (it assumed they were there) and called #commentStamp:prior: this went boom for you because the classes were not in your image.
Just in case, the new zip file has both the change set and the file outs.
Lou
Thanks Lou, I am having trouble loading the change set. I think the change set is missing the class definitions, so the tip I gave you for how to create the change set was probably not such a great idea, sorry about that. Can you please send the fileouts of the two classes? (As you originally intended to do before I tried to be helpful ;)
Thanks! Dave
On Mon, Feb 25, 2013 at 04:16:56PM -0500, Louis LaBrunda wrote:
Hey Dave,
Attached is a zip of the change set. I think I built it okay.
The class comments tell you how to use the classes. The ScheduledOSCallMgr class comment give an overview of how both classes work. There is an example based upon irsend of LIRC. I realize it is not the best of examples (because few people will have or know how to use LIRC) but if one substitutes a different command all of my code (and yours) should be fine.
Many thanks for all the help. Please let me know if anything needs fixing. I'm good with the MIT licence but haven't stated that anywhere but here. Feel free to add it to the change set (preamble?) by hand if you like.
Lou
On Fri, Feb 22, 2013 at 09:59:38AM -0500, Louis LaBrunda wrote: > Hi Dave, > > Thanks for the reply. Your second assumption is closest. Instances of > ScheduledOSCalls manage instances of ScheduledOSCall, determines when the > call should be made and then tells ScheduledOSCall to make the call because > it has the command, can rescheduled itself and save the result. So, I > think I'm going to go with ScheduledOSCallMgr as its new name.
Perfect :)
> > I am a little busy at the moment but I should post the code soon. Is a zip > of a fileout of both classes okay? >
No rush of course. Zipped fileouts are fine, or you can put them in a changeset if you like, which has the advantage that you can add a changeset preamble that would identify you as the author and let you provide a paragraph of text explaining what your program is.
Tip: Do the fileouts first, then in a Dual Changes Sorter, right-click and "make new change set...". Give the change set a name such as "ScheduledOSCalls". This will be the active change set for your project. Now file in your two saved fileouts, and these will now be the "new" changes in your new change set. Add a preamble to the change set (right click, "add preamble"), then save the change set as a file (right click, "file out"). This is the old school way to create a change set for distribution. Monticello has more or less taken over for these things nowadays, but in a case like this it's hard to beat a good old fashioned change set :)
> Lou > > >On Wed, Feb 20, 2013 at 10:45:37AM -0500, Louis LaBrunda wrote: > >> Hey Dave, > >> > >> I'm close to being ready to give you my code but first one last question > >> (hopefully). There are two classes: > >> > >> ScheduledOSCall -- Instances of this class hold the command to be run and > >> the time and frequency to run it. > >> > >> ScheduledOSCalls -- Instances of this class hold groups of instances of > >> ScheduledOSCall. > >> > >> I'm not pleased with these names, especially ScheduledOSCalls because it's > >> name only vaguely refers to its function. I would love a better name for > >> ScheduledOSCalls and I'm open to a better name for ScheduledOSCall. Please > >> give it some thought and help me out with better names. > > > >Hi Lou, > > > >My thought for naming would be to think in terms of the responsibilities of > >the ScheduledOSCalls class. I expect that it is more that just a collection > >of ScheduledOSCall instances (otherwise you might have just used an ordinary > >collection). > > > >I would guess that in addition to knowing about the instances of ScheduledOSCall, > >it might have responsibities along the lines of one of these two possibilities: > > > >1) Using the collection of ScheduledOSCall instances, tell me the next OS > >command to be evaluated, and what duration to wait before doing so. Or you > >might have it wait until the next OS command is due to be run (blocking on > >a Semaphore or Delay), then answer the next OS command to be evaluated. > >With these kinds responsibilities, the class would behave like a stream of > >next-up commands to be evaluated, so you might give it a name such as > >ScheduledJobQueue or OSCallQueue. > > > >2) Alternatively, you might have given your ScheduledOSCalls class the > >responsibility for actually executing the various commands at their scheduled > >times. It would know about the instances of ScheduledOSCall, and it would be > >resposible for executing the scheduled OS commands at the appropriate times. > >In that case, you might choose to give it a name such as OSCallScheduler. > > > >HTH, > >Dave > > > > > ----------------------------------------------------------- > Louis LaBrunda > Keystone Software Corp. > SkypeMe callto://PhotonDemon > mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com >
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
Louis LaBrunda Keystone Software Corp. SkypeMe callto://PhotonDemon mailto:Lou@Keystone-Software.com http://www.Keystone-Software.com
begin 644 ScheduledOSCalls.1.Zip M4$L#!!0``@`(`--P6D)/?-_'VA,``*!4```5`'D`4V-H961U;&5D3U-#86QL M<RXQ+F-S4T1D`*``````"`!8%NNN8V1@:1!A8&!088``!R!F9`(S616`A`*0 MS<@*X8L"B:>N[_:].ZK,DO)*>AE('1-#`@,+6%J"X3^C/(9>!@81B#@C1%R( M`2*VGU$8+L8-U;^200A%OR*0#0!55`T`![T'+5$ZTBM1.M(K4=T:6_;2+*? M]4'_H9,`*PGK\4BR?$3>S,*Q$"`)PXLSPX6@;.@R9;%,45JV<UH]&"\W[Y5 MU0>;EWQ$"K"[AT,U^ZBNNZJKV?F8)G,V^7?&O?O1[AY+IFPX9&?<Y_-;GK)A M?S!@7R)/<B%9M@C@8<S>#`9'!_T;EL1L>,`^\MLT](5]MUCGF3#<?]@O'?( M%O/.J_;KTYD7WW$VX7+<:DW\&0^RB`>7DU,OBD3[#"=LM5KE>=HGF9PE*;ZZ M2+)0L`OO?9K%@=>^"'T>"X"BU?KU_+K=/H^%]&*?"P2]-#^;)5'`PGB:I'-/ MA@"O=YMDDLD99Y<3YB?SN1<'3"8,YMYARQF/]0\62H:O9LF26OA/0D\-;W;7 MK_KK7<I@7@]V[;&[-,D6=:"%9H9=QLXEKBD0KCEB$.%+.=!$2`[@A7-.P*3< M`*&ZPL@)Y]3;CSPA:$,\EH+!AMD\2;F[]]W7K]KMR]L_N"^9R&YI!-"R!%>[ M90#[AY>&WFW$/WES#AT[2'L%2^"M+J>_<WZ?8S"4@!F84:I9KKC((L"@+\-O MO--NT6+E":%]D2316>@C>/#2M/JPTEV2KN!7F6&`H]JORJC4VYY(;[Z`,1<7 M;/CS</`S\>-@`-S888LT!&YB_5?(<1[A1_`X".,[LP>!=-:,`20`R@'H,6T8 M\'P:A?X]^SN[Y7+)H=D@B>BBD'^;29G,A6(7+R#\`Z><P@^)_?(QP`UR!CRM MQB$LW/-G%IE=_+/P4D"3Y*GHT1H(&2$?ID?(%=7U"/R_9@W:T<J/<&G#'##/ M+`D:N`.E&)>'_B>1P,EK.*J!RW$B,P=*"@@-2IS(F;NT5R-2T-%'<@*R/Z<) M]!-L&<I9<5-*#KS%(@EC(P>[3^%A`*V9C;5<"6`)M;#BW43@R&MX<\8C;^7\ MO@CG`*[Z?<5ENJ*&)J8V_&_ZG?&IAZ*@VNW\U>9"[ZLLCH&2U7V)30D-DN\Q MN7GKRLTI$1"X3^O4-5J7=!7H4*6C7BXZ)XTR`P^9X($%Q]&S`O`8>>E:??O[ M#)C+3Z`EE!F8-CLH)(Y?1"!XT0HY##D-]`",^6>2`<_&;`'V`^>#I59)EAJY M`V#0HA!3AS$(!+<KPN#W,"BD`6SF?>-*^B181NI8@9VFV6'WG"]0GLDLP*1B MP5/4)4W2A>#=<C;CT6*:18#`:RO'(@S*.,3902)98%AIA1V:YN[>KA".,%7R MTD/H`1&P#3]+4^`BP%>JN)9U`27^O88\3-<S"^D0R9'Z9L8@X]H,]P!WUP1$ MD@&9"7>WR$0!XHU4A@=[B^^`8J"#8'H/@4X=QD(88D>C$29"41@':N^<+5'/ MT91@X7%9[J(&0$V6@B@(H$W#.+`FHH%'N]A2J7D4?=J]4A&(`0UY<^](XZ M(&9`%=X!8=_S"+O1+CSD5P#X<\0]P5F<((=(V'J(FEAQI#9M%^=7IRQ,R7YH M-6L0#/]+8J`AL!#_TTR).*@3[K*"43L&^@)9.I+=QP!<@FP,("N/2RVJIES1 M5AS_R[N+$Q!%'S;6>K`"Q1[:+?L?E=G?X@547,E6:<C0'?X28HV771VG;%> M$%PII3]FW0K[@?L[D2D,@GE^6Q":OB51!I;V@0WVQL.W.^;#]]XN@*W!YXU M^B8?/IW]:W)]<G7-/ORYB$">T]&PWV???EL<,Q&!;+']XU+GR^5OIW>RR`% MKSJ-0LZN$B!Y=[#74]#N]1%:=,T`6%&"]O+3Z8<B`/C?`=M[*1`3/^3(]]W! M81!&/;'?0+@&D97L56W_H`=LOZ+D9#$,HRS;,ZZHZ,"`+\F=/6[[,1.RJN M#VJG%/["\KI7Z`]4(H-V#<@]OZ&F@A@$QQ#I+*G5Y$54C%3-!W=46^M;M02 MB&XU`=.+T.:R"@BXZW!)#*C.<B57`.`,@LHF/#_!,:F;(F`I/YRE5]`DBH M?05HJMCLWT-%!;Q(\1-HNT443LE@6&W2;O\F*MI$_`(>[CR,8=D3V!JJ*?.; M%?1CO0.ZNVMH4ITX;7*A7+05;5_-`H`LK>VQ^QJTVJ`/N<-#4^V'T]!OC/^P MOU'YJ.8-F^W@(K0C7'":(+&1V]OM@F9<HQC!*,@&G9C'L--/B?P41F/V98QJ M(E__!K9\D23WZ'[;[7[33BZXFB4_>:?B*..FRLZR03G:-J/TK6&R(<`O^A6( M/;Z\G(R9Z7@Y4?9/A=4!P/BJ?2/D*N)?NH/!J,^.P&/=9X,1^*TC-CS4/PX/ MG>=A?EHA#.X.!&'?(QB*S_M#?,:N1PS4*?P=P7-_GX$E.()WH#%&O9V/ M[T,Y]Q;LC/_A_2-C$R\6;P:CG?_5=K]/_QD,^PT='ALW>.&X'[3>QMK]V\CS M[X]S0(80>U4S%BHB%Q\QMNJ<ER)5T4%UGH=D@[<Z)#L8#X@EJ.L"FC(=NOU MA)LD"Y-IQG<PR'!C:/00U>M0*NMQ2P;.!-<!!]UF0NO7X'[IWJ!5<+[=]BOV M:BO@(_#G4PUT/<3XZQD@AP+T&>S_&J8$M5;<"&BUUE?5M,4]@;YZ#[$Y]^*- M[P[V8>;>S`9,F-?[^W#!C2``/=IGA15>2:3%2-P\HT4L&V:`<P.AI=0K@) M,3:-;<YP(!RY0X"Y-<.H@%J0*S`D*Y^`XA0-7(CX!U8=.Z/`+I`B2?%D)0V M=4`#OPEC60->S/^4!!EU+.&5V@#4,YHD`9^6$(O-VP(;,'KV4N@1J6>;@FUP M9#-1HT,"3F>=`;03)E;SVR12\F(<<NCQ4S+]:8F9Z6:8`=S6ZS>3C"($$RG8 MD`6"IR#6C]>S+%5/'].0_IV`EYWJ;CK&HB<4%!LD*G28%'F%HN8%($OP:*I0 MO%33:>KJ+AM'XY&+1A0=0N)_`SZ[;[K;7*+7;K7"V(^R`'U<C9=>`]7TZYM- MZ[71$,B#Z<RB89]ZD7BB92>1?-R2T(P;@?[0\M9^'X`O'P!I)9*JTZ!$[8#" M61U-(EQ?RZ,V:^!&XQ&JM@6H>GD9*WO!O3F`]AF;&`;BW[PHPQ@SUK$T=D"V M?J`@=P(A%)X//2`2S>@6:K[/F82P%9:\5HFHUYUCYK:3?%.2JMC>><U^8N>" ME;IWJ;\AJ^&]SHDZ1;N!IH](.6P[CTUK[QCB]N,R0*?&/-:"I)FH#%0'I(D M''7B*!MG(#BY3Z4V7QQ%(@0&:D4VGT8F\1.'C5D==+FP>4*9:&=F*\3KI[^, MC4H5G=)H%/PG#8:.--A2O=AKAW["I/!L5B!=#HN"BI*S?W(O/4LPQ`9W8[& M*\QHUL[5)?L>>W-^.:6A8S;OE:A#B[0"5F;DW88Y`3X:L:H;@2BI':1R![@= MA_&-I5('T>(L2]5ANM#O__=ZQL,4!]:<3@:*TWC"M&X(%&)`Y0#$3)AJW*8 M'%/&XA'27:!R:3D\P5NI"P7W<JL(O-]S@/N$1G@FW05!2YCUX881O8"K>] M%HQ/B84"9EYQV;DI[$)VF8=.#3NB'VM=-5A\3JKW6Y1GY*#0FU`\6O-TZ6 MY)*0$=D2O,`"UR`&PWQ]1;`>DM@@<JV`-'QL#[:T6DR#0:^J:!/JJQ<Y^= MC3H9;0_(<OSS&+3/#'LPPYXF40,@>\JCQ"G+122O3V*QY"F3&5HR4*?J[([, M*Z@Y^"5FROJ3UL"?K#J/ZO9R0!WG:G"`02.E$C'(Q0ETL8<N^'%XC@"K:`I` M75ZM8,-/UYX:'6C2K+LO=6X:=E/RY(V!=K"=*G1KYUU;4>W:`S\47.JO)6/[ M+G_]/4#F]0,C3"P@!7,`T=G"EGQ]JKGZ3C(?Y"4+B!=R/YZ.%#S+T*ZI<1DV M$-$HYJ:EX!=5A[`\PBBB?B-;'QW0UHU_]`RF,$-V&[C"OM(A=Y:,#GEFYX# M)=>RV0`D?V*NZ5%E09QKI!AA#/[(A`ZKGI(0T6?J-BQ+8'FT65A'F:JZ#YI" M54[0G#_K.`UB#OQIK*]AR?,XX']2!&+?ZK3021Q<JZ(\S-WD7J@RK=8G`UU4 MF`I&NXD':H0^N&1I8FA"'_@+N%)=N_@OV-QC?X'&5K?K>/U_85UW7O:NQ.N] M'GG!K6[9GX>!!0!UN="8#1DIVH.ZD>C+P#BR'=L@(?!Y<;#7G$&HSY[Y-`M M9^#=&9.'6V=SZ)_O2"`CB"W@UW]ZF44>!();C;$PZ@/4+OF,N9A:*N2.WBZ M1]4CLR0%!N3"3,%.?6)ULE+;E@;#\2I1M6IN@H#8%P\XLV$#I25:UN.EW4S M;/6*>'O:2BY=H(I;J)(H^H_%UGFN!*BU$4HW;4A"D0H/8P@7ARF"!NE?-4` MPSN)Y92:7#5EJ50&5*":/5&EHW8`L,EZ'HX'J"C=<H?<T3,EI8"797Y(BWU- M_@+].W52KRD>4E4:51TLO%0*0(PJ)@/-!1%BN`#SU'GH4"Y/>8H/"D</CII] M,$J/**[F49T;RH*1`U0W))#>`);5J2>L7'SH]*![%'%?TF$TG4:K(HGWD1?? MB^LTG,]Y@+YT5X,>_A\H()+RJMNMNDS#5,B:(<->-=#I?B'I=5%M4(3DOR'R M?TC3)&4!1O,WO9J)]YJ2A1I+5).&!5877&)1+_#H10(RZ6/)EN\M0NE%,%6` M*0^372RO,>K5'KCH'0-IY8RR%5^5*`!S]$R%E,Y!*8V$?X^9DP=V),WZM39% M9,S@,94[XLQ-^NE[^+T_'O4K,0USPD-6S5M7@'U$0%2YA21SK%-^RINHXDL# M<.Q"<%P#PG$###*;:/Q:%"/-L/*^?/6,-@RJL()S:LRE0-2E:C=IQ!!;HX& MM=70+TW;T\E9N>)%A^-Q1K=H$F5P=($S],G3^%/,WT\IM<2Z@)"E4J:@+#+) M;!UM*'O$JI7"FE+VH?+>I.X4DY5?ZW)SPG_Y70.[;AQ36.1S'O\PA&$"!-?; MV/:&^1'(OMV>K8_2VYI#)!`:7P3V%-`=`U,13U"K:QFZ^IRNZUCP\UL)M>3. M7]=1NWSEP"&V?;4%9/0/JL@HDGI3.-DF18N;>$2R">3U$*\1VOQU$Q4;1-:^ MV@85]ZL(>%1@GXR'35,N/XWL]]<=^:F2]*QZX-=P**)/]]8<[M&)A;U91$9M MG((GFU8.7VXVM=D";NO-DN)22>A,N/VBI.YF&'N/6+II7)]=(]M*'N4'8.2 M8@;0EE0S=K+N^DG94Z*P=>G62]%U%'V^;=%?$B_;CN%ZOAAX&B1$>7WWINFR M=^@<)3C;5R<"FSE!^![P:@\1L/"@#LA'#PXJD*#P>SB@!,$P]_GWA[7'!W1_ MKYP8M$`)J@0V)PE./E`!BHTG5,31<%_DJ?`_FF&A$RPO"$[0P5!,!,N>JF`6 MN(P2AP$S1PV6#T%%;D*G/4=/43XL0"X-RS2F\WAXU#AP[MZ2>-"`<)V\5! M:;<.)"JUM<B<IHUM?SBR)TQCNM&&%I)KXN-OLHV/'3P5RQCGX-]([QX#,4I0 MVJOJ(L'M1TFR0".6W[=3=?;:20[C4,"F,&6)GA)V0*M<=J`*CICQO^@:"7C- M,!@OT>%--[K<,L4,=C[#:6P/NBD4Q+)76#H(`[P(IB!09^Q"3+,H6NV0PXX7 MZNX\RDB59R,W0B>O"&N412]>P*=03N7*:0>5LSI8`.<BO.`#)<Z-MZAV#2O_ MZFQ<V_.*8]S24XU5C0.FANM.!@E217S,]J%]3`:IR%8>NBJ81JZ,E$H3O7M M4TI@VUE^*0-'_A/>6BIGKMV%[?-?V0`-26M-]0.MI[=:6"T/G7"YTFHY;O23 M6FE#`D6'G'[$O?0J=R-.\7=9=Z#1TI=D335@@HD4X9BI>\E8B*[Z"DXUV#2 M?V/J$?^Z[AN6X]W<N,Y=Q8OXOOT>V$P.E34#B+#),ZK=<^]1Y[?5<Z51].24 MTLOB$]!M^I0:9"L3/'WO^?=X#2D./N-M[E"NO@_DX;Z&>5=,NA%%WKRY// MV)4KWK$M;,1;P4M]?7?E'D=8+6^OBP&)S!*8?F)&-5#1--.G;R#5F-5Z,!JQ MH`ULZI.>6SG0O6U%64U;>6=*OLWQX0SNA6'GS)2.VA-H\3Z5QC-HXYJD&M MXG?<DQ?[P0_,(,=WI&);:"+,Z:*'GVR8>8L%)T,X![T;WLTD77QVO@BQ)/Z? M9:E4,W05_.\L3GI.15/1?+K28*`AB2CB*$=!N8"(&AOFQ%>M;C=5^-*S]/!( M3YES]C?ZI^=DOFE(*ZV42:J069O?U*W0<N`F6%KJ'_67KKFT6KDF-4E\JZMO M2.!A>Y=+J=JO<"-`LW1DO[2!?A!33<0U:C=YX=?#2ISWSK4Y(-8F2`'Q%RG M?%(:#JXBG$!I%_D@G93E+0XC-8E56N2VZKI6U,$F2N7P;`F7:CS'\4X-]"? MS:"4M.-3Y,/4-9QBLL)X(N7*GZ9/>)3BM*9N@)1!GP*WAAYKJ+TM=.4YFQ^. MM2<D>;YKU_UJGO%9/.)<9;7?V`''M-8IQJ]@%=ULMQ+$^-L..BK?>ZGEH4HO MP-FP[_)0N<>/1^:S..C'XG3;'#:HYD"?S6%:G&I$24?#3]_[XSJIT@LPM%]F MIQ^AD9HQ]VQVVA8"M$;H9+.@-7W.BJU=^GK&I_TY`0I\A4A:Z^<M095Y8 MT[,^$]H\X"7(`=S+$(L:Z@ZP#RR/T*%9)0M9?_QL/Q&6)R?7'1L_<O#>`'U# MS).7M0Y&.LW5[-XU)#1U#JSF,Q-YUJJ9:)3':DIJZIQ6W1<L-D?8)Z)&NI1T MQ+ON"QBR3,^G84$7-4U/;K'H4I40;'`GNL)>Y1Y^C/`^)ZWP$M+T!VYD<$(U M^M>%;ZTTD,B%_S'BJ+A.?5#$KG7,"CF<FSQ.6HM=O?__`%!+`P04``(`"`#D M?5E":/03]1H)```>(P``$@```%-C:&5D=6QE9$]30V%L;"YS=-59;6_;.!+^ M[`_^#Y,$6-G`)HT=-VD5Y!;99`,$R#;%VKCB4"0`+=&U-K+D):EZ?0CNM]_, MD)1EV6[2U#G@@#:61N3PF>%PWAA<J7P"_;**1YZ!T>0CZ#;A4L9R<E0*N@> M=CKP.15&:@/%-,:'$/8ZG7?'AW>09]!]"U=RJ`JAYC3V"(2!H[!W`M-)L-.\ M'?XI(P.Z&$:IT!IG]J.QC(M4QK?]"Y&FS4:2:2.R2/Y3J$0,4_E!3"0.#&@E M,,E$0BSFMZ-/4CY`E$\F(HN1;%()R-%8+G](7:0&1&22KS)H-GBQ.D.D3_,\ MO4QP5)[A1T^-<*4ON9KC6PV=1A%V:C0&(3/3-V(RQ2DW-]!]T^V\8>$[G?#P M.("I2G(5PN%.\U(8`:-<@999G&1?O`@:3`YF+.&V3QH3`619RSO`<!%FD0/ M`L,I9E))'L=`0G/PL&P,":?,!LE10R37,F#9O,"7PR-6\S!#37C1+MYA$6* M:%SJLD5_ID*AEHQ4NLUK$#+6/;(GY$SP,^B_MDIAB>912DOWI>1AR&><QUY- M=D5"AXA&.9D,+8_CSU--S.TD"[-(<@UK?_^13$CSV.<SR`Q^).B*KVHNB8K M`74#(]I-5/9'E>,X#;/$C)>%,OPJIM,\R8R,[5;L-)NK!F`%U%>TQ<%US7QU M`+IJ&9WWSC*.P^X[-">V4=RB9F.W+[W)@E&%_!F2T1(DE,-]1@%F":X\E*"* MS&.-Y2C)/-+=9K/A1H=GS.^@N0,[KP*?P%^/'.CUB.GM.R`G^D.2HOP#9!G" MYV5![@Z:C7M+>D690A"_HGN0(MNZ="B'Y[T=`;RW.0R/WJ(`#B#BOO`.TA]; M[V08SD*0)6U[,L(,QC*=!JQP1]VZQM\O`*/*^T:A#T'D@XJB$34J5I,G6"` M*=3.W`J\XU*=;WN(+K;'DQ#9(%2!IL=YD<8EO$S^;1@9#ZSIE6D(]9*9Y!C& M6+%$?BW8J-'+EZ(GI5YN"UOG71D0>R<,SL5PA'8.>CX9YJD]+Q1"^/"(^7X^ MVI]1G-^,&>$V=O?Z18;#8>_WW/X."JGYX9.,,_<X&!?*/EVIA'_[PA3*#9,/ M^*#M$QV4O=^^2C5'FE6'3SA6=M1_0&5IF8ZLBF>6G=M=-V3K:GQ752,='5;B M_X,^6WNMUURBW6Q@%AFE14P9G=-+>.NN<]WV_9KO2YN#Z4CRX%])%+]S,C. M1_+I2,(<MX+^I+2MMX<(OIY..R>B;&Z=6PEH$-A1C.N^/FN[`:X7]LBU83Z= MF=O,Q@LI)@CM(Y$@+Q1%6E!J5_&`#4/(+-^)%.?]6644[K]2$KTLQOD^3X6 MYCQ-<<D!51,A[`:G4*7S^>9*8YD>[,(^7&NH#6_Q>+^MWO:"<UN3W"'IBG:. M:->9I[9/(5*G=4`7/CRNA>2,J`XJ(%:85C=XD*2S<8D'9Y%36>&79_$1P@`U MYYC/,_/LF=-"6(=N<=B$MB&ZPKD\Q-]F?YMYEZJ#VFPZ^,^:C`-Y<KGKRZ-^ MYE=DBL]^!?;EN"BZ*#/^EQ3J,L=%0DPW)A#.T8(::WFU.+YG6#_=CGAJ")-V M;7=XD48,=4,^V,`3?&,^;H9I)*UD]![.'$JAN\C%9=S0E\62E#]BT3[_3]G M<.@UP&-XQ6XOM)ZF>HC"I1.55T!5$)$1-E9*\RPWRQG^.OPWY%R$,7(R)4'J MYZ*UPE47421E+"LV$?2)AJ3E(W<EDI1H&"NJ]+4P/N0E"N0\ER:X6Y+/'K3M M)G`4W$G[SNG:VOM;4;O9X#&U!(5IN.,#^LWR&:<D'$1>"2^:P.`%L"D0#UX! MUGN&A2Z[!$2-(M\54/(OC!0>!GU941\1J0[Z)7"J,^GK@:S7/T^A72E[GL!T M@=Y(Y>D&)$<VI22>]9[<[GFF9U*!*2B4H3^%L?AJ=U:CG,W/;;AG]T&O<(J M'SOL.<I;#[22776.J6K$>;=]JG*)@6N>4?^KR*I&Q!67`7J;M']*>O/:D#U M3M"UMN3!2[.;#=+44GD?H2O:5E;=+GMW8=3E]F@02SGU?2W:GBT^_PC(11^S M1YT%VL$%0,JVB+)8?S:6V8]N_&B=4IZX?SC^4K),^ES4Y\S;*&DL<;-2^$; M=Y!A46(LJWXKHO>.672?('V'4?@I!QNLHOR^E1UZ7*4W'#Z'I32G<T-(.4S MFTU/.@NV7'^*"6/\9Z%=7?6<C@C`@/QO69?EN#P%+;H$05''PKF;0BF:0SS? MN$(-BPYZ]>'7F^1U%LN_N00IO[J^T'D6#^P=!S5O%FFHC:UE4H:^:(D5SJYV M'IB(8VC)&F,D41+&7.I5KGX/XC<AI^0V&BU*FG_3]"J\H6SFJVWVYP&-UKU MA!XG+@%T-Q<A=($=[?&ZF93,X\3EF6?0P:%0)YZTESEX]]GFC&XVQO3.)W64 M:;N&%O^*.,:!>&X[!^[3RW;@65MPMR4;)G]`WG5QQ@35MK:[(PRW$,AZ%1J@ MU)%*IIS5Y\XGSZ0W;8R.:-'7/*/0DKNK28R&FXSF2'"5LLUMZP6S(Z.H?T@1 M?U*)D2X+YL*)2XW5!'K99$Y7:I1U)4KKFS4*EBAM*B%>7*?HLDRY=X#QFZ'K M*;==N_O[()_NSAUY7Z0[IXVWVL&ZXS#WE<MF4AY?Q?1E1YJ8U.H/@D[Y)5' M*I_8Y+":5OK[0-R$V>)*D,;Z;@EED^3Q_`O929+!B(+]5"BC<1>F$C<$36>( M]6@RQ5@8/`;<.;1YZ:/=D,>*3W_T'I;-R_*Q@S=<Z9*YV6%D#4X`NCBV3Z2Y MQZ"-P]-41H;J<E08&JZ]ROLU%=F#'JAD,I$Q9>XM!SWY-WH[=BFK2;X=,DJ4 M-FNF=-NK957K,[N*JJJ]BLC6[MC6?E,J5Q!3[^"NO8;QT:;6I-/2.%$Q,DKG M-]+0C2P>B)L<'4`DT,HC,4V,2)%53`T6W\NLK]%KK[W><1+CUIHQ]T;N[;E# MXVB#*TE<Q\NZ/_I["I6N<^58ETETV9#R,?<4YK@$<=[D#'_$W@_#WN%*!065 M8A16N^0K8)\X()P:2,.QWS48;>JRJB'X+2*X'0-A-,-&/Y7:NN%O<YZM7E3 M7CR_F@8;WE54&@&K9VH!9/5$'3QG$\S6]N"_4$L#!!0``@`(`-M]64*4\1:_ M=`P``"XQ```5````4V-H961U;&5D3U-#86QL36=R+G-TW5I9;QM'$G[F`_]# MRP&6%%912(J49'J30)9LP(!C&:*28"'(BQ:G*4XTG&&F>\1PX1^_7U7WW!P= MCJ2']2'-T=WUU=E5U=-Y'T<+,?DS4?)FN+LGHID8#,2)FJK%E8K%H-?OBXM` M&J6-2)8>+L;BNW[_<+]W*:)0#$;BO;J*$QFO:>R>D$;LC8?[X^&A6"XZ6^W3 MJS_4U`B=7$T#J34F3Z9SY26!\DXGQS((?KF.VRT_U$:&4_6;C'UY%:A/<J$P MMA,K`--&BV4<3976PO@F4"+2-/,<;TY4(->%^X_^PC?N_DR9>,T/.NT64Z\N M;Q'DXT[43":!$?9YMG[]<6GT61*&?GA=YTN#[C**@A-_:OPH!'&F2F@@Q^LH M7N.N,DU#9EOUI<0T6BQ4:"9&+I:8]?&C&/PPZ/_`,N_WQ[W7'<C(C^*QZ&VU MCXE982(QCP)/I,+5I-S*TD*&GHB34)BY6NR*X"?WHB?Q94R*Z7";"H/8Q&* MJ\28:,&KQTIZ8A'%:K?=/BH,!ADS][6;@(M$*R^#(\5U'"5+&J4AQD#&-5`9 MXETA?I_#I*81GO@F@1EFDXA`M%@&RJA@309&AN;?*LSY=Y2(J0S%,C&"U@.I M=93$0J=TH$H,@+1!"F:L,HJ8_!:3?)X@YO)6,8/@1]J!->R\S(ZX46H)(V`Y MTJ)ZJ6(HN2S@E0(WI42<Q4L9TD``9[/E7NE?:\J0UI=0W)>:DEK&M"T=O=J M33C\V+K+-J&'(,#&-(EC6!'D%5NC%5V(9'KCD&/&G<8RBS#`*-)^NJ*7*#:% M)-R&[,X91)1`S2R[*S(BC^2V\LT<#&A0@L80.;")-!QP;`(`YMB41*^+LW3 MD?@@5F#"+ND;)JN*H@'4:*59@X`V\T,V.IA&HXUV'V.4V^P-6D%[T0H`,!OW M/J+4="[C:QY`DHF`&8I]JP(:QEQ(LE<`_APHJ94(([(0`];]P-/.(@&9)/#Q MP]FQ&.MR//@_*"1"AC_HA`ZA`FIO](E20:;G+L:7RS'T"_4TC'B)@2XB,P8 MD.551,;/1.V2:V:%O,5"$/(ZC."*4S#6^IHYE/C:;F77XQ_%A@#&IDB1*THZ M'8W8,8UB#Q+2G=W"7.EY9S;FCT6W9G[8JB8FQB2L^N2Q70;!<D"]$5_;SQX MC=_?O;M5=K#KO`U%=_DW:>3_TS.C[.Q;N_E@'.1X.>CUQ^^ORC=`!?$N, MWE0&GWZNC>UL?QO28UA%X"MQ%D'EW?[>MD6[UR.TORMU`["Z@O;TT_&[,@#Z MVQ=[WPIB,O45V7VW?]`C`(/>N,<`SC&[+JU-]/OB0/2^60A1:/PP21:B.SPL M`?@E"A]&OR>&XK!,'V&G=.O2!1CGAQ`1&!'!!C:8K?F?4N1"-BTHG2&/*@8 M$6J^PB%F1EM'=[A]9VQT'@C?,B+P0T>&(U$:B"AB$!8L8A)>0\GI_"X`=EL@ MQ\3_"'-CL2);P6)3;+[5[64S)(J^&I$J3/F7%*A@BR&#\A$__!EO&%DT:;=_ MU;5HHG\R*E[X(<@>@34*4^F]*,7'#5`0`'9W4YW4%XZ;,JBBV,I[WP8"$):+ M]C3#K'2P@AF\IJL0])6/?5G_C3?`C:,3T,^A?G4S':("'-$!&<1*9NLO=TN M1<8[`B,V!=,0$[-9_NQ39#[YP5A<C"E,Y/0OP?+'*+JAI#MC]];EN,@T*VGR M3BU/)J:JN7(J<MK;TJ"?;4RGD\V$?_)O8+;T\O3R5BD`T\G=O]C"2L/&+?: ME]JL`W71[?>'/7&(C'4D^D/DK4,Q.'`W!P>%ZT'Y^G!(-_OXN2^&^'F(J70] M&M`U#3T4"*?X.<1U;R2P$QSB'2+&<'OG_5O?+.021<T?\K=$3&2HO^L/=_Y? MGT][_*<_�,N&_>WC?.>R%Z3_9>A7(Z<V;',APJ]W>6'PME)E'GGY/Y57G M0Z56U1V*Z'E5UG_MJK+]\6B(:J[J8.W6*PK+8<(%-N6A/JI16T]A3.9TJ$'@ MC3/I4[W218JV4CP4+HLD+4O;?;.]^PK)6,V/?8V@@57.XP1YUT7M/:*15L', M9<#5UZZX18AI?:F^VVUOB:T7D!3%E`_ABPD,`F%Z3;>("O/1Z.,O2P<.[90 M;`2^1N0//>;)XXY&6H`S:LV%ERMVL046X.<]D(WJSE]OTG:UP5%0=O;J&831 MVZ+HZSJIY+)<VJTS,0]GLV0[T9\A]/FKYNTV."RV:OGT.*H+H!['?;!<GAJ MS1WDN'O`O4158DY#X$6!HN0"B#_3(U<!4W8>NER=7C-$-U2$ZB_S.3'(@;'X MN:MJWY0>LXZXX'V#1!WZR/J87D1I7(PT+A95$)=/Q>R^8W9O/++,<LH&'H]" MO8)&B+&TH9KV@>A9VA1C=K^X$<\1[,EW4I'DL*C,RBHX(8[NZG95:TWN1ZVX M(*1L..U^+13SDHF_XE[9<YC;24XL5"MVHKR<?&J][!U``FP@9?;Y$4.VC>X* M7OL08#L_=QBA'?_T%ZG*QQPD"`<X*:>1-(\E4[R"&Y'PIYOZ09%0A91[LW M'@V`@5;><%R0&3+$0MM^ADISY<&.*YWNO^3.R`^/]'C3HJ(HROL9H'9&'`5W MV/@AX$O/.Z(4PYH1Z!ZC1E1L9\2$YPEKNWGG@H+D_E!@7XA$K&`,@#%ED[\ MX)!TOSP.K#RRM:6[<H(H".%Y95#AMH!$K*C[O$P*CYZ,_0'EMVFE3"UTVB.5 M4S[=^Z86@,"L>VIN]Z5[?Z^<OMJFN\ND.$8>:.$!'(DO6[.#K7(P7X014O: MQO(&ORWL79KLA[X&4^U6B[,K&D#[<C6%*J5B:0;&?2ODS9A,77MJK7,W;694 M<85CVE`-F%L:S>@_,&G/]ZCS;!$(G4QIFYDE0;#>X92=.OC7T@\K>&@U3B1< M7XNEQEVV6'V?=TL,*9BH?75I([7DTH,^3>=U($!KL5SHXBNLPDOS1<LU*/]2 M8-SMZ+74N.66PKP>[BX@CQHUO&.D5OD8U<H(NVD\SR%824K6<-NM+>3K8W?< M1>W3;K;*3U5PG$%1F[1U:0WCO0PT;1]%PMGU/T6?MI(-!%DSRE,>TW.LEJCE MQ1.1JU#+9>.N+*4G<J@AQ==IH&1\EB<2QW1?C1VT;;E3.<D'A.0(""")W2G6 M[B"$6LGE7*'0=XO_I,X;_2PF<'2<>7E93.]J><3?XS?=D8?C`>W(@`@FD>93 M?[EP<)N?CN=!HYS+V:"7A$>(;:Z#!]]*M(K?RND-]3U#[S,='_MF_?<@#T8. M\V@\W+>8B>C2+?YX_$*<%=T[U:$]AERY\(U=;CIU#'5HMWTT_XT5)22@(8N M1!H:3$0G#Q14.$J<4"O[:QH12]%@D@:"_JYS<AY,0^@W+Y2YLEVV]H[C'W>R MZ?&<V_`RO%8>ASV*YF%D"N>F:6I.8="%>!Z9LJHRJ9@Y-8TIZ+5HB_!U>OJ` MG6`NETO%&^$"<=>_GAL^:75S:?T5V_\B8U=H6OQ_YC)9!N^D'IU>?LL>D.* MACVB+*-<!"QK/#FGWV&TXH<-:]*K5K<;6WFY5;;%/T37;N?B7_QK>SM/D'E* M"^)R1I(^MT6SVW[CRP(_!=R,I65_V9^47^ZV6GDD=<OEL?J2XQXT=%.T<A$B MT?2*=>"N,TE;N%,>U'3D86?M/KX`:PB9HRRCYAPD\PE.0-+SFP=5A.F`8F!< M0O7+W-$NRYX6^H%#_^K[[\4W_'N%J9L^AB$I-G\UU&D0EQ5^N1#A1[=--6L> MS/J##0U*UW$I5]:>^RSH5@:)*N0P^;0='E=NCZ293SGA:[>:/E&J5(9-PZ"$ M?H]+Q881=UC7<XDK[Q*]N-0>T%;Z6USWZIW-1]E(X:R.AC&+2(0W)N'T25XY MK2]((<OO"^*H?<^VT89JHR"S0:]H0]41+R_,1UG0R\KTN2VL7^^Z/MK"G#MM M<"57?3^<]_MC4FT4)#2JFM-+1*1FR3W:G)Y+@,]A/,66FDO(&[Y6)?X!-^L0 M;?X0(N+O+&U&T/SE:]46[ABYN??:/.&N'EVC="!\X\O`_Z\D0@UEULB>T]4: MG?V6QM)X/(/+?C;(!M1TG[HERXG>1BV+<JKO.$/4&UF]RCX#556_N5O?^@: M:\T)94,/U77=-GQ)D_?)FM7&G;.F/JKKHFWZ2.<!JGU:T9BB*@L.ONDC'U-5 MZ,.DP*O#V(^NM`KQY.+R23F!Y[[.NATOX[Z/:61\BVIZ_6(M<A0$I7(D[8/> M@_^Y=A*TGXSE=%Z(TI=H\N,KM3NI;__P%02P$"%PL4``(`"`#3<%I"3WS? MQ]H3``"@5```%0`1```````!`"``MH$`````4V-H961U;&5D3U-#86QL<RXQ M+F-S4T0$`*````!55`4`![T'+5%02P$"%``4``(`"`#D?5E":/03]1H)```> M(P``$@`````````!`"````"&%```4V-H961U;&5D3U-#86QL+G-T4$L!`A0` M%``"``@`VWU90I3Q%K]T#```+C$``!4``````````0`@````T!T``%-C:&5D F=6QE9$]30V%L;$UG<BYS=%!+!08``````P`#`-<```!W*@`````` ` end
begin 644 ScheduledOSCalls.1.Zip M4$L#!!0``@`(`$J`64*TJR6X5!,``)I2```5`'D`4V-H961U;&5D3U-#86QL M<RXQ+F-S4T1D`*``````"`!8%NNN8V1@:1!A8&!088``!R!F9`(S616`A`*0 MS<@*X8L"B:>N[_:].ZK,DO)*>AE('1-#`@,+6%J"X3^C/(9>!@81B#@C1%R( M`2*VGU$8+L8-U;^200A%OR*0#0!55`T`!UO1*U$ZTBM1.M(K4=U<ZV;-Q+_ MK`_Z'Y@$.$DXUY5D^1'YTH-C)X`!-PXLMT41.`=:2UE;KW;57:Y5'8S[VV]F M^%CN2Y8=*<!='_**R>/PYGAS'"HUL<XFK'1GZG@]X/=/19-6+_/SL18S&Y% MS/K=7H]]";@4B63IW(.'(7O3ZQT==&]8%++^/OLH;N.4QTNLN>X9(-AMS_L MO67S6>M5_7IE(=W@HV$'#8:H_%4>&D@O,O1*0^"I'F&'38:C6(_S9-43J,8 M7UU$J9^P"_X^3D./-YOG82)Y.!8)8BUTR*91X#$_G$3QC$L?`/+;*)5,3@6[ M'+%Q-)OQT&,R8M#9#EM,1:B_,%\R?#6-%E0B?DATU_!F=_6H/]_%#/KE,$W. M[N(HG5=!\TT/NXR=2QPS05PS)!GBBP4L0B(%P/-G@L#$PH!05:'E2`BJ/0YX MDM"$1"@3!A-FLR@6[MQW7[]J-INOBCATFY'DL_F0M2XN6/_'?N]'6KU>;]@] M:+%Y[`/M6?<5K@^GSA,1>GYX9TB8()$T50$_3-M_0%H"<@!Y&OCC>_9/=BOD M0D"QF3I-2B&_3:6,9HFB-?<(/)#Y%+Y(K)>U`5+**7"`:H=8!!]/[5JV\6/. M8SX34L1)A\9`9$1%Z!Z1*Y+I%OB_IBO-:#D.<&A#6>AG&GDUI$6>Q^&A_DF0 M8.<5RU'#(MB1Z0/9##@.V37).*,P5./4'&,T@+$_AQ'4"]A"U].\Y-23,3G M\@/#1/M5C$`0GF*!]ZZ/'!*8("26KA6B!\Q+0B38M:7L%)[?K#0YH(S)Q M!"[Q9W[`XY6"]]L4"#6.H,27*2@UV\BGU9L'P$3!DB7I[1]B+(&GH<WO40KT M#]D<%`GV!T,MHS0V/`1@4+70`ODA+*ZP(T+C]]#(IP9LRA^$XB0).I$JEK!3 M-SOL7H@Y\B;I!^@TF8L8Y:*.4Q#>K6!3$PG:0`$O+8\F?AD8;8.W`7_PQ MZ@G4N5"AKN_V[1)Q^#&PE`Q$!]$#(6`:XS2.@8N`7K#F(>)M`TG&]QJY'Z]F M%I('*7#U38]>*K0^[@#MK@E$E,(R$^UND8D\I!NQ/X>YA7>P8B!/T#U'T+'# M6(@A=*23*.$GN78@PN=L@3)+78*JQV&%2QJ`&BT26D&`-O%#SZJ[&AYM/X<I ME<)"/:)%G12:#XIG/.7Q'55`RH!8W'"OA<!5J-9<.17`/PY$#P1+(R00R1, MW4>MHCA2J^F+\ZM3YL>D"[7*,`2&_Z(0UA!82/QEND0:5`EW<0-7,X;UA65I M278?`K@(V1@@JZU7#:JZ7-)4G(V8WX41B.(8)M9XM`+%'IL-^SQ\5Z5+B151 M<T5IJY6`[AA',>Y/26O7:<L][TKMJD/6+K$?&4,CZ.>7.9'I(0I2V#4> M66]OV'+?]]>!#QTN-+>-;D&WWX=/:OT?7)U37[-<`'F.!_UNESW,C]F M20"RQ?:/"Y4O/Y?JMCHO0PKV5!SX@EU%L.3MWEY'H=WK(MK?A+@'L$D![>6G MTP]Y`/AOC^V]%,1H[`OD^W;OL(L`^MUAEP!<0^LRM:K&[[%#UGTQ$:)0^F&: MSEA[<)0#',4KC=^EPW847Y\4#NYKPI+HJR_.>X'2K$!^WK$W@^HB0!;(M`X M+EHM)5DA%3/!K:,]Z*S4C5H"0;8D`R-%#T.:R"@B8WE`)S*E/L@L6@%`;0LH MF/!_!&UCMD!>@<[&RNQ:`Q)JWP0T56CFSU%1`2^2(0W:;A[X$]HPK#9I-G]) M2MHD^0FLM9D?PK`G,#544^8[R^G':F-J=]>L2;ECO1E5:8V,;/F]KV(`();6 M]EA]!5FM]8_<P7&K'OL3?USK"&!]H_)1S1LVV%!:$8XX"3"Q49N;S9SFG&% M8H1-0=;HQ,R9F7R*Y"<_&+(O0U03V?@W,.6+*+I'4]).]X''/K%_V/(H@3' MN(:J9R+@RQVGX`(V.>4^J;(K(>.E*M0DQ[W-*'V[,5ES]B?]"L0>7UZ.ALQ4 MO!RI_4_Y5QY@?-6\2>0R$%_:O=Z@RX[`8MUGO0'8K0/6/]1?#@^=YW[^^6B` M7P[@\X`-X/,(FN+S?A^?L>H1`W4*GP-X[NXSV`F.X!UHC$%GY^-[7[X'%SD M/_BO*1OQ,'G3&^S\OY:/N_1/K]^MJ?!4N]X+VWVG\396/KX-^/C^.`/2K_2^ ME7>9?$3?JF6""K:*6NA.L]<LMY;[9(=#/M'K5=-CBX):,AFX_4(MASZ"NHL M3L4..AFN/X@6HGKM2[5[W-(&9QQ%3X!N,V[B:S"_=&W0*MC?;O,5>[45^`C^ M?*)!5R/&;^`[">@SV#^U]`EJ+7\1$"K-;ZJHBW."?35^R@",SS<^.Q@'J;O MS4S`N/G=X=X^3$`#!-RG671,Q4Q,A(?@9!/)4=L4`\P6NI\M(KAQ,39-;<9 M8""Y,@<!^;5#:$`-A$W0I:N>`!)4M=P(O`-+SOT!H/.4>)(/B;:,RP-@-Z$O M:^"%XB])R*AB@:Y4!E#/J),(;%HB+!9O"S90].REZ)&H9YO"UCNRD:C!(8%; M7D[0M0%H)RQ9SFZC0,F+,<BAQ@_1Y(<%U%F!&>`V7K\9I>0A&$_!NBS@/'FA M?KR>IK%Z^AC[]'<$5G:LJVD?BYY04*R3J,BAP997U+P`8B4BF"@2+U1W>G5U ME8V3<@E(XH.$?%_@9[M-^UM#M%I-AI^.`Y2#VU<39=.S:KIUS>;UFN#/BP/ MAC/S&_N$!\F:.SN)Y-,["?6X$?2'EK?VNP`>/575S95(TD!J)1+3%Q4>T^ZL M]B81U]=BJ\UN<(/A`%7;'%2]O`S5?B'X#*!]QB*&CO@##U+T,4/M2V,%9.M' M<G)'X$+A6<<C$M&T;J#F^YQ*<%MAR&L5B'K=.F9N.<DW!:GRY:W7[`=VGK!" M]3;5-\MJ>*]U0@6M&RCZB"N'9>>A*>T<@]]^7`1T:K;'2DB:B8J@6M@5!N&H MDD#9.`/!R6PJ-?E*Q(AV*"6M.=3RRA<L]F05:'+A(TG:HMV>K9"O+K[R]"H MU*15:(V"OU9CJ$B-[:KG:^W05^@4GLT(I,MA4%!1<OJ[X/%9A"XVF!LS-EQB M1+.RKS;M[R&?B<L)-1VR6:>P.C1(PV-%1MZMZ1/P48ME50LD264C%3O`Z3B, M;W8J=2*9G*6Q.E5-]/O_O&-=0P&J0R/V!T.E:5PA&N8D*G)`.8B0"1M%K8"! M[;R%7X7_`I4+EU+,YCB1HERT2[TFZ7@LA"<<GFB-L`R*\B+WD?L!EL%>X997 MPO@46130\U+(UDUN?DK0-FO`X>:.U-=*5QU\KMJUFPVJ4S!0J`Q6_!K_AM&" M3!+:1+:$%UC@^@6P<2.^W@*LMP0+5+8%!,_V:$>'R30,?%,BGU11N=8_6YIT M,M@>R*+_\Q3:9[H]&&&/HZ`&R)ZR*+'+?"=H48;)0L1,IKB3@3I59W>TO8*: M@V_)5.W^I#7P*ROWHZJ]'*AC7/4.T&FD4"(ZN=B!3ES0F1.SQ&PDJ8`TF4G M[];]=/=3HP--F'7WI<9-S6P*EKS9H!UJQXK<VGC7NZ@V[8$?<B;UU)F^RY[ M_2T@L_R!`086<`4S@&AL84DV/B7??.,R'V0I"T@7,C_6)PJ>96C3U)@,&_!H M%'/34/#M$_`\Y@48#R-/^HU,?7!`4S?VT3.8PC39K>$*^WXC*_36PA04;WH. M2J%ELP:D6#/6]*2R(,XU4HP8O3_21+M5ZP1$])FZ=<LB&![W+,R@BU7>!W6A M,B>HSQ^UGP8^!WXUNZ]AR?/0$W^1!V+?ZK#02>C15Q6[R:Q0M;5:FPQT4:XK M:.T&'J@0ZN"0A8ZA"&W@+V!*M>W@/V%QA_T-"AOMMF/U_XVUW7[9NP*O=SID M!3?:17L>&N8`ZG2A(>LS4K0'52W1EH>&^9;O6`/@XN%AYU#T9]=LB@6TS! MNC,V'1K:.IY%?[GG0460V]ZN?O6R%5AK"6XVQ,.H#U"[9C+&T;55P1T\W:/L MD6D4`P.*9!S[<S+J(ZV3%*P-AZ(4[*BDW7E>"X>,2;)MI15J9MT5_6Q3#5 M*&]WV)?"FT$D]]$GD;9?LZSS'')1:GR4-HK713P4#KH0;S834FLE_)5`X9W M$E,#]7)5I%A2&E!NU>R)*AVU`"ZW?-PV$-%Z:8[9(:>28$NBRR0UJL:^(7 M:-^IDWJ]XCYEI5'6P9S',@'"J&0RT%S@(?ISV)Y:CRV*Y2E+\5'1Z-%1LX]& MZ=&*JWY49:GXWU0TNA$Y0%7#!=(3P+0Z]01DAC$[4#T(Q%C2832=1JLDB?<! M#^^3Z]B?S82'MG1;0_?_#0J(I+QL=JLJ$S].9$63?J?LZ+2_D/2ZI#8DPN6_ MH>7_$,=1S#STYF\Z%1WOU04+-94H)PT3K"Z$Q`15X-&+"&1RC"E;8S[W)0^@ M*P]#'B:Z6!QCT*D<-$SAJ654XI6?%6B`,S1,1E2.@:E-!)^'C,G#NQ(FK5K M;8C(;(/'E.Z(/=?IIV_A]^YPT"WY-,QQ#UDY;ET"^X2`J'0+2=NQ#ODI:Z), M+PW@V$5P7`'AN`;#]R+;8#CH59/-L'+VO#4*-HRJ<%SSLDQE0,H2M;O.(LC- MK4%E-O1+P_9T<E;,>-'N>)C2_8E(;3@ZP1GJ9&'"<;O)Q1:8FT@R$(I4U`6 MJ60VC]:7'6+54F)-(?I0>F]"=XK)BJ_/Q(2#3TKT+[ZK8=>-4PJ3?,[#[T8P M#(#@>!N;7C[`MFWT[/Y47I:,_`$?&.+P)P?&<SX@FUNF*@L_IWH:%;WNK M7N[L==5JV[?EQ;:OMD",[D&9&/FEWA1-MKFB^4D(=D$>37B%4*;O:Y;Q1J1 MM:^VL8K[90(*;!KTV'3*Y>=1G:[JX[\5$IZ6C[PJSD4T:=[*P[WZ,3"I%"J M36T8@R4;EPY?;C8UV2P(NZ\F2X%))Z`R10='12O-Q0QS`0Y3+Y7IHVML0]FC M[!B2Y".`-J6:L9-5UT^*EA*YK0LW7XJNH^CS;4O^@GC9<G37L'`TB`ARO*[ M-[TN>X?.48(S?74BL)D3A&^!5WF(@(D'52"?/#@H(4'AY]B@@*"?V?S[_<KC M`^BJ'!BTH!+*!#8G"4X\4`'%PA-*XJBY+[(N_B<C+'2"Q3WO!`T,Q40P[*ER M9H'+*'#H,7/48/D05.3VI,`9W]%#1!+P+UA$=]LCAZ'BAZV;ZZ?-"$<(FR7 M!H79.DA4:&N>.D4;FWY_8$^8AG2C#7=(H1<?O]/>^-3!4SZ-<0;VC>3WZ(A1 M@-+>64XBG'X017/<Q++[=BK/7AO)?N@G,"D,6:*EA!5P5RX:4#E#S-A?=(T$ MK&9HC)?H*8;76Z98`0[Z^$TM`?=Y`IBVBL,[?D>7@13"-09>Y),TB!8[I#! MCA?J[CA%I(J]D1FA@U=$-8JBYV]BDRNG8N4T@])9'0R`?1%=($"Y\9:5+.& MD7]V)J[W\Y)AW-!=#56.`X:&JTX&":E:?(SSVH%U,VJG$2PXFFH8ABYUY">G M^O8I!;!M+S\5P9']A+>6BI%K=V#[_'?6PXVDL2+[@<;34\V-EKE..%QAM(PV M^DF-M"&!HD/.<2!X?)69$:?XO:@[<-/2EV1--GR$"B15&\52WTO$0';>4G"N MP<1_8N@1/UWS#=/Q;FY<XZYD17S;?`]L)(?2F@$B3/*,<O?<>]36E'.41MZ2 M4THO#4]`M^E3:I"M-!'Q>SZ^QVM(H?<9;W/[<OEMD/O[&O.^.F30@\YUY_' MS]B5*]ZA36S$6$+?7UWZ1Y'6"UOKXO!$IDA,/S$C&J@I&FF3]]`JC&J]6@T M8DX;V-`_'?+8RKGL:RO*JMO2.Y7V;XX)IW0K#G_XPB.UA]H\C*1SC=D8YJ@& MM8K?<4]>["_8`0YO",5V`MPIPN<OSY@2F?SP5MA#/0N_[=5-+%9^?7#1;$ M_],TEJJ'ML+_SM*DXV0TY;=/5QH,&I*(/(TR$A03B*BPID]\U6BW8T4OW4L' MC_34=L[^07\Z3N2;FC3B4IJD<IGU]AN[&5H.;L+24'_4)UUS:30R36J"^%97 MWY#>@Q6Z=[F<LO4\UPLT1TOZ5QO`#JJ[@:A:[3[?_:I1F?O6H"8;Q,H$&2#F M.N5:_J"IX"K&.2S]/!.TF[RDA7ZP*JA:$=Q610]U'F2F7'K]BG"ACG_D_5Q/ M%:J0M&-39,W4-9Q\L,)8(L7,'[-#%H8L^FEUU8`HO2XY;C4U5JSVMLB5Q6R^ M.]76"/)\TZR[Y3CCLWC$N<IJ?R&#--*HQA__RAO9KN9(,;>=LA1A%3-0Z5: M0+-^U^6A8HWO3\QG<=#WI>FV.:Q7CH$^F.T.%6(DO:&UY_[TSJI5`LHM%]D MI^^AD>HI]VQVVA8!M$;H1+&\C5A@#%14WZ@TZ^J0`0T<\0J1VZUJ@HQ3U7 MU*R.A-8W>`EQ@/;2QZ2&J@/L`\LC=&A6BD)6'S_;G[O*@I.KCHV?.'BO05_C M\V1IK;V!#G/5FW<U`4T=`ZOXF8DL:E6_:!3'J@MJZIA6U2]8;&YAUR2-=%?2 M$>^J7"0Q?5<CPHZJ6ER<HM)ERJ%8(,ST1GV*O;P?83W.6&%ERQ-M^=Z!B>4 MHW^=^ZV5FB5R\3^U.,JO4S\H8L<Z9KD8SDWF)ZVDKI[_?P%02P$"%PL4``(` M"`!*@%E"M*LEN%03``":4@``%0`1```````!`"``MH$`````4V-H961U;&5D M3U-#86QL<RXQ+F-S4T0$`*````!55`4`!UO1*U%02P4&``````$``0!4```` &`!0````` ` end
squeak-dev@lists.squeakfoundation.org