The Modern .NET Show

Episode 101 - Open Source .NET for Fun with Drake Williams

Embedded Player

Episode 101 - Open Source .NET for Fun with Drake Williams
The .NET Core Podcast

Episode 101 - Open Source .NET for Fun with Drake Williams

Supporting The Show

If this episode was interesting or useful to you, please consider supporting the show with one of the above options.

Episode Transcription

Hello everyone and welcome to THE .NET Core Podcast. An award-winning podcast where we reach into the core of the .NET technology stack and, with the help of the .NET community, present you with the information that you need in order to grok the many moving parts of one of the biggest cross-platform, multi-application frameworks on the planet.

I am your host, Jamie “GaProgMan” Taylor. In this episode, I talked with Drake Williams about some of his open source projects, including Praxis Mapper, ROM Sorter, and his contributions towards Pixel Vision 8.

Along the way we talked about how to best set expectations for friends who are new to development, and Drake shares his tips for staving off the dreaded Feature Creep in your own projects.

Before we start, I just wanted to let you know that the audio for this episode gets a little rough in places. All of the systems we had in place to ensure a great recording failed miserably, almost catastrophically. We had to rely on my low quality backup recording for the edit and episode render.

The editor, Mark over at RJJ Software, has done what he can to sure that the audio is at it’s best. But lossy audio in equals lossy audio out. Rest assured that we have an extra two levels of backup systems in place for recordings going forward.

So let’s sit back, open up a terminal, type in dotnet new podcast and let the show begin.

The following is a machine transcription, as such there may be subtle errors. If you would like to help to fix this transcription, please see this GitHub repository

Jamie

Well, first thing I’d like to do drink is, thank you ever so much for being on the show. I always say that right at the start, but I really do genuinely mean anyone who wants to take the time to sit and talk to me about the stuff they’re doing in .NET. Is it? They’re all right by me. And I really appreciate it. So, genuinely, thank you for taking some time out of your. I’m guessing mid-morning, early afternoon.

Drake

Yep, just hit noon here.

Jamie

Awesome. Okay, that’s cool. See, that’s the great thing about I used to call it the “time cast pod machine wibbly, wobbliless” Right. We’re all in different time zones. And we’re recording this month in advance. So, you know, it’s all a bit mad. But yeah, so I was wondering, Drake, would you mind, given as a quick sort of short elevator pitch about Drake and his development stuff, just so that people know a little bit more about you going in? Is that okay?

Drake

Sure. My name is Drake Williams, I’ve been developing in .NET since 2008, right after graduating college. I’ve worked at a couple small companies, a couple of big companies. I’m not really gonna talk about corporate work today, or talking about my side projects, which I always do in .NET, because it’s my choice to do that. And I like .NET.

I’ve got three things here that are up to date, and on modern stuff, and that are interested in touch on interesting things in addition. I live in Ohio, I don’t live in Silicon Valley over here. I’m far far away from all of the big pitches and you know, bars full of people being,. “let me tell you about my startup.” Out here in the Midwest, disconnected from a whole lot of that. I don’t do a lot of online presence pushing networking. Whenever I’ve been on other things most of the time like, “do you have any personal things you want to push?” and I’m like, “no, no, I’m not an internet personality.” I like doing work. And I like sharing open source stuff when I can to see if anyone else think that’s interesting, but I’m not a brand.

Jamie

See, for me, that’s fair enough, right? I don’t want to sound elitist, or ableist, or anything. If people want to create an online brand, go for it. But for me, it’s something that I feel like not everyone has to do. I feel like people sometimes feel like they have to, you know, whether they should is up to them, right? It’s all down to your own personal bandwidth. I think, if you think you have the time and the space and the energy to put into it, go for it. If you don’t, so something else dude. Maybe go eat some cookies or something I don’t mind.

Drake

Getting getting attention online is so difficult, because there’s so much stuff online. And it’s extremely unlikely that without doing any sort of individual independent marketing, push on stuff that no one’s going to see anything. But that’s a whole lot of work. It’s an entirely separate career path. I focused on writing code and learning code. I’m at zero skill in marketing or getting intention for stuff. So I don’t really try to, I have PraxisMapper on Twitter, but that’s also sort of a dev blog. I think, as developers, we know that it’s very hard to find that non developer to listen to us. Like even in college [my] Mom was like, “oh, well, you’re doing class yesterday?” and we’re like, “oh, we learned about how to fork threads and how to take down a server by accident when you don’t catch all your escape things right.” And every every topic, every person who’s not a developer, their eyes just glaze over. And you quickly learn like, “what do you do for your job?” and I’m like, “I make web pages.” “How does that work?” “I write them and they work.”

Jamie

Never, ever, ever tell people that you’ve just met or family members that you work with computers? That’s the key piece of advice I will give anyone. Because even if you say, “I’m a computer software engineer, I build websites,” they’ll be like, “right. I have free IT support on tap.”

Drake

“Can you fix my printer?” “Technically, yes, but it’s not my job, but I’m not going to.”

Jamie

Absolutely.

I agree with that. I think you’re absolutely right, like social media stuff - brand building on like Instagram, Twitter, Facebook, wherever the cool kids are these days, I’m an old man. It is quite literally a job description. Right? And I fully understand that appreciate that it’s the job of people out there who specialise in this stuff to do that.

So, as an example, I’m one of the two hosts of a show called Waffling Taylors and it’s all about video games. And I don’t know whether you’ve ever checked out video game Twitter, but it’s very regional. Like if you want to get a message out on video game Twitter - retro game Twitter, whatever, modern games Twitter whatever - you want to get that message out to as many people as possible, you haven’t got a chance not unless you know someone who’s a big name, who then picks up on it, right? Everyone, you know, almost everyone on Twitter is into video games. And whilst we don’t talk about the situation from the last 25 to 27 months, during that situation over the last 25 to 27 months, a whole bunch of people bought microphones and went, “I can create a podcast,” and you know, there’s so much out there that is … I don’t want to sound mean, but subpar might be the way to put it. Because they’re not experts. I’m not an expert, you know, I’ve just been doing is this for four years, I’ve kind of picked up a few things. But in order to get that message out there, you have to sort of be a maestro at the Twitter and the Instagram and the TikTok and all that kind of stuff. You need to be on it. 24/7. You know, it’s not so easy. So I fully appreciate that it isn’t for everyone.

I mean, that this show has a Twitter account. And you know, I’ll send out messages about “oh, we’re planning on doing an episode about this,” or, “hey, I’ve just learned about this technology, has anyone any experience with it, because I’d like to get like a beeline into learning it rather than reading all the documentation then scratching my head.” And that’s all that’s really thought. But that seems to work for that sort of area of Twitter. So what I’m trying to get at, and I’m doing really bad job about it is I fully appreciate that, you know, for a lot of people, it’s another thing that they want to do.

Drake

The biggest I’ve ever had anything going on in social media was Rom Sorter. Because that was, it was a thing I put together for my needs. And once I got it going, I was like, “this is a pretty useful little thing. I wonder if anyone else needs this particular thing?”

