From: Christopher Allan Webber Date: Wed, 1 Feb 2017 03:42:33 +0000 (-0600) Subject: most of the async museum X-Git-Tag: fosdem-2017~25 X-Git-Url: https://jxself.org/git/?p=mudsync.git;a=commitdiff_plain;h=1297e72d377dea95050bd7e837ea1875fec0b72b most of the async museum --- diff --git a/worlds/bricabrac.scm b/worlds/bricabrac.scm index f6494e2..476fb60 100644 --- a/worlds/bricabrac.scm +++ b/worlds/bricabrac.scm @@ -337,6 +337,12 @@ and buttons and springs. Some of them have wind-up knobs on them." You can imagine yourself joining a tea party using this set, around a nice table with some doilies, drinking some Earl Grey tea, hot. Mmmm." #:goes-by '("tea set" "tea")) + ('lobby:cups + 'lobby + #:invisible? #t + #:name "cups from the tea set" + #:desc "They're chipped." + #:goes-by '("cups")) ('lobby:mustard-pot 'lobby #:invisible? #t @@ -728,13 +734,14 @@ seat in the room, though." #:catchphrases prefect-quotes) ('smoking-parlor:no-smoking-sign - 'smoking-parlor + 'smoking-parlor #:invisible? #t #:name "No Smoking Sign" #:desc "This sign says \"No Smoking\" in big, red letters. It has some bits of bubble gum stuck to it... yuck." - #:goes-by '("no smoking sign" "sign")) - + #:goes-by '("no smoking sign" "sign") + #:read-text "It says \"No Smoking\", just like you'd expect from +a No Smoking sign.") ;; TODO: Cigar dispenser )) @@ -1137,12 +1144,20 @@ the paint, but the wires themselves seem to be unusually sturdy." (<- (message-from message) 'tell #:text '("The computer is already running, and a program appears " "ready to run." - "you mean to \"run the program on the computer\""))))) + "you mean to \"run the program on the computer\"")))) + (cmd-help-run-not-press + (lambda (gameobj message . _) + (<- (message-from message) 'tell + #:text '("You don't need to press / push / flip anything. " + "You could " (i "run program on computer") + " already if you wanted to."))))) (commands #:allocation #:each-subclass #:init-thunk (build-commands ("run" ((prep-indir-command cmd-run-program '("on")) - (direct-command cmd-run-what)))))) + (direct-command cmd-run-what))) + (("press" "push" "flip") + ((prep-indir-command cmd-help-run-not-press)))))) (define* (computer-run-program gameobj message #:key direct-obj indir-obj preposition @@ -1326,7 +1341,15 @@ is a map detailing the layout of the underground structure.")) #:to 'computer-room #:traverse-check (lambda (exit room whos-exiting) - (values #t "You climb the spiral staircase."))))) + (values #t "You climb the spiral staircase."))) + (make + #:name "west" + #:to 'async-museum + #:traverse-check + (lambda (exit room whos-exiting) + (values #t '("You head west through a fancy-looking entrance. " + "A security guard steps aside for you to pass through, " + "into the room, then stands in front of the door.")))))) ;; map ('underground-lab:map @@ -1345,6 +1368,189 @@ is a map detailing the layout of the underground structure.")) #:desc `((p "The sign says:") ,8sync-design-goals)))) + +;;; guile async museum + +(define async-museum + (list + (list + 'async-museum + #f + #:name "Guile Asynchronous Museum" + #:desc '((p "You're in the Guile Asynchronous Museum. There is a list of exhibits +on the wall near the entrance. Scattered around the room are the exhibits +themselves, but it's difficult to pick them out. Maybe you should read the list +to orient yourself.") + (p "There is a door to the east, watched by a security guard, +as well as an exit leading to the south.")) + #:exits (list + (make + #:name "south" + #:to 'gift-shop) + (make + #:name "east" + #:to 'underground-lab + #:traverse-check + (lambda (exit room whos-exiting) + (values #f '("The security guard stops you and tells you " + "that the only exit is through the gift shop.")))))) + (list + 'async-museum:security-guard + 'async-museum + #:name "a security guard" + #:desc + '(p "The security guard is blocking the eastern entrance, where " + "you came in from.") + #:goes-by '("security guard" "guard" "security") + #:catchphrases '("It's hard standing here all day." + "I just want to go home." + "The exhibits are nice, but I've seen them all before.")) + (let ((placard + `((p "Welcome to our humble museum! The exhibits are listed below. " + (br) + "To look at one, simply type: " (i "look at ")) + (p "Available exhibits:") + (ul ,@(map (lambda (exhibit) + `(li ,exhibit)) + '("2016 Progress" + "8sync and Fibers" + "Suspendable Ports" + "The Actor Model")))))) + (list + 'async-museum:list-of-exhibits + 'async-museum + #:name "list of exhibits" + #:desc + `((p "It's a list of exibits in the room. The placard says:") + ,@placard) + #:goes-by '("list of exhibits" "exhibit list" "list" "exhibits") + #:read-text placard)) + (let ((desc '((p "It's a three-piece exhibit, with three little dioramas and some text " + "explaining what they represent. They are:") + (ul (li (b "Late 2015/Early 2016 talk: ") + "This one explains the run-up conversation from late 2015 " + "and early 2016 about the need for an " + "\"asynchronous event loop for Guile\". The diorama " + "is a model of the Veggie Galaxy restaurant where after " + "the FSF 30th anniversary party; Mark Weaver, Christopher " + "Allan Webber, David Thompson, and Andrew Engelbrecht chat " + "about the need for Guile to have an answer to asynchronous " + "programming. A mailing list post " ; TODO: link it? + "summarizing the discussion is released along with various " + "conversations around what is needed, as well as further " + "discussion at FOSDEM 2016.") + (li (b "Early implementations: ") + "This one shows Chris Webber's 8sync and Chris Vine's " + "guile-a-sync, both appearing in late 2015 and evolving " + "into their basic designs in early 2016. It's less a diorama " + "than a printout of some mailing list posts. Come on, the " + "curators could have done better with this one.") + (li (b "Suspendable ports and Fibers: ") + "The diorama shows Andy Wingo furiously hacking at his keyboard. " + "The description talks about Wingo's mailing list thread " + "about possibly breaking Guile compatibility for a \"ports refactor\". " + "Wingo releases Fibers, another asynchronous library, making use of " + "the new interface, and 8sync and guile-a-sync " + "quickly move to support suspendable ports as well. " + "The description also mentions that there is an exhibit entirely " + "devoted to suspendable ports.")) + (p "Attached at the bottom is a post it note mentioning " + "https integration landing in Guile 2.2.")))) + (list + 'async-museum:2016-progress-exhibit + 'async-museum + #:name "2016 Progress Exhibit" + #:goes-by '("2016 progress exhibit" "2016 progress" "2016 exhibit") + #:desc desc + #:read-text desc)) + (let ((desc '((p "This exhibit is a series of charts explaining the similarities " + "and differences between 8sync and Fibers, two asynchronous programming " + "libraries for GNU Guile. It's way too wordy, but you get the general gist.") + (p (b "Similarities:") + (ul (li "Both use Guile's suspendable-ports facility") + (li "Both use message passing"))) + (p (b "Differences:") + (ul (li "Fibers \"processes\" can read from multiple \"channels\", " + "but 8sync actors only read from one \"inbox\" each.") + (li "Different theoretical basis:" + (ul (li "Fibers: based on CSP (Communicating Sequential Processes), " + "a form of Process Calculi") + (li "8sync: based on the Actor Model") + (li "Luckily CSP and the Actor Model are \"dual\"!"))))) + (p "Fibers is also designed by Andy Wingo, an excellent compiler hacker, " + "whereas 8sync is designed by Chris Webber, who built this crappy " + "hotel simulator.")))) + (list + 'async-museum:8sync-and-fibers-exhibit + 'async-museum + #:name "8sync and Fibers Exhibit" + #:goes-by '("8sync and fibers exhibit" "8sync exhibit" "fibers exhibit") + #:desc desc + #:read-text desc)) + (let ((desc '((p "This exhibit is a series of charts explaining the similarities " + "and differences between 8sync and Fibers, two asynchronous programming " + "libraries for GNU Guile. It's way too wordy, but you get the general gist.") + (p (b "Similarities:") + (ul (li "Both use Guile's suspendable-ports facility") + (li "Both use message passing"))) + (p (b "Differences:") + (ul (li "Fibers \"processes\" can read from multiple \"channels\", " + "but 8sync actors only read from one \"inbox\" each.") + (li "Different theoretical basis:" + (ul (li "Fibers: based on CSP (Communicating Sequential Processes), " + "a form of Process Calculi") + (li "8sync: based on the Actor Model") + (li "Luckily CSP and the Actor Model are \"dual\"!"))))) + (p "Fibers is also designed by Andy Wingo, an excellent compiler hacker, " + "whereas 8sync is designed by Chris Webber, who built this crappy " + "hotel simulator.")))) + (list + 'async-museum:8sync-and-fibers-exhibit + 'async-museum + #:name "8sync and Fibers Exhibit" + #:goes-by '("8sync and fibers exhibit" "8sync exhibit" "fibers exhibit") + #:desc desc + #:read-text desc)) + (list + 'async-museum:suspendable-ports-exhibit + 'async-museum + #:name "Suspendable Ports Exhibit" + #:goes-by '("suspendable ports exhibit" "ports exhibit" + "suspendable exhibit" "suspendable ports" "ports") + #:desc + '((p "Suspendable ports are a new feature in Guile 2.2, and allows code " + "that would normally block on IO to " (i "automatically") " suspend " + "to the scheduler until information is ready to be read/written!") + (p "Yow! You might barely need to change your existing blocking code!") + (p "Fibers, 8sync, and guile-a-sync now support suspendable ports."))) + (list + 'async-museum:actor-model-exhibit + 'async-museum + #:name "Actor Model Exhibit" + #:goes-by '("actor model exhibit" "actor exhibit" + "actor model") + #:desc + '((p "Here are some fact(oids) about the actor model!") + (ul (li "Originally the research goal of Scheme! (message passing anecdote here)") + (li "foooo")) + )) + + )) + +(define gift-shop + (lol + ('gift-shop + #f + #:name "Museum Gift Shop" + #:desc "foo" + #:exits (list + (make + #:name "northeast" + #:to 'underground-lab) + (make + #:name "north" + #:to 'async-museum))))) + ;;; Game @@ -1352,7 +1558,8 @@ is a map detailing the layout of the underground structure.")) (define (game-spec) (append lobby grand-hallway smoking-parlor - playroom break-room computer-room underground-lab)) + playroom break-room computer-room underground-lab + async-museum gift-shop)) ;; TODO: Provide command line args (define (run-game . args)