Skip to main content
whitep4nth3r logo

11 Oct 2024

43 min watch time

Entertainment as Code: Finale

Imagine if we could blur the lines between a streamer being live and offline on Twitch. What if we could create a world where people could interact with a live stream, not just when it’s live but when it’s offline as well? What if we could create a game that people could play on a stream, and what if that game didn’t stop when the stream ends?

Taking inspiration from music, education, and the thrill of live performance, Entertainment As Code redefines Twitch live coding streams. It showcases how you can create a live coding show on Twitch that is fun, entertaining, and a little bit addictive, not just through the code you write on the stream, but through the code you write for the stream.


Click the video above to play

Slides

Transcript

[Jason]: Next speaker is Salma Alam-Naylor. Salma is a senior developer relations Advocate at Sentry uh she also writes code for your entertainment which is why we're all here, she is active in the developer Community, she is a Microsoft MVP for developer Technologies, winner of the Jamstack Community Creator award in 2021, and partnered twitch streamer where she builds weird websites and silly projects roasts your code and chats about the tech industry every week for your entertainment. Please welcome to the stage Salma. [Applause]

[Salma] In the late 1900s I wrote my first lines of BASIC code on a Commodore 64. At the dawn of the 21st century I built my first geocities website and in 2005 I uploaded my first HTML file via FTP. In 2009 I used HTML and CSS on my MySpace page, and in 2014 I released a mobile first responsive website using an obscure PHP framework and bootstrap CSS. And I hated every single minute of it. I hate coding. But I found a way to hate coding a little less. By building stupid projects in front of a live audience. and this is entertainment as code. [Applause]

When I graduated from music College in 2008, I was an entertainer. I wanted to be a film composer, I was in a band, I was making terrible websites for my friends, I was also a music teacher and a musical comedian. Here is the oldest clip you can find of me on the internet.

[Video] My name's Salma, and I'm one of lead tutors at the School of Rock and Pop. The School of Rock and Pop combines professional music tuition with the opportunity to perform. Each center holds gigs at recognized rock music venues. It's a chance to meet like-minded teenagers and really rock out in a way that can't be done at home.

[Salma] I couldn't play the drums then. I can play the drums now. But in 2010 I set up the School of Rock and pop in Manchester in the UK, and I was teaching children how to be in rock bands. And it was about helping them put music into a real tangible context, rather than practicing alone on their instruments in their rooms. Fast forward to 2012, I got my teaching qualification and I worked as a music teacher in high schools for a few years. Fast forward again, it's a very long story, but in 2014 I quit teaching and I got my first job in tech and this led to many more jobs in Tech.

And in 2020: everything changed. And in these unprecedented times, everyone stayed inside and found new ways to spend their time. Anyone remember family Zoom quizzes? Worst time of my life. Anyway, here's where Twitch comes onto the scene for me. Twitch is a live streaming platform originally centered on gaming, but now creators are streaming music, arts and crafts, 24/7 live feeds of farm animals and earthquakes, and much more. 17 billion hours were spent on Twitch in 2020, which was 83% higher than in 2019. I started watching Twitch in April 2020, and the most exciting category I discovered was software and game development. Nerds were writing code live on stream and I was sucked in.

And I didn't just watch Twitch streams. I took it one step further. In June 2020 I went live on Twitch for the first time under the username white panther, which was a joke at the time but I'm stuck with it now, but here is the first clip ever taken from one of my streams back then.

[Video] So now standard and drop D is working but DADGAD is not. What the hell? [laughing].

[Salma] As usual my code wasn't working, but this will be relevant I promise you. In this stream I was mixing my music and tech experience through building an app called The Fretonator. It's an app to learn scales and modes on the guitar. You can still go to it today: fretonator.com. On The Fretonator, you choose a starting note, you pick a mode or a scale, and you use the guitar fretboard to learn it. You can also learn more about the theory behind it if you want but the most important thing, is that every scale comes with a backing track for you to practice with. So rather than just like trying to learn the scale on your own in your bedroom on a single guitar, without any musical context, The Fretonator is about putting theory into practice, much like the mission of the School of Rock and Pop. And this concept has inspired everything I do live on Twitch.

Through live streaming coding, I was discovering that demonstrating and practically applying technical concepts in a real world context, with a live audience, was actually making tech more accessible, more human, more entertaining, exactly like when you play and perform music with others. I still hate coding though.

[Video] I quit I- I- just- I quit I quit. I'm going to do something else. I can't I can't make this. Every step of the way is just an absolute piece of [ __ ].

[Salma] But I hate it a little less when things go right.

[Video] If it does work I will feel sick that I have succeeded. Look! I did it I did it I did it.

[Salma] Genius. I learned a lot in my first six weeks of streaming, and the most important thing I learned is that Twitch streams are live shows. People go to Twitch and watch streams to be entertained, and I'm an Entertainer I always have been. So I wanted to make my live coding streams about entertainment. Not to build the next disruptive SaaS or JavaScript framework, or take myself too seriously. I wanted to build stuff that made people laugh, that brought people together and got them excited about the infinite possibilities of just a few lines of silly code.

So at the center of all of this is my Twitch bot, which we lovingly call the mainframe, and I've been building this on stream with other things for over four years. And the Mainframe powers most of the interactive features on my stream. And what I discovered through building this is that building stuff for your stream, live on stream, with viewers, for viewers is the best way to make people feel part of something, and enable them to create their own entertainment.

I've got an architecture diagram for you. I'm going to show you everything I use to power my stream, it's extremely over engineered, that sounded like a pun didn't it? I've never realized that before, after all of this time doing this talk, but I don't recommend what I'm about to show you. Right, we start with the backend. Pantherbot is an Express app, it uses typescript, it stores some stuff in MongoDB, and sends lots and lots of events over a websocket connection. iIt uses the Twitch API and a third party wrapper around the Twitch API called TMI.JS. There are two React apps listening for websocket events, and there's one other front-end app built with Nuxt, which I'll reveal towards the end of this talk. There's a types package that both the backend and front-end apps use, and it also uses a Discord API to send some stuff to my Discord server. And all of this is brought together in OBS, which stands for Open Broadcaster Software, which I use to stream, and I also use one other app called Aitum, which allows me to control OBS directly via Twitch. Did I pass the whiteboarding interview? Let's check this out.

So, follows, subscriptions, and cheering: these events are core parts of the Twitch experience. When a viewer presses a button on their device which makes something happen on your stream, it creates a sense of joy and wonder and of being part of something bigger than yourself. Or maybe it's just dopamine, I don't know, but when I get a new follower, I make a big deal about it. Here is the code. On each new follow, the Twitch event sub API sends the mainframe a notification, and when it receives that notification, we find the Twitch user who followed by ID and then we build up a follow event to send over the websocket connection. Most importantly, the event contains the follower name and their profile image which is how we'll make the viewer get flooded with dopamine by making them feel part of the live show.

This is the frontend React component that displays all alerts. There's a queuing system, which you definitely need if your stream is busy, and each type of alert shows a different image and text depending on what's sent by the backend. Sound is also important for a live show. Each alert plays a different custom guitar riff. Here is a follow Alert in action.

[Video] Amonteirom! Thank you for the follow, welcome.

[Salma] So we got the follower alert, and uh there were two other things that happened. First, the panther logo is changed at random, and plays another custom sound And we have panthers of various sizes raining down. You see, even though white panther was a joke I went with the whole panther thing. It kind of worked. As you watch a stream on Twitch, you accumulate channel currency and you can choose to spend it on fun stuff set up by the streamer. So I made it so viewers can also trigger that logo change manually via channel point redemptions, and chat can also make the emotes rain down by typing different weather words in chat.

This has of course suffered from many bugs throughout the years, such as this one that happened when someone gave me 50 gifts subscriptions at once. We were testing in production, which you often have to do on Twitch, and it didn't scale! aAd yes we heard that guitar riff 50 times. But that's entertainment, right? Writing the code to make that happen live on Twitch was entertainment. Viewers being able to cause unexpected chaos on my stream is entertainment.

Another source of entertainment is showing the chat feed on the stream so people can see their words on the screen and again, feel part of the live show. Chat is added to the stream via another browser URL from the React app in OBS, and each chat message is represented by this very large chat message data object. And this incorporates a lot of features that viewers specifically asked for, because viewers love it when you build their ideas — more dopamine — and they are great QA for all of these features ,such as being able to use an HTML Marquee tag, and numeronymn mode.

Now if you don't know what a numeronym is, it's a number based word, commonly used in Tech to shorten long words such as accessibility, internationalization. Here is the code for numeronymn mode. Very silly code, it uh splits the full message by space and for each word it returns the first character, the count of the characters in the middle, and the last character. It's pointless really, but for some reason I published it to npm! And it has two weekly downloads! It's going very well! But when streaming is considered, things always don't go this well.

So I'm talking about back seaters. Back seaters are everywhere in software and game dev streams. What is back seating? It's when new viewers come into the stream and they just tell me what to do, with no context about the problem that we're solving. They paste code snippets in chat, ask me why I'm not using Tailwind in my backend code or try to start a fight about something irrelevant like Next.js, and it's the worst: like backseat driving. And one of my viewers thought it would be a great idea to put back seaters in a literal car, and while I was streaming he sent me some car parts he created in Microsoft Paint.

[Video] Layer in front of me... [laughing]... okay... [laughing]

[Salma] I got it set up eventually.

[Video] One second, um, two Taco Bells please, uh with sparkling water thank you. I've never had Taco Bell in my life, but the car has evolved of course and can be triggered by viewers if they want to put someone in the back seat. Here's how it works. The back end listens for a command in chat: !bs, and what bs stands for is open to interpretation, and we grab the username from the message, and if the targeted back seater is present in chat, we send an event over the websocket. Again, making sure to send the profile image URL. And today the car looks like this. I want people to send me loads of code in Twitch chat. So that person, it's a shame that this person didn't have like a proper face as their Avatar, but they just sent me like a 100 lines of code in chat and they got really aggressive when I showed them that it didn't work and they said good luck with your insecurities, and I'm wondering whether it's um their insecurities instead.

It's chaos isn't it? And chaos is entertainment, and I've now got so many channel point redemptions, interactions and triggers that break each other through edge cases and conflicts and I haven't fix them on purpose, because as a viewer it's fun to break a stream. It's fun to cause chaos in a live show, and it's entertaining to watch me struggle and shout at things.

[Video] My redemptions are too cheap so they go too far this is [laughter] fine wow it's broken, you're going to have to endure about 40 more alerts and- there's Zephyr, and Luca-person as well, thank you oh the car didn't work okay oh we got a raid! Welcome in glitchbyte! How are you- [interrupted]

[Salma] That's a channel Point Redemption and it lasts for 30 seconds, and people get very confused when they see that. That's a very brief glimpse into my live show that's been evolving over the years, but now I want to show you something I've been building this year which is even more chaotic and entertaining than all of this.

Imagine... Leo imagine! [Leo remembers to dim the lights] if we could blur the lines between a streamer being live and offline on Twitch. And I started thinking, what if I could create a world where people could interact with my stream not just when I'm live, but when I'm offline as well. What if I could create a game that people could play on my stream, and what if that game game didn't stop when the stream ends? This is Pantherworld. [a single wooo in the background] Thank you, Hillary! [laughing]

Pantherworld is a multiplayer text-based game that you play in my Twitch chat. And when events happen on the stream, a random world item will spawn in a random world zone and the objective in Panther world is to claim items and fill up your inventory and that objective has changed as the game has evolved. The game is played via chat commands. You can get a list of available zones, move to a Zone. Also as a new follower you're automatically dropped into a random zone. Check your location, claim a spawned or dropped item, drop an item. You can also cook a variety of recipes with varying results, gift an item to a specific or random player, list your inventory total, check the population of the world, and view information on how to play. As world leader I can release unclaimed items in a random zone where players have 60 seconds to claim them.