I guess to rewind a bit. Rom Sorter is an app to manage game collections. There’s a couple of groups that make DAT files to track file hashes and correct file names for games for all sorts of systems and collections. Old console games that had been dumped, homebrew systems, pinball tables for the couple of areas Virtual Pinball setups you can get. And I was looking through my collection getting ready to start putting some of that onto cold storage on Blu ray discs. And I realised that it’s kind of a mess. I’ve got zipped files, unzip files, rar file, 7z files, and it varies from system to system or platform or topic. And as I find interesting games to add to this collection over decades, it’s just become kind of a mess. It’s like I need to figure out how to fix this. So the first thing I did was figure out how to like batch, zip and unzip stuff. Because I needed I needed to do multiple formats, and I wanted them all to come out to the same one. So whatever I’ve got in a folder, it needs to know if it’s a, you know, compressed file uncompress it, decompress it uniformly, put it back where it is, I needed to be able to identify files against these DATs. Because if I want to make sure that I’ve got you know, good valid games and not something misnamed or whatever that runs through that.

I ended up adding ways to like make my own DAT files, because I’ve got quite a few things that aren’t in those big semi-official lists just because they’re either not on their radar, or specifically out of scope. If they’re not commercial release for a system. I’ve got sets, they just don’t have one of those. I’ve grabbed a bunch of text adventure games from the interactive fiction archive. And I don’t think that anyone maintains a DAT file for text adventure games. And those vary from like their full long name because their HTML game done in twine, to you know, seven letters for a file name because they were written for you know, DOS 5.0 in the inform interpreter or whatever. Infocomm Infocomm’s that interpreter and form is a language that writes back to it.

And as I was together, it’s like maybe people can use this and I put up source code and I told Reddit about it. And that’s the most attention I’ve ever gotten on social media was this little renamer and re zipper and some file some a feature request for it. I’ve done a few of those.

Jamie

And that’s how we got introduced, because I was browsing around I think he was a .NET I was browsing around the .NET subreddit. I was like, “oh, cool. Rom Sorter. This is about video games and programming. That’s like two of the circles in my Venn diagram lining up right there. I have to get in touch with this person because this sounds awesome.”

And yeah, I love the way that you described how you’ve sort of organically built it up. If you’ll allow me to say that and that’s, you know, “I have this problem. I’m going to take the first step and we break the monolithic problem,” - I’m worried about saying monolith because people are going to think is to do with the web - but, “this monolithic problem, take it and break it down into its smallest part.” Like you said there, “first thing I need to do I need to zip and unzip stuff. Now I need to maybe be able to rename stuff. Now I need to be able to read a DAT file, right?” And I feel like, especially when people are building stuff in the real time, they have this grand idea of “I’ll just build Halo. Right? I’ll build that and that will be given away for free. Right?”

But what they don’t sort of take the small step off, “right, okay. Can I actually do this?” You more than likely can write, don’t ever let anyone tell you that you can’t do it. If you already know how to program then you know how to make games, right? But you take the smallest steps, possibly you work on an incremental. And that’s what I really like about things like 100 days of code, because that forces you to go incrementally, like take a small programme, a small problem and work on it today, and then work on it tomorrow and then work on it the next day. You make these small iterations onto them. And I really, really liked the way that you’ve described the way that you built the app up because I think that’s a lesson there’s a lot of junior devs. So I’m not saying you’re a junior dev, I’m not saying I’m a junior dev. I’m not saying anyone listening as a junior dev, but I feel like it’s something normal of juniors don’t get, they’re like, “yes, I will draw the circles then the rest of the owl,” right?

Drake

I love that meme. That is my go to picutre when I’m trying to do research and someone’s like how to do it in three steps webpage is, “Step one = do the thing. Step two = buy our product. Step three = you’re done.” And I’m just like, “you didn’t do anything.”

Jamie

Absolutely.

I feel like, I don’t know whether it’s a computer science thing that needs to be taught, or whether it’s a thing that’s - because I’ve never been to a coding boot camp, I don’t know what they teach. So whether they’re not teaching, you know, breaking problems down in computer science or in coding boot camps, or wherever people are learning to code. I feel like perhaps there’s that disconnect of, “here’s the syntax of the language and how you will build something in a maybe .NET way.” And they’re not really talking about the, “how do we break a problem down into small chuhks?” And maybe that’s something that’s missing. Or maybe that’s just me sitting near saying, you know, that I’ve been working with people who don’t know how to break down problems. I don’t know, maybe that’s the case.

Drake

I’d guess that there’s definitely a time period shift there. I definitely got a math heavy CS degree in college and 2000. And like, that was when you know, the web was starting to hit like web 2.0 stuff, Facebook came out while I was in college. So it hadn’t yet become the default paradigm for how web pages look, or act. And somewhere after that is when you started getting into like CSS is its own thing. And it can be its own design career track. Whereas distinctly before then it was always just, “the developer will figure it out.” Which as a, you know, math heavy person, when someone says, “hey, your web stack looks great, but can you pizzazz it up?” And my answer is, “no. I don’t speak pizzazz. So sorry.” Like, at some point, like the design part became, it’s still very computer related and technical, and certainly deep, but focuses a little more on visuals and art than it does on the math heavy stuff that you and I probably learned. But to outsiders, they don’t know that difference is there. And it all still gets lumped into computer stuff. And it’s also very possible that, you know, a designer who’s very used to doing visual stuff and complicated artists tools goes, “this is like half of the game, right?” They’ve got to make a game and then they start learning coding, not totally from scratch, but from a very different basis than a programmer would have started at. And some of it might be from that.

Jamie

Maybe, maybe. But yeah, I guess one thing that I would say if you take nothing from this, and you’re not breaking problems down into the smallest chunks, maybe start there.

Yeah, but I love the idea of using Rom Sorter to just break down some of those walls, have I ever, you know, we’re not talking about how to source these files here. Occasionally, like you say, you can get them off of the interactive fiction database or whatever, right? You’ve got a bunch of files, you need them in, you need them sorting out you need them putting into a specific format, not necessarily file format, but like maybe you need, you know, the names to be a certain way and you need them zipping up or archiving in some way. Why not automate that? Because that’s a perfect example of a problem you can solve with code that whilst the solution may not be simple the individual steps can be simple. “Does a file exist? Yes. Does it have this extension? Yes. Can I extract it? Yes, then extract it please. Is it extracted? Fantastic. Can it run?” Or maybe that’s commit five, you know what I mean? It’s those very small chunks. So I absolutely love that.

Drake

Part of what I did to start Rom Sorter was that there are existing applications that do this sort of management, but all of them are very heavy duty kinds of things. They will probably expect you to have multiple files for multiple systems or formats, and it thinks that you’re going to want to track and audit your whole collection against that DAT file. Like if you’re trying to have every game ever, or do very complicated management things to them, or say it’s been three years, can you merge my current set against the new set and tell me only the things that I’m missing or changed? None of that’s what I need to do. Like my solution for fix a set is just go get the new set, I don’t need to merge, remix, whatever, to my current stuff, I will start from scratch if I need to do that big of a reset. So when people are saying, “can you do this thing to make it easier?” My answer is “no, that’s outside of my use case.” Like I don’t want to have to declare a collection and have sub libraries and to find out their properties and opinions. I wanted to say, “look at this folder. Here’s my DAT file, can you make sure all of these have the right name? And then can you zip them when you’re done? “and I just make each of them their own distinct button. So it’s just left to right, unzip everything, click wait for progress bar to fill up, rename everything, wait for progress bar to fill up, reset everything, wait for progress bar to fill up. It just gets rid of that extra mental space needed to set up an application when I don’t need any of those heavy duty features.

Jamie

Yeah, and there’s, it’s not like there’s anything inherently wrong with those heavy duty features. It’s just like you said, it’s outside of the scope of the problem that you’re trying to solve.

Drake

Right.

Jamie

And I feel like that happens all the time in at least the commercial development that I’ve ever done. Not so much in open source, or at least in the open source stuff that I’ve ever worked in, but the commercial stuff someone will go, “wouldn’t it be great if?” then suddenly, there’s a user story lands on your desk, right? And you’re going, “well, I can make it produce a PDF. But you know, this is a drawing application. It can, theoretically can do it. But why would you want to?”

Drake

So many of those are like, “we just need a checkbox on the back of our box to say we can do that we don’t need anyone to actually do it.” And you’re then like, “alright, well, I’m gonna do this work that no one’s going to use like a waste of time.” And then two years later, it’s one individual user’s like killer feature that they are constantly asking about or adding to.

I’ve probably seen something similar to you on open source, where at least are small projects where there’s one or two lead developers who you know, decide what’s happening. When someone says, “oh, can you make it do this?” The answer is either “no, it’s out of scope,” or “I’m not going to do it. But if you send in a pull request, I’ll add it.” Because it’s open source, if you need it to do a thing, like you have some code skill, like you can make it do the thing.

I mean, I did that to another app, Pixel Vision 8. Pixel Vision 8 is a fantasy console written in C#. Fantasy consoles are sort of make believe 80s computers and video game consoles. You use modern code and everything behind the scenes, but it forces limitations down like it’s a retro setup. The big one’s pico eight, and its limits are super hard, you get a resolution that’s 128 by 128 for the screen, I thin. You have 16 colours, you are allowed 40 kilobytes for your code file. And you make a game in that engine. It’s killer features that it has a web player that works and your output is PNG files. The reason that code limit is there is because it puts your code into the metadata blocks for PNG files. So you don’t have a complicated file format. If you have an image, you have your game. That’s nice because it makes that system particularly easy on the end setup. It doesn’t matter to make coding easy when you’re back to writing an 80’s style where you’re giving variables single letter names and tracking them somewhere else so that you don’t use up two kilobytes on variable names.

Pixel Vision 8 is customizable on its limits, which I thought was its main killer feature there was you can say what your resolution is going to be. You can say how many colours you want and colours per sprite and configure it up for your particular game how you want it to look. If you want it to look like a GameBoy game, you crank the resolution down to 160 by 120 or something like that and four colours and they’re all shades of green. Or if you want it to be a, you know eight bit Nintendo, you crank it up to having like 64 colours, but only four per Sprite.

It was originally set up to read from Lua files. And the C# option was, “you can download the engine code, grab this file here with the three functions steps you need that are in Lua and just write C# code there instead and compile it.” I talked to the developer, Jesse Freeman and said, “this is all pretty cool, like kinda stuff like, could you use Roslyn for this and do C# too?” And he’s like, “that sounds really hard. Like it’s gonna be years of work. And that would be great. And it’s on my list. But that’s a huge amount of work.” And I kept reading about Roslyn. And I was like, “I don’t know.”

I waited for a holiday weekend here. And in three days, I had the core setup working to use Roslyn. It needed some more work on his part because I forgot the Roslyn bits, sent in the PR and said, “I’m missing some spots to hook it in correctly. But I’ve just thrown out some Lua stuff and forced my C# stuff in and it works with Roslyn.” And when I told him that it just blew his mind. He’s like, “holy crap, you did this in three days?!” And like he’s like, “this must be like a new thing, right? Like this is this is a very recent thing.” And I’m like, “technically, Roslyn came out in 2005.” And he’s just like, “did I spent five years learning Lulu for no reason?” And I’m like, “no, but…”

Jamie

There’s never a I just wasted my time learning this. That’s just silly. But I love that. You saw an application, you saw how you could make a change to it. You asked and they say they essentially what you said earlier. And if you’ve got to be up, I’ll accept it. And you went, you know what challenge accepted. I like that.

Drake

And now that it’s in place, he’s been using it and he’s a big fan of it. It’s been a little tricky to get on hobby project, not a commercial project, to get it to do Lulu and Roslyn and keep docs updated between the two to some extent. But he’s using it now. On his current re-work of the engine core. He for to see how well his his new core worked, he was going to port Sim City to his pixel vision engine. And he used Roslyn for that instead of Lua or the built in C# and he said that it made things so much faster for him because it’s treating C# code as a script. So if you know, if it runs and throws an error, he has the C# debug info included there because Roslyn, the compiler, it gives you the same info that Visual Studio gives, you just got to find where to pull it out. So we can just tell him like if mid run, something’s wrong, it throws an exception, it gives him a stack trace and a line number and a file and he just goes, “oh,” fixes the thing hits refresh, it rebuilds the script and goes and it’s a whole lot faster than letting a whole Visual Studio project rebuild or using you know, a language that is not your primary like Lua or something.

He’s working on getting a bunch of components were in into Rosyln so that other games could use basic UI widgets, if you needed buttons, file menus, that sort of thing. The last I saw him post, he’s working on writing BASIC compiler for his engine. I think he started on that era of computer and he’s got that particular nostalgia bid for, you know, home computers running BASIC. And that’s his current like core target. And once he gets that in place, I think he’s going to rebuild up what’s currently Pixel Vision 8 around to that core. But it’ll be interesting to have a fantasy console that works in three different languages: if you want to use Lua because it’s everywhere and let people know it, or C# through Roslyn where you can do some heavier duty coding a little bit more optimally. Or if you want to use BASIC for fun, because you grew up using BASIC.

Jamie

that yeah, I was gonna say BASIC for fun, because you’re a masochist. But we may have to end up cutting that bit out. I’m not sure.

But yeah, I really like that because, you know, you’ve essentially increased this person’s productivity. Right. And I think that’s, that’s one of the things that we can do as developers, regardless of whether it’s open source or closed source, right. Our main function as developers is to make other people more productive. I like that you were able to take this, “I have this knowledge of how sort of Roslyn, how it’s glued together and how I can maybe hook this into how I think it works.” And over a couple of days, you worked on it, and it’s in place, and he’s using it, and presumably, other users will be using it too, right? And like you say, it just makes everything so much easier. In this particular instance, it makes everything so much easier, because anyone who uses this now has got the ability to get like, is it a full stack trace. And that, regardless of whether you’re working in a language, you know, or don’t know, being able to be told in rich text, “go over here, look at this file, at this line, at this position, and put a no, you wally,” is that’s just amazing, right?

Drake

It is.

Jamie

Love it. As a silly thought experiment, I would love to see what people could get up to, with 40 kilobits, er kilobytes of storage space in the modern web, I don’t think it’d be that much.

Drake

Modern web 40k. Well, you’ll be writing raw JavaScript, and - are we using Unicode because that halves the amount of text you can write.

Jamie

That’s true. Yeah, let’s go with just an ANSI text. Or ASCII, I suppose ASCII text. Yeah. But yeah, that’s it. I can’t even imagine like-

Drake

The the big game from pico eight, and its limits was Celeste, it got a port up to modern languages and systems, I believe, but the core was a PICO eight game. So most of the core gameplay on Celeste, the big current release on Steam and consoles and all that. I think even as a bonus in the game, you can play the original pico eight version, I think the the gameplay and a bunch of the levels are there and the graphics are toned down to the 16 colour resolution limit. But the main idea of the game is there and worked, and it was a big enough hit that they could afford - or at attention - to be able to afford to port it up. And then you could do higher resolution sprites and a small story and some cutscenes and such.

Jamie

You see, that’s when people when people say to me, “hey, I want to get into games development. But I don’t have a four year degree or I don’t have the world’s most powerful computer, or I don’t have this out the other,” I’m like, “you don’t need that. Technically you never did,” right. I don’t know what it was like in the States. But over here in the UK, in the late 70s into the early 80s. With the things like the ZX Spectrum and stuff like that, people just became bedroom coders and people became millionaires overnight. Because they just they were just like, “yeah, I’ll just make this game, I’ll send it off to whoever to publish it. And they’ll sell it for two or $3 a go.” And somehow, after three or four months, they’ve got, you know, several thousand pounds in the bank, just from sitting there and typing code out right. Now, you need a deep understanding of those fundamentals. And you need to understand the language. But anyone can learn the programming language. You know?

Drake

I think here it was the Commodore 64 was the big home computer, you could code up yourself before the IBM compatibles took over.

Jamie

Yeah.

I would love - I think I’ve said this several times, I think on episodes that at the time of recording haven’t been released yet. But I would love to take a modern .NET developer, so someone who’s really started working in .NET specifically over the in the last year, two years, take them all the way back to 2002. Sit them down in front of a Windows XP machine and see what they can build. And I would also love to take like a modern developer from maybe the last two or three years in whatever language and technology that they have, and take them back to 1982 set them in front of a Commodore 64 as I’d expect to have more on Atari whatever, and say, “right. Okay. Make your thing now.” Just to say like to prove that how much - I can’t think of the right words, I don’t want to say easier. But how much more trivial the software tools we use now have made it to get started; not to finish making it but to get started, right?

If I’m on a Windows machine and I have Visual Studio installed, I go file new program, or the file new project, sorry. And you’ve immediately got a whole bunch of stuff scaffolded for you. If I’m on a Windows machine, I could do dotnet new whatever, and again same scaffolding because that - excuse me. So because that menu system points out that at the CLI. So, like just getting started is immediately quicker and the sheer amount of information we have available to us, right? There’s this common joke and I’m sure you’ve you’ve heard it as well, Drake, and I’m gonna butcher it. But essentially, you know, we don’t actually program we just sit on StackOverflow all day copy-pasting, right.

Drake

Copy paste keyboard, right.

Jamie

But that exists because there are developers all around the world, sharing their ideas, sharing their thoughts and sharing their solutions to the common problems. Because now, there are that many of us, we’re all solving the same problems for the same businesses, that those common problems just become well, you know, I can’t legally, I can’t copy paste the code from Stack Overflow. But I can look at it go, “right, I totally get that.” And then reimplement it in my own way, for the projects I’m working. But in the 80s, that was not a thing, all you had was the book on the language. And maybe a couple of friends who were also working on it, if they happen to have the same system as you, right? Because you also have to remember, We’ve abstracted away all of the CPU and stuff like that, which is why I find things like the PICO eight and stuff I got so interesting to me, right? It is wonderfully interesting to me, because you, it’s like, we’re we’re almost in like a wonderland of what we can build with whatever, we have. Everything is so abstracted away, it doesn’t matter that your user is going to be on ARM 64 or x86 or whatever, right. But like a whole bunch of these people have come together and said, “why don’t we build a system where not only are you locked down, but you can choose how locked down you are?” That to me is wonderful.

Drake

Yeah, I like the fixed illusion. That customization is what sold me the C# language while I stuck around. It’s a personal project. It’s one person. I like individual projects, not necessarily like running entirely on auteur theory here that like one person in charge of everything will always do amazing stuff. But I like the philosophy and you have the ability to do that. And knowing it’s a personal project means that you’ll have hiccups that you aren’t going to see on like a commercial project where someone’s throwing money to make sure it works. I like Pixel Vision aid a lot. It’s not a beginner’s setup, though. It’s very much meant to be like, “use modern tools to do retro development.” And a lot of people come in talking about Pixel Vision 8 like, “Hi, I’ve never coded before, how do I learn to make something on this?” and I will help point people at the API’s and try and talk them through. But this is a free time project for everyone here talking about it, no one is going to sit down and run you through two years of BASIC coding to get you up to make I don’t know, like a Mario game to start if you’ve been trying to code for a while and you should be able to drop right in and go, “oh, here’s the draw sprite API. Here’s the draw Map API. All of these are there things I want to do that on an eight bit computer would have been look up a particular memory address, set a counter, like make sure I write to these addresses in the correct order, and I can’t go over 32 or the CPU will skip them like nothing happened.” It gets rid of all of that and just goes to straightforward simple coding for the thing you actually want to do.

Jamie

Sure, and that’s not in any way, a kind of gatekeeping or monstrous activity that anyone is doing that is just quite literally, there is no one who has the time to be able to, or the bandwidth to be able to help you out in doing this. Perhaps you should go over here and learn this first, and then come back. It’s not that you’re not saying to people, “you can’t ever do this.” It’s like, “there’s a little bit of fundamentals you need to know, once you’ve got those, come on back.” But yeah, you’ll understand how it all fits together. Right?

Drake

Right. Like if you if you vaguely know how retro development works and you understand some coding principles, you could use Pixel Vision 8 and do quite a bit of stuff. If it’s going to be your first game and you’re going to recreate [Super] Mario [Bros.] 3, you need to look at your scope and your skill and dial it back slightly. So if you are asking like should I use C# or Lua? What’s the difference? This project is a little bit above where you are. But if you know why you’d want to use one or know one like it’s probably a better place to start there./ It’`s just a there’s a floor for skill there that we don’t have the resources to push it down any farther.


A Request To You All

If you’re enjoying this show, would you mind sharing it with a colleague? Check your podcatcher for a link to show notes, which has an embedded player within it and a transcription and all that stuff, and share that link with them. I’d really appreciate it if you could indeed share the show.

But if you’d like other ways to support it, you could:

I would love it if you would share the show with a friend or colleague or leave a rating or review. The other options are completely up to you, and are not required at all to continue enjoying the show.

Anyway, let’s get back to it.


Jamie

I like - this is personal opinion. I feel like that’s a the difficult message to get across in the most supportive and accepting way right to say, “look, yes. You do want to make, you’ve heard of this, this piece of software that will have Have you built the stuff you want to make the next Call of Duty is not really going to happen. You need to really,” like you said, reevaluate your goals, maybe readjust to match the skill level or the bandwidth that you have or the amount of time and effort you are going to be able to put into this. And then, you know, as long as you have the fundamentals down, we can help you out if you if you’re ready to be helped out. I’m inferring what you’re saying there. Right? I’m not saying that this is the party line, but you know, if there is help required, help can be available, I feel. Yeah, saying to people, y"ou kinda need to go and learn this as well first,” is I feel like it can sometimes be taken as gatekeeping or whatever. But if as long as it’s being done, as, as you said, like, “go learn these fundamentals are come back, and you know, we’ll help you get started,” not a problem. But yeah, people sometimes need to think about the skills that they have, the bandwidth that they have, and the goal that they want to achieve, and adjust things.

Drake

