On 5 Dec 2014 at 1:13, Bert Freudenberg wrote:
On 05.12.2014, at 00:49, Dan dnorton@mindspring.com wrote:
On 4 Dec 2014 at 23:22, Bert Freudenberg wrote:
On 04.12.2014, at 23:14, Dan dnorton@mindspring.com wrote:
Howdy,
A class is instantiated and produces output in a data
structure
(array, collection, dictionary,
...). Upon each later (maybe months later) instantiation, the
previous output is needed as
input. What is the best way to do this for modest (not huge)
output? Some possibilities:
Externally - file out and file in Within the class - compile class methods containing the
output;
save with Montecello
I'm interested in how to dynamically compile a class method.
Can
Browser be invoked
dynamically? In studying Browser and friends, it looks
complicated. Am I missing something
or attempting something foolish or ...?
Why wouldn't you just keep the "output" in the image and save
it?
When you restart it months later, it will be there.
- Bert -
That surely is simpler than trying to compile a method.
Not that compiling a method is hard.
That is encouraging. Is it something similar to "Dynamic Message Calling" described in the Terse Guide to Squeak?
I might put something like this in a package.
I'm not sure what you mean by that.
I mean a package on SqueakMap where one can download it and try it out. I see there are over 700 packages out there for the choosing. A great variety. It's unfortunate that not all run on the current release of Squeak but maybe with a little work... ;)
Would users find saving the image as... to be the expected way of
doing things?
- Dan
Depends on who your users are. If you were the user ... you're saving your image all the time, right?
Um, not exactly. But more often than in the past. I feel most comfortable saving with Montecello.
Maybe you should be more specific in what data you want to store, how you want to distribute it, and who is going to use it.
I have in mind a list of names which are matched randomly in pairs then filtered according to a set of rules. The output is a dictionary and the rules specify that no pair can be the same as previous (up to 3) instances. There are other rules and often hundreds of iterations take place before all pairs obey all the rules.
It might be used, as it is in our family, to draw names for Christmas. The person who runs the program distributes the results to those on the list.
- Dan
On 05.12.2014, at 12:15, Dan dnorton@mindspring.com wrote:
On 5 Dec 2014 at 1:13, Bert Freudenberg wrote:
On 05.12.2014, at 00:49, Dan dnorton@mindspring.com wrote:
On 4 Dec 2014 at 23:22, Bert Freudenberg wrote:
Why wouldn't you just keep the "output" in the image and save
it?
When you restart it months later, it will be there.
- Bert -
That surely is simpler than trying to compile a method.
Not that compiling a method is hard.
That is encouraging. Is it something similar to "Dynamic Message Calling" described in the Terse Guide to Squeak?
Like this:
SomeClass compile: code classified: category.
E.g. MyClass compile: 'hello ^6*9' classified: 'foo'. MyClass new hello ==> 54
Or
MyClass class compile: 'helloAgain ^13r42' classified: 'bar'. MyClass helloAgain ==> 54
I might put something like this in a package.
I'm not sure what you mean by that.
I mean a package on SqueakMap where one can download it and try it out. I see there are over 700 packages out there for the choosing. A great variety. It's unfortunate that not all run on the current release of Squeak but maybe with a little work... ;)
SqueakMap is just a catalog for finding useful code. You first need to put your stuff somewhere else, SqueakMap would be the last step.
Would users find saving the image as... to be the expected way of
doing things?
- Dan
Depends on who your users are. If you were the user ... you're saving your image all the time, right?
Um, not exactly. But more often than in the past. I feel most comfortable saving with Montecello.
Smalltalk is a personal computing environment, first and foremost. Source code is secondary. We basically just resort to source code when we want to share stuff with other people. Source code in files has been called "quaint".
Maybe you should be more specific in what data you want to store, how you want to distribute it, and who is going to use it.
I have in mind a list of names which are matched randomly in pairs then filtered according to a set of rules. The output is a dictionary and the rules specify that no pair can be the same as previous (up to 3) instances. There are other rules and often hundreds of iterations take place before all pairs obey all the rules.
It might be used, as it is in our family, to draw names for Christmas. The person who runs the program distributes the results to those on the list.
Keeping it in the image is certainly the simplest, especially if you intend to use it by just running an expression in a workspace.
If you build it as an app so the user does not have to deal with Smalltalk, then it is advisable to treat the deployed image as read-only. In that case you would have to store the data in a separate file.
What makes no sense at all is storing that data in source code.
- Bert -
On 12/5/14, Bert Freudenberg bert@freudenbergs.de wrote:
On 05.12.2014, at 12:15, Dan dnorton@mindspring.com wrote:
On 5 Dec 2014 at 1:13, Bert Freudenberg wrote:
On 05.12.2014, at 00:49, Dan dnorton@mindspring.com wrote:
On 4 Dec 2014 at 23:22, Bert Freudenberg wrote:
Why wouldn't you just keep the "output" in the image and save
it?
When you restart it months later, it will be there.
- Bert -
That surely is simpler than trying to compile a method.
Not that compiling a method is hard.
That is encouraging. Is it something similar to "Dynamic Message Calling" described in the Terse Guide to Squeak?
Like this:
SomeClass compile: code classified: category.
E.g. MyClass compile: 'hello ^6*9' classified: 'foo'. MyClass new hello ==> 54
Or
MyClass class compile: 'helloAgain ^13r42' classified: 'bar'. MyClass helloAgain ==> 54
I might put something like this in a package.
I'm not sure what you mean by that.
I mean a package on SqueakMap where one can download it and try it out. I see there are over 700 packages out there for the choosing. A great variety. It's unfortunate that not all run on the current release of Squeak but maybe with a little work... ;)
SqueakMap is just a catalog for finding useful code. You first need to put your stuff somewhere else, SqueakMap would be the last step.
Would users find saving the image as... to be the expected way of
doing things?
- Dan
Depends on who your users are. If you were the user ... you're saving your image all the time, right?
Um, not exactly. But more often than in the past. I feel most comfortable saving with Montecello.
Smalltalk is a personal computing environment, first and foremost. Source code is secondary. We basically just resort to source code when we want to share stuff with other people. Source code in files has been called "quaint".
Maybe you should be more specific in what data you want to store, how you want to distribute it, and who is going to use it.
I have in mind a list of names which are matched randomly in pairs then filtered according to a set of rules. The output is a dictionary and the rules specify that no pair can be the same as previous (up to 3) instances. There are other rules and often hundreds of iterations take place before all pairs obey all the rules.
It might be used, as it is in our family, to draw names for Christmas. The person who runs the program distributes the results to those on the list.
Keeping it in the image is certainly the simplest, especially if you intend to use it by just running an expression in a workspace.
If you build it as an app so the user does not have to deal with Smalltalk, then it is advisable to treat the deployed image as read-only. In that case you would have to store the data in a separate file.
What makes no sense at all is storing that data in source code.
Quite a number of people using Smalltalk "live" in an image. The image file is treated like a "database" which contains the work (data and code acting on it). For that what you do is to save the image and keep backups. And continue to work with the very same image. This is what Bert refers to.
Another way is to multiple images. Or work with a group of others where you need to share the data. Everybody has his or her own image.
Then keeping data in source code makes a lot of sense in particular if you are using a DSL (very easy in Smalltalk) which describes the data in a way decodable for non-Smalltalk users. Having the data in a class and filing it out as source code allows you to move your data easily to another image. You may have a package with your 'Resources', i.e. the data as code which people can load to get your work (as you write Metacello).
There are however other ways for data exchange as well, search in the Squeak mailing list for SIXX (XML based) and Fuel (binary) for example. They have their own merits.
I think for your question ' Using Output as the Next Input' to have the output encoded in source code and use it maybe months later (in a different image, maybe in a different Smalltalk system, e.g. Cuis or Pharo) makes a lot of sense if that works for you.
As you have seen in the answer provided by Bert and others generating Smalltalk code is straightforward.
Depending on your (internal) DSL you use to describe your data you may as well parse it with another system. Six years ago Goran Krampe came up with a (Smalltalk) file format he called 'Tirade' and there was some discussion on it on the Squeak list (http://goran.krampe.se/2009/03/16/tirade-a-file-format-for-smalltalkers/ and check out the list archives). I suggest you have a look at it and then maybe ask more about it here or on the Squeak, Pharo or Cuis list.
Actually you asked a great question!
HTH
Hannes
beginners@lists.squeakfoundation.org