Now, the only way I can truly demonstrate this wonderful world thing to you is uh let's play it together. So if you have a phone, uh this will take you to my Twitch chat, so if you're logged in via Twitch you can um play, or you can just watch what happens. And I need to do a little bit of finangling to get over to here, okay. Now uh I oh thank you for the follow chaachi, it's like I'm streaming. Okay you can't see the thing I need to do hang on I need to do this need to go over there no no no there right okay okay okay. Right. I just spawned loads of things for you. Where's the sound? Where where hang on uh right so you can actually play the game now that should make some sound as well, this demo never goes right. Anyway, all these things have spawned. So if you um, you need to be in pantherworld to get them but I should have had um a lot of people ready in the chat to play the demo but look, Lazar claim something man! You've got to be in the right zone. Anyway, oh look someone- oh that's another spawn. All right look b-rob there, locate, oh you're not in Pantherworld yet. You got to- I mean- and I know I went through the commands really really quickly, um but look yeah, Sarah's moved to the beach. There's someone in the city, oh look a wooden bowl spawned in the mountain! Sometimes moves spawn some things as well. I want someone to claim something, someone claim, and then we can stop this nonsense. Claim, no you have to claim the name of the item you see you can't you have to scroll up to see what spawned. It's a very difficult game obviously clearly, but hi hi everyone uh in the chat, anyway okay, that didn't work, 'cause my normal people who were there to show how it's played were not there. I think the 60 seconds is up. Right we we'll get back, we'll get back here. It's all good. Thank you for trying to play the game.

Um so um, as you as you see, I did a manual little demo thing there. But whenever an event happens on the stream, um something that triggers an event, that triggers a spawn, right, and these events happen while I'm live and also while I'm offline. So remember the code from earlier that handled follow alerts? Now whenever someone follows, the spawn function is called, and it does eight things, and we're going to very swiftly step through each. The first thing we do is calculate the event rarity. Items have rarities. The higher the rarity, the less likely it will be to spawn, and the more valuable it is in Pantherworld. I did not mean to create a capitalist society but I will tell you more on how I'm working on fixing that later.

Each event type has a particular piece of input data associated with it. For a cheer it's the number of bits that were sent, for a sub and a follower it's the username, and for the raid it's the number of raiders and so on. The calculate event rarity function takes that input data and returns it as a number. This will be the first seed for the calculate eligible items function. Next we'll get a random zone from the currently available zones. Next we'll calculate the eligible items for spawning based on the rarity seed number and the zone. First we attempt to select the items based on the zone because there are certain items that only currently spawn in the swamp or the beach for example. In the swamp you've got toxic waste, rotten egg, irradiated croissant, and so on. And then we attempt to filter the items based on the exact rarity of the seed provided. For examplem if someone cheers 10 bits so the rarity seed number is 10 and the spawn zone is the swamp, we'll return the irradiated avocado and the irradiated croissant. However, if there not if there are no exact matches for the rarity seed number we'll attempt to select higher or lower rarity items. There's currently a 20% chance to spawn higher rarity items, 80% chance to spawn lower. And then we filter the items depending on whether we're going higher or lower and return them. So now we have an array of eligible items to spawn, we can select a random one, save it in the database, and then construct a message to notify players, which is sent to the Twitch chat, and a special channel in the Discord. And finally, the event is sent over the websocket connection to appear on that overlay you saw before. There it is.

So the initial plan for claiming items was that any player who was the first to claim an item kept it in their inventory. The only caveat was that there was a time limit of 60 seconds to claim that item, otherwise it remained unclaimed. However one day it became apparent that this was not the case, and a player reported an item that they thought they had claimed was no longer in their inventory. Chat had found another bug. Players were able to steal items from each other within the time limit of 60 seconds. But all was not lost, and in fact there was more to be gained, because this marked the moment of the creation of the first rule of Pantherworld, where bugs are actually features. So let's look at the claim function and I'll show you where the bug came from.