I think a little bit of it is what people think of as easy because it’s retro. A lot of people assume that like, a platforming game is simple, because for a whole generation, like their first video game was Super Mario Brothers. This was a 1985 video game, it can’t be that hard to do a platformer, they are not trivial. There are a lot of sneaky tricks worked into platformers to make them significantly more enjoyable, that are not obvious, not visible unless you are really well trained at catching pixel size deviations on behaviour, and frame perfect timings. So like very simple ideas like, okay, well, you’re a platformer, you need a physics, you need physical rules for things to jump up and fall down, you need to be able to do collision detection to make sure you’re hitting something from the top or the bottom or the sides. You need interactions between the player and all the things in the environment, whether it’s enemies, or platforms or other miscellaneous things you’ve thrown in power put behave differently, they’re on that list. That’s a lot of things to do for a first project. In addition to drawing maps that are fun, among other things. I think that like the retro development group needs to like start saying like, “platformers are not actually a good first project,” and figure out what is a good interesting first project. Even if you switch from you know, Super Mario to Legend of Zelda one, you cut out a lot of complexity, because there’s no gravity in Zelda, you can walk anywhere on the screen that is an open space that many of the other problems are still there. But you’ve cut out gravity, which cuts out all of those little tricks where like, “oh, if you’re one pixel off the edge, you should still jump because that’s user reaction time.” That’s not a, “I don’t want to fall straight down the second my toe stops touching this brick,” I want to have that buffer time of where I’m falling, but I can jump like I wasn’t. That’s in basically every platforming game and invisible if you haven’t read about platforming game development, and why that particular thing is so important. It’s almost universal.

Jamie

Yep, I wonder if perhaps, a better place to start for people who want to make a retro style video game would be something like Tetris or Pong. I feel like Tetris is, again, I’m trying not to sound a bit like big headed or ableist or anything, but like, Tetris is like, its its shapes, and they feel like they … the rules are pretty simple, you get a random shape of a set of something like six. And when you create a vertical - not a vertical, horizontal, I always get those ones mixed up. When you create a horizontal line, that line disappears, and everything else moves down. If you fill up the screen, game over. Like it would be like a something you could create, that would be a challenging, interesting thing for the player. But I feel like maybe starting with, you know, the classics, like Pong might be a better idea. Because that’s, you know, the fundamentals are right there, you can draw three objects. And then you have to work out like, angle of incidence and angle of reflection, and, like velocity, things like that, which you would have to work out for a platformer, or for any other sort of video game, so maybe you start that, I don’t know. It’s better people than me to figure out for sure.

Drake

Like Pong and Tetris are best, certainly better starting points. I think the main issue is Pong is very simple. And a lot of people are just gonna say, “I don’t want to play Pong. I want to play the game I want to make.” And like for an experienced developer, you could probably crank out a Pong game in a day. Someone who’s learning to code would probably take longer. But they’d hit all of the same points and they’d learn them and they’d stick and you’d remember, “oh, this is a lot harder than it looks if you don’t already know.” Tetris is also another one of those one, it’s probably experienced development, okay, I need an array of spaces that are filled or not, I need objects that manipulate I know how to go through an array and change it all the time and on delays and conditions and check stuff. And that’s stuff that a brand new developer could figure out fairly easily. But it would not be a one day sort of thing. Like it wouldn’t be for someone who has been doing that for a while. So they’re definitely a better starting points. I think the main push on there’s a lot of people who want to make a game, don’t want to start on that they want to start on that big idea in their head. I understand that because I do that too. Sometimes.

Jamie

I do the same thing with whatever cockamamie idea of an app that I come up with, right. I’m always like, “right, I’m going to build an app. It’s going to be cross platform. It’s going to be an app [I’m] gonna have on my desktop, on my phone, pn my laptop, on the web; all of these places. And it’s going to do these wonderful things.” And then I sit there and go, “okay, file, new project. I don’t want to do this now.”

Drake

The biggest block to so many side projects: starting.

Jamie

You know, I bought the domain, I’ve got the design done, I just…

Drake

My big project is Praxis Mapper. Praxis mapper is also open source. And it’s … I’ve got two components there. But Praxis Mapper by name is the server component for GPS games, things you have to play by walking around or interacting with a map. This is the big one here is Pokemon Go. That’s pretty much the inspiration were like, “I could do this. This is a thing I could do. It can’t be that… oh,” Two years later. It runs, it works. But I definitely underestimated how long it was going to take. I thought a lot of these things already existed in my particular domain and did not.

So it’s it’s self contained as much as it can be. If you give it OpenStreetMap data, it’ll convert it to the format it uses, save it to a database. And I will draw a map tiles, I have my own styles, you can customise the styles. You can attach data to the player or an area on the map or an element on the map, if you want to attach to like a specific park boundaries versus just like this particular square kilometre. You can do both of those. There’s global data for things that don’t change and don’t apply to particular spots. It’s .NET, so it runs on everything. My personal test server is running on ARM 64 Linux in the cloud.

I’ve got two drawing libraries because one’s faster but Windows only without a whole lot of extra work. And one runs on everything with no native dependencies, and looks almost as good and as only a little bit slower at scale. And I’m like, “that’s an absolutely fine trade off. I’ll keep both of these.” Because at least for AWS, the server I picked is dirt cheap. Like ARM 64 running Linux, like I’m paying 25 cents a day to run a Raspberry Pi powered server on the cloud. And I don’t know how many players at once it’ll handle but it draws map tiles when I want to play in under 200 milliseconds for the game the size of Ohio - which is,. that’s a 50,000 square miles, which is 130,000 square kilometres. So roughly the size of England for our UK listeners. Like I’m running a game that big on Raspberry Pi for one to four players so far, depending on who wants to take a look at it. But it’s still very early in development two years later.

I worked a lot on scaling it because the planet size game. It doesn’t have to be that was the main impediment if I want to make my own game is like, “oh, how expensive is it to run servers that cover huge areas.” So step one is scale the game down. I did a lot of testing on an American county sized area. I think it’s similar to counties in the UK. I think they’re the same level of administrative boundary and OpenStreetMap terms. I did a lot of testing there, it’s pretty fast there. I can’t use a pretty big area if you’re not on the borders of it. It’s a lot of game area to cover if your game is walk around the real world and do stuff. Spend a lot of time optimising things, the system’s about as fast as it’s going to get. It runs through … it runs through the data file for Ohio and converts it in three minutes on my computer. It will take longer to do England because the Europe’s data and OpenStreetMaps is significantly denser than America’s it’s much more popular over there. But take longer going through more details, but it’s absolutely will.

Jamie

Three minutes wow. How big is Ohio? Again, that’s, that’s pretty good.

Drake

130,000 square kilometres for you. The data files a little under 200 megs in their super compressed format, and it expands out to about two and a half gigs in my database.

Jamie

