From michael at guildsoftware.com Mon Mar 6 01:10:09 2006 From: michael at guildsoftware.com (momerath) Date: Sun, 5 Mar 2006 19:10:09 -0600 Subject: [cells-devel] Hoping for a kickstart Message-ID: <9d2a517b0603051710s31ab30aby80c4696ed632bfb9@mail.gmail.com> Greetings, I exchanged a couple posts with Kenny Tilton on c.l.l about my project a while back, but I was distracted by immediate practical concerns and didn't really get into any details. I've since read a couple of the bits of documentation that accompany cells (as acquired through asdf-install)- specifically the 01-cell-basics.lisp document, some of hello world and maybe bits of something else I'm not recalling. At any rate, while I've been able to work the examples and more or less understand things on the surface, my initial attempt at using Cells for a very simple chunk of my own app was frustrating. Rather than showing you the feeble start I made, I'd like to describe the desired functionality, and get some feedback as to the idiom(s) to use. The primary classes are cargo items, cargo holds and maybe cargo sets. --Cargo items: slots that wouldnt change in the object's lifetime: item-id type-id volume-units (1-3 currently) changable slots (c-in for now I imagine, but if Cells invades the rest of the program, maybe not): holder-id authorized-holder-ids recipient-id calculated states I want efficient repeated access to and/or side effects on change: stolen (holder isnt a member of auth-h-ids) delivered (holder is recip) spaced (holder is not a char but a sector) --Cargo holds: static: ship-owner-id capacity dynamic: volume-used cargo-type-to-quantity hash --Cargo sets: Basically I'd like to be able to create a cargo set that is bigger than any cargo hold, and allow it to be distributed among the holds by both npc agents and players, but retain a handle on the set and certain dynamic subsets like the cargo in a particular ship, all the ships in a sector, all spaced cargo, all stolen cargo of a particular type in a sector, etc. If the set mechanism were flexible and fast enough, I imagine that Holds could just be a type of set (the set of cargo held by character X), but there is a question of where to enforce hold capacity. These sets would be used by npc agents (eg pirates) to drive potential actions (both at the level of posting a mission to collect specific cargo, and a single agent picking the best cargo close by that will fit in its hold). So, I hope that made sense. I don't expect anyone to go out of their way on this; I think I really just need a push in the right direction. ~Michael Warnock Guild Software Inc. -------------- next part -------------- An HTML attachment was scrubbed... URL: From tjg-lisp at pentaside.org Sat Mar 11 13:01:12 2006 From: tjg-lisp at pentaside.org (Tayssir John Gabbour) Date: Sat, 11 Mar 2006 14:01:12 +0100 Subject: [cells-devel] DEF-C-OUTPUT and hello-world.lisp headscratcher Message-ID: <4412CA18.1090702@pentaside.org> Hi all, In cells-test/hello-world.lisp, when running DEF-C-OUTPUT, old-value seems always bound to nil. My understanding is it should be bound to the previous thing the slot was set to. Am I missing something? Sourcecode and repl output below (on SBCL PPC Darwin 0.9.9): (use-package :cells) (use-package :utils-kt) (defmodel computer () ((happen :cell :ephemeral :initform (c-in nil) :accessor happen) (location :cell t :initform (c? (case (^happen) (:leave :away) (:arrive :at-home) (t .cache))) ;; ie, unchanged :accessor location) (response :cell :ephemeral :initform nil :initarg :response :accessor response))) (flet ((fmt (name new-value old-value-boundp old-value) (format t "~%~A: ~15A (previously ~:[an unbound ~A~;~A~])" name new-value old-value-boundp old-value))) (def-c-output response (self new-value old-value old-value-boundp) (fmt "response" new-value old-value-boundp old-value)) (def-c-output happen (self new-value old-value old-value-boundp) (fmt "happen " new-value old-value-boundp old-value)) (def-c-output location (self new-value old-value old-value-boundp) (fmt "location" new-value old-value-boundp old-value))) (defun hello-world () (let ((dell (make-be 'computer :response (c? (bwhen (h (happen self)) (if (eql (^location) :at-home) (case h (:knock-knock "who's there?") (:world "hello, world.")) "")))))) (dotimes (n 2) (setf (happen dell) :knock-knock)) (setf (happen dell) :arrive) (setf (happen dell) :knock-knock) (setf (happen dell) :world) (values))) ;; At the repl: CL-USER> (hello-world) ---- ;;; instancing object... happen : NIL (previously an unbound NIL) location: NIL (previously NIL) response: NIL (previously NIL) ;;; instanced object # ---- happen : KNOCK-KNOCK (previously NIL) response: (previously NIL) happen : KNOCK-KNOCK (previously NIL) response: (previously NIL) happen : ARRIVE (previously NIL) location: AT-HOME (previously NIL) happen : KNOCK-KNOCK (previously NIL) response: who's there? (previously NIL) happen : WORLD (previously NIL) response: hello, world. (previously NIL) Thanks, Tayssir From tjg-lisp at pentaside.org Sun Mar 12 08:55:36 2006 From: tjg-lisp at pentaside.org (Tayssir John Gabbour) Date: Sun, 12 Mar 2006 09:55:36 +0100 Subject: [cells-devel] DEF-C-OUTPUT and hello-world.lisp headscratcher In-Reply-To: <4412CA18.1090702@pentaside.org> References: <4412CA18.1090702@pentaside.org> Message-ID: <4413E208.2020001@pentaside.org> Nevermind, it was answered on usenet. ;) Tayssir Tayssir John Gabbour wrote: > Hi all, > > In cells-test/hello-world.lisp, when running DEF-C-OUTPUT, old-value > seems always bound to nil. My understanding is it should be bound to the > previous thing the slot was set to. Am I missing something? > > Sourcecode and repl output below (on SBCL PPC Darwin 0.9.9): > > > > (use-package :cells) > (use-package :utils-kt) > > (defmodel computer () > ((happen :cell :ephemeral :initform (c-in nil) :accessor happen) > (location :cell t > :initform (c? (case (^happen) > (:leave :away) > (:arrive :at-home) > (t .cache))) ;; ie, unchanged > :accessor location) > (response :cell :ephemeral :initform nil :initarg :response :accessor > response))) > > (flet ((fmt (name new-value old-value-boundp old-value) > (format t "~%~A: ~15A (previously ~:[an unbound ~A~;~A~])" > name new-value old-value-boundp old-value))) > (def-c-output response (self new-value old-value old-value-boundp) > (fmt "response" new-value old-value-boundp old-value)) > (def-c-output happen (self new-value old-value old-value-boundp) > (fmt "happen " new-value old-value-boundp old-value)) > (def-c-output location (self new-value old-value old-value-boundp) > (fmt "location" new-value old-value-boundp old-value))) > > > (defun hello-world () > (let ((dell > (make-be 'computer > :response (c? (bwhen (h (happen self)) > (if (eql (^location) :at-home) > (case h > (:knock-knock "who's there?") > (:world "hello, world.")) > "")))))) > (dotimes (n 2) > (setf (happen dell) :knock-knock)) > > (setf (happen dell) :arrive) > (setf (happen dell) :knock-knock) > (setf (happen dell) :world) > (values))) > > > > ;; At the repl: > > > CL-USER> (hello-world) > > ---- > ;;; instancing object... > happen : NIL (previously an unbound NIL) > location: NIL (previously NIL) > response: NIL (previously NIL) > ;;; instanced object # > ---- > happen : KNOCK-KNOCK (previously NIL) > response: (previously NIL) > happen : KNOCK-KNOCK (previously NIL) > response: (previously NIL) > happen : ARRIVE (previously NIL) > location: AT-HOME (previously NIL) > happen : KNOCK-KNOCK (previously NIL) > response: who's there? (previously NIL) > happen : WORLD (previously NIL) > response: hello, world. (previously NIL) > > > > Thanks, > Tayssir > _______________________________________________ > cells-devel site list > cells-devel at common-lisp.net > http://common-lisp.net/mailman/listinfo/cells-devel > From kentilton at gmail.com Wed Mar 15 14:47:12 2006 From: kentilton at gmail.com (Ken Tilton) Date: Wed, 15 Mar 2006 09:47:12 -0500 Subject: [cells-devel] re: Hoping for a kickstart Message-ID: Hey, sorry again for the dropout, I was moving homes and emails... > > > [cells-devel] Hoping for a kickstartmomerath michael at guildsoftware.com > Sun Mar 5 20:10:09 EST 2006________________________________ > > my > initial attempt at using Cells for a very simple chunk of my own app was > frustrating. It really is a paradigm shift, so expect some whiplash. :) Backsliding, too: for months after discovering (and loving) Cells I would still fall into an imperative style when attacking some new functionality because that would get my head into start-from-scratch mode and I would fall back into my old ways. The neat thing is that after an hour I would get this creepy feeling and realize why. :) > > Rather than showing you the feeble start I made,... OK, but it will be easier for me to help you if I have a feel for how much you understand or do not, or where you are having trouble, and for that nothing beats your failed attempts. No need to be shy, because it does take a long time to start thinking declaratively, as I said. (But it is fun from the beginning, and really worth it.) That said.... > I'd like to > describe the desired functionality, and get some feedback as to the idiom(s) > to use. > > The primary classes are cargo items, cargo holds and maybe cargo sets. > > --Cargo items: > > slots that wouldnt change in the object's lifetime: > item-id > type-id > volume-units (1-3 currently) > > changable slots (c-in for now I imagine, but if Cells invades the rest of > the program, maybe not): > holder-id > authorized-holder-ids > recipient-id > > calculated states I want efficient repeated access to and/or side effects on > change: > stolen (holder isnt a member of auth-h-ids) > delivered (holder is recip) > spaced (holder is not a char but a sector) > > --Cargo holds: > > static: > ship-owner-id > capacity > > dynamic: > volume-used > cargo-type-to-quantity hash > > > --Cargo sets: > Basically I'd like to be able to create a cargo set that is bigger than any > cargo hold, and allow it to be distributed among the holds by both npc > agents and players, but retain a handle on the set and certain dynamic > subsets like the cargo in a particular ship, all the ships in a sector, all > spaced cargo, all > stolen cargo of a particular type in a sector, etc. If the set mechanism > were flexible and fast enough, I imagine that Holds could just be a type of > set (the set of cargo held by character X), but there is a question of where > to enforce hold capacity. These sets would be used by npc agents (eg > pirates) to drive potential actions (both at the level of posting a mission > to collect specific cargo, and a single agent picking the best cargo close > by that will fit in its hold). > > > So, I hope that made sense. Yes, but I have a suspicion (and your subject header confirms this) that we can duck all that complexity and still get you kickstarted. By which I mean, nothing there stands out as especially hard, there is just a lot of it. So let's get you up to speed on a declarative approach with the simplest subset you can carve out. Then you can start adding in complexity and holler again for help when you get stuck. And if you do not mind we can make this a Use Case for others to learn from (I happen to think the Black Book series of tech references (if you know it) is The Right Way to teach a system.) We might want to start with a game universe that already has three ships with varying numbers and sizes of holds, one set of cargo, and one recipient? Just make those in a hardcoded initializer. Later on you can worry about how the universe changes and how to have the model adjust dynamically to, say, a new ship. I will let you be the judge, just try to think up something dead simple based on your understanding. The key trick here, and I bet this is where you are stuck, is... how do things /happen/? Don't feel bad, if so; I always have trouble with this. Cell applications are like spreadsheets: they are great at expressing static computations over other spreadsheet cells, but the only thing that /happens/ is a spreadsheet user typing a change into one cell or another. If I am right, getting you over this hump really does not need much complexity at all, it might just be as simple as: how do I express an event such as "player allocates 50 tons of corn to Titanic, Hold 42"? After that you want to see an "unallocated amount" change, and you want to see the hold free space change, and you want to see the allocation in a list of cargo subsets. Hell, maybe I will toss off a quick Celtk demo complete with GUI. OK, back to you. Let me know if this makes sense or if you need something else. ken From michael at guildsoftware.com Wed Mar 15 23:49:19 2006 From: michael at guildsoftware.com (momerath) Date: Wed, 15 Mar 2006 17:49:19 -0600 Subject: [cells-devel] kickstart (fixed) Message-ID: <9d2a517b0603151549w435d781ex3f14171bc37c4297@mail.gmail.com> Wow that was weird:) I used the google toolbar spellchecker right before sending, and it acted a bit odd, so I checked the sent copy and saw that it had left all the spellchecker formatting in the message! Here it is as plain text. There are still some extraneous spaces, but I don't think they'll make it hard to read, so... Thanks for getting back to me. I was beginning to wonder which of the 5 ways to interpret the silence :) I think it must be in the genes: ( http://en.wikipedia.org/wiki/Warnock's_Dilemma) Anyway, here is what I've got: ( defmodel cargo-hold () (ship-owner capacity ;; a set of cargo-types (types :cell t : initarg :types : initform nil) ;; cargo-type -> quantity (quantities :cell t : initarg :quantities : initform (make-hash-table)))) ( defmodel cargo () ;; a type-id, name and the number of ;; cargo-hold units it takes up (1-3) (type name volume ;; the character-id of the owner of ;; the cargo-hold unless cargo is spaced (holder :cell t : initarg :holder : initform (c-in nil) : accessor holder) ( auth-list :cell t : initarg : auth-list : initform nil : accessor auth-list) (recipient :cell t : initarg :recipient : initform nil : accessor recipient) (stolen :cell t : initarg :stolen : initform (c? (when (member (^holder) (^ auth-list)) t)) : accessor stolen) (spaced :cell t : initarg :spaced : initform (c? (when holder t)) : accessor spaced) (delivered :cell t : initarg :delivered : initform (c? (when ( eql (^holder) (^recipient)) t)) : accessor delivered))) The first thing you'll probably notice is that there is no mechanism for the cargo-holds to actually "contain" cargo objects. I know I could do as the "summer" example of the cell-basics doc does, and push them onto a list, and recalculate based on the whole list every time it changes, but I was hoping for something more elegant and efficient. Only one entry in the quantities hash needs to change when an item is added for instance. I thought of having in and out slots (set the slot to a cargo object to add or remove; the other slots do their thing and then clear the in/out slot), but that seems ugly and I wasn't even sure how to pull it off. And then there is the whole thing with cargo-sets which is closer to what I'd like to do with Cells on the larger scale. Basically what I want is to have a large number of sets and their unions/intersections efficiently accessible anywhere in my code- stuff like "all characters of faction X in sector Y carrying at least one Z in their cargo hold. I hope this makes my level of understanding more clear. I think I'm probably more prepared for the paradigm shift than most, owing, no doubt, to my long infatuation with Ted Nelson's ZigZag. ~Michael Warnock Guild Software Inc. From kentilton at gmail.com Thu Mar 16 01:35:41 2006 From: kentilton at gmail.com (Ken Tilton) Date: Wed, 15 Mar 2006 20:35:41 -0500 Subject: [cells-devel] kickstart (fixed) In-Reply-To: <9d2a517b0603151549w435d781ex3f14171bc37c4297@mail.gmail.com> References: <9d2a517b0603151549w435d781ex3f14171bc37c4297@mail.gmail.com> Message-ID: OK, I will look at this tomorrow, working on getting out Cells3 and Celtk tonight. Some notes below... On 3/15/06, momerath wrote: > Wow that was weird:) I used the google toolbar spellchecker right > before sending, and it acted a bit odd, so I checked the sent copy and > saw that it had left all the spellchecker formatting in the message! > Here it is as plain text. There are still some extraneous spaces, but > I don't think they'll make it hard to read, so... > > Thanks for getting back to me. I was beginning to wonder which of the > 5 ways to interpret the silence :) I think it must be in the genes: ( > http://en.wikipedia.org/wiki/Warnock's_Dilemma) > > Anyway, here is what I've got: > > ( defmodel cargo-hold () > (ship-owner capacity > ;; a set of cargo-types > (types :cell t : initarg :types > : initform nil) A while ago I changed the default on :cell from nil to t since I found I almost never said :cell nil. You cannot setf a cell unless it is initialzed to be an input (c-input or c-in), so at least add :cell nil to the non-cell slots. > ;; cargo-type -> quantity > (quantities :cell t : initarg :quantities > : initform (make-hash-table)))) Note that this cell is initialized with a non-cell value. That's OK, but nothing will get triggered as you /mutate/ the hashtable contents. So you either do not want this to be a Cell, or you need to use something like a list and then specify 'equal as the "changed" test (I use that so rarely I will have to look it up for you when I have time!). > > ( defmodel cargo () > ;; a type-id, name and the number of > ;; cargo-hold units it takes up (1-3) > (type name volume > ;; the character-id of the owner of > ;; the cargo-hold unless cargo is spaced > (holder :cell t : initarg :holder > : initform (c-in nil) : accessor holder) Holder? What is that? if the comment above applies, I still do not get it. > > ( auth-list :cell t : initarg : auth-list > : initform nil : accessor auth-list) > (recipient :cell t : initarg :recipient > : initform nil : accessor recipient) > (stolen :cell t : initarg :stolen > : initform (c? (when (member (^holder) > (^ auth-list)) > t)) You could just say (member ....). And I think you meant (not (member...)) > : accessor stolen) > (spaced :cell t : initarg :spaced > : initform (c? (when holder t)) > : accessor spaced) You could just say (c? (^holder)) since this is not scheme. And if it really is always this simple (maybe not?), then you could just as easily say: (defun spaced (x) (holder x)) ie, Do not use Cells unnecessarily. But I am guessing this will get more complicated, if so never mind. :) > (delivered :cell t : initarg :delivered > : initform (c? (when ( eql (^holder) > (^recipient)) > t)) Again, this is not Scheme. But maybe you find that more readable? > : accessor delivered))) > > > The first thing you'll probably notice is that there is no mechanism > for the cargo-holds to actually "contain" cargo objects. I know I > could do as the "summer" example of the cell-basics doc does, and push > them onto a list, My first question will be, What is "them"? ie, How exactly do things happen in this game? Maybe a player types "Allocate to in hold " and then away we go? Anyway, let me address this point: > and recalculate based on the whole list every time > it changes, but I was hoping for something more elegant and > efficient. I understand. It is a common problem. A stock changes price, and an index must be recalculated. Why recalculate the whole index when a little Algebra can let the price change even if weighted be used to compute a delta in the index. (a) We can definitely make this more elegant (possibly using synapses) but... (b) Let's defer this optimization a while since it is an advanced topic > Only one entry in the quantities hash needs to change when > an item is added for instance. I thought of having in and out slots > (set the slot to a cargo object to add or remove; the other slots do > their thing and then clear the in/out slot), but that seems ugly and I > wasn't even sure how to pull it off. That is how another Cells user handled such a problem. You can make the slot clear itself after processing by specifying: (in :cell :ephemeral ....) But I have a feeling you will want instead to simply push a new "allocation" instance onto a list of allocations of the cargo and handle the update of the hold by having an observer forward the new info to the concerned ship via SETF, at which point the holds of the ship can check to see if it was for them. Or the observer can go straight to the hold. We'll work something out clean as well as efficient. For now please try a pure declarative approach. the computation of the stock index simply recalculated the whole index on every relevant trade and was able to keep up with realtime, realworld trading. > > And then there is the whole thing with cargo-sets which is closer to > what I'd like to do with Cells on the larger scale. Basically what I > want is to have a large number of sets and their unions/intersections > efficiently accessible anywhere in my code- stuff like "all characters > of faction X in sector Y carrying at least one Z in their cargo hold. That sounds like an adhoc query. :) But I think you are talking about groups known beforehand. I have some tricks in mind for that. One has Cells recompute certain gross cross-sections as things happen, then queries can look at relatively few instances, still doing some of the work but not so much as to kill performance. The key is granularity and having the right partial aggregates computed by Cells. > > I hope this makes my level of understanding more clear. I think I'm > probably more prepared for the paradigm shift than most, owing, no > doubt, to my long infatuation with Ted Nelson's ZigZag. Off to Google I go. :) ken From kentilton at gmail.com Thu Mar 16 06:14:13 2006 From: kentilton at gmail.com (Ken Tilton) Date: Thu, 16 Mar 2006 01:14:13 -0500 Subject: [cells-devel] Cells 3 and Celtk committed to CVS Message-ID: I'll try to write something up tomorrow and probably put it in CVS as well as post it here. Celtk is a good Cells demo since it makes extensive use of the new client queue of deferred propagation tasks, as necessitated by Tk. Maybe someday it will be its own c-l.net project, but for now it is just a second module under in the Cells repository (well, there are others but they are deprecated.) kt From michael at guildsoftware.com Thu Mar 16 11:42:23 2006 From: michael at guildsoftware.com (momerath) Date: Thu, 16 Mar 2006 05:42:23 -0600 Subject: [cells-devel] change of topics Message-ID: <9d2a517b0603160342r76e777c6x691ba799cec35fbe@mail.gmail.com> Hi, I'm thinking the cargo problem isn't as well-suited to Cells as some of the other things on my todo list. I picked it because it was simple, but I think I now grasp the direction that it would go; my basic disconnect was how a hash-table could be used as an input or intermediate cell. It looks to me now that I wouldn't gain much over my existing procedural/rule-based version by re-implementing it with Cells (at least short of implementing ZigZag first). On the other hand, the next big feature I'm going to implement is a dynamic economy simulation, which, I think, is exactly the type of system Cells would be good for modelling. So here is a description of a somewhat simplified system in english- (psuedo)code coming soon: -- The primary actors are Stations (space-stations). Stations have an inventory of Items. Items are either fundamental (ore) or produced from other Items (produced and fundamental). The required ingredients for each Item are static. Each Station has a set of Items which it produces, and by implication of the production requirements, a set of Items to stock. Initially, an arbitrary desired quantity of each item will determine when and how the Station takes steps to bring the quantity closer to the norm. The steps a station can take are: adjusting prices, producing a desired item from more plentiful ingredients, negotiating a shipment from another Station, and posting a mining mission (for ores). In shipping negotiation, the providing station determines its capability (items in stock?) and overhead (payment of player/npc traders and escorts (number determined by route danger)), and makes an offer to the receiving station (a procedural way of describing something that could be done in a more "push" or Cells-ish way). The receiving station accumulates offers for all stations that it does business with (whole other ball of wax), and then picks the cheapest. Shipments encounter danger and rarely make it through completely intact. At least initially, the payment is for goods received and the providing stations don't notice trends in route danger, so no risk/benefit analysis need be done. I think that covers the basics. In the future, some of the decisions would be put in the hands of planning agents (how much to stock, which stations to deal with, determining supply and demand curves, etc). -- While you think about that (if you get a chance), I'll try to implement it, and I'll post again when I get stuck or I've got something to critique. Thanks for the help, Michael From kentilton at gmail.com Thu Mar 16 18:22:39 2006 From: kentilton at gmail.com (Ken Tilton) Date: Thu, 16 Mar 2006 13:22:39 -0500 Subject: [cells-devel] change of topics In-Reply-To: <9d2a517b0603160342r76e777c6x691ba799cec35fbe@mail.gmail.com> References: <9d2a517b0603160342r76e777c6x691ba799cec35fbe@mail.gmail.com> Message-ID: On 3/16/06, momerath wrote: > Hi, > > I'm thinking the cargo problem isn't as well-suited to Cells as some > of the other things on my todo list. I picked it because it was > simple, but I think I now grasp the direction that it would go; my > basic disconnect was how a hash-table could be used as an input or > intermediate cell. It looks to me now that I wouldn't gain much over > my existing procedural/rule-based version by re-implementing it with > Cells (at least short of implementing ZigZag first). I am having a hard time following you, but my rough guess is that Cells would be fine for this application. I am not sure why you think otherwise. The hash-table thing is irrelevant; it is nothing but an optimization, and there is no need to give up the optimization to do Cells, you just have to make sure you expose state change to the Cells engine. Mutating any data structure bypasses the Cells watchdog, so you have to implement with the hash table behind the scenes, in a non-Cell slot, maintained by observers on Cells slots that do actually change and trigger Cells change management. Actually, I think you just lost interest in shipping. :) Your big mistake is deciding what Cells is good for when you still do not know what Cells is. Zigzag or no. Or how Cells refactors an application. One thing you miss in your search for the Holy Grail is that even in modest roles, Cells still makes things significantly nicer in many small ways. A good example is simply being able to have an initform that can compute of arbitrary state as if in initialize-instance. Another is something as prosaic as managing a group of radio buttons. Any idiot can do that, but it is still nicer with Cells. > > On the other hand, the next big feature I'm going to implement is a > dynamic economy simulation, which, I think, is exactly the type of > system Cells would be good for modelling. So here is a description of > a somewhat simplified system in english- (psuedo)code coming soon: > > -- > The primary actors are Stations (space-stations). Stations have an > inventory of Items. Items are either fundamental (ore) or produced > from other Items (produced and fundamental). The required ingredients > for each Item are static. Each Station has a set of Items which it > produces, and by implication of the production requirements, a set of > Items to stock. > > Initially, an arbitrary desired quantity of each item will determine > when and how the Station takes steps to bring the quantity closer to > the norm. The steps a station can take are: adjusting prices, > producing a desired item from more plentiful ingredients, negotiating > a shipment from another Station, and posting a mining mission (for > ores). > > In shipping negotiation, the providing station determines its > capability (items in stock?) and overhead (payment of player/npc > traders and escorts (number determined by route danger)), and makes an > offer to the receiving station (a procedural way of describing > something that could be done in a more "push" or Cells-ish way). The > receiving station accumulates offers for all stations that it does > business with (whole other ball of wax), and then picks the cheapest. > Shipments encounter danger and rarely make it through completely > intact. At least initially, the payment is for goods received and the > providing stations don't notice trends in route danger, so no > risk/benefit analysis need be done. > > I think that covers the basics. In the future, some of the decisions > would be put in the hands of planning agents (how much to stock, which > stations to deal with, determining supply and demand curves, etc). > -- > > While you think about that (if you get a chance), I'll try to > implement it, and I'll post again when I get stuck or I've got > something to critique. I'll be happy to help. It sounds like you are coming up to speed nicely on Cells, so I will wait for you to come back with specific problems/requirements. Don't be shy. Even if you are Cells cannot do something, that is usually how Cells get extended / enhanced / fixed. ken From kentilton at gmail.com Thu Mar 16 19:30:25 2006 From: kentilton at gmail.com (Ken Tilton) Date: Thu, 16 Mar 2006 14:30:25 -0500 Subject: [cells-devel] Cells 3 and Celtk committed to CVS Message-ID: This is weird, I know I sent this but did not get it as a list subscriber nor do I see it in my sent folder. Anyway, at pain of repeating myself. Cells 3 has been committed to CVS (not a new module, just Cells updated). Celtk is a new module, a portable Cells Inside GUI built atop the core of LTk. It requires Cells3. I may actually do a little Cells doc by way of explaining Cells3 differences. The big deal can be sorted out by examining the "finish-business" function. It makes apparent how Cells orchestrates orderly state change. Cells3 also enforces that, by yelping if one attempts a SETF in an observer -- you have to wrap the setf and any computation relevant to that setf: (with-integrity (:change) ) If this helps, here is what I had to do to port the test suite: [s/old/new/w is the VAX EDT editor command for subsitute/old/new/whole] s/def-c-output/defobserver/w The syntax is unchanged. Any setfs of input Cells you have in the body will cause a runtime error unless you wrap the form in with-integrity as discussed above. s/with-deference/with-integrity (:change)/w turns out all the wrapped forms were SETFs. I kinda like the idea of with-deference since, in the case of an observer setf, one really is asking for a deferred action. with-integrity is a "maybe" deal -- it says "go ahead if not already under integrity handling. s/make-be/make-instance/w special handling now handled in shared-initialize Forget to-be, not needed anymore When the Family code squawks about :fm-parent being required, add: :fm-parent self ...to the make-instance argument list. In some cases the instances were being made without a surrounding (c? ...) form. That is needed to have access to the parent instance self. btw, there is a make-kid macro that is just (make-instance ',class :fm-parent self ...). again, the cells engine yelps if it encounters a SETF needing wrapping in: (with-integrity (:change) (setf ...)) Celtk shows a complicated example of using the client queue to get a declarative Cells app to talk coherently to an imperative, order-sensitive system. kt From michael at guildsoftware.com Wed Mar 15 23:40:25 2006 From: michael at guildsoftware.com (momerath) Date: Wed, 15 Mar 2006 17:40:25 -0600 Subject: [cells-devel] kickstart Message-ID: <9d2a517b0603151540l4370758au8fe019b616389e70@mail.gmail.com> *Thanks for getting back to me. I was beginning to wonder which of the 5 ways to interpret the silence :) I think it must be in the genes: ( http://en.wikipedia.org/wiki/Warnock's_Dilemma) Anyway, here is what I've got: (defmodel cargo-hold () (ship-owner capacity ;; a set of cargo-types (types :cell t :initarg :types :initform nil) ;; cargo-type -> quantity (quantities :cell t :initarg :quantities :initform (make-hash-table)))) (defmodel cargo () ;; a type-id, name and the number of ;; cargo-hold units it takes up (1-3) (type name volume ;; the character-id of the owner of ;; the cargo-hold unless cargo is spaced (holder :cell t :initarg :holder :initform (c-in nil) :accessor holder) (auth-list :cell t :initarg :auth-list :initform nil :accessor auth-list) (recipient :cell t :initarg :recipient :initform nil :accessor recipient) (stolen :cell t :initarg :stolen :initform (c? (when (member (^holder) (^auth-list)) t)) :accessor stolen) (spaced :cell t :initarg :spaced :initform (c? (when holder t)) :accessor spaced) (delivered :cell t :initarg :delivered :initform (c? (when (eql (^holder) (^recipient)) t)) :accessor delivered))) The first thing you'll probably notice is that there is no mechanism for the cargo-holds to actually "contain" cargo objects. I know I could do as the "summer" example of the cell-basics doc does, and push them onto a list, and recalculate based on the whole list every time it changes, but I was hoping for something more elegant and efficient. Only one entry in the quantities hash needs to change when an item is added for instance. I thought of having in and out slots (set the slot to a cargo object to add or remove; the other slots do their thing and then clear the in/out slot), but that seems ugly and I wasn't even sure how to pull it off. And then there is the whole thing with cargo-sets which is closer to what I'd like to do with Cells on the larger scale. Basically what I want is to have a large number of sets and their unions/intersections efficiently accessible anywhere in my code- stuff like "all characters of faction X in sector Y carrying at least one Z in their cargo hold. I hope this makes my level of understanding more clear. I think I'm probably more prepared for the paradigm shift than most, owing, no doubt, to my long infatuation with Ted Nelson's ZigZag. ~Michael Warnock Guild Software Inc. *I've Ive Iver Ivie IV Edit... Revert to "i've" def model def-model defamed daffodil deformed Edit... Ignore all Add to dictionary unitary intake interj Anitra Unitas Edit... Ignore all Add to dictionary uniform inform infirm uniformer interim Edit... Ignore all Add to dictionary unitary intake interj Anitra Unitas Edit... Ignore all Add to dictionary uniform inform infirm uniformer interim Edit... Ignore all Add to dictionary def model def-model defamed daffodil deformed Edit... Ignore all Add to dictionary unitary intake interj Anitra Unitas Edit... Ignore all Add to dictionary uniform inform infirm uniformer interim Edit... Ignore all Add to dictionary accessory access or access-or access access's Edit... Ignore all Add to dictionary ACTH Ruth auto Edit... Ignore all Add to dictionary unitary intake interj Anitra Unitas Edit... Ignore all Add to dictionary ACTH Ruth auto Edit... Ignore all Add to dictionary uniform inform infirm uniformer interim Edit... Ignore all Add to dictionary assessor access or access-or accessory access Edit... Ignore all Add to dictionary ACTH Ruth auto Edit... Ignore all Add to dictionary unitary intake interj Anitra Unitas Edit... Ignore all Add to dictionary uniform inform infirm uniformer interim Edit... Ignore all Add to dictionary assessor access or access-or accessory access Edit... Ignore all Add to dictionary unitary intake interj Anitra Unitas Edit... Ignore all Add to dictionary uniform inform infirm uniformer interim Edit... Ignore all Add to dictionary ACTH Ruth auto Edit... Ignore all Add to dictionary assessor access or access-or accessory access Edit... Ignore all Add to dictionary unitary intake interj Anitra Unitas Edit... Ignore all Add to dictionary uniform inform infirm uniformer interim Edit... Ignore all Add to dictionary assessor access or access-or accessory access Edit... Ignore all Add to dictionary unitary intake interj Anitra Unitas Edit... Ignore all Add to dictionary uniform inform infirm uniformer interim Edit... Ignore all Add to dictionary El Eal Erl eel ell Edit... Ignore all Add to dictionary assessor access or access-or accessory access Edit... Ignore all Add to dictionary Zigzag Zigzags Zigzag's Edit... Ignore all Add to dictionary Warlock Wank Warwick Wonk Bannock Edit... Ignore all Add to dictionary -------------- next part -------------- An HTML attachment was scrubbed... URL: From kennytilton at optonline.net Fri Mar 17 05:26:40 2006 From: kennytilton at optonline.net (Ken Tilton) Date: Fri, 17 Mar 2006 00:26:40 -0500 Subject: [cells-devel] Oops on Cells 3 Message-ID: <441A4890.5000507@optonline.net> The test suite passes so y'all might be OK, but while working on some sample code for doc of Cells 3 I have found some misbehavior (observer called twice one awakening). I suggest you ignore Cells 3 until I get this resolved. kt From kentilton at gmail.com Sat Mar 18 00:21:36 2006 From: kentilton at gmail.com (Ken Tilton) Date: Fri, 17 Mar 2006 19:21:36 -0500 Subject: [cells-devel] deep-cells test and Cells 3 demo Message-ID: Writing the doc got scary, and I remembered that anyway I want to lean towards literate programming for doc, so I added more to the comments in integrity.lisp and created a test suit entry that shows a whole lot going on, including an ephemeral initialized to non-nil, and a client sort to get observer actions to come out in the right order. If anyone has questions, just ask. If it seems best, I'll respond by extending the code comments and pointing you to that. kt From kentilton at gmail.com Thu Mar 23 18:38:40 2006 From: kentilton at gmail.com (Ken Tilton) Date: Thu, 23 Mar 2006 13:38:40 -0500 Subject: [cells-devel] Celtk/Cells3 Compleat Message-ID: You can now grab Cells3 and Celtk from the c-l.net Cells repository. .\Celtk\ltktest-cells-inside.lisp has a load of doc inside it, including some on just Cells. Check out load.lisp in either source tree to build and run. (Checking next that I remembered to commit those, speaking of which, I use neither those nor ASDF when working, so they often have bugs. Speaking of which...) Bug reports or request for clarification on the doc exceedingly welcome. Otherwise, I will be getting to work on a commercial app using both these (as long as Tk holds up, which looks good so far). ken -------------- next part -------------- An HTML attachment was scrubbed... URL: From frido at q-software-solutions.de Fri Mar 24 09:03:56 2006 From: frido at q-software-solutions.de (Friedrich Dominicus) Date: Fri, 24 Mar 2006 10:03:56 +0100 Subject: [cells-devel] Celtk/Cells3 Compleat In-Reply-To: (Ken Tilton's message of "Thu, 23 Mar 2006 13:38:40 -0500") References: Message-ID: <87irq4tds3.fsf@flarge.here> cells3 demo. I can not see any edit-field in the example. -------------- next part -------------- A non-text attachment was scrubbed... Name: cells3-ltk-demo.png Type: image/png Size: 13817 bytes Desc: no edit field? URL: -------------- next part -------------- Regards Friedrich From kennytilton at optonline.net Fri Mar 24 11:35:49 2006 From: kennytilton at optonline.net (Ken Tilton) Date: Fri, 24 Mar 2006 06:35:49 -0500 Subject: [cells-devel] Celtk/Cells3 Compleat In-Reply-To: <87irq4tds3.fsf@flarge.here> References: <87irq4tds3.fsf@flarge.here> Message-ID: <4423D995.1090105@optonline.net> tk> menu .mnu31 -tearoff 0 -type menubar tk> menu .mnu31.mnu34 -tearoff 0 tk> menu .mnu31.mnu34.mnu40 -tearoff 0 tk> frame .cv-scroller -class frame tk> canvas .cv-scroller.test-canvas -scrollregion {0 0 500 400} tk> senddata [.cv-scroller.test-canvas create text 10 10 -anchor "nw" -text "Ltk Demonstration"] tk> senddata [.cv-scroller.test-canvas create line 250.0 400.0 300.23407 108.66162 155.33328 366.35382 378.16644 172.06824 103.135544 280.50952 398.60135 270.4362 116.8235 180.97812 352.37134 359.63623 190.25645 112.41109 260.21606 399.6517 290.49127 105.5685 163.47768 372.5312 372.56125 163.52028 105.55452 290.44135 399.64813 260.26807 112.43175 190.2089 359.60065 352.40945 181.02466 116.79939 270.38467 398.60843 280.56073 103.14618 172.02382 378.13943 366.38678 155.37381 108.64426 300.18518 400.0 250.05157 108.67917 199.71655 366.32098 344.7071 172.11243 121.80669 280.45807 396.87512 270.48798 101.40578 180.93207 383.15262 359.67145 147.66635 112.39021 309.69543 399.65524 239.83597 105.582504 209.45882 372.50076 336.56537 163.5629 127.40871 290.3911 394.45953 260.31952 100.35539 190.16055 387.54724 352.44757 140.43495 116.77568 318.92953 398.6156 229.66756 103.156815 219.38823 378.1123 328.02072 155.41382 133.58069 300.1355 391.37338 250.10313 100.00003 199.66797 391.30353 344.74796 133.71233 121.77991 327.8435 396.88562 219.59244 101.412994 229.45981 383.12888 319.1137 147.7049 140.29262 309.6471 387.63077 239.88742 100.34126 209.40807 394.40326 336.60843 127.52966 127.379 336.39496 394.47372 209.65965 100.35895 239.62903 387.52667 309.88672 140.47098 147.51395 318.88373 383.248 229.71866 101.377426 219.33664 396.8324 328.06476 121.914505 133.54745 344.54526 391.391 199.91418 100.00008 249.84415 391.28583 300.38168 133.74419 155.21295 327.79843 378.24744 219.64406 103.103714 229.40985 398.5801 319.16046 116.89542 140.25667 352.25653 387.65082 190.39919 100.33772 260.06 394.38898 290.64267 127.55879 163.35042 336.35187 372.65137 209.71042 105.512115 239.57645 399.6374 309.93506 112.4944 147.47714 359.49457 383.27222 181.1631 101.370316 270.22913 396.82208 280.71274 121.94194 171.89023 344.50433 366.48575 199.96172 108.59218 249.79372 399.99988 300.43134 108.73187 155.1721 366.2225 378.27356 172.24469 103.09306 280.30432 398.57285 270.64236 116.91867 180.79478 352.21796 359.77927 ] tk> scrollbar .cv-scroller.hscroll -command ".cv-scroller.test-canvas xview" -orient "horizontal" tk> scrollbar .cv-scroller.vscroll -command ".cv-scroller.test-canvas yview" -orient "vertical" tk> frame .f32 -padx 0 -pady 0 -class frame tk> frame .f32.f44 -borderwidth 2 -padx 0 -pady 0 -relief sunken -class frame tk> label .f32.f44.lbl50 -text "Rotation:" tk> button .f32.f44.b51 -text "Start" -command {callback ".f32.f44.b51.CMD"} tk> button .f32.f44.b52 -text "Stop" -command {callback ".f32.f44.b52.CMD"} tk> button .f32.b45 -text "Hallo" -command {callback ".f32.b45.CMD"} tk> button .f32.b46 -text "Welt!" -command {callback ".f32.b46.CMD"} tk> frame .f32.f47 -borderwidth 2 -padx 0 -pady 0 -relief sunken -class frame tk> label .f32.f47.lbl53 -text "Test:" tk> button .f32.f47.b54 -text "OK:" -command {callback ".f32.f47.b54.CMD"} tk> entry .f32.entry -background systembuttonface -textvariable ".f32.entry" tk> button .f32.b48 -text "get!" -command {callback ".f32.b48.CMD"} tk> button .f32.b49 -text "set!" -command {callback ".f32.b49.CMD"} tk> menu .cv-scroller.test-canvas.mnu55 -tearoff 0 tk> .mnu31 add cascade -menu ".mnu31.mnu34" -label "File" tk> .mnu31.mnu34 add command -command {callback "..LOAD"} -label "Load" tk> .mnu31.mnu34 add command -command {callback "..SAVE"} -label "Save" -state normal tk> .mnu31.mnu34 add separator tk> .mnu31.mnu34 add cascade -menu ".mnu31.mnu34.mnu40" -label "Export..." tk> .mnu31.mnu34 add separator tk> .mnu31.mnu34 add command -accelerator "Alt-q" -command "exit" -label "Quit" -underline 1 tk> .mnu31.mnu34.mnu40 add command -command {callback "..JPEG"} -label "jpeg" tk> .mnu31.mnu34.mnu40 add command -command {callback "..PNG"} -label "png" tk> .cv-scroller.test-canvas.mnu55 add command -command {callback "..MNU59"} -label "Option 1" tk> .cv-scroller.test-canvas.mnu55 add command -command {callback "..MNU60"} -label "Option 2" tk> .cv-scroller.test-canvas.mnu55 add command -command {callback "..MNU61"} -label "Option 3" tk> set .f32.entry "" tk> bind . {.mnu31.mnu34 invoke 5} tk> trace add variable .f32.entry write "trc2 .f32.entry.TRACEWRITE" tk> . configure -menu .mnu31 tk> grid .cv-scroller.test-canvas -row 0 -column 0 -sticky news tk> grid .cv-scroller.hscroll -row 1 -column 0 -sticky we tk> grid .cv-scroller.vscroll -row 0 -column 1 -sticky ns tk> grid columnconfigure .cv-scroller 0 -weight {1} tk> grid columnconfigure .cv-scroller 1 -weight {0} tk> grid rowconfigure .cv-scroller 0 -weight {1} tk> grid rowconfigure .cv-scroller 1 -weight {0} tk> pack .f32.f44.lbl50 .f32.f44.b51 .f32.f44.b52 -side left -anchor nw -padx 0 -pady 0 tk> pack .f32.f47.lbl53 .f32.f47.b54 -side left -anchor nw -padx 0 -pady 0 tk> pack .f32.f44 .f32.b45 .f32.b46 .f32.f47 .f32.entry .f32.b48 .f32.b49 -side left -anchor nw -padx 0 -pady 0 tk> pack .cv-scroller -side top -fill both -expand 1 tk> pack .f32 -side bottom tk> .cv-scroller.test-canvas configure -xscrollcommand ".cv-scroller.hscroll set" tk> .cv-scroller.test-canvas configure -yscrollcommand ".cv-scroller.vscroll set" tk> wm deiconify . From kennytilton at optonline.net Fri Mar 24 11:56:23 2006 From: kennytilton at optonline.net (Ken Tilton) Date: Fri, 24 Mar 2006 06:56:23 -0500 Subject: [cells-devel] Celtk/Cells3 Compleat In-Reply-To: <87irq4tds3.fsf@flarge.here> References: <87irq4tds3.fsf@flarge.here> Message-ID: <4423DE67.5060804@optonline.net> {weird, I do not see this on cells-devel. In case y'all did not get it....] Friedrich Dominicus wrote: >cells3 demo. I can not see any edit-field in the example. > > Cool. You are also missing two buttons that appear to the right of the entry field, labelled get! and set!. (a) What Lisp and OS are you using? I have tested only under ACL and LW on win32. (b) Do you see an entry in the source? Begins " (mk-entry :id :entry...." (c) Trace mk-entry. What do you see? (d) Replace tk-format-now to enable all debug output thus: (defun tk-format-now (fmt$ &rest fmt-args &aux (tk$ (apply 'format nil fmt$ fmt-args))) (format t "~&tk> ~A~%" tk$) (format (wish-stream *wish*) "~A~%" tk$) (force-output (wish-stream *wish*))) Then please post that output with your next report. Thx, Ken > > ------------------------------------------------------------------------ > >------------------------------------------------------------------------ > > > >Regards >Friedrich > > >------------------------------------------------------------------------ > >_______________________________________________ >cells-devel site list >cells-devel at common-lisp.net >http://common-lisp.net/mailman/listinfo/cells-devel > > From kennytilton at optonline.net Fri Mar 24 11:53:53 2006 From: kennytilton at optonline.net (Ken Tilton) Date: Fri, 24 Mar 2006 06:53:53 -0500 Subject: [cells-devel] Celtk/Cells3 Compleat In-Reply-To: <87irq4tds3.fsf@flarge.here> References: <87irq4tds3.fsf@flarge.here> Message-ID: <4423DDD1.9060305@optonline.net> Friedrich Dominicus wrote: >cells3 demo. I can not see any edit-field in the example. > > Not sure what happened on my last send. I will try again. Below is my output. But first, so we are on the same page: -- I have continued tweaking in minor ways the ltktest-cells-inside demo, and committing to CVS. You may have picked up an earlier copy. I suggest you update from CVS or grab a fresh tarball so we are sure we are looking at the same source. Mind you, I certainly did not have missing widgets in any version committed to CVS, but fur debugging purposes let's use the same source. That will require you to install LTk separately and fix up load.lisp (I forgot to fix that but will do that shortly -- you just have to add a path to asdf:*central-registry* for LTk). Now here is the output I get when I subsititute tk-format-now: tk> menu .mnu31 -tearoff 0 -type menubar tk> menu .mnu31.mnu34 -tearoff 0 tk> menu .mnu31.mnu34.mnu40 -tearoff 0 tk> frame .cv-scroller -class frame tk> canvas .cv-scroller.test-canvas -scrollregion {0 0 500 400} tk> senddata [.cv-scroller.test-canvas create text 10 10 -anchor "nw" -text "Ltk Demonstration"] tk> senddata [.cv-scroller.test-canvas create line 250.0 400.0 300.23407 108.66162 155.33328 366.35382 378.16644 172.06824 103.135544 280.50952 398.60135 270.4362 116.8235 180.97812 352.37134 359.63623 190.25645 112.41109 260.21606 399.6517 290.49127 105.5685 163.47768 372.5312 372.56125 163.52028 105.55452 290.44135 399.64813 260.26807 112.43175 190.2089 359.60065 352.40945 181.02466 116.79939 270.38467 398.60843 280.56073 103.14618 172.02382 378.13943 366.38678 155.37381 108.64426 300.18518 400.0 250.05157 108.67917 199.71655 366.32098 344.7071 172.11243 121.80669 280.45807 396.87512 270.48798 101.40578 180.93207 383.15262 359.67145 147.66635 112.39021 309.69543 399.65524 239.83597 105.582504 209.45882 372.50076 336.56537 163.5629 127.40871 290.3911 394.45953 260.31952 100.35539 190.16055 387.54724 352.44757 140.43495 116.77568 318.92953 398.6156 229.66756 103.156815 219.38823 378.1123 328.02072 155.41382 133.58069 300.1355 391.37338 250.10313 100.00003 199.66797 391.30353 344.74796 133.71233 121.77991 327.8435 396.88562 219.59244 101.412994 229.45981 383.12888 319.1137 147.7049 140.29262 309.6471 387.63077 239.88742 100.34126 209.40807 394.40326 336.60843 127.52966 127.379 336.39496 394.47372 209.65965 100.35895 239.62903 387.52667 309.88672 140.47098 147.51395 318.88373 383.248 229.71866 101.377426 219.33664 396.8324 328.06476 121.914505 133.54745 344.54526 391.391 199.91418 100.00008 249.84415 391.28583 300.38168 133.74419 155.21295 327.79843 378.24744 219.64406 103.103714 229.40985 398.5801 319.16046 116.89542 140.25667 352.25653 387.65082 190.39919 100.33772 260.06 394.38898 290.64267 127.55879 163.35042 336.35187 372.65137 209.71042 105.512115 239.57645 399.6374 309.93506 112.4944 147.47714 359.49457 383.27222 181.1631 101.370316 270.22913 396.82208 280.71274 121.94194 171.89023 344.50433 366.48575 199.96172 108.59218 249.79372 399.99988 300.43134 108.73187 155.1721 366.2225 378.27356 172.24469 103.09306 280.30432 398.57285 270.64236 116.91867 180.79478 352.21796 359.77927 ] tk> scrollbar .cv-scroller.hscroll -command ".cv-scroller.test-canvas xview" -orient "horizontal" tk> scrollbar .cv-scroller.vscroll -command ".cv-scroller.test-canvas yview" -orient "vertical" tk> frame .f32 -padx 0 -pady 0 -class frame tk> frame .f32.f44 -borderwidth 2 -padx 0 -pady 0 -relief sunken -class frame tk> label .f32.f44.lbl50 -text "Rotation:" tk> button .f32.f44.b51 -text "Start" -command {callback ".f32.f44.b51.CMD"} tk> button .f32.f44.b52 -text "Stop" -command {callback ".f32.f44.b52.CMD"} tk> button .f32.b45 -text "Hallo" -command {callback ".f32.b45.CMD"} tk> button .f32.b46 -text "Welt!" -command {callback ".f32.b46.CMD"} tk> frame .f32.f47 -borderwidth 2 -padx 0 -pady 0 -relief sunken -class frame tk> label .f32.f47.lbl53 -text "Test:" tk> button .f32.f47.b54 -text "OK:" -command {callback ".f32.f47.b54.CMD"} tk> entry .f32.entry -background systembuttonface -textvariable ".f32.entry" tk> button .f32.b48 -text "get!" -command {callback ".f32.b48.CMD"} tk> button .f32.b49 -text "set!" -command {callback ".f32.b49.CMD"} tk> menu .cv-scroller.test-canvas.mnu55 -tearoff 0 tk> .mnu31 add cascade -menu ".mnu31.mnu34" -label "File" tk> .mnu31.mnu34 add command -command {callback "..LOAD"} -label "Load" tk> .mnu31.mnu34 add command -command {callback "..SAVE"} -label "Save" -state normal tk> .mnu31.mnu34 add separator tk> .mnu31.mnu34 add cascade -menu ".mnu31.mnu34.mnu40" -label "Export..." tk> .mnu31.mnu34 add separator tk> .mnu31.mnu34 add command -accelerator "Alt-q" -command "exit" -label "Quit" -underline 1 tk> .mnu31.mnu34.mnu40 add command -command {callback "..JPEG"} -label "jpeg" tk> .mnu31.mnu34.mnu40 add command -command {callback "..PNG"} -label "png" tk> .cv-scroller.test-canvas.mnu55 add command -command {callback "..MNU59"} -label "Option 1" tk> .cv-scroller.test-canvas.mnu55 add command -command {callback "..MNU60"} -label "Option 2" tk> .cv-scroller.test-canvas.mnu55 add command -command {callback "..MNU61"} -label "Option 3" tk> set .f32.entry "" tk> bind . {.mnu31.mnu34 invoke 5} tk> trace add variable .f32.entry write "trc2 .f32.entry.TRACEWRITE" tk> . configure -menu .mnu31 tk> grid .cv-scroller.test-canvas -row 0 -column 0 -sticky news tk> grid .cv-scroller.hscroll -row 1 -column 0 -sticky we tk> grid .cv-scroller.vscroll -row 0 -column 1 -sticky ns tk> grid columnconfigure .cv-scroller 0 -weight {1} tk> grid columnconfigure .cv-scroller 1 -weight {0} tk> grid rowconfigure .cv-scroller 0 -weight {1} tk> grid rowconfigure .cv-scroller 1 -weight {0} tk> pack .f32.f44.lbl50 .f32.f44.b51 .f32.f44.b52 -side left -anchor nw -padx 0 -pady 0 tk> pack .f32.f47.lbl53 .f32.f47.b54 -side left -anchor nw -padx 0 -pady 0 tk> pack .f32.f44 .f32.b45 .f32.b46 .f32.f47 .f32.entry .f32.b48 .f32.b49 -side left -anchor nw -padx 0 -pady 0 tk> pack .cv-scroller -side top -fill both -expand 1 tk> pack .f32 -side bottom tk> .cv-scroller.test-canvas configure -xscrollcommand ".cv-scroller.hscroll set" tk> .cv-scroller.test-canvas configure -yscrollcommand ".cv-scroller.vscroll set" tk> wm deiconify . > > ------------------------------------------------------------------------ > >------------------------------------------------------------------------ > > > >Regards >Friedrich > > >------------------------------------------------------------------------ > >_______________________________________________ >cells-devel site list >cells-devel at common-lisp.net >http://common-lisp.net/mailman/listinfo/cells-devel > > From frido at q-software-solutions.de Fri Mar 24 16:03:54 2006 From: frido at q-software-solutions.de (Friedrich Dominicus) Date: Fri, 24 Mar 2006 17:03:54 +0100 Subject: [cells-devel] Celtk/Cells3 Compleat In-Reply-To: <4423D995.1090105@optonline.net> (Ken Tilton's message of "Fri, 24 Mar 2006 06:35:49 -0500") References: <87irq4tds3.fsf@flarge.here> <4423D995.1090105@optonline.net> Message-ID: <87u09nsuc5.fsf@flarge.here> I fetched the tarball today. I did not now how to check out via CVS, I guess it's as usual on common lisp .net but I have not idea on the proper name for it. Will try tomorrow. Regards Friedrich From frido at q-software-solutions.de Fri Mar 24 16:04:30 2006 From: frido at q-software-solutions.de (Friedrich Dominicus) Date: Fri, 24 Mar 2006 17:04:30 +0100 Subject: [cells-devel] Celtk/Cells3 Compleat In-Reply-To: <4423D995.1090105@optonline.net> (Ken Tilton's message of "Fri, 24 Mar 2006 06:35:49 -0500") References: <87irq4tds3.fsf@flarge.here> <4423D995.1090105@optonline.net> Message-ID: <87pskbsub5.fsf@flarge.here> I forgot I'm using SBL 0.9.10.x and ltk-0.881 (the latest tarball) Regards Friedrich From marco.gidde at tiscali.de Fri Mar 24 21:09:20 2006 From: marco.gidde at tiscali.de (Marco Gidde) Date: Fri, 24 Mar 2006 22:09:20 +0100 Subject: [cells-devel] Celtk/Cells3 Compleat In-Reply-To: <87u09nsuc5.fsf@flarge.here> (Friedrich Dominicus's message of "Fri, 24 Mar 2006 17:03:54 +0100") References: <87irq4tds3.fsf@flarge.here> <4423D995.1090105@optonline.net> <87u09nsuc5.fsf@flarge.here> Message-ID: <851wwr8s8v.fsf@tristan.br-automation.com> Friedrich Dominicus writes: > I fetched the tarball today. I did not now how to check out via CVS, I > guess it's as usual on common lisp .net but I have not idea on the > proper name for it. Under Linux it is as easy as: cvs -z3 -d :pserver:anonymous:anonymous at common-lisp.net:/project/cells/cvsroot co cells cvs -z3 -d :pserver:anonymous:anonymous at common-lisp.net:/project/cells/cvsroot co Celtk This creates the directories "cells" and "Celtk" and there you can (from time to time) say "cvs update" to get the latest stuff. Regards, Marco From tfb at ocf.berkeley.edu Fri Mar 24 21:56:34 2006 From: tfb at ocf.berkeley.edu (Thomas F. Burdick) Date: Fri, 24 Mar 2006 22:56:34 +0100 Subject: [cells-devel] Celtk/Cells3 Compleat In-Reply-To: <87u09nsuc5.fsf@flarge.here> References: <87irq4tds3.fsf@flarge.here> <4423D995.1090105@optonline.net> <87u09nsuc5.fsf@flarge.here> Message-ID: On 3/24/06, Friedrich Dominicus wrote: > I fetched the tarball today. I did not now how to check out via CVS, I > guess it's as usual on common lisp .net but I have not idea on the > proper name for it. > > Will try tomorrow. 0.881 and SBCL 0.9.10 should be good together (and Ltk isn't developed with CVS, but with a subversion repository that's not publicly available at the moment), and both work quite well with Cells II at least. For Celtk, you need to get the CVS version of Celtk, which you can download from here: http://common-lisp.net/cgi-bin/viewcvs.cgi/Celtk/?root=cells by clicking on the "download tarball" link at the bottom of the page. From fgoenninger at prion.de Sun Mar 26 01:00:39 2006 From: fgoenninger at prion.de (Goenninger, Frank) Date: Sun, 26 Mar 2006 03:00:39 +0200 Subject: [cells-devel] (+ macosx Celtk Cells3 ACL8.0): This combo is running ... Message-ID: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Heya, just wanted to let you know that I got the above mentioned combination to work as expected by just downloading the stuff and then do an ASDF load. Well, not really - I had to adjust some hardcoded pathnames in demos.lisp to find appropriate external files (bitmap files, Kenny's eyes from year 1969...) Very nice! Will use that to make a GUI for an app that controls and monitors an HF amplifier for Ham Radio... Cheers Frank -----BEGIN PGP SIGNATURE----- Version: PGP Desktop 9.0.5 (Build 5050) iQIVAwUBRCXnvWAKVUddnkqnAQqnDQ/9Fg6honUHO2YCW14kFilFPZ57YRnDf5CF RIhPGiMOwEd4YCYYuldnQZHYJQJpKKz/+zZan5LL35u62w6rwtIm5eqz749nLF0I XDfEK5Rq3jwC64A20OEU8KIMCVp6hZ8Lr9t7cfBI5WElLEbyvCM+5TQOf5fPVmSf FEYpp8XUTXej4z0g846g2tnzrNy6LJVWG61Sn88ZjbrdsOlRHSElzKnU7rFnqIh7 xFQF/jz4lH6calkuXqafZWM9gQbQs/1ein5rdrb4KVR+it8W7MFpFR8pU/9mhZ99 HufJJZw4oKP9Cxevl2DVWCCGI8RT7UgUsYFofhwFOYr8j7GXzUgedNloIYuwEomt GpNvkpl0Qaz0ZtbY36Rb4Ae/NLd75jL85MQ4Xlk9R4CRBfErbM6dnfAxgCbL/D2D CFd4jq83b5i2rJXgakuV8Ow/HvhBYLjcYDf1a3Tb8J4a9tdSy5e60qnzLTEsKZAw Fqru+IG+cmTydTyn4yAnB8+3Q10uAwdUY293E3SWgLNOdgWgGIUibRCY+IoCcbCL IQS8CwcOxklkCdfkbmbvr4VIM7tWIXEO9IC6UrMHGcnlfLGsVHTeuG8rUwtAb2oR U+vLuOpPvLc6ccvQgJbJIX65a3MZmPUwpUgyNY4rK8RtDH2/0UDqxc0pTeLKb8HS WDVR42qnNwM= =a8QA -----END PGP SIGNATURE----- From kentilton at gmail.com Sun Mar 26 17:11:17 2006 From: kentilton at gmail.com (Ken Tilton) Date: Sun, 26 Mar 2006 12:11:17 -0500 Subject: [cells-devel] Evolving Ltktest-with-cells.lisp Message-ID: I have been refining both the doc and the functionality of ltktest-with-cells (in the Celtk module under Cells), which mirrors the LTk demo ltktest, for a few days now adding more and more connectivity between the widgets and the main display, as one would have in a more real-world application. At this point I think both doc and demo are adequate, and anyway I will not know how to improve them without feedback, whether it be suggestions or requests for clarification. btw, thx to Frank for his report that all runs well on Mac OS X. I myself saw recent versions working on Lispworks+win32, albeit with a problem in that the spinning lines spun at a glacial rate. I would be interested in hearing if Celtk runs on other platforms. Now here is a big heads up: every once in a while, except when I am trying to make it happen , ACL8 on win32 hangs when I close ltktest-with-cells. Possibly something to do with my Timer class run amok? We will see. ken -------------- next part -------------- An HTML attachment was scrubbed... URL: