How to Run a Corridor Track in a Remote Conference with Python
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Subtitle |
| |
Title of Series | ||
Number of Parts | 130 | |
Author | ||
License | CC Attribution - NonCommercial - ShareAlike 3.0 Unported: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/50087 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
EuroPython 2020122 / 130
2
4
7
8
13
16
21
23
25
26
27
30
33
36
39
46
50
53
54
56
60
61
62
65
68
73
82
85
86
95
100
101
102
106
108
109
113
118
119
120
125
00:00
TrailMaizeComputerFocus (optics)SoftwareDigital signalTelecommunicationDatabase transactionMathematical analysisMetadataOvalMotion captureComputing platformOvalMathematical analysisTwitterDatabase transactionPattern languageData conversionNatural numberFacebookLimit (category theory)Interactive televisionFocus (optics)Multiplication signState of matterQuicksortControl flowDigitizingCartesian coordinate systemSoftwareHypermediaEquivalence relationCASE <Informatik>Semiconductor memoryUser interfaceRaw image formatCompass (drafting)Revision controlNumberBitStress (mechanics)Service (economics)Perspective (visual)Uniqueness quantificationDifferent (Kate Ryan album)AuthenticationSelf-organizationGame theoryExpressionTrailLine (geometry)Product (business)Centralizer and normalizerProcess (computing)DemosceneSet (mathematics)Remote procedure callSoftware developerUniformer RaumDigital photographyLattice (order)Exterior algebra2 (number)TimestampGraph coloringCollaborationismGoogolShared memoryFunction (mathematics)Video gameInformationMetreWindow1 (number)MetadataRow (database)NeuroinformatikTelecommunicationMeeting/InterviewComputer animation
09:21
Goodness of fitLoop (music)BitDescriptive statisticsFerry Corsten2 (number)Tablet computerType theoryTouchscreenMechanism designVideo gameSlide ruleRight angleQuicksortAdventure gameFocus (optics)MUDUser interfaceIntegrated development environmentNeuroinformatikSoftware bugUniform resource locatorObject (grammar)DatenautobahnGame theoryVirtualizationSoftware developerInteractive televisionIdentity managementComputing platformMultiplication signModemBackupRepresentation (politics)Variety (linguistics)CASE <Informatik>Ocean currentContrast (vision)User-generated contentUniverse (mathematics)CyberspaceHypermediaVideoconferencingPoint (geometry)PiMoment (mathematics)Client (computing)Term (mathematics)TelnetOverhead (computing)Task (computing)Different (Kate Ryan album)Traffic reportingProcess (computing)EmailMereologyStudent's t-testState of matterNatural numberMusical ensembleDemosceneWordCase moddingSound effectArithmetic meanCoordinate systemElectronic program guideComputer programmingSource code
18:24
Smith chartComputer fontAxiom of choiceMultimediaContext awarenessAdventure gameGame theoryElectronic mailing listGreatest elementSoftware maintenanceWebsiteSoftware frameworkWeb 2.0Function (mathematics)QuicksortRow (database)Process (computing)Template (C++)Scripting languageEmailUser interfaceSoftware developerComputing platformWeb applicationWeb pageDebuggerSlide ruleAdventure gameOnline gameProgrammer (hardware)SummierbarkeitMereologyLink (knot theory)DiagramTotal S.A.CodeSmith chartMehrplatzsystemMultimediaTheoryObject (grammar)Reading (process)Focus (optics)Different (Kate Ryan album)CyberspaceInteractive televisionVideo gameContext awarenessMultiplication signLambda calculusRevision controlType theoryInternetworkingComputer architectureScalabilitySoftware testingHacker (term)Goodness of fitWordVideoconferencingCategory of beingGame theoryLaptopState of matterCase moddingOnline helpResultantOnline chatFormal languageBuildingMaxima and minimaCopyright infringementLattice (order)Form (programming)Library (computing)Module (mathematics)RecursionTerm (mathematics)AuthorizationPlug-in (computing)Internationalization and localizationMobile appMiddlewareNumbering schemeDivisorCartesian coordinate systemWritingCodeProper mapReal numberSocket-SchnittstelleVirtualization
27:26
outputEscape characterKeyboard shortcutControl flowDirected setAttribute grammarObject (grammar)Message passingString (computer science)Queue (abstract data type)Scripting languageTable (information)Context awarenessFrequencyError messageStack (abstract data type)Smith chartSystem programmingWebsiteCodeServer (computing)MUDBitMessage passingGame theoryCompass (drafting)Wechselseitige InformationAbstractionKeyboard shortcutQuicksortSlide ruleLink (knot theory)Object (grammar)CollaborationismCodeAttribute grammarComputing platformPhysical systemoutputMultiplication signMathematical analysisMultimediaSoftware developerServer (computing)Data conversionOcean currentTracing (software)Descriptive statisticsInteractive televisionSpacetimeTelecommunicationScripting languageReading (process)Moment (mathematics)Formal languageLocal ringMathematicsRaw image formatFerry CorstenTraffic reportingFrequencyContext awareness2 (number)MereologyHash functionModal logicOrder (biology)Formal grammarRevision controlQueue (abstract data type)Stack (abstract data type)Socket-SchnittstelleData storage deviceNatural languageSingle-precision floating-point formatCartesian coordinate systemInstance (computer science)WordTerm (mathematics)CuboidMobile appFunctional (mathematics)ImplementationKey (cryptography)Computer scienceData dictionaryDegree (graph theory)Web 2.0Error messageMUDProgramming languageMatching (graph theory)Smith chartMehrplatzsystemDrop (liquid)Graph (mathematics)Goodness of fitCase moddingCodecCASE <Informatik>EstimatorTable (information)Arithmetic progressionUser profileString (computer science)Database transaction
36:28
BlogEmailArithmetic meanStandard deviationQuicksortInteractive televisionMetropolitan area networkPoint cloudDigital photographyCase moddingBitSpacetimeDescriptive statisticsObject (grammar)Denial-of-service attackVideo GenieCoefficient of determinationStatement (computer science)String (computer science)Formal grammarLocal ringType theoryPoint (geometry)MathematicsGame theoryEndliche ModelltheorieDisk read-and-write headMoment (mathematics)Formal languageZoom lensFunctional (mathematics)CASE <Informatik>Electric generatorEquivalence relationWritingMechanism designField (computer science)Multiplication signHypermedia1 (number)Web 2.0AnalogyCuboidVirtual machineDynamical systemInternet forumQueue (abstract data type)Control flowCodeAdventure gameVideo gameMarkov chainData conversionDatabase transactionFrequencyServer (computing)Physical systemMessage passingIntegrated development environmentVirtual realityError messageGoodness of fitRight angleData structureWeb applicationSemiconductor memoryOpen setMereologyElectronic program guideSheaf (mathematics)Raw image formatTranslation (relic)ChainMeeting/Interview
44:40
Automatic differentiationMeeting/Interview
Transcript: English(auto-generated)
00:06
All right, so please join me giving a big clap to Nicholas. Go for it. Thank you. So thanks for the invite.
00:22
My name's Nicholas, and I'm a freelance Python developer from the UK. The focus of this talk might not be immediately apparent from the title, so let me explain a little. In this talk, what we're going to do is explore just a big subject, how humans communicate
00:42
via computers, how software influences the nature of that communication. We're also going to do a little bit of digital archaeology, of old technical solutions for this problem. And I'm going to wrap up with a show and tell of a fun brain break experiment
01:01
in recreating these solutions with modern technology. But I want to set the scene with this photo from EuroPython 2011 in Florence. And what it does is that it captures the wonderful nature
01:21
of the corridor track. As you can see, well, I'm actually stood in the middle in the red t-shirt. And as a collection of folks, we all appear to be holding penny whistles, which seems appropriate for a conference that could have been held in Dublin. And there's a guy with a guitar strumming away with us.
01:41
It's informal, it's friendly, it's diverse, and it's fun. And this is why I love EuroPython. It's a nice place to hang out, and I get to see my friends, and I get to make new ones, most importantly. So let me just rearrange, so that I can see things.
02:07
Yet, 2020 is the year we all learned to try to stay close whilst remaining, at least in the UK, two meters apart. And this has been a difficult time as we learn to change and adapt to the new circumstances due to coronavirus.
02:24
But I'm extremely grateful, I want to put this on public record, for the volunteers who put on EuroPython. Their efforts are often taken for granted, and you wouldn't believe the amount of stress and the number of problems they will have had to put up with. So this is especially so now that EuroPython is remote.
02:44
And the current situation has also brought into focus an important question. How could folks remotely recreate the opportunity for chance encounters, unexpected conversations, and exploration of a venue and a new city with friends, which is the sort of thing that happens at EuroPython?
03:02
How is such bonhomie warmth and friendship expressed most effectively through a digital medium, a remote digital medium? Perhaps more importantly, how do we foster tolerance and compassion or corrections of misunderstanding and all that other good stuff needed so a diverse community
03:21
full of differences and unique perspectives is able to live with itself without becoming a fractured and toxic place? So EuroPython has decided to use Discord in this sense, a chat service written for gamers. Now, I don't know about you, but I like Discord a lot.
03:41
And I'm actually really pleased that EuroPython organizers chose it over other solutions, others being things like Slack or Microsoft Teams or Google Hangouts. But Discord is typical of the current state of the art in that they all look and function similarly.
04:01
Yet, I don't actually feel that comfortable at times with the current state of the art. So let's start by exploring my problems and discomfort with these platforms. Let's also try to imagine perhaps a more expressive, simpler, or perhaps humane alternative too.
04:21
So I'm going to start by taking Discord to pieces, if you see what I mean, to see what's going on. Actually, there's a lot going on in this application. For those of us used to computers, this is often easy to miss. This is rather a complicated user interface
04:41
that we can see in front of us. We are literally bombarded with data. Metadata, icons, timestamps, reactions, labels, and silos are the norm for remote written interactions such as those that we might have through Discord.
05:02
And I'd also like to point out that Discord is also ultimately a very transactional sort of way to interact. And I'll come to what I mean by that in a second. But Discord isn't the case for just Discord.
05:20
This is the case for other social media platforms. So let's unpack that a little bit. So this is Twitter. There are familiar patterns in Twitter. And this isn't so much a conversation as shouting into the void through the inconvenience of a 280 character limit. And look at where all the adverts are.
05:42
And here's Facebook, the redesigned Facebook. Facebook feels to me the most mediated platform. This is most blatantly an exercise in retaining my attention at all costs rather than fostering a place for conversation or making friends or being friendly with people.
06:02
Most problematic for me is the nature of our interactions with such platforms. Our interactions have become digital transactions. Transactions have metadata for analysis.
06:21
Transactions are dislocated. There's no sense of place or occasion to such transactions. Transactions are impersonal, such as with Twitter, shouting into the void, as it were. It's hard to have a conversation. Transactions are evaluated. So we get to see likes and retweets and reactions.
06:41
It's turned into a sort of popularity game. And transactions, sadly, are curated by platforms to capture our attention. Click here, react, reply, share, or only show those things that are most relevant to you. Well, who decides what that is? Sadly, our socialising is reduced to interactions
07:02
that standardise, process and normalise our lives into a digital production line of uniform social outputs, like something, post a picture, reply with a comment, set your mood, that sort of thing. The messy, complicated and raw aspects of life, which I would argue are the most valuable, fun and interesting, are lost or have no way
07:23
to manifest themselves through these sorts of platforms. We've commoditised ourselves into a dribble of systematised digital assets, photos, posts, likes, that sort of thing. And also, is it just me? But why do I always get the impression that the design of social media has been designed
07:42
by Peppa Pig, soft colours, cute, neutral and just a little bit infantile in tone? Or perhaps, I'm just getting old. I'm the digital version of, damn kids, get off my lawn. Or perhaps, current technical solutions
08:01
to remote collaboration, community and friendship feel like I'm being analysed. My attention is being manipulated, and I either have to pay or see adverts to get anything done. None of which is conducive to me to making a place where I can have humane conversations
08:21
and make friends. So, given the lockdown situation that we face, I ask myself, could there be a more natural way, creative way, simple way, expressive way,
08:41
respectful way, authentic way to meet, make friends and interact online? How do we remotely recreate the opportunity for chance encounters, unexpected conversation and exploration of a venue and a new city with friends,
09:03
but online rather than in Dublin? How could we recreate the online equivalent of our beloved corridor track, where all these friendships and lovely conversations happen? And then, as if by magic, I remembered a distant memory from my childhood,
09:22
text-based worlds with epic stories, curious locations and imaginative adventures. And this got me thinking. So there's a bug in Firefox that means I just have to reload this iframe.
09:42
So here we go. So bear with me as I go on an adventure into computer history. For the young'uns, this is what a text-based adventure game looks like and feels like. This actually is Douglas Adams' own recreation of his novel, The Hitchhiker's Guide to the Galaxy, as a text-based yet interactive virtual world.
10:05
So let me explain the mechanics of this. Text is displayed on the screen. The screen is up here for me. So if I'm looking away, you know I'm looking at my slides here. And I type commands in, and then reactions happen. So you wake up,
10:20
the room is spinning very gently around your head, or at least it would be if you could see it, which you can't. It is pitch black. I don't know, let's have a look around. Nope, it's pitch black. So I don't know, let's try to switch on the light. Good start. Pity it's going to be the worst day of your life. The light is now on.
10:40
Then we get a description and we get to see what sort of objects are currently in the room. So I don't know, if I get all the objects, because I'm probably going to need them later on in my adventure, I can't do that because I'm still in bed. Right, okay. So why don't I stand up? This is very difficult, but I manage it. I seem to have a hangover by the looks of the descriptions
11:01
and the text that's coming back. Okay, let me get all the things. And what have I got? Telephone, a screwdriver, toothbrush and a gown. Okay, so why don't I put on the gown? Because that's what Arthur Dent is famous for, wearing a gown, I wear a gown. And if I examine the gown, this might tell me something a bit more about what it is.
11:21
So the dressing gown is faded and battered, clearly a garment that has seen better decades. It has a pocket which is closed and a small loop at the back of the collar. Okay, that pocket looks interesting. So let's open the pocket. Okay, something my aunt gave me, buffered analgesic, that'll be good for a headache, and pocket fluff, so I don't know.
11:42
Let's take the tablet. I solid the tablet, after a few seconds, the room begins to calm down. Okay, my headache has gone. Okay, so let me have a look around again. Where are the exits? Small bedroom, washbasin, near the exit, heading south. Okay, so I type S to show that I'm going south.
12:02
I'm now in the front porch. This is an enclosed room porch, blah, blah, blah, blah. And on the doormat is a pile of junk mail. I've learned by playing adventure games, it's best to just take everything. So I'm gonna get all, because you never know when you might need it. Okay, I gathered up the pile of mail, and let's step outside.
12:20
Okay, so this is where the actual book picks up, isn't it? It's where Mr. Prosser from the local council has a bunch of bulldozers, and he wants to knock down your house. So I don't know, what can I do? Blah, blah, blah, blah, blah, blah. Why don't I lay down in the mud? So I don't know, I'm trying, lie down.
12:41
That's better, I can't speak English. Okay, so you get the idea. I type something and things happen. Okay, and it's quite good fun as well. So that was a single player text-based virtual world.
13:01
But soon after the appearance of such games, some university students in the UK invented mud. A mud is a multi-user dungeon, and it's a multiplayer text-based adventure game, a little bit similar to the one that we've just seen. And the video that I'm playing at the moment is of an interaction on the original mud
13:21
that I recorded a few days ago. In it, you'll have seen that I've just finished chatting with a wizard called Pywhackit. And at some point through the video, I come a cropper with some rats. You can enjoy that as I keep talking. But the thing about these sorts of adventure games
13:41
or muds is that they are low-tech. So I've actually connected via Telnet, believe it or not, although proper clients are available. It's quirky, there's humor, imagination, playfulness, but sometimes it is serious. It's literary, so there's a narrative there. There's a sense of place and time and genre.
14:02
And in this case, we're in a fantasy world, although we were in a sci-fi world with Hitchhiker's Guide to the Galaxy. And actually, it's a lot of fun. There's also many varieties of mud. In the mid 1990s, when I was at university, I would play on something called a MOO.
14:22
A MOO is an acronym for a multi-user dungeon that's object-oriented, M-O-O, MOO. And in a MOO, what's interesting is the textual world is a collection of user-generated objects. Users program the behavior of the world, as well as inhabiting it as well. It becomes an interactive development environment.
14:43
And that's in contrast to the mud that we've just seen, which has been programmed by someone that everybody collectively plays. So muds and MOOs became very popular. Before all the toxic aspects of current social media platforms, such behaviors were sadly manifested
15:01
in these virtual textual worlds, and most famously documented by Julian Dibble's rape in cyberspace, which I highly recommend. It's a very thoughtful piece. Yet at the same time, these were progressive places, and I made many friends all over the world at a time when such things
15:20
were still viewed with incredulity. Social scientists, psychologists, literary critics, artists, and educators all got interested in these platforms. MIT professor Sherry Turkle famously analyzed such online role-playing as a way for folks to explore different aspects of their identity in a relatively safe manner. The challenges that may arise in such platforms
15:42
would allow folks to reflect upon their behavior and get to know more about themselves, a sort of narrative development of their lives. Now, being British, I spent most of my time asking my fellow players what the weather was like where they were, be that San Francisco, Paris, Tel Aviv, or Singapore.
16:00
This, for me, was strangely satisfying, and it made me feel like a true citizen of the global village delivered via the information superhighway that was my 56K modem in the 1990s. I also built a textual, interactive representation of a remote Scottish island that my girlfriend, now my wife, and I visited over the summer of 1995.
16:24
I still have a backup, and it's an interactive digital memento of my 21-year-old self. It was, and it continues to be, fun to write, explore, and interact within such worlds.
16:40
This all feels very low-tech, but I like that. I don't miss the transactional and manipulative nature of the current state of the art, and the focus is definitely on being in a specific place in a certain moment with particular sorts of people. The things I love about words are that they are, well, tell, rahul, and show.
17:02
The user's imagination is paramount, and this is reflected in the simple and uncluttered user interfaces where the text is most important. They could be playful or serious, but always tell a story within a recognisable literary genre that sets the scene for interactions between users.
17:20
Whereas graphical games focus on hand-eye coordination and showing us things, text-based worlds put narrative, meaning, and intent at the centre of their process. And while the reader may have more to do with their imagination, I believe the reward is far greater for what you imagine will always have the best special effects.
17:41
Literary worlds are also more egalitarian and accessible. They're within the realm of a single developer, so there's very low overhead in technical terms. And this, to me, reminds me of the difference between making a movie, which requires thousands of people, or writing a novel, which, whilst still an onerous task, is something that a single person is able to do.
18:03
So I asked myself, what would a mud or a moo written in 2020 look like? Well, as it happens, I'd already answered this question. Pi Week is a game jam for Python developers, and it's organised by the amazing
18:20
and hugely talented Dan Pope. It's a wonderful hidden gem of the Python community, and I would heartily recommend that you should try it. It's a very friendly place, and it doesn't matter if you've never written a game before, you'll have a blast. I've had a wonderful time. And in 2019, with my buddy, Andrew Smith,
18:41
I entered as a team. Andrew is an author and a journalist, so we wanted to do something text-based. And the theme that was given for Best Pi Week was six worlds. And we decided to create a simple, moo-like game where folks could build things, add behaviour via a lisp-like scripting language, and interact with each other
19:01
in the style of six different literary genres. Jane Austen, poetic passions where everything had to rhyme, hard-boiled detective novels, something we called JRR fantasy, sci-fi and future worlds, and of course, something that we called Parry Hotter,
19:21
so that we wouldn't infringe somebody's copyrights, but you get the idea. However, TechSmith was born, but it was written in a week of furious coding. Note the minimal book-like user interface,
19:41
and the focus was definitely on creativity, exploration, a sense of place, and genuine textual interactions with others. This was incomplete, but folks could make objects. And we had the start of a lispy scripting language
20:02
to make the world come alive and programmable. The video is a short exploration through the world. It's browser-based with web sockets handling everything in the background. And while familiar in modus operandi, the user is moving between places and meeting other users, we've added a multimedia spin to things too.
20:21
As you can see, there are pictures, and you can see I'm just about to start some audio, which obviously I've not captured in this particular video. It adds to the atmosphere. I'm almost tempted to think of this as a multi-user social Jupyter notebook. And of course, as we interact with the game
20:42
and say things and so on, it looks as if it's a printed word. This is important for us too. We're focusing on the text. Happily, we came forth in the team category, which is our best result ever. Woo-hoo! And folks appear to like it.
21:00
The idea for this is unique. This has great potential. Really cool entry. Really would have liked to see that SchemeLite scripting language mentioned in the help text. I think it would have pushed this over into extremely cool no matter what territory, and also would have inclined me to play with it way more. So I set myself a mission to finish TechSmith.
21:24
I'd had so much fun that I couldn't stop reading about MUDs or coding on TechSmith. My desire to write, create, imagine, play, and explore fueled my enthusiasm, as did my growing dissatisfaction and unease with the current state of the art for chat or text-based interactions on the internet.
21:43
Since the UK, like everywhere else, was in lockdown, I decided to entertain myself after work by rewriting TechSmith properly. I had to turn a week of hacks into something that I could share with people.
22:00
It has full test coverage, docs, scalable architecture, and so on. In other words, code, I'd want to show the world, like here at EuroPython. And I did my research, which was remarkably good fun. Starting at the top, Designing Virtual Worlds was written by Richard Bartle,
22:22
who created the world's very first MUD. And it's a sort of a Bible, really, for those people who are interested in this sort of thing. It's also a cracking good read. I highly recommend it. A Theory of Fun by Rafe Costa is also very good. And it's actually cartoons and writing. So it's a playful sort of a book.
22:41
And Rafe has been involved in an awful lot of massively multiplayer online games in his time. My Tiny Life by the aforementioned Julian Dibble is a good historical context about what was going on back in the 1990s in these text-based worlds, and contains not just the infamous
23:01
or famous Rape in Cyberspace paper, but many, many more that deals with different aspects of how people communicate and interact and build and make things in a digital world. If you remember, I mentioned moo as being a type of mud. Well, the original moo, called landermoo,
23:21
was created by a chap from Xerox Park called Pavel Curtis. And so I managed to find a version of this online, still online, the landermoo programmer's manual. And this was a great technical inspiration for me. And then finally, there's Get Lamp, which is actually a documentary,
23:41
a Creative Commons licensed documentary about adventure games and this sort of genre. It also looks at interactive fiction and things like that. And if you're interested in finding out more about these resources, and if you're interested, I hope you do, the slides for this talk are linked from the page for this talk
24:01
on the EuroPython website. So you'll be able to come through and follow the links yourself. This was all remarkably good fun. So how does the revised text myth add up? What parts become the sum total of text's myth?
24:26
So let's look at our little diagram here. At the top is basically the front end. At the bottom is Redis, which is the data backend. And in the middle is obviously the middleware. Let me take you through each of these aspects
24:41
of the platform in turn. So starting top left, QORT is an AsyncIO web framework, a la Flask. In fact, the API is exactly the same. And this is the thing that provides WebSocket support and the website for text myth.
25:00
Now Phil Jones, who's the maintainer and creator of QORT, does an amazing job. And I have to say, put it on record, that this has been an absolute joy to use. So if you are familiar with Flask and you want to do some AsyncIO sort of development, QORT is definitely the way to go. Of course, output to the user is framed within Jinja templates.
25:23
That's nothing out of the way about that. And then we get to Babel for internationalization. And this slots really neatly due to a Flask plugin into QORT. So text myth is fully translatable. Text-based virtual worlds are not just English virtual worlds.
25:43
And I want my code to respect and acknowledge the diversity of folks who may use it in whatever language they might want to use it in. The middleware of the app is all Python AsyncIO. And I use some really wonderful libraries to help make this easy to code.
26:02
If you look on the right, struct log, I'd like to point out, is a really helpful way of letting me see what the application is doing. It emits structured logging, using the 12-factor app scheme for web apps.
26:23
And it's just slotted in and it worked perfectly. So thanks, Hynek. And the other AsyncIO-related libraries for things like connecting to Redis, processing forms, working with email and things like that, they just worked for me. And I was a bit cautious about using AsyncIO
26:40
because I know it's perhaps the ecosystem with AsyncIO is perhaps not as mature as other places in the Python ecosystem, but everything just worked for me, which is a real great joy in terms of coding. On the right-hand side, you'll see a gentleman that might look familiar
27:00
due to the keynotes at previous EuroPythons, a very sly looking Dave Beasley. Sly stands, it's four. It's one of these three-letter recursive acronyms, Sly is a lex yak thing. So Sly, lex, yak. And this is a module that Dave has written that I use to process the nascent LISP-like
27:20
scripting language used by players to create the behavior of the textual world. Dave's work has been a fun way for me to learn about the language design, and learn about language design and implementation and all that other good stuff, which is part of computer science that I'm not that familiar with. I'm actually a classically trained musician, so I don't have a computer science degree.
27:40
So this was great fun, but there's still lots of work to do on that front. And finally, Redis is used as an object store, where Python dictionaries become JSON objects stored against a key. Redis is a fantastic key value data store with a host of simple yet powerful features. I've been very impressed with it so far. It also comes with a message queue
28:02
that's used by TechSmith for inter-object communication. For example, if a user, an object, says something in a room, another object, then a message from the user describing what's been said is sent to the room via the message queue. Then the room itself will send messages to objects representing other users in the room,
28:22
telling them someone has said something. It is these messages that the users receive, saying, you know, Fred has said hello, that are sent to the user's browser via the web sockets. TechSmith is also designed to be scalable as well. So you can have as many Python instances
28:40
of the application as you want because they scale horizontally. And all the interactions between these, these nodes as it were, are through the Redis message queue. And of course, at the back is a Redis cluster sitting behind all this. However, you could just always run this as a single app with Redis running on the same box.
29:01
So how does it work in terms of working with the user? How is user input handled? Well, we have the following workflow. We escape any HTML in the user input. That's very important first. Then we handle special shortcuts that allow people to say things, shout things,
29:23
emote things, or say something directly to a person. If the input doesn't match that. We check if the first word in the sentence is a built-in verb, like get, drop, build, what have you. And then we pass on the handling of the rest of that message to the built-in function within TechSmith.
29:41
If that doesn't match, we break the sentence down into grammatical parts. The verb, the direct object, the preposition, the indirect object. I'll come to what those mean in a second. Then what we do is we match the verb to an attribute name of objects in the room. And we do that with a sort of order of precedence.
30:00
So we check if the verb is an attribute of the user. If it's not, we check if the verb is an attribute of the room, then the direct object and indirect object, if they exist. And then we place that attribute value in the necessary message queues. Now, if the value of the attribute is a string,
30:20
starting with hash bang, we evaluate that as a script. So for instance, if the whistle object has a blow attribute with the value, the whistle toots, then the command blow whistle will result in the whistle toots being displayed to everyone in the room.
30:44
The verb blow was matched against the whistle object and therefore the value of the attribute blow was displayed. So let's just have a quick revision of grammar from primary school.
31:02
So if we have the command stack treasure on table, the verb is stack, the direct object is treasure, the preposition is on, and the indirect object is table. Now, of course, this changes depending on the locale or the natural language that the user is using to interact with TechSmith.
31:22
And this is something that we need to handle ourselves. So I mentioned script and the scripting language. It's a very simple lisp-like thing. How does that work? Well, it's definitely a work in progress, I can tell you. But scripts are evaluated in a particular context that contains the following things.
31:41
The user who gave the command, the room in which the user finds themselves, the exits from the room, the other users in the room, things of the object in the room, this, which is the object that matched the verb, the direct object and the preposition and indirect object if they exist, and of course the raw user input.
32:03
Scripts must complete within a certain period of time so we don't hold up the game or report that they've run out of time. Scripts may also only update objects within the context that they find themselves. Scripts execute with the privileges of the user who caused them to run.
32:21
So if a script tries to change the description of an object that I don't have permission to change, then the script will fail. And script may only emit messages to object in its current context as well. And of course, if the script fails, users get a meaningful error message or a stack trace.
32:42
And that's just the user who tried to run the script. Of course, the last thing we want is to fill a room full of stack traces. So that's essentially how the script works. What's the current status of TechSmith? Well, TechSmith is, I estimate, 80% finished.
33:03
I'm having fun and speculating about how people could creatively connect with each other through code that promotes a space for playful or serious interactions. But as they say, I've only got the other 80% to go. Now that's doubly so in this case, because that other 80% is going to be the worlds
33:24
that are built within TechSmith. So we're coming to the end now, and we'll have a bit of time for questions in a moment. But all of this makes me think of nested textual systems.
33:45
And those of you who've read Godel, Esher, Bach will see where this is going very, very quickly. There are, in essence, textual systems within textual systems within textual systems going on here, okay? So for instance, Python is a text-based programming language. TechSmith is a multi-user platform
34:02
for building interactive textual worlds. And the textual world inhabited by and meaningful to the users is built on TechSmith, which is built on Python, okay? So it's a bit like what we can see on this slide here.
34:21
We see a picture, but we also see a hand holding a ball in a picture. And we see the artist reflected in a ball held by a hand in the picture. So it's kind of not turtles all the way down, it's abstractions all the way down. So in conclusion, technology cannot, alas of itself,
34:43
stop folks from being rude, thoughtless, ignorant, or intolerant. But that shouldn't stop us from trying to imagine and create technology that emphasizes our humanity, autonomy, and promotes mutual respect, tolerance, and compassion in a diverse and cosmopolitan society.
35:03
TechSmith is a goofy game. TechSmith is also a kind of a thought experiment in code. But most of all, it's a multi-user, collaborative development platform for creating and inhabiting interactive, textual, and multimedia literary worlds. All this without transactions,
35:21
analysis of your social graph, manipulation of your attention, or clickbait adverts tailored to your user profile. You can find the code and the docs in the links that are in the current slide. And for those of you who are interested in finding more, finding out more about muds and moos and all that other good stuff,
35:42
I highly recommend the Titans of Text podcast. It's US based, and that's great fun. They get all sorts of people talking about interesting mud and moo related things there. And it's also at times quite thoughtful. There's also the Mud Coders Guild. I'm not the only one doing this sort of silly thing. There's actually a remarkable amount of people doing this sort of a thing.
36:01
And I was really pleased to find this place. They have a Slack channel and there's some really stimulating conversation going on there. And there's also a multi-user dungeon server on Discord as well, which of course you'll need to find, you'll need to get in an invite for, but you could probably get that through people in the Mud Coders Guild.
36:21
So, I'm pretty much on time, I guess, for a few minutes of questions. So, are there any questions? Thank you very much. Thank you, Nicholas. You are on time indeed. So just a reminder, if you want to drop a question, use the Q&A function on Zoom. So, we have a question from Thomas.
36:43
You said it is translatable to other languages. Does that also apply to the grammar used to analyze sentences? Ha ha, I knew I'd get a question about that. Not yet, but the mechanism is in place. So, I'm writing this, obviously I'm an English speaker and I'm writing this with English in mind,
37:00
but there are certainly going to be stubs. Well, you can see even now there are stubs in the code where it is doing the equivalent of a case statement, I guess, a switch case statement that's working out what the user's preferred locale is and it will analyze the grammar in the appropriate sort of way. Error messages and things like that are also translatable.
37:22
You'll see that all the strings in text with a babel translated. Awesome. Reese is asking, what's your take on VR being applied to MUDs or MOS? So, I'm assuming you mean graphical presence
37:41
in a virtual space. I think it's great fun. My son has an Oculus thing, whatever it is he wears, and he likes using that and playing games and things like that, and he tells me that Firefox have some sort of Firefox Labs type thing that will allow him
38:02
to be present with his friends who also own the same model of device. They've not figured out a standard yet. That's yet to come. I mean, that's interesting. It's like lawnmower man, another reference to the 1990s there. But I like text.
38:22
Call me old fashioned. I like the fact that I can let my imagination fly and text is perhaps the best way of letting that happen. And the thing about MUDs is that because it's not just transactions of conversation going on, there's a place, there's a sense of traveling around, there are objects,
38:42
there are ways to sort of interact with players as well in a non-obvious way. I missed out a whole section on some of the stuff that Gillian Dibble mentioned, some of the innovations that we still don't see in current text-based systems that were sort of invented and used in MUDs and MOS
39:00
in previous decades. So in a sense, they're also at the very forefront of technology and waiting for folks to catch up. So I don't know, VR is cool. You know, I like space rockets and flying cars in that sort of a way. But I also like reading books and text-based things too. I hope that answers your question. Cool.
39:20
Dennis is asking, are there new challenges to creating MUDs in 2020 that were not present in the 90s? I'm tempted to say, yes, our development environment and the cloud and Kubernetes and Amazon and all of that sort of stuff.
39:40
Because in the 1990s, this was a single server, you know, a server running on a single box that usually had a host name that somebody, you know, it was their pet rather than cattle, to use the terrible analogy that cloud uses. And that in itself is kind of cute.
40:00
Whereas as you've seen, the way I've tried to organize TechSmith is as a modern web dynamic web application as well. So I would say we've learned a lot more about how to do this perhaps. And the tools are more available. I've got asyncio, I've got quart,
40:21
I've got redis and things like that. So in a lot of senses, I don't have to reinvent the wheel whereas folks in the 1990s would have to do that. But yeah, it's still a challenge because I have to imagine things and that hasn't changed. All right, thank you. Stanislav has a question as well.
40:40
Have you tried using machine learning for generating content inside a game? I remember seeing something like this in the world. Yeah, okay. So that was, yes, shh. So you're looking at maybe an open AI type text generation here. So there was lots of discussion about this
41:01
on some of the mud forums that I've been inhabiting over the last few months. The text generation for adventure games, for single player adventure games like the Hitchhiker's Guide to the Galaxy thing that I showed as part of my talk, that's happened. The corpus that was being used for that sort of stuff, however, was taken from social media and things and the quality,
41:22
whilst initially it looks cool and good and things, the quality of it after a very short period of time you get bored of it, apparently. This is what I was told by somebody who'd been experimenting in the field with that sort of stuff. I've actually been, I used a Markov chain to generate some room descriptions
41:44
based on stuff that I'd been scraping from other mud descriptions so that all the fantasy ones, we had lots of orcs and the elves of Trefleion with their goblets of fire and all of this sort of stuff. That was quite hilarious, if a bit meaningless.
42:01
But I really like that point and I think that there's room for lots of innovation in mud and moo-related engines for that sort of a thing. And I'd just like to point out that because this is text-based, making changes and playing around with these sorts of things
42:22
is a relatively low-hanging fruit. If I were doing this in a graphical game or a VR game or something like that, I would have a huge code base with lots of assets and making a change is quite difficult to do. This is just literally text comes in, I do some stuff, I put text on message queues,
42:41
text goes out. That's essentially the modus operandi of this sort of thing. I hope that answers your question. That was a really great question. Enjoyed answering that. Thank you. I have one question. I really like the idea of recording moments that you said that you recorded that moment
43:02
with your wife in Scotland. How would you go about doing that? Do you have an example? What I have is a virtual world that I created when I was 21
43:21
and as somebody in his mid-40s now, I can return to that. I don't know about you, but I can't remember anything about the code I've written six months ago, let alone back in the mid-90s. It was fun to inhabit what was in my head in a textual sense from 20-odd years ago,
43:42
if you see what I mean. So it felt to me a little bit like reading my diary from way back when. But this was an interactive diary and there were objects in the world and there was a photograph object on the mantelpiece object and so I could look at the photograph
44:00
and I could see the description and it was a photograph of my wife's dog who was now passed away. I'd forgotten about Jeannie. I was like, oh gosh, I remember Jeannie. It brought back a flood of memories. So that's how it felt like. That's how it felt like. Is that helpful? Yeah, it sounds like it's just like it's the structured journal, right?
44:24
Right, yeah, sounds good. Awesome, there's no more questions. Thanks, Nicholas, for the great talk. Thank you, you're welcome. I'll stop sharing and get out of here. Thanks a lot. No worries. Okay, ciao ciao, bye bye. All right, so we are in a break now.
44:42
We'll be playing some ads and yeah, I'll see you.