Right. Okay. That’s, you see that to me, is is amazing. Not just so there’s a couple of things that are going into that optimization, right, there’s the developer side optimization stuff that you’re doing, which is amazing anyway. Then there’s because you said it’s .NET, there’s a lot of .NET stuff under the covers as well, I don’t know whether you know about this, but from, I believe it was .NET, Five onwards, the just in time compiler does a whole bunch of like, hot compilation - I don’t think that’s the phrase that they use, but that’s how I’m going to describe it. So it’s running and the .NET just in time compiler goes, “this path is traversed quite a lot. And I think I can - because I’ve got the data streaming in and I can see where it’s going to go - I can optimise that code path even more, because I know now, what I didn’t know, when Drake hit Compile. I know now that the data looks like this. And so I can get rid of the if else or I can get rid of the boundary check on the array or whatever.” And so it’s doing these tiny micro optimizations that are sitting on top of your macro level optimizations. Which then itself is sitting on, you know, a Linux kernel, which is heavily optimised anywhere because, you know, open source. But then it’s sitting on top of ARM 64. Which, you know, you said that on your machine, it takes this much time. But obviously, if you were, I don’t want to say foolish enough. But if you were foolish enough to run the map import on the Raspberry Pi, or the Raspberry Pi style machine that’s in the cloud, you know, it would take a while. But that’s still those same levels of optimizations all the way down. And that’s just that’s the power of open source man.

Drake

I’ve done the best I can on my app to make it easy for a potential end user. Again, I don’t do marketing - it exists, but it’s impossible to discover. And a target audience of people who want to make a GPS game is pretty low to start with. Like when Pokemon GO came out, it was a big deal. And there’s probably some lessons to learn from it. But I feel like one that everyone took away was IP is a big deal. Because I haven’t seen a lot of other GPS games come out that don’t have some big companies branding on them. Like I kind of thought like, “oh, now that people like walking around and enjoying this sort of game, maybe we’ll start seeing some people make more,” and that didn’t really happen. You had Jurassic Park Go, Minecraft Go. Dragon Quest Go in Japan, like all of them was kind of like take a big IP and have you do its thing walking around. And they all very almost copied the gameplay: you go and catch dinosaurs or wizard stickers or slime monsters or whatever. And they didn’t really do their own thing. They just took the exact formula, changed a coat of paint, and hoped it would do well. And a bunch of those have shut down since then. I was hoping more people would do unique things. And when I scaled down for testing, I realised that maybe that’s the sweet spot like, no one’s going no individual is going to afford a planet size server cluster to play their home game. But if you’re just for you, and friends, you could absolutely do a county or a state or the equivalents for your particular country.

And like so my goal has been ease of use as much as you can. So I’ve got a side, I’ve got a bootstrap app that you have to run next to Praxis Mapper. And you just run it and you tell it, “make my server,” and set a couple of things in the config file, and it just kind of runs from scratch. It’s like, “all right. Is your database up? Cool. I’m going to make my schema there. I’m going to fill in my default styles. Do you have data files? I’m going to parse them load them in.” And you should do that like once to get stuff set up. And then for all the other effort that running a web server can be I want it to be, “double click PraxisMapper.exe or run it from the terminal if you’re on Linux,” and it should fire up. It’s ASP .NET. So it’s a kestrel app. So just need a little config there, it fires up. It’s a web server, it’s listening. It’ll be on port 5000, because it’s Kestrel by default. But if you have data loaded, you double click it, it should run. And then you go grab the client app, I’ve got one called Hypothesis with some demo modes. And you can go to Options, type in your server name there and have a talk and it should work.

And it’s a very generic server. The demo game right now is client authoritative, the server just exists to track data for the client, the client has to do all of the work. And that can make some things slower. Like if I’m trying to put a bunch of creatures on the map, I have two clients and I say, “what’s on the map? Read the results,” or, “there’s nothing. Is anyone trying to spawn stuff in? If they’re not, I’m going to try and spawn something and and put a lock thing check in so no one else does it. And then I’m going to do the spawn rules, check it send a request for each thing that has to exist on a spot, when I’m done, I have to unlock things, then I have to ask for stuff again. And then I can finally draw it.”

I just yesterday set up a basic hook to load plugins for Praxis Mapper from DLLs. So I could, so I can write C# code for my games that aren’t part of the core. I want my Praxis Mapper core to be generic and reusable. So it’s just going to do very generic, “here’s map tiles, here’s data info, here’s the security stuff if you’re trying to do encrypted things on it.” And then for a separate DLL say, “I have this new controller you add in and it will do all the very specific stuff.” So then, in the future, a client could just say, “what monsters are in this area?” And the server goes, “here they are. Hold on, it’s empty. Let me go make some by my rules.” And the server can do that all much faster. One data call. I’m glad that I, yesterday figured out how to do that. And I’ll be doing that for a bit now.

Jamie

So I guess the cool important question about this, about Praxis Mapper is how do we get Snorlax? For non Pokemon Go players, that’s you capture the creature, right?

Drake

A lot of Pokemon Go players are there. And for GPS games, they were friendly people if I saw someone walking on their phone, and they were like, “hello fellow traders. How are your days out there on your Pokemon adventure?” And I’d get a laugh and sometimes the conversation. Ingress, the previous game from the company before Pokemon Go, those players are hardcore. They’re not casual, you walk up to one of them. And they freak out because they think you’re trying to steal info. And if you’re doing it in character, it’s worse. It’s like, “hello, agent, are you working for the shapers?” You sound creepy, and they’ll know what you’re talking about. But they’re a hardcore group of players. Like if you’re on the green team, they will not talk to you if you’re on the blue team, because they are trying to coordinate and keep secrets and do stuff. And they don’t want blue team interfering with it.

And there was a big deal a few years ago where they caught both teams cheating. At huge scale. There was a badge, if which was if you could hold one point yourself for 150 days. So five or six months. Like you’d get a special badge say[ing] that you did this. And both teams had at least nation sized server setup. So listen to the chat that said, “user captured this point.” And it would like set a reminder four and a half months in the future if that point hadn’t been recaptured, and would like message everyone in like 10 miles of it saying like, “don’t let them get a badge go take this over.” Like people were suspicious because they’re like, “oh, I have failed three times to get this badge. I’ve driven to the middle of nowhere and grabbed the most obscure thing on the map. And without fail three days before I get it, it gets flipped.” And eventually someone leaked the server existent track to the stuff from chat messages. And like a week later, it was found the other team was doing the same thing. And they just had to be like, “you can’t do this anymore. Because you guys can’t just let people have fun. You are taking this game significantly too serious for this.”

Jamie

So I guess from your experience of building Praxis Mapper, what are some of the things that you maybe had to take into consideration when you were putting it together or that you have to take into consideration now? Specifically for that ease of use, you know, you said you want someone to just be able to double click something put in a connection string, and load of the bootstrap app and it just takes care of it all itself. That, a lot of people have that as the dream of, “I just run the executable run the binary and it just works,” right? Very few people attain it. So I guess what are maybe a couple of the considerations that you had, and maybe if you, if you wouldn’t mind sharing a few top tips for being able to achieve that?

Drake

Sure. So when I starting on this, I know my goal was eventually theoretically, I’d have other users trying to make their own games for stuff like if you’ve got a convention and you wanted, you know, a convention size game, walk around here, hit things, get points, whatever, like that would be a fun thing to do. That doesn’t take a tonne of time, because you’re only looking at a big convention centre or something. You’re not running planet sized games. But it’s mostly like, “which things aren’t fun to do, and can they be automated?” And every step I can automate is a step that gets out of the way of letting people do the things they want to do. So I have to figure out what’s absolutely not negotiable, and then sort of work around that.

