Building a Modern MUD with your host, termie Friday, July 20, 12 - - PowerPoint PPT Presentation

building a modern mud
SMART_READER_LITE
LIVE PREVIEW

Building a Modern MUD with your host, termie Friday, July 20, 12 - - PowerPoint PPT Presentation

Building a Modern MUD with your host, termie Friday, July 20, 12 Me. Friday, July 20, 12 Me. Friday, July 20, 12 working on games always seemed like a dream job, probably isnt i really loved playing muds so much, i wanted to make one


slide-1
SLIDE 1

Building a Modern MUD

with your host, termie

Friday, July 20, 12
slide-2
SLIDE 2

Me.

Friday, July 20, 12
slide-3
SLIDE 3

Me.

Friday, July 20, 12
slide-4
SLIDE 4

Why?

working on games always seemed like a dream job, probably isn’t i really loved playing muds so much, i wanted to make one where users could surprise me again minecraft, dwarf fortress, lo-fi and indie games back on the rise

Friday, July 20, 12
slide-5
SLIDE 5

working on games always seemed like a dream job, probably isn’t i really loved playing muds so much, i wanted to make one where users could surprise me again minecraft, dwarf fortress, lo-fi and indie games back on the rise

Friday, July 20, 12
slide-6
SLIDE 6

working on games always seemed like a dream job, probably isn’t i really loved playing muds so much, i wanted to make one where users could surprise me again minecraft, dwarf fortress, lo-fi and indie games back on the rise

Friday, July 20, 12
slide-7
SLIDE 7

this talk

Ancient Times Contemporary Inspirations A Modern Approach Future Awesomeness Where It’s At / Demo

Friday, July 20, 12
slide-8
SLIDE 8

ancient times

Friday, July 20, 12
slide-9
SLIDE 9

ancient times

interactive fiction

West of House You are standing in an open field west of a white house, with a boarded front door. There is a small mailbox here. > zork! not designed for multiple users inform 7

Friday, July 20, 12
slide-10
SLIDE 10

interactive fiction

Volume 4 - Physical Environment Book 1 - The Study Chapter 1 - Basic Room The Water Study is a room. "The walls are painted black with simple architectural motifs, except for the cunning panel of three green pears[if the pitcher is whole] and a pitcher of water. The glass is painted so that light seems to fall through it from [the window], and the pears are[end if] luscious enough to eat[if the pitcher is ruined]. The shards of glass and the pool of water are a little hard to explain, but might be written off as the artist's odd fancy[end if]." The printed name of the Water Study is "Study with Pears and [if the pitcher is whole]Pitcher[otherwise]Spilled Water[end if]". Instead of going nowhere: say "You can go in and out the window, but otherwise gallivanting around the villa is a bad idea. The

  • ther rooms are full of soldiers."

found out about inform last year at oscon ben collins- sussman

Friday, July 20, 12
slide-11
SLIDE 11

interactive fiction

Volume 4 - Physical Environment Book 1 - The Study Chapter 1 - Basic Room The Water Study is a room. "The walls are painted black with simple architectural motifs, except for the cunning panel of three green pears[if the pitcher is whole] and a pitcher of water. The glass is painted so that light seems to fall through it from [the window], and the pears are[end if] luscious enough to eat[if the pitcher is ruined]. The shards of glass and the pool of water are a little hard to explain, but might be written off as the artist's odd fancy[end if]." The printed name of the Water Study is "Study with Pears and [if the pitcher is whole]Pitcher[otherwise]Spilled Water[end if]". Instead of going nowhere: say "You can go in and out the window, but otherwise gallivanting around the villa is a bad idea. The

  • ther rooms are full of soldiers."

found out about inform last year at oscon ben collins- sussman

Friday, July 20, 12
slide-12
SLIDE 12

interactive fiction

Volume 4 - Physical Environment Book 1 - The Study Chapter 1 - Basic Room The Water Study is a room. "The walls are painted black with simple architectural motifs, except for the cunning panel of three green pears[if the pitcher is whole] and a pitcher of water. The glass is painted so that light seems to fall through it from [the window], and the pears are[end if] luscious enough to eat[if the pitcher is ruined]. The shards of glass and the pool of water are a little hard to explain, but might be written off as the artist's odd fancy[end if]." The printed name of the Water Study is "Study with Pears and [if the pitcher is whole]Pitcher[otherwise]Spilled Water[end if]". Instead of going nowhere: say "You can go in and out the window, but otherwise gallivanting around the villa is a bad idea. The

  • ther rooms are full of soldiers."

found out about inform last year at oscon ben collins- sussman

Friday, July 20, 12
slide-13
SLIDE 13

ancient times

telnet

Let’s face it, kinda sucks best thing we had at the time Connected to term.ie. Escape character is '^]'.

Friday, July 20, 12
slide-14
SLIDE 14

ancient times

line oriented protocols

MCP , basically described a system of passing additional information for clients via what amount to comments that clients were meant not to display #$#spam 12345 from: Biff text*: "" _data-tag: 9b76 #$#* 9b76 text: This is some sample text. #$#* 9b76 text: #$#* 9b76 text: Note that you don't need to quote strings #$#* 9b76 text: in multiline data. Also, you can include "special" #$#* 9b76 text: characters like quotes. Everything after the #$#* 9b76 text: space after the keyword and colon is considered #$#* 9b76 text: part of the value. #$#* 9b76 text: This means that spaces can also be part of the value. #$#: 9b76

Friday, July 20, 12
slide-15
SLIDE 15

ancient times

lpc

LPC was the first programming language i used extensively at the time printed out the manual at my mother’s office

inherit "/lib/room"; void create() { ::create(); set_short("a simple room"); set_long("A simple room in a simple building."); set_description("This is a simple room in a simple building. It is very nice."); add_exit("north", "/realms/descartes/north_room"); }

Friday, July 20, 12
slide-16
SLIDE 16

ancient times

lots and lots of MUDs

  • ne thing i definitely

found out when researching this people still working

  • n them

people still playing them pretty much everybody tried to write one

Friday, July 20, 12
slide-17
SLIDE 17

contemporary inspirations

Friday, July 20, 12
slide-18
SLIDE 18

contemporary inspirations

evennia

twisted, django comet (precursor to websockets) style web interface in addition to mud protocols relatively full-featured all-in-one server i don’t really like twisted any more (though it taught me everything i know)

Friday, July 20, 12
slide-19
SLIDE 19

contemporary inspirations

nakedmud

c, python for scripting rather mature but very stripped down, no stock combat, currency, etc all-in-one server c, yuck i looked at its source a bunch to see which things i hadn’t thought about yet for my code

Friday, July 20, 12
slide-20
SLIDE 20

contemporary inspirations

imaginary

i don’t think it is a joke, but it might be twisted, meant to be a simulation can’t really find the code anywhere

Friday, July 20, 12
slide-21
SLIDE 21

contemporary inspirations

imaginary

i don’t think it is a joke, but it might be twisted, meant to be a simulation can’t really find the code anywhere maybe glyph knows more

?

Friday, July 20, 12
slide-22
SLIDE 22

contemporary inspirations

second life

not really a mud, but has many

  • bject-creation characteristics

that cater well to developers housemate worked on it, always discussed possible ideas about hosting own land it’s graphical and i think that takes away a lot from the immersive experience, the space between things makes worlds feel empty

Friday, July 20, 12
slide-23
SLIDE 23

contemporary inspirations

playsh

totally awesome project from a few years back, ben cerveny and matt webb users are basically in a python shell connected with

  • ther python shells, and can

share objects has a perspective concept where the client interprets the available verbs and properties with the goal that individual clients can be interacting while playing different types of games

Friday, July 20, 12
slide-24
SLIDE 24

a modern approach

Friday, July 20, 12
slide-25
SLIDE 25

a modern approach

distributed game world

locations can run in different processes, different servers most calls require very little state trust models i looked at eve online quite a bit in modeling it why is that better? well, it implies certain scaling characteristics, allows usage of high-end load balancing techniques

Friday, July 20, 12
slide-26
SLIDE 26

a modern approach

rpc-style interactions

rich objects rather than line-

  • riented (json at the moment)

calls get routed between users and (users, npcs, objects) via the location

  • r world

why is this better?

  • structured data makes clients

much easier to write

  • it also makes parsing the

interactions easy

  • would still like to add NLP stuff
Friday, July 20, 12
slide-27
SLIDE 27

a modern approach

cryptographically signed items

items, locations, users, everything has a trust chain this allows for many types of interactions that do not require checking a database also allows in-game entities to create new items that they can trust, for example a bank

Friday, July 20, 12
slide-28
SLIDE 28

a modern approach

connections to external resources

  • bjects can be

represented by REST web services notch and his MMO and DCPU to operate while

  • ut

maybe instead an avatar that forwards messages to a web service? github integration

Friday, July 20, 12
slide-29
SLIDE 29

future awesomeness

Friday, July 20, 12
slide-30
SLIDE 30

future awesomeness

world state based on voting

sci-fi has a lot of really interesting philosophical models demarchy liquid democracy example voting topics:

  • new users, possibly

limited resources

  • certain votes required

to affect story line

Friday, July 20, 12
slide-31
SLIDE 31

future awesomeness

self-hosted locations

register a location running on your

  • wn server

possibly connect your own entire world, see federation / layering later

Friday, July 20, 12
slide-32
SLIDE 32

future awesomeness

credit for accepted pull- requests

give people in-game credit for successfully submitting patches to the project connect to the real world also, bittorrent file- sharing

Friday, July 20, 12
slide-33
SLIDE 33

future awesomeness

DCPU-controlled robots

bunch of VMs already for DCPU why not allow you to program NPCs with it? different programs could possibly be traded cost credits to run

Friday, July 20, 12
slide-34
SLIDE 34

future awesomeness

federated / layered worlds

because things are signed, a person could be in two worlds at the same time trusting one cert might show the current world, but trusting a new cert might allow interaction with a world on top of that new people might be on a “lower plane”

Friday, July 20, 12
slide-35
SLIDE 35

where it’s at / demo

Friday, July 20, 12
slide-36
SLIDE 36

where it’s at

worlds, locations, npcs, objects

servers endpoints all using pretty much the same interfaces right now zmq

Friday, July 20, 12
slide-37
SLIDE 37

worlds, locations, npcs, objects

where it’s at

Friday, July 20, 12
slide-38
SLIDE 38

where it’s at

worlds, locations, npcs, objects

user

Friday, July 20, 12
slide-39
SLIDE 39

where it’s at

worlds, locations, npcs, objects

user

Friday, July 20, 12
slide-40
SLIDE 40

where it’s at

worlds, locations, npcs, objects

user

Friday, July 20, 12
slide-41
SLIDE 41

where it’s at

worlds, locations, npcs, objects

user

Friday, July 20, 12
slide-42
SLIDE 42

where it’s at

worlds, locations, npcs, objects

Friday, July 20, 12
slide-43
SLIDE 43

where it’s at

worlds, locations, npcs, objects

Friday, July 20, 12
slide-44
SLIDE 44

where it’s at

locations.txt

housemate made a joke about not creating a language

  • ver a weekend that

gets used for 10 years

Friday, July 20, 12
slide-45
SLIDE 45

locations.txt

awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0

Friday, July 20, 12
slide-46
SLIDE 46

locations.txt

awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0

Friday, July 20, 12
slide-47
SLIDE 47

locations.txt

awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0

Friday, July 20, 12
slide-48
SLIDE 48

locations.txt

awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0

Friday, July 20, 12
slide-49
SLIDE 49

locations.txt

awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0

Friday, July 20, 12
slide-50
SLIDE 50

locations.txt

awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0

Friday, July 20, 12
slide-51
SLIDE 51