To claim a player types !claim with the name of the item they want to grab. We first check to see if the world leader (me) has released a set of items. If there is a release in progress, we find all items that have a user ID of null, meaning they are previously unclaimed. If I did not release items, this means the player is trying to claim a freshly spawned or dropped item. This database query looks for items that have a created date of 60 seconds ago or higher or have been dropped. Who can see the bug? Who can see why players could steal items from each other here? [user in audience suggests that I didn't check for user ID equals null] Yes, correct, very good. Give this man a round of applause. I was not checking for a null user ID, which meant that anyone could get anything if it was created 60 seconds ago or earlier or later. If we find no items we do nothing. If we do find items, we try to find a player. If there's no player, they are not in Pantherworld, so they get some feedback on how to play. You saw that in the demo. If we do find a player, we need to make sure the player is in the same zone as the item they are trying to claim. If the player is not in the correct zone, they are told to move to try and claim it. We don't tell them the correct zone 'cause that would be too easy. If the player is in the correct zone, the item becomes theirs, until someone steals it within the time limit. And then we send a message to the Twitch chat, the Discord, and over the web socket.

So who can remember the first rule of Pantherworld? Bugs are features, very good, like um, this little bug here. Look! This is a good one. All items were locked after a release, but TNT was still able to claim. There was clearly some kind of race condition that I didn't care to look into, uh, I'm not going to fix it. It's a good bug. You never know when you might be able to claim an item! Um, I'm going to show you another bug. This, and this one became a very special feature.

[Video] There are 12 front-facing baby chicks in the database, they have spawned. There are no front facing baby chicks in the item list. Obviously front facing baby chick, and there's none of these in the item list. Now my hypothesis was that chicken egg was somehow being changed to the front-facing baby chick, but there are chicken eggs in the database. And at what point has a string been converted to an emoji?

[Salma] This was a very good bug that was caused by another one terrible line of code, and I'll reveal it in a moment but let's look at how dropping items works. The throw command comes in with the name of the item to drop. First we attempt to find the player and their zone and if we find a player, we find an item with that user ID and item name, and update the user ID to null so it doesn't belong to anyone. We change the zone of the item to the player's current zone where it was dropped, we set dropped to true so it can be claimable, and then we send all the messages.

So as I was writing the throw feature, chat experimented with dropping random things to stress test the system. There were clearly 12 front-facing baby chicks dropped during the stress test, and there was one problem with the original database query that updated the dropped item. I'd left upsert 'cause I copied and pasted which meant at that point players could drop anything and it would create it in Pantherworld. Players unknowingly had the ability to control spawns, and yes I had to clean up the database quite substantially after that, but for the purposes of the game lore, we kept the original trick chicks, and because no front-facing baby chick will ever spawn again, they currently have the highest spawn rarity value of the game which is 10,000.

Now, finally the original objective of the game. I have a minute left, and I did not expect that. Filling up your inventory, remember this pink mystery app? That's Pantherworld. It's a standalone front-end companion app where you can view your inventory, and there's more to come but, um in Pantherworld you log in via Twitch and you can view your inventory items and their rarities, and in which zone you're located. There's me in the beach, there's Matty in the city there's JWalter in the forest, and there's Yoshi on the beach. Yoshi has even made a community Wiki to keep track of item spawns and rarities how the Pantherworld map works, and some world lore. And another viewer, Boomslang, also built a separate companion app, where you can choose to complete daily quests by gifting the panther quest bot particular combinations of items. And it warms my heart that people from the community are enjoying this game so much that they're building things to extend the game and enhance their playing experience. And it soon became obvious who the really hardcore players were, and these players were finding ways to like, game the game.

So Yoshi wrote how, um wrote about how she made a Chrome extension which launches the Twitch chat and the Discord feed in in different Windows to keep track of spawns. She even figured out that there's a lower latency on spawn event messages sent to the Discord so she keeps both the Discord open and chat open and she gets notified in Discord and then claims items via Twitch before the messages even appear in the Twitch chat window. So did Yoshi go too far or did I go too far? And I want to hear from another hardcore player Matty.

[Matty]: For some time now there's been a few people collecting a lot of items, like me, and these players have accumulated such a large amount of items and wealth, that it's become unfair. So a wealth adjustment initiative was introduced. When you go to claim an item, if you are holding a certain value of items or higher, then you are at risk of losing items while you claim. Think of it like this: you're holding a giant bag of loot and you go to pick up loot on the ground, and you drop 10 of them on the floor. And they're instantly claimable by other people, so other people try and swoop in and claim these items.

[Salma]: On 12th of July 2024 the Wealth Distribution Act was passed in Pantherworld. Now when claiming there is a probability you may drop between one item and 10% of your inventory total, and the probability of dropping is calculated using a wealth index and the following nonlinear function, [laughter] where your wealth index is a sum of all inventory items multiplied by their rarity. Basically, once your wealth index reaches 500,000 there is a 100% probability that you will drop at least one item each time you claim a new one. This was the first time it happened: Yoshi lost 10 items including a super rare ruby when she claimed fresh basil. [laughter]

Now, Yoshi currently has a wealth index of over 2 million [laughter] and that's the result of a bug in the cook function where the rarity of a live lobster was used to calculate the final rarity of a cook even though it wasn't part of the recipe. That's my fault. But Yoshi could drop that item but she's chosen to keep it, and so now she's just going to drop every time she claims. But when Matty had accumulated so much wealth that his risk of getting taxed was near 100%, he brought a new tactic into the game.

[Matty]: And I thought to myself maybe I could reduce this risk. Maybe I could pull a Bezos and put all of my items offshore into a second Twitch account so that I'm not holding those items when I try to claim something. So if I do get taxed, because I'll be over that threshold, the only items I'll lose are low value items. So I took all of my high value items and I shoved them into my second Twitch account Matty_nshoes and, the way that I did that is very simple: there is a gifting mechanism. I didn't even need to drop the items first and then pick them up very quickly with my other account. You don't need to be a data analyst to see that this is a massive anomaly and that of course uh someone with 35 items having 53,000 wealth is probably an offshore bank account. Whitepanther has actually created the perfect mechanism for laundering items offshore, to not be taxed. You have literally recreated capitalism. So whose fault is it really that I am using the system, doing the thing that is most natural, which is avoiding getting taxed?

[Salma]: So here's some historic proof on the leaderboard of Matty's continued offshore antics, although he suggested some fixes to this capitalism, taxing the rich at unspecified intervals. I have so far implemented an intermediary solution to this by attempting wealth distribution on the gift recipients so that when Matty_nshoes receives those gifted items, there is a probability that that that offshore account will get wealth taxed. So what's really exciting about the whole process is the game is evolving in response to how people choose to play it.I'm sorry I'm going over but there's just some very quick final words from Matty.

[Matty]: The game is incredible, the game is so much fun to play. It's extremely addictive. It's so addictive that I'm a little bit concerned, because I have it open while I'm streaming. But I do absolutely want the irradiated stick of butter. I'm hoping I don't get wealth taxed.

[Salma]: So Pantherworld is always revolving as a result of how the game is being played, whether I like it or not, and one day what I really want to make is some kind of map where you can visualize your location, and the location of your friends, and watch items spawn in real time. And I've kind of crossed over to game dev and I have no idea what I'm doing, but you can come and join me on Twitch to watch me struggle while I build this. It will be my pleasure to provide you with entertainment as code, you can uh find me on the internet everywhere as whitep4nth3r, and hopefully I'll find you in Pantherworld [Applause]. Thank you.

[Outro sequence]: It's chaos up in here here. [Music] Pro streamer.

[Jason]: I have to wait, okay now it caught up. All right. That was amazing. Um, so, we get on it we need more questions, but I've got one um. How did you manage to work your way to doing something so much fun every day?

[Salma] Um, through necessity and survival, because the tech industry is often very repetitive and boring so you have to do fun things in order to not go a little bit insane.

[Jason]: That's fair, that's fair. Having been in the tech industry for a long time, I've gone through some very long periods of boredom as well um, so what's what's the next game?

[Salma]: This isn't finished yet.

[Jason]: Is anything ever?

[Salma]: No, but like that there are so many features that the players want, like I'm not even started, like there's all sorts, so you can cook stuff um from mainly edible things right now, but people want to be able to craft things 'cause there's some items like a wooden bowl, and um uh there's wood there's drift wood, there's there's lots of raw materials in Pantherworld right, and so the the aim is that you collect all these items to then build things with them. Cooking was like the proof of concept for that and cooking generates some very large earities so the wealth tax is an issue there, um but people want to build houses in the in the zones, and you know some features like that are coming up um, for example, sand isn't available yet but when sand spawns you should need a bucket and things like that. I don't know what's happening, but I don't know whether to just like stop this or do it for the rest of my life. I don't think there's any in between.

[Jason]: That seems like a false choice to be honest. Uh, speaking speaking of false choices um sorry James this just really kind of led right into this, how do you balance being productive on a stream while also entertaining?

[Salma]: Any streamer knows that you can't really be productive on stream. You have to fake it, it's all about looking like you're doing good stuff, um but you never really do. Um ,I mean obviously yeah, I've built stuff on stream, it's just part of the process, like, part of the being distracted, part of the questions that you get, it's all part of the show. It's a live show, isn't it? Like, I don't go and stream and build Pantherworld to get stuff done. I go to put on a live show for people and and for them to give me ideas and for me to build their ideas, and then they get happy and all the dopamine and everyone is happy and then they hang out in the Discord, and they continue to play the game offline. Um, so there's no balance and that's the point. [Jason]: Excellent, so uh, I there's okay, maybe this is, um we should we should ask one of the one of the more practical questions. Are you using Sentry for error or feature tracking? [

Salma]: Yes, of course. Sentry is, like, the best error monitoring platform there is and performance monitoring, and and there are so many cool things. And actually, I mean MongoDB support um is has just come out for Sentry and I'm I'm going to add it to Pantherworld live on stream 'cause I use Mongo, um so yeah if you're not using Sentry, why not? Shamess plug hashtag.

[Jason]: That's great, um so I want to come back to the the creation and and where the ideas come from, um if you had to guess, where does it uh what's the balance between things that are inspiring you coming from the players versus things that you've been thinking about and and want to try and explore?

[Salma]: There's no balance. I will do things when I want to do them, and I will sometimes make it look like the things I want to do are the things that the chat want to do. Um, it's all my show right? So I like I- it doesn't it... maybe it doesn't look like I'm in control, but I'm always in control. Um, saying that out loud sounds like a lie, but um, I decide and, and if it's not fun then we just don't do it and we don't stop it. If it's if it's not fun then it's it's there's no it's it's meaningless right? It's meant to be fun and um, so there is, there is a skill in, in balancing what I want and what the chat wants, I can't lie, um but it's top secret.

[Jason]: That is totally fair. Um, I have been up on stages enough to know that we are the entertainment and it does need to be sort of dictated by what people want to learn. Um, so uh, the wealth tax. There's a big question, now we keep getting questions from Anonymous and I really I'm doing my best to not imagine that we're being trolled this whole conference by a hacker group but it actually kind of fits in this case I think that would be kind of cool, um, all right, wealth tax uh be a white panther that roams the world and attacks them with storage for food, maybe is that a nice evolution of how the tax might work?

[Salma]: That's evil, see I'm trying to make a better world, right, in Pantherworld. I'm not trying- I'm trying to make it fair. Um, it was meant to be a socialist community where everyone had access to anything they needed, and um I guess human nature dictates otherwise, right?

[Jason]: All right so, so here's another bit of the the human nature and I think um, I think for anybody that creates a lot, um some days you feel it some days you don't. Um, do you maintain, uh like any particular strict schedule, or or does it just when the spirit moves you, how does that how does that work for you?

[Salma]: When um my life is not in a mess um, and I have things going on in my life, yes I do have a strict schedule. I think that's very important for when you're streaming and you're building a community. So my strict schedule over the past year has been Thursdays and Fridays for three or four hours in the afternoon in the uh UK time zone. I think a schedule is very important for um maintaining expectations for the people who want to to see you, and watch you and be entertained by you. Um, I find that when you do random streams here and there, like it's different if I do a Saturday stream in the evening, it's like the wild west. There's all these people who have no idea what's going on, but when um, my my core audience is like a bunch of people who work from home and um they put my stream on in the background, and when you have those knowns as well it makes it more enjoyable to go live when you know what you're going to expect as a streamer.

[Jason]: All right so uh we're just about out of time um I've been saving this one for last, your favorite twitch emote?

[Salma]: No comment. I don't know I don't know, that's a strange question, that's like saying what's my favorite database query.

[Jason]: Some people would have one.

[Salma]: Yeah I know, I know and that's why I try to make my streams fun and entertaining so we don't get nonsense like that. [laughter]

[Jason]: Uh well I did dodge the whole question about how data science would fit into what you're doing but -

[Salma]: Oh no it does! Matty has done a whole big analysis on the items that have spawned and their rarities and it's fascinating and it made me make the game better by putting- because all the rarities are based on vibes, I don't, like, have a system, but he made me, like um put in a better system, so that uh- like a million olives wouldn't just spawn [laughter], it was good good data.

[Jason]: All right, well good we we have a little bit of science in everything. Um, Salma thank you so much

[Salma]: Thank you.

[Jason]: That was thoroughly entertaining.

[Salma]: Thank you very much. [Applause]


Salma is looking at you, with a rather large smile. She's pointing across herself up to her left, with a very tatooed arm. She's wearing a black shirt and black rimmed glasses.

Salma Alam-Naylor

I'm a live streamer, software engineer, and developer educator. I help developers build cool stuff with blog posts, videos, live coding and open source projects.