So this is a web game. So I do need a server and a client, I can’t expect every user to go download an open street map file, and I can’t automatically guess where you are, find the right open street map file or make one and any reasonable amount of time on a client. So it’s just there has to be a server and a client that limits on the server. What can I do? I can make bootstrapping as easy as possible. But it’s still a mandatory step. I don’t want the web server to create databases for you, or download files or any of that. So I’ve shaved that off to a separate app for managing. But for that it can be how many things can I do in one command? It’s going to be alright. Like, is there a database? I’ll put my schema there automatically. Entity Framework handles that for me beautifully. I can do three different databases, that works fine for all of them. Then I need to get data, I can tell you which data to get, I can attempt to make that easier. Right now I don’t I just have text telling you go grab the file, first, put it in this folder in your config file, and I’ll do the work.

Some of it’s making good defaults. My default plan for making a map game interesting is to guess off of what’s on the map. Niantic and Pokemon Go and ingress and their games have a big data set from players of interesting things and activity of where they are. I don’t have that on Praxis Mapper. Open street maps doesn’t track where people are distracts data on the map. So I have to run on map things. So I have to look at what’s available and say, “okay, what are interesting places to go that are safe for people to go they should want to go to? And how should I interact with them?” So I dig through their big list of tags areas have and try to grab the ones that you know, are good to go to. Because the core idea behind all of these GPS games is, “get up walk around, it’s good for you.” It just happens to be candy coated in this fun game about catching monsters and throwing them at your friends. So I’ve got like parks and nature centres and martial ins are good, waters common and as a good thing to like change up stuff on. Like, I don’t want you playing in industrial areas or military bases. I have to admit that there could be people they’re legitimately doing actual work, but I don’t want random people wandering in because there’s a you know, military-only creature they want to go catch that’s like shouldn’t automatically kick out off limits, because there could be you know, off duty people they’re trying to have fun or civilians there who work for them. But I don’t want outsiders coming in specifically because there’s a thing that only shows up there.

I’ve got my default list of things that are probably good places to interact on. And I need those as my core and I’ve made those my styles. I use open street maps’ tile set as the baseline for how they look. It’s customizable. I have a rules, engine setups that you can tweak it and I’ve got variations on that and layers on a viewer if you wanted to see what’s going on there.

Let’s see what else. I’ve got set up on my infrastructure as much as possible. I can build up on that. I’m going to try and figure out if I can script up Maria DB or SQL server’s local DB setup. So that way, if you don’t have a database installed, it can put one on for you automatically. That’s one more manual step. I could automate app to make it easier. I have my default suggestion list on what things to interact with.

And then I’ve gotten rid of as much of the web server host overhead as I can. I originally started off being like, “alright, well here are your rules for setting up IIS. This is a big project, but here’s what you want.” And then at some point, I’m like, “no, this is Kestrel. It’s a web server that just expects is in front of it. If I want to be as easy as possible. I can throw IIS out and deal with Kestrel raw.” And since then it’s just double click Praxis Mapper.exe, let it do its connection, it fires up. It’s a running web server. Alright, there we go. And I will just say, if you’re a web pro or a company, you should go use IIS for all sorts of good reasons. If you’re not, if you’re just trying to run on a laptop, for friends in a park for a weekend fun thing, just double click the exe, and don’t worry about all that overhead.

So then the client needs to be as easy as possible to configure for it. And if you’ve got Hypothesis, my demo client, there should be an option in the Options screen that’s just, “what server you’re connecting?” Backspace out the default one I use, put your own in, and it should work. Barring tou know network firewalls or problems like that, I can’t help you on those personally, specifically, they exist. Hopefully enough of those are out of the way that it just goes.

A lot of it is know what you have to do, figure out how you can work around anything else and make those as easy as possible. So the minimal Praxis Mapper setup is download relevant OpenStreetMap file from Geofabrik.de or something like that - the smallest one, you can use. Bootstrap with it on my bootstrap app. I named it Larry, because I think it’s funny to give programmes human names, “oh Larry’ll handle that. Larry go make my server run.” And then when that’s done, which takes 15-20 minutes if you’re pumping things into the database in the process, then double click your exe; servers running ready to go. Open up your client, connect it your server, it has some demo modes. If it works, it’ll have green lights on the network indicator, and it just goes.And from there, you’ve got an open source server and an open source client. And if you want to expand on these base ideas, the client code’s there. It should be enough of a template to do basic things to follow.

I’ve got a few different demo modes in scaling complexity. I have paint the town mode, which is the easiest game it is: it’s just you walk into a space, it tells the server draw the space this random colour and it tracks it. And you leave a little rainbow trail as you walk around. And everyone does that. So you can see other people walking around is it refreshes data from the server, all it does is just sends data to the server reads it back and doesn’t ask the player to interact in any way beyond moving. Then I can scale up to area tag mode, where you walk around town and you get points for each space you walk into. And you can spend those points to claim elements on the map for your team. So if I go and walk around the block and get 2000 points, I can go to the park and spend 300 of them to turn the park red on the map. So you see it’s red team’s park. And then it shows you the team score, the other team’s score your own personal contributions total, that’s a little more interactive because there’s dealing with elements on the map and data that changes more often, in addition, and another layer of map tiles that gets drawn over the base layer.

I have a incremental game mode that feeds up points from areas you’ve walked through. Incremental games are sort of numbers go up genre generally, you collect a resource and spend it to collect more of another resource. And you keep doing that in different ways. And that one’s a very simple scaling thing there. Like, “oh, go walk through a park to get park points, go spend them to by nature reserve points,” or, “go walk through nature reserves and spend those to go get graveyard points or whatever, and get enough of those to go by historical point of interest points.” And then when you get enough of all of them, you spend them all and you win the game and get a trophy or whatever. And then you do it again. But the numbers are bigger.

And then my newest mode is creature collector, which is the most complicated one. Which is you know, it opens up the map, it checks to see if there’s spawns, it throws creatures around the map, and it shows you where they are with a little question mark icon. You walk into the same space they are in a pops and it says, “you found this thing!” and shows you a picture, fills it in on your list and tells you how many of them you found. Right now that’s where that is; it works. I don’t have a like gameplay mechanism involved in catching them. You just walk into their space and you catch them. It’s absolutely the basis to be okay, like here’s the trigger to put a game mode if you don’t want to just play the you know, throw the ball the thing, if you want to do an actual like RPG fight or some other mechanism going on there. You could put one in on that spot. And then when you’re done decide to add it to your list or not. I think it would be a pretty good demo if anyone wanted to try and do their own scale and complexity in different ways and at least one mode that doesn’t actually care about the map itself.

Jamie

I like it. I like there’s a lot … how do I put it? Throughout our conversation today, I feel like there’s a lot of going back to this same idea of knowing the scope of the problem you’re trying to solve. And being honest with yourself with what you have the ability to achieve, right? When we talked about things like Pico, Eight and things like that, right? And then people coming in and saying, “I want to make the next DOOM or whatever,” and maybe they have some background, or maybe they don’t have any, right. Being able to actually say, “yes, this is my goal.” And not just go, “how do I go from where I am to there?” I used the silly joke earlier on of draw the two circles then the rest of the owl, right? It can’t … for most people, I would say maybe 90% of people, making that leap is incredibly difficult. Now, there will be some outliers, I think you will be able to go, “you know what, I’ll rise to the challenge, and I’ll do it.” But like, when you’re learning something new, you need those attainable, achievable goals. Like if you look at any kind of classical education systems, it’s all about, “I’ll introduce a new nugget of information. And we’ll deliberately practice on that, until you get really good at it, and we’ll add a new thing that pushes you outside of that that zone,” right? And I feel like with a lot of what you’ve been saying, it’s all about knowing that scope and knowing … I mean, please correct me if I’m wrong, right. But this is what I’m inferring from you, right? It’s, know that scope. Know, accept that you have those - I’m wary of the word limitation. except that you have the sort of maybe the gaps in your knowledge, but also accept that you may have to go elsewhere to learn them to come back. Right?