locations.txt

awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0

Friday, July 20, 12
slide-52
SLIDE 52

locations.txt

awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0

Friday, July 20, 12
slide-53
SLIDE 53

where it’s at

  • bjects.txt

similar to locations but for objects also naive but allows extensibility

Friday, July 20, 12
slide-54
SLIDE 54
  • bjects.txt

rock_singularity This rock seems to exist in all locations. TRIGGERS: not used: not used testing_console_0: zombie.objects.console.GithubConsole This is the first test console. Try use-ing it. TRIGGERS: not used: not used

Friday, July 20, 12
slide-55
SLIDE 55
  • bjects.txt

rock_singularity This rock seems to exist in all locations. TRIGGERS: not used: not used testing_console_0: zombie.objects.console.GithubConsole This is the first test console. Try use-ing it. TRIGGERS: not used: not used

Friday, July 20, 12
slide-56
SLIDE 56
  • bjects.txt

rock_singularity This rock seems to exist in all locations. TRIGGERS: not used: not used testing_console_0: zombie.objects.console.GithubConsole This is the first test console. Try use-ing it. TRIGGERS: not used: not used

Friday, July 20, 12
slide-57
SLIDE 57

zombie.objects.console.GithubConsole

class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})

Friday, July 20, 12
slide-58
SLIDE 58

zombie.objects.console.GithubConsole

class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})

Friday, July 20, 12
slide-59
SLIDE 59

zombie.objects.console.GithubConsole

class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})

Friday, July 20, 12
slide-60
SLIDE 60

zombie.objects.console.GithubConsole

class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})

Friday, July 20, 12
slide-61
SLIDE 61

zombie.objects.console.GithubConsole

class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})

Friday, July 20, 12
slide-62
SLIDE 62

zombie.objects.console.GithubConsole

class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})

Friday, July 20, 12
slide-63
SLIDE 63

where it’s at

devserver

DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632 spawns everything in one process yay eventlet

Friday, July 20, 12
slide-64
SLIDE 64

where it’s at

devserver

DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632

Friday, July 20, 12
slide-65
SLIDE 65

where it’s at

devserver

DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632

Friday, July 20, 12
slide-66
SLIDE 66

where it’s at

devserver

DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632

Friday, July 20, 12
slide-67
SLIDE 67

where it’s at

devserver

DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632

Friday, July 20, 12
slide-68
SLIDE 68

where it’s at

devserver

DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632

Friday, July 20, 12
slide-69
SLIDE 69

where it’s at

devserver

DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632

Friday, July 20, 12
slide-70
SLIDE 70

where it’s at

devclient

Friday, July 20, 12
slide-71
SLIDE 71

zombie_devclient.py

===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================

  • > darkthorn entered the room.

This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>

Friday, July 20, 12
slide-72
SLIDE 72

zombie_devclient.py

===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================

  • > darkthorn entered the room.

This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>

Friday, July 20, 12
slide-73
SLIDE 73

zombie_devclient.py

===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================

  • > darkthorn entered the room.

This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>

Friday, July 20, 12
slide-74
SLIDE 74

zombie_devclient.py

===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================

  • > darkthorn entered the room.

This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>

Friday, July 20, 12
slide-75
SLIDE 75

zombie_devclient.py

===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================

  • > darkthorn entered the room.

This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>

Friday, July 20, 12
slide-76
SLIDE 76

zombie_devclient.py

===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================

  • > darkthorn entered the room.

This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>

Friday, July 20, 12
slide-77
SLIDE 77

zombie_devclient.py

===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================

  • > darkthorn entered the room.

This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>

Friday, July 20, 12
slide-78
SLIDE 78

zombie_devclient.py

===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================

  • > darkthorn entered the room.

This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>

Friday, July 20, 12
slide-79
SLIDE 79

demo?

Friday, July 20, 12
slide-80
SLIDE 80

thanks

code at: http://github.com/termie/zombie me at: @termie http://term.ie

Friday, July 20, 12