#:text (slot-ref actor 'read-text)))
+;; This one is just where reading is the same thing as looking
+;; at the description
+(define-class <readable-desc> (<gameobj>)
+ (commands
+ #:allocation #:each-subclass
+ #:init-thunk (build-commands
+ ("read" ((direct-command cmd-look-at))))))
+
;; This one allows you to take from items that are proxied by it
(define-actor <proxy-items> (<gameobj>)
((cmd-take-from take-from-proxy))
| [8sync Hive] |======' '-_____
', M ,'
'. @ .'
- \\ @ /
+ \\ @ /
'-__+__-'
'. @ .'
.--------------. \\ /
"into the room, then stands in front of the door."))))
(make <exit>
#:name "north"
- #:to 'hive-entrance)))
+ #:to 'hive-entrance)
+ (make <exit>
+ #:name "east"
+ #:to 'federation-station)))
;; map
('underground-lab:map
,@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
- <readable> '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
- <readable> '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
- <readable> '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:2016-progress-exhibit
+ <readable-desc> 'async-museum
+ #:name "2016 Progress Exhibit"
+ #:goes-by '("2016 progress exhibit" "2016 progress" "2016 exhibit")
+ #: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:8sync-and-fibers-exhibit
+ <readable-desc> 'async-museum
+ #:name "8sync and Fibers Exhibit"
+ #:goes-by '("8sync and fibers exhibit" "8sync exhibit" "fibers exhibit")
+ #: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
+ <readable-desc> 'async-museum
+ #:name "8sync and Fibers Exhibit"
+ #:goes-by '("8sync and fibers exhibit" "8sync exhibit" "fibers exhibit")
+ #: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:suspendable-ports-exhibit
- <gameobj> 'async-museum
+ <readable-desc> 'async-museum
#:name "Suspendable Ports Exhibit"
#:goes-by '("suspendable ports exhibit" "ports exhibit"
"suspendable exhibit" "suspendable ports" "ports")
(p "Fibers, 8sync, and guile-a-sync now support suspendable ports.")))
(list
'async-museum:actor-model-exhibit
- <gameobj> 'async-museum
+ <readable-desc> 'async-museum
#:name "Actor Model Exhibit"
#:goes-by '("actor model exhibit" "actor exhibit"
"actor model")
"prints itself out:"))
(p (pre ,meta-message-text)))))
+\f
+;;; Inside the Hive
+
(define hive-inside
(lol
('hive-inside
#:invisible? #t
#:goes-by '("Hive Actor's desk" "hive desk" "desk"))))
+\f
+;;; Federation Station
+(define federation-station
+ (lol
+ ('federation-station
+ <room> #f
+ #:name "Federation Station"
+ #:desc
+ '((p "This room has an unusual structure. It's almost as if a starscape
+covered the walls and ceiling, but upon closer inspection you realize that
+these are all brightly glowing nodes with lines drawn between them. They
+seem decentralized, and yet seem to be sharing information as if all one
+network.")
+ ;; @@: Maybe add the cork message board here?
+ (p "To the west is a door leading back to the underground laboratory."))
+ #:exits
+ (list (make <exit>
+ #:name "west"
+ #:to 'underground-lab)))
+ ;; nodes
+ ('federation-station:nodes
+ <floor-panel> 'federation-station
+ #:name "some nodes"
+ #:desc "Each node seems to be producing its own information, but publishing
+updates to subscribing nodes on the graph. You see various posts of notes, videos,
+comments, and so on flowing from node to node."
+ #:invisible? #t
+ #:goes-by '("nodes" "node" "some nodes"))
+ ;; network
+ ;; activitypub poster
+ ('federation-station:activitypub-poster
+ <readable-desc> 'federation-station
+ #:name "an ActivityPub poster"
+ #:goes-by '("activitypub poster" "activitypub" "poster")
+ #:desc
+ '((p (a "https://www.w3.org/TR/activitypub/"
+ "ActivityPub")
+ " is a federation standard being developed under the "
+ (a "https://www.w3.org/wiki/Socialwg/"
+ "w3C Social Working Group")
+ ", and doubles as a general client-to-server API. "
+ "It follows a few simple core ideas:")
+ (ul (li "Uses "
+ (a "https://www.w3.org/TR/activitystreams-core/"
+ "ActivityStreams")
+ " for its serialization format: easy to read, e json(-ld) syntax "
+ "with an extensible vocabulary covering the majority of "
+ "social networking interations.")
+ (li "Email-like addressing: list of recipients as "
+ (b "to") ", " (b "cc") ", " (b "bcc") " fields.")
+ (li "Every user has URLs for their outbox and inbox:"
+ (ul (li (b "inbox: ")
+ "Servers POST messages to addressed recipients' inboxes "
+ "to federate out content. "
+ "Also doubles as endpoint for a client to read most "
+ "recently received messages via GET.")
+ (li (b "outbox: ")
+ "Clients can POST to user's outbox to send a message to others. "
+ "(Similar to sending an email via your MTA.) "
+ "Doubles as endpoint others can read from to the "
+ "extent authorized; for example publicly available posts."))
+ "All the federation bits happen by servers posting to users' inboxes."))))
+ ;; An ActivityStreams message
+
+ ;; conspiracy chart
+ ('federation-station:conspiracy-chart
+ <readable-desc> 'federation-station
+ #:name "a conspiracy chart"
+ #:goes-by '("conspiracy chart" "chart")
+ #:desc
+ '((p (i "\"IT'S ALL RELATED!\"") " shouts the over-exuberant conspiracy "
+ "chart. "
+ (i "\"ActivityPub? Federation? The actor model? Scheme? Text adventures? "
+ "MUDS???? What do these have in common? Merely... EVERYTHING!\""))
+ (p "There are circles and lines drawn between all the items in red marker, "
+ "with scrawled notes annotating the theoretical relationships. Is the "
+ "author of this poster mad, or onto something? Perhaps a bit of both. "
+ "There's a lot written here, but here are some of the highlights:")
+ (p
+ (ul
+ (li (b "Scheme") " "
+ (a "http://cs.au.dk/~hosc/local/HOSC-11-4-pp399-404.pdf"
+ "was originally started ")
+ " to explore the " (b "actor model")
+ ". (It became more focused around studying the " (b "lambda calculus")
+ " very quickly, while also uncovering relationships between the two systems.)")
+ ;; Subject Predicate Object
+ (li "The " (a "https://www.w3.org/TR/activitypub/"
+ (b "ActivityPub"))
+ " protocol for " (b "federation")
+ " uses the " (b "ActivityStreams") " format for serialization. "
+ (b "Text adventures") " and " (b "MUDS")
+ " follow a similar structure to break down the commands of players.")
+ (li (b "Federation") " and the " (b "actor model") " both are related to "
+ "highly concurrent systems and both use message passing to communicate "
+ "between nodes.")
+ (li "Zork, the first major text adventure, used the " (b "MUDDLE") " "
+ "language as the basis for the Zork Interactive Language. MUDDLE "
+ "is very " (b "Scheme") "-like and in fact was one of Scheme's predecessors. "
+ "And of course singleplayer text adventures like Zork were the "
+ "predecessors to MUDs.")
+ (li "In the 1990s, before the Web became big, " (b "MUDs")
+ " were an active topic of research, and there was strong interest "
+ (a "http://www.saraswat.org/desiderata.html"
+ "in building decentralized MUDs")
+ " similar to what is being "
+ "worked on for " (b "federation") ". ")))))
+
+ ;; goblin
+
+ ))
\f
;;; Game
(append lobby grand-hallway smoking-parlor
playroom break-room computer-room underground-lab
async-museum gift-shop hive-entrance
- hive-inside))
+ hive-inside federation-station))
;; TODO: Provide command line args
(define (run-game . args)