Drake

Absolutely. That is a very common thing here. And all of these because it’s scope, it’s like, what things are already out there? And do they do what I want? And do I want to do them again. Because it’s entirely reasonable to want to do your thing your way, Like sure people have, you know, there’s 800,000 DOOM clones out there, there’s no reason you shouldn’t make your own. If you want to do it, you should also know what tools are there. And maybe Pixel Vision 8 being built for two dimensional eight bit style games is a very big challenge to rewrite and DOOM in. You could probably do it, that would be a lot of work versus finding a Unity plugin that starts you off on a first person shooter, or maybe even the Build engine, I think that’s still a separate independent product and built for that. But if you were, you know, klind of like, “I know they’re there. I don’t want to do them there. I want to do it the hard way.” Like go for it. If you think you can. Just so many people lose track of, you know, the 80/20 rule. I don’t need to do multiple libraries and sub-configurations and individual bits to track, you know: are all my files lined up the way I want them to be? I just I hope that you know, there’s a big enough use case for the simple thing that I’ve done that other people find it useful. I hope that someone out there someday is like, “wow, how can I make the game like Pokemon Go, it seems really big?” and wanders in and goes, “oh, like this. Some of the hard part’s already done, I could get a great jumpstart on this and figure out the rest from here.” Or maybe someone’s like, “old games are cool. I want to make my own like, Oh, here’s how I do it. I know enough about API’s to be able to follow these instructions and figure it out.”

Like we always look at a thing you always look at the solution or the finished results. In development stuff, especially on games tends not to be very fun to look at. Because you’re either just testing stuff. If things are super broken in a funny way. It’s nice to look at that doesn’t help anyone. And a lot of development. Beyond coding is also like art. So like if I’m trying to just make - I need a level to play in and I’m trying to do a level everything’s grey blocks or has placeholder and on it. And I need to spend time making things look nice, because that visual appeal that really hooks people into a lot of games because it looks good. And they don’t really care that it plays the same as 50 other things. This one looks cool. And I like the way it looks that I want to play it to experience the art part of it.

Jamie

I can’t really add to that. I don’t think. And I do like the idea. Like you just said about, “yeah, millions of other people have cloned DOOM. There’s no reason you can’t as well,” right. I love that. Because I feel like I fall into this trap too. But when I talk to certain people and I’m like, “I’ve had this great idea for an app or a game or a thing, but there’s already one available that does it,” and I’ll say to them - and I’m terrible at taking my own advice - “so. Go make you thing. Yours could prove to be better than theirs. And guess what? You’ve got something they didn’t have, you’ve got a competitor to look at. Right? You can see how they solve their problems. And you know, those problems are coming. So you got one up on them, go get it done,” you know

Drake

How many commercial apps exist because there was already a commercial app that did one thing poorly or didn’t do a thing and someone’s like, “I need to do that thing,” and made their own that did that particular thing, and it took off and made money, and now it’s a great big deal that’s probably on par? Even browser wars back in the 90s, like, IE 6 was on like every machine, and Microsoft didn’t change anything. And then you had Firefox and a little bit later, Chrome started doing other things. And you had KDE on the Linux side. And its built in browser that got cloned into Safari on the Apple side. And pretty soon IE 6 is both everywhere and useless because everything else is doing things that it didn’t know it needed to do. And you get tied into the very specific web developer hell that we saw until - Is it over yet? Does anyone still support IE 6? It finally dead dead?

Jamie

I hope so. But you’re absolutely right. And I feel like more people should take that attitude. So, Drake where can people go to find out about these projects then? I assume they’re all on GitHub? I know you said earlier on you’re not much of the socials person, but is not the place to find all of these projects?

Drake

All my projects that I’ve mentioned are on GitHub. I have my own GitHub links, and I should have descriptions there. github.com/drakewill-CRL). I don’t remember what those letters stand for at this point, but I’m not changing my username. Praxis Mapper is the repo for the server, Hypothesis is the repo for my test client. It’s written in Solar2D you need to instal that and know some Lua to make changes to it. ROM Sorter is where Rom Sorter is at, it’s also all C#, it’s no problem there. Pixel Vision 8is at github.com/PixelVision8/). Its last I checked, he’s still undergoing some reworks. And a couple of the tests things are private. So I would go to just slash PixelVision8 and not the sub folder for it, because that may change by the time you hear this. He may be done with his internal rework and his BASIC interpreter and have a second version. He may do one version, that’s command line only for basic and one that’s a full, fake computer looking thing with its own OS and icons and stuff. He may have had that redone by then he may not he may have scrapped, but it’s hard to say. So I would go to the root repo for Pixel Vision 8 to see what’s going on there.

Jamie

Sure. I mean, we can’t say what’s going to happen in the future, which is now the past because people are listening in the future. But to them is the present, right?

Drake

The complexities of time travel!

Jamie

Absolutely. But yeah, what I’ll do is I’ll collect all of those links, put them in the show notes. So if you’re, you know, whatever you’re listening on, there’ll be a bunch of links somewhere, if you’re interested in these projects, go check them out. And I feel like you should, right.

Drake

I feel like one more social thing. I do have a Twitter account for Praxis Mapper at twitter.com/PraxisMapper. It’s mostly a dev blog. It is where I post all my developer ideas and feelings. I don’t get a lot of responses there. I don’t push it hard. But if you just want to see me complaining about various mobile development things, or “I just figured this thing out, and I’m so proud,” or “I can’t do this thing the way I want to do what now?” Like absolutely, like jump in. I can be a nerd and talk developer stuff there on my particular project here. Or if you want to ask questions about stuff, throw them at me, I’ll probably answer.

Jamie

Excellent. Well, like I said, I’ll put all of these links into the show notes. So then people don’t have to worry about, “I’m driving. How do I get the link?” Don’t worry about diving across your dashboard to get a pen and paper. It’s all on your phone or whatever, right. There’s links somewhere, so don’t worry about that. And yeah, I guess the only thing that’s really left to say Drake is thank you ever so much for being on the show. I really appreciate it. I feel like there’s loads of little nuggets of information throughout this for people who are, it doesn’t really matter where on their development journey they are at, they’re going to get something out of it I think so. You know, I really appreciate you sharing your your knowledge and experience with us all. So thank you very much.

Drake

Thanks for having me. I appreciate it talking about stuff.

Jamie

No worries. Thank you very much.

The above is a machine transcription, as such there may be subtle errors. If you would like to help to fix this transcription, please see this GitHub repository

Wrapping Up

That was my interview with Drake Williams. Be sure to check out the show notes for a bunch of links to some of the stuff that we covered, and full transcription of the interview. The show notes, as always, can be found at dotnetcore.show, and there will be a link directly to them in your podcatcher.

And don’t forget to spread the word, leave a rating or review on your podcatcher of choice - head over to dotnetcore.show/review for ways to do that - reach out via out contact page, and to come back next time for more .NET goodness.

I will see you again real soon. See you later folks.

Follow the show

You can find the show on any of these places