Danny Ramos
DragonRuby Game Engine
DR
See all speakers
See all 3 speakers

DragonRuby Game Engine
Amir Rajan, Rachael Wright-Munn, and Danny Ramos β€’ March 25, 2021 β€’ online

For version 0.3 of Ruby Galaxy, it was all about Ruby off the Rails. We focused on all things Ruby that don't involve Rails πŸ›°

Amir Rajan (@amirrajan) is an indie game developer. He created the #1 iOS game: A Dark Room and is CEO of DragonRuby.

Hosted by Rachael Wright-Munn(@ChaelCodes) and Danny Ramos (@muydanny) πŸ›Έ

This was originally streamed on our Twitch channel where you can find our releases every last Thursday of the month (https://www.twitch.tv/therubygalaxy​​).

Interested in talking? Take a look at our CFP at rubygalaxy.io πŸš€
We are always interested in talks of all sorts, whether you are an experienced presenter, or are looking for a great place to give your first talk ever.

Follow us on Twitter @therubygalaxy and visit our website at https://rubygalaxy.io/​​ πŸ‘½

Soundtrack for the game DojoKratos done with Game Boy. Available as CC-BY. Found on the Free Music Archive under Boss Splash by sawsquarenoise.

Background Space Video by Space Space from Pexels

Ruby Galaxy v0.3

00:00:06.000 come right back in and now we're live
00:00:21.359 uh it looks like you've got some fans in chat your boy krub and levy duncan yes i'm so excited i am
00:00:28.960 so incredibly thrilled because i remember like i think it was like a year ago when i first saw you streaming and i saw you
00:00:35.040 working on like a um a clone of oh gosh i can't remember the name but it had this little character
00:00:40.719 that's traveling through a 2d world with dragon ruby yeah legend of zelda incredibly impressed i was legend of zelda
00:00:48.160 oh yes so there's a lot of things that i want to ask about especially because i
00:00:53.600 recently listened to one of your podcasts where you talked a lot about like the developer experience with dragon ruby but first of all i just want
00:00:59.680 to start with like i'm going to do this correctly first time would you like to introduce yourself to our author
00:01:23.920 that's the best definition i'm just i'm just a code hobo like i've
00:01:29.360 tried to explain what i do and that's probably the best thing i'm a vagrant of a vagabond of some type
00:01:36.479 and uh one claim to fame i have is i'm the most successful
00:01:41.759 game ruby game developer in the entire world because i'm probably the only one
00:01:48.159 oh wow we just got a raid from new relic thank you so much uh new relic and you just missed a mirror's
00:01:54.000 introduction but so can we just reverse all that ramirez and just say it all over again i am a code hobo perfect i build video
00:02:01.840 games in ruby and uh uh i i'm the best game developed ruby game developer in the world because
00:02:07.119 i'm the only one of them i think i remember you running several
00:02:12.480 game jams utilizing like dragon ruby so i don't think you're the only one
00:02:19.760 yeah um that's that's true that's true uh luckily luckily over the past two
00:02:24.959 years um i've been able to uh that's when the game engine released right uh well dragon ruby is the runtime and the
00:02:31.120 dragon ruby game toolkit is the actual engine that's uh the the game engine on top of the runtime
00:02:36.400 and uh over the past two years uh we've kind of grown the community i think we're over over pretty close to 2000 members
00:02:44.000 in the discord right now so um yes lots of people are finally seeing the joy of
00:02:50.239 of using ruby and it's the it's the most wonderful thing because um all the ruby devs are just we've been
00:02:57.200 in it for so long and uh the realm of game dev is just it's new
00:03:02.239 so you have people that have never that have never touched ruby seen the magic of the language again and
00:03:09.120 it's just one of those things where we take it for granted when we first started learning ruby and
00:03:14.159 we're like oh this is so incredible and then just to see that like kind of like light in someone else's
00:03:19.440 eyes it's just it feels so good yeah hold up i didn't even know this existed
00:03:25.040 i am kind of amazed right now i was like oh dragon ruby cool it must be like some
00:03:30.799 gem or something but you're this is really cool i'm really excited to be kind of digging deep into this with you
00:03:37.280 yeah yeah and uh just like as a testament to you know the the platform itself i mean
00:03:42.720 i have a game on the nintendo switch that is built with dragon ruby wow so
00:03:48.159 yep so if you go to if you go to like yeah just go to nintendo and uh type in a dark room nintendo switch and
00:03:55.280 this game is built using using this engine and um uh
00:04:00.319 uh i have uh six other properties uh primarily on mobile right now that i'm i'll be porting over to nintendo switch
00:04:06.159 but um uh of those properties i mean a dark room uh to date probably as
00:04:11.439 i think all my games across the board have uh lifetime four million downloads so far wow across the seven year period
00:04:18.959 so um this is the real deal like um yeah yeah i hit the number one spot in the
00:04:25.440 app store back in 2014 um that was that was really interesting
00:04:31.280 to fame that is so cool yeah it's wild when the new yorker contacts you
00:04:36.720 he's like hi you'd like to do an interview and like you do so tell me about yourself i'm code hobo
00:04:47.600 really want to do one of two things i either want to force you to accept more compliments because that's the sort of person i am or i really want to know why you
00:04:54.160 picked ruby and why you decided to build dragon ruby with it what was that
00:04:59.919 language so i can uh so i did the funny thing is my strongest language
00:05:05.280 is c sharp i've been doing c sharp the longest and i started um in the net ecosystem
00:05:10.960 and i was around 2000 yeah the year 2000 2001 and
00:05:17.520 uh till 2013 is when i did um c sharp development there's long high
00:05:24.080 lump lump lump you can see the lump spot
00:05:30.320 uh i got to show you along you know this this needs to be entertaining oh lumpy there's lumpers and then uh the
00:05:43.199 um i don't know how old he is i'm gonna hang out with taco truck yeah
00:05:48.479 i have no idea how old taco truck is um he's got two teeth that's it
00:05:54.400 oh and um can you do this to me are these your pets or your roommates
00:06:01.360 they're rescued they're my they're my little puppies and rescues oh yeah so yeah you have lump with the
00:06:06.880 cone and taco truck with two tr uh two teeth um and uh you know the name fits his
00:06:12.560 physique obviously but um there we have that uh but yeah so 2013
00:06:18.400 is uh i was doing i'm still doing.net development starting in around 2010 and i started doing build
00:06:24.639 automation and uh all my build automation was done in a library called albacore and
00:06:31.120 albacore was uh is basically um extensions on rake
00:06:36.160 itself uh to allow for building.net applications um at that point in time like.net didn't
00:06:42.080 have anything like you wrote batch files or used visual studio there's no form of like ci or continuous integration so
00:06:48.560 my ruby experience is actually not through rails i have it's funny when i interview or like go
00:06:53.599 to consoles they say how much rails experience do you have like um none i mean i've done like here and
00:06:58.720 there i've built a website in rails and sinatra and they're like but you do ruby i'm like yeah i do ruby
00:07:04.160 um but uh but all my experience was through build automation and then i found out
00:07:10.080 you just you get like the pure ruby experience because um yeah you just write functions and
00:07:16.880 suddenly those functions you can leverage in a production environment to like query what the system looks like and the automation
00:07:23.280 stories were just so beautiful and then you start getting into the other intricacies of the
00:07:28.400 language and then comparing and then me comparing it back to c sharp i'm going
00:07:33.840 why am i writing so much why why am i putting myself through so much pain with with a spoiler plate so much boilerplate
00:07:41.599 uh so much the whole aspect of essence versus ceremony so much ceremony and um at that point i had like uh over
00:07:49.440 a three year period in 2013 i had such a such a crisis of like identity that i actually quit my job and
00:07:55.440 went on a sabbatical and i just said i want a sabbatical i'm going to do something
00:08:00.720 to just disconnect from the corporate corporate uh corporate america the corporate world building like tax
00:08:05.840 software and c sharp and all that fantastic stuff and i was like i'm just going to do my own thing
00:08:10.960 and then um that's when i found a dark room is a web-based game built by michael townsend and i called
00:08:18.080 them uh i uh emailed them and said hey i want to i'm going to build this thing for as a mobile app and if we make any
00:08:25.360 money we'll split the profit um so i uh picked up a uh
00:08:30.479 a framework called ruby motion and a ruby motion is a ruby runtime um built by lauren
00:08:37.200 it was it was actually built by apple and then lauren sanzonetti took quit apple and
00:08:44.560 actually extended extended that run time to from mac ruby into ruby motion and you
00:08:50.480 could build native ios applications using using ruby and uh i was like okay i'm
00:08:56.080 going to do that and checks all the boxes yeah i learned
00:09:01.600 ruby and mobile dab again not rails and ended up building uh porting a dark
00:09:08.320 room uh to to mobile and then adding my own uh intricacies and pacing and storyline
00:09:13.360 and my own touch to the game and then out of nowhere four months later it
00:09:18.480 it goes viral um you end up getting 20 000 downloads a day uh you don't
00:09:25.040 you're not prepared to see 20 200 grand show up in your bank account every day
00:09:32.399 it's it's it's i didn't sleep for a month i mean it was in the number one spot for
00:09:37.440 for about 23 days and uh that kind of kick-started my uh my world as an indie game dev and
00:09:44.160 then uh became good friends with lauren sanzani and in 2016 uh laurence laurent was ready to
00:09:51.600 retire uh with his successes and i acquired uh the platform and then i was like okay we
00:09:58.399 can do ios and android but can we extend this to everything to desktop to console to web to
00:10:06.320 the rest of the world and um 29 2019 is uh when when that reality came
00:10:13.519 to came to fruition so a whole lot of luck um i have complete crapshoot
00:10:20.720 complete uh like uh lottery ticket winner kind of thing but um i'm trying to i'm trying to build
00:10:27.040 upon you know build upon some of those uh some of those uh strokes of luck and
00:10:32.720 i try to keep things going and i just love the language it's really nice yeah what's uh oh sorry go ahead joe
00:10:40.000 no please i was just gonna ask is was game development something that was always in the back of your mind or was
00:10:46.240 it kind of just trying to go on like the very opposite of the spectrum of what your previous
00:10:52.160 work was like yeah i think i think uh that's it's a common story they hear with
00:10:58.240 with programmers is a a lot of people want to get into programming because of game devs they want to build a game you know they see
00:11:03.920 they see a game being shown they're like okay i could totally do this and then they find this a little bit harder than they thought it was
00:11:10.720 originally but um you know i've always done like game jams and and like little little hackathons here
00:11:17.120 and there and um i did i've i love games i'm a gamer at heart um
00:11:22.880 i have every all the consoles all the games that you know and uh just a typical like millennial kind
00:11:29.920 of uh kind of upbringing and uh i mean that's the dream right i get to i get to code games
00:11:37.600 and the great thing about it is that uh it's it's not tax software
00:11:45.200 the key component to it all yeah there's a lot of freedom there too yeah it's it's not tax software it's a
00:11:51.440 it's the stuff of dreams right you can you can decide you know the world you want to create and it's
00:11:57.360 it goes well with the language itself i see i see like statically typed languages it's kind of um if you think of it like as an artist
00:12:04.800 a static type language like working with marble and you know you chip away at something and then you break part of you you break
00:12:10.800 part of your sculpture and suddenly you know it's it's difficult you can do good great things with it but it's
00:12:16.800 so so challenging and ruby is more like working with oil paints or charcoal you
00:12:22.160 can you can kind of explore you can kind of create like very very quick uh sketches
00:12:28.639 of what you want to build and then evolve without ever having to you know take
00:12:34.480 take the full plunge into making a full-blown class i could use i could do a bear function i can you know have a module or it could just be a
00:12:40.959 data structure with hashes and there's no there's there's no like requirement from
00:12:46.160 the language saying that you must tell me what this thing is before you write it out and for tax software i
00:12:52.639 guess it works because it's well defined but for a game see i don't know what i'm building i'm building this player that can you
00:12:59.680 know do a backflip and then time travel like maybe
00:13:06.800 ruby gives you that that feeling of you know you can you can decide uh as you go and as you prototype
00:13:12.480 something it's a it's a it had a really good feeling with with games and stuff yeah game dev i mean i don't want to
00:13:19.120 write text software no yeah on my sabbatical we have some comments from the chat it's uh
00:13:25.440 mike is off i think i can't hear you mine can you guys hear me shake shake uh i can hear you danny oh
00:13:31.920 can you hear me yeah yeah i can't hear you either i think my headphones are broken oh amir can't hear us that's great
00:13:40.399 that's great machine let me let me try using my mac speakers
00:13:48.399 can you hear me now i'm going to talk a little bit so like danny i actually i'm going to rejoin the call and i'll be right back
00:13:55.360 and here are some questions about like the different runtimes because i think normally when we think about languages
00:14:01.360 we think about them in terms of like the language and the runtime paired together and they're only operating together but there's actually
00:14:07.120 a lot of different run times for ruby including the ones that like groovy and stuff like that where it's like it runs on a
00:14:13.279 java runtime and things like that and i want to ask about the differences between like
00:14:18.880 building that for switch and other things because a language is a specification in addition to like it's run time yeah
00:14:25.199 yeah absolutely definitely there we go amir
00:14:30.720 for a second of just me into different squares i'm going to preferences i'm going to audio test speakers
00:14:39.600 i can hear you now yay technology
00:14:44.720 question this is why i build video games
00:14:56.160 i can't get sued for suit for video games like no no lives or paychecks runs are at risk
00:15:03.519 okay that's fair that's fair i guess unless you're uh cyberpunk you can get unless you're
00:15:09.680 cyberpunk yeah none of those came through though did they
00:15:15.440 i don't know i just heard the suit yeah no i think they just i don't know people were angry people
00:15:22.320 were angry yes i wanted to ask about like the combination of a language specification
00:15:27.760 and a run time because i think normally when we think about languages we think about them as pair right like ruby is a thing and it runs
00:15:34.639 but in your case you're actually like you're running it on a different run time like kind of like this
00:15:40.000 right yeah so the the tricky part is that you'll always hear this like ruby is
00:15:46.160 slow and i'm like a language can't be slow a language is a language spec
00:15:51.600 which ruby are you talking about are you talking about j ruby are you talking about mri are you talking about truffle artichoke
00:15:58.240 dragon ruby uh which ruby are you talking about and that that separation is is important
00:16:06.079 because you've got your language specification and then the implementation of the language um i like uh specific can can you all like
00:16:12.880 show videos or anything i can i can give you a little link real quick yeah you can
00:16:17.920 um i'll post a youtube link somewhere and and i guess the zoom chat and if you can uh correlate it over i guess
00:16:23.920 yeah um so just like a simple example um i always always pick on this youtube
00:16:30.800 video i'm sorry how long is this youtube video it's it's very short it's just a
00:16:36.000 demonstration okay and uh what it is is um it's a demonstration
00:16:41.519 uh because i'll always hear while ruby is slow and i go well what do you mean ruby still reveals
00:16:46.800 language is that well c sharp's definitely faster a lot of the a lot of the depths that i work with especially in the game
00:16:53.199 game development world use unity in c sharp that's a that's a big player in the game industry and i go
00:16:59.680 well yes c sharp is a language and unity is the runtime and unity's implementation of c sharp is
00:17:07.199 slower than slower than dragon rookie um so what the youtube video shows is that if you like scroll to
00:17:12.240 towards the very end i show rendering of sprites on the screen and uh with a with dragon ruby i'm
00:17:18.799 rendering 20 000 sprites at 60 frames per second uh with unity's c sharp runtime c sharp
00:17:24.480 language specification unity runtime it can't do that and so you know it comes down to is like well
00:17:31.440 that that separation is really important and um right now the the challenge is that the
00:17:36.720 only big player in in the ruby world is mri ruby or c ruby right and so uh there's there's very little
00:17:44.799 separation between between the language and the runtime they become one and the same and so uh
00:17:51.039 educating people and letting the knows like well there's a runtime implementation and then there's the language spec
00:17:57.600 so dragon ruby uses a a language spec
00:18:03.840 for ruby it's based off of the m ruby uh par structure of the language
00:18:10.080 and um its runtime is isn't it's not c ruby it's not m ruby it's not
00:18:15.679 jruby or anything it's a it's a run runtime customized to work on mobile web console
00:18:23.280 desktop pc mac linux um and there are a lot of things that we changed inside the standard lib inside
00:18:29.679 of uh the the core libraries as a whole that define what this what this runtime
00:18:35.919 is and so um educating people around that is has been you know it's it's a it's something that
00:18:42.799 is uh people just haven't you know been exposed to it so um
00:18:47.919 so yeah that's the general aspect of what's the difference between a language and runtime
00:18:54.480 for those of us who have never had the pleasure of like creating our own runtime um can you talk a little bit about some of the technical challenges
00:19:00.720 that you face there sorry this is just really interesting for me because i don't need a lot of people who've done this before think about it think
00:19:09.039 about it so it's kind of it's kind of like uh repeating history in the in regard to
00:19:15.440 you know matsumoto had to do this and now uh i'm being put in a position
00:19:20.799 where it's like okay i gotta do this but for chipset architectures that
00:19:27.280 were never were never uh meant to be targeted so like an example of creating the
00:19:32.720 runtime um one of the challenges with creating a runtime is that you have to go with c
00:19:38.080 um and um an example would be like if you look at just cloning cloning c ruby and trying
00:19:45.440 to get it to compile is is a question it's like okay well i can get it to compile fantastic
00:19:51.039 now how do i change one of the core libraries how do i change uh file because uh because file and dir
00:19:59.200 are are uh os level specific things they're not written in
00:20:04.240 ruby they weren't in straight c so then that's when aspect was like okay well
00:20:10.080 uh i have to get i have to make file apis and dragon ruby work across across
00:20:18.480 operating systems that don't even have a concept of the file system like there's cons consoles don't give you ls or durstat or
00:20:25.440 some of these like standard library c libraries that you get so you're rewriting some of these like core aspects to it
00:20:31.120 and then additionally with regards to run time you have to start thinking about what does this run time look like
00:20:37.679 so uh with regards to with regards to uh ruby ruby's runtime and its threading
00:20:43.440 model is is uh you execute a script and it invokes invokes the ruby script and then
00:20:49.440 you could potentially have some container that keeps the application alive and then the threading model is you
00:20:56.080 using thread right you use thread.do and then provide your indication there but dragon ruby's
00:21:02.159 different in that uh the execution model is actually an event loop it i i i took uh ideas from other languages
00:21:09.360 and lessons learned from other languages so uh node.js has this concept of invalid loop
00:21:14.400 and i was like okay yeah i think dragon ruby is going to have this so when you run a script in dragon ruby
00:21:20.320 this the the script runs in an event loop so if you do puts hello world it will put at 60 at 60 hertz
00:21:28.799 and you're just like this this is weird like what is going on here but um it's
00:21:35.600 because of the event loop and the thing the thing with dragon ruby is that because of this event loop similar with node.js is that you have
00:21:42.799 you now have the ability to uh to rethink how asynchronicity
00:21:48.480 occurs so in dragon ruby when you make an http request it's async and what happens is that you invoke the
00:21:54.880 request you get this object back that has a status of whether it's completed or not so there's no callback
00:22:01.039 or there's no promise there's no callback there's nothing like that and the beauty of that is because you know that this thing is going to come
00:22:06.880 re-enter into this top-level message prompt so you come in and then you can check the status to see if the http request is
00:22:12.320 completed and then perform some action based on that so uh those are different that's another aspect of a runtime that
00:22:18.480 you can think that you have to think about is that what's the execution model what's the async model so uh dragon ruby
00:22:24.400 doesn't really have threads it's it's all through this single synchronization context and you use polling um to to determine
00:22:32.159 if you know uh a job or a specific task is completed or not and that's because you're solving a
00:22:37.679 different problem right one of the things that i've noticed about game design is typically like you have the concept of like this
00:22:43.039 massive wow loop that everything else runs inside and ruby was really like at its roots
00:22:49.280 it's a scripting language right and rails went and they took it and they were like we're going to use this to make like classes and all of these structures and all of
00:22:55.280 these objects and you're going to call on these and call methods from them and i'm going to build this domain specific language but from game design
00:23:01.280 you have a completely different approach to problem solving than either scripting link then just like a pure i'm going gonna
00:23:07.039 start at the top and run to the bottom script or like a web framework like i often see um
00:23:12.240 a heavy focus on like attributes and tracking like the users
00:23:18.640 this is maybe a little bit impacted by the fact that i like relationship games and stuff like that and they'll typically track like your influence with
00:23:25.200 the character through different events but like that's what i kind of see when i hear game
00:23:31.120 designers talk about their work yep and the other the other aspect of it is that this is um these are this runtime has has an
00:23:39.679 aspect of it being a long-running process so while while in rails you have a your
00:23:44.720 controls are ephemeral right they get created they invoke the action then they're torn down to be you know to be reinitialized
00:23:50.960 that's why your state management is either done through cookies or like redis or you know some kind of non-volatile
00:23:56.880 storage but when it comes to yeah when it comes to game dev and big client applications you
00:24:02.480 have a lot you have long running states so you you can just set a property and it's there and it lives
00:24:09.200 and it's like what do you mean it's just there it's like yeah it stays around it's great for the whole game session and then it
00:24:15.679 gets saved to a file yeah and it's great and so um those aspects are in there and
00:24:21.039 the really interesting thing and some of the premise around dragon ruby and it's worth mentioning is that um
00:24:27.840 dragon ruby is is a it's a zero dependency
00:24:32.880 cross platform runtime you download the zip file you double click the exe that's it you don't
00:24:38.559 need to have mri installed you don't even have any the installation process is x copy
00:24:44.880 deployable so the beauty of that is that your you know your dependency chain to get started is
00:24:50.240 is nothing and imagine like taking a dragon ruby script and a dragon run time and then putting
00:24:57.039 on like an ec2 instance so you're not having to provision anything you just you just copy the zip file over unzip it
00:25:05.039 and then that's it there's there's no there's no apt-get there's no brew
00:25:10.960 install there's no compilation it's just uh self-contained just okay
00:25:16.400 yeah i would love to know more about why you decided to implement it that way but i have been struggling with docker for
00:25:21.440 the past two months on various solutions and i'm just like that sounds amazing
00:25:26.720 yes and the the the driver was actually compiled it's an it becomes a windows exe a mac
00:25:33.600 app a linux binary or an ios app so when you say you know run this run this
00:25:39.520 game you double click you know you just double click and it starts up the environment and you've got a game
00:25:44.640 right there so um so yeah those are those are the kind of uh considerations
00:25:50.320 and that's the beauty because that's not only about game development it's it's a it's a it's taking all the things
00:25:56.799 that we've learned about ruby over the past 25 years and all the things that all the other languages have done well and
00:26:03.520 a drag room is an opportunity to say we don't have we don't have a responsibility to maintain compatibility because it's a new runtime
00:26:10.080 this is a new environment let's break things let's re-envision ruby how we want it to look like and uh see
00:26:17.760 what that looks like and so um here we are i mean you've got an environment that
00:26:24.720 doesn't require an installer and uh is x copy deployed and um can work on
00:26:31.440 anything even even the web uh if you go to like fiddle.dragonruby.org that is the runtime the dragon ruby
00:26:38.960 runtime in a browser and you can change we got an editor where you can change code and then see
00:26:45.360 it update live in the browser and everything's hot loaded too so it's just uh it's pilot that uh you know it's good
00:26:53.120 that we have uh drag movie has the opportunity to say you know we don't worry about breaking because no one's built any apps except
00:26:59.840 for uh the people that have been using uh the run time for you know for mobile and android development and we can uh
00:27:06.480 we can push the language forward in a different way i'm seeing a lot of comments saying like
00:27:12.799 dragon ruby is sounding amazing and then people are like uh because it is it's it's fun yeah
00:27:18.399 freaking awesome uh question here like uh what versions
00:27:24.000 of the language does it follow so you mentioned in ruby before i think this is probably related to some of the changes we're seeing in ruby
00:27:30.480 three that's at least the question i i've been like avoiding asking right so um we're we're targeting uh the iso
00:27:37.679 the iso standard for uh i think like 1.8 compatibility so if you go to if you look at m ruby
00:27:44.320 they have like about m ruby and the reason i reference them ruby is that that's that's kind of like our
00:27:49.760 polyfill at the top level of runtime and i can go into detail about some of the techniques that we use to support all these other languages please
00:27:56.559 and and so we we start with mrb and m ruby's intention is to have um an iso
00:28:03.279 compatible ruby i think it's like 1.8 compatibility so what that means is that
00:28:08.399 um we don't have the 3.0 language features and so and this is a good this is a good
00:28:15.440 uh separation it's like we're we're finally talking about what is the language spec versus what is the wrong time
00:28:21.440 so right now we don't have compatibility with uh ruby's um ruby's language spec as it exists today
00:28:28.000 um and a part of that is by design because the evolution of ruby 3.0 is
00:28:36.240 um is informed by not breaking not breaking his existing applications
00:28:43.039 for dragon ruby we have a bit more liberty about you know what that looks like uh so like
00:28:48.880 i'm gonna just post a sample uh just a quick thing in chat so you've got like if you've got an object uh
00:28:54.880 you have to use instance variable git right instance variable get and then you give it a
00:29:01.279 property like name right but in dragon ruby i can explore doing this
00:29:08.799 and this is actually stolen from a stolen from crystal um i can do that
00:29:18.320 i'm dropping it in the twitch chat here and so the thing is is that you have
00:29:24.159 this you have this subset compatibility that you want to target but i don't want to be
00:29:29.440 constrained by that and i also don't want to be seen as
00:29:34.480 like a like a follower or just a tale of mri because that's not the intention
00:29:40.320 of this the intention of this is to have a renaissance and a revitalization
00:29:45.600 of of ruby and what learning all the things that we've learned before right so object.name and then if you
00:29:53.279 wanted to get a method pointer in ruby the challenge there is that because parentheses are optional we have
00:29:58.880 to call the additional like dot method aspect to it right but
00:30:04.080 uh with this with this with this uh additional language access maybe this becomes a method pointer
00:30:15.039 and then and from a language spec this is not compatible with with c ruby right no um and that's okay
00:30:23.919 people have questions like wait hold on what sort of documentation issues does
00:30:30.240 this start to raise because you have your own independent spec so instead of saying like oh you can go look at the rubydocs in order to see how this
00:30:36.559 works you're maintaining your own language spec as well correct yeah it's not fun
00:30:46.000 you're like that's a that's a it is a that is a problem um so we
00:30:51.600 generally try to stay compatible um a lot of the a lot of the questions that come around language compatibility
00:30:58.080 is is well i want to use an mri gem and i want to leverage an mri gym and i've struggled with this
00:31:05.519 because there are times where i'm like show me the mri gem you want to use they'll say no good gear it's like well we've got xml built in that's in our
00:31:12.080 core lib like think about all the things that nokia offers what's really the only thing that you use out of nokogiri
00:31:18.159 it's like and do you want to actually try to i'll be lucky if i can do a gem install nokia and not have it fail the
00:31:24.240 first time uh using using native compilation so we're just we thought it was like well we're just going to build some of the
00:31:30.320 nokia gear capabilities then so you don't have to use the nokia gem um there are other the other challenges
00:31:35.760 is that when i'm looking at ruby in the future of the language uh the gems and the world of gems is a
00:31:42.559 walled garden we've got beautiful gems but the uh the bus factor as far as
00:31:48.559 supporting and open source and all that is uh given the general populace of what's out there it's just a smaller it's a
00:31:54.799 smaller group of people so with dragon ruby our uh our mode our recommendation is to look at
00:32:02.960 look at other libraries and the other libraries that we wanted to look at are c libraries and so you want you want something that
00:32:09.600 parses json uh or yaml don't look at the yamagen look at libyamod that was written for c
00:32:16.640 because everything uses that and then we have we have a integrations with c extensions that
00:32:21.760 allows you to basically point to a header file and say create a ruby object that i can use to
00:32:26.960 invoke these c libraries so now if you think about if you take the number of gems you lose from mri
00:32:33.679 that's a lot but if you replace that by the number of c libraries that you have access to now
00:32:40.640 in a trivial fashion i i think that's a that's a decision that's worth making
00:32:50.000 right so you can try that you asked about my magic yeah so i mean you can you can like an
00:32:56.159 example say we don't have vector in a dragon ruby um and the reason we don't have the vector type in dragon
00:33:01.519 movie is because there's a c type cindy which is the fundamental vector type that
00:33:07.519 that the entire world of matrix multiplication is uh computed around use use the matrix
00:33:14.320 libraries that exist in c because they are going to be more widely supported they're going to be more widely
00:33:20.159 maintained they're going to have more github stars they're going to have that that uh precedence that
00:33:26.880 no rubygem is going to have so that's kind of how we uh how we uh think about you know the
00:33:33.760 compatibility issues but it's a hard problem yeah we've got dark docksidedragonruby.org and
00:33:38.799 um come to the discord there's a lot of people that'll help you we've got 60 somewhat samples inside of
00:33:44.799 the download so you can look at a lot of sample apps and
00:33:56.320 ruby it's a heart problem my desk i lose sleep at night dealing with this
00:34:01.519 problem yeah when you said i didn't i didn't sleep for a couple days once the dark room
00:34:06.559 launched it seems like you still don't sleep is that what you're saying yeah i tell everyone in the discord that i occasionally psych fault so
00:34:13.440 i'll i'll be like it's like everyone says i'm here do you even sleep and then i'm gone for like a week
00:34:19.119 trying to recharge and then when i come back so i'm just i'm just a computer program that occasionally psych
00:34:24.639 faults i don't sleep uh sun fox42 has a question how much of
00:34:31.119 your time is spent on dragon ruby versus making video games uh so the good news is that um it's
00:34:38.639 it i got kind of going cycles so game dev is a feast and famine kind of thing so you build a game you have all the
00:34:45.040 pre-production aspects of it you release and then um you think of your next idea
00:34:50.800 so during the thinking of the next idea i'm working on i'm working on dragon ruby stuff and uh
00:34:56.560 for me the the whole aspect of like i have six properties now so i have to think about
00:35:01.920 sustainability as a as like an indie developer as like a micro company or a small company
00:35:07.280 um i don't want to hire people in that in that because they're not going to be invested like like i would be
00:35:14.400 in the things that i build so how do you how do self-starters or bootstrappers maintain
00:35:22.240 the velocity that they originally had when they have six properties up there and the answer is that you end up
00:35:27.359 building a runtime in a language so you can you can continue to go fast and so um
00:35:34.000 half my time is built is done uh doing video games and half my time is dragging ruby so i guess it's like 50 50
00:35:41.359 but everything that i have to dragon ruby is is something that i'll be able to take advantage of when i'm going back to my
00:35:48.480 to my game dev aspect of it so um it varies uh beginning of the year is mostly game
00:35:54.079 dev end of the year is mostly dragon ruby that is there a reason for that or it just kind of falls
00:36:00.000 in that light or way no it's because of apple christmas it's because all the new devices and chips and m1 processors and silicon and
00:36:07.040 new consoles that come out we have to support them so if you think about like the ps5 coming out there there's another
00:36:13.359 like chipset architecture that's there um there's another compilation stream there's there's all the sdks sdks that we have
00:36:20.720 to make sure we have compatibility for we got to make sure our file access on this new proprietary
00:36:26.000 os actually works so we we have to we have to go in those cycles when when new
00:36:32.000 hardware and chips come out we're more on the dragon ruby side and then the beginning of the year everyone's you know kind of like
00:36:37.920 relaxing now are you able to tell us what you're currently working on is there is a dark room two coming out
00:36:44.800 or well i'm i'm porting a lot of my uh a lot of my mobile assets to to the nintendo switch
00:36:50.560 so i'm working on those things um i have a couple games in pre-production which you can like see on my itch page and
00:36:57.040 uh those those properties are kind of uh you can kind of think of it as like demo tapes for like singers and stuff like so
00:37:03.599 these are pre-production aspects of it they're artifacts from game jams so i use game gems to kind of like vet ideas
00:37:09.680 so if i do a game jam and i find that the the ring or you know my rank in the
00:37:15.440 in the game was really high and i got good feedback that's the candidate for something that i would turn into like you know a real
00:37:21.119 something that can be monetized um but if it wasn't a good idea then i'm just like okay well then you know we'll reiterate and try it in
00:37:27.359 another game jam is it it's io that's a great way to feel faster yeah amir rajan.itch.io
00:37:34.560 wait what is itch what is it so itch is uh itch is a competitor to steam
00:37:41.680 um and uh itch is centered around uh i guess sustainable sustainable
00:37:49.119 monetization i guess um it allows indies to uh publish their games there and you can
00:37:55.520 decide how much royalty you want to give it based on based on your stuff and it it's more of a collaboration between
00:38:02.240 you know the company itch and the indies themselves and
00:38:07.760 that's that's where i host a lot of my uh a lot of my little things there's a couple of
00:38:15.119 questions in chat uh your bird crab wants to know if you're off your 10-day break i am off my 10-day break but i'm working
00:38:23.119 on the next release of uh of uh dragon ruby so with the next release we're actually we actually have
00:38:28.960 an embedded web server so and again this is zero dependency so you
00:38:34.960 started dragging ruby and you can you this event loop that
00:38:40.320 exists can uh has a has a property in there that says are there any http requests so
00:38:46.079 then you can actually process these super requests write something to the pipe and then have a http response and again
00:38:53.920 this isn't this is you don't need a web server you don't need apache nginx
00:38:59.119 brick web break unicorn or any of that you just start up the thing and you have a web server
00:39:04.880 in-house running on inside of the process itself so because you've like built that in
00:39:11.280 yeah yeah we built it in um and it's because of that event loop that we have because of our async model we can uh
00:39:18.000 your response it's not a production level uh web server but when you're doing like a local
00:39:23.440 multiplayer game where you want to do peer-to-peer on a you know on your like local lan it's perfect you've got a you've got
00:39:30.000 your server that acts as a client and you've got eight people connected to it that can play a multi-player game locally it's you know it's a really uh
00:39:36.480 interesting uh approach to them so that's what i'll be yes i'm off my 10-day break but i'm
00:39:42.400 working on uh that big release fuzzy drumming wants to know if one of
00:39:48.720 the games you're working on is the stickman drawing posted on discord uh apparently that had a very
00:39:54.640 compelling storyline can you tell us a little bit about the stickman game yes so the stickman grain it's a um it's
00:40:00.640 a low res walking simulator um so a walking simulator that term
00:40:05.760 that coin was termed because of fire watcher the fire fire watch was a game oh firewatch oh my gosh i love that game
00:40:12.319 it's a beautiful game so that's that was coined that coined the term walking simulator so i created a low res version of that
00:40:19.760 in that um the game is rendered at 64 by 64 pixels that's it that's all the pixels i have access to
00:40:26.240 me and it's a story line based off of um basically haley's
00:40:31.920 comment or a comment hit uh hit the earth and killed off 99.9 percent of the
00:40:38.400 population and the only reason that earth didn't go extinct was because of mission serenity
00:40:43.440 which was a ship uh like a a spaceship and a team of people that deflected part of the comet from from
00:40:50.079 hitting the planet so everyone thought that they died but it turns out that they were just in stasis
00:40:55.920 for 20 years so you get contacted by them they were thinking they're going to come back in a year
00:41:01.119 but now it's 20 years later and they're like hey guys we're ready for re-entry and they don't
00:41:06.560 realize that it's been 20 years later so you're in this situation where you have to communicate to them
00:41:12.319 how do you communicate to them that you know what like moral implications exist for communicating to
00:41:17.920 them that you know this time has passed and also you're helping them trying to fix their ship to bring them back to earth
00:41:23.839 um so because they're on the ship they don't know that like 99 of the earth's population has been
00:41:29.119 destroyed yep and 20 years has passed so one of the ship members actually um
00:41:35.040 actually left uh left his wife who was who turned out to be pregnant with his child and now the child's 20 years old like
00:41:42.240 how do you break that do you break that news over you know how much do you tell them truthfully versus let them come back to
00:41:49.520 earth and then they're on earth they can find this in your discord huh and i could write this game into your
00:41:54.800 discord i would go look for it yeah it's called as i joined the discord right now
00:42:00.880 return it's called a return of uh serenity and it's on it's on the itch page
00:42:08.880 that sounds beautiful um picando and cadigo wants to know if you've checked out the pico eight
00:42:14.160 the pico eight i love pico i love pico eight um the challenge and one of the one of
00:42:20.960 the reasons why i built dragon movie was because of uh the value prop of pico 8 celeste
00:42:26.560 uh is a game i don't know if you all know about the last love celeste celeste was a was actually a game jam game written in
00:42:32.640 picoa so uh they the developers of the game saw that celeste had this uh
00:42:38.319 you know it was a viable product based on the results they got from the game jam and now they're in this situation where
00:42:44.240 they built out this prototype in pico8 but they can't take it to that finish line and get it on console and
00:42:50.560 mobile and web and steam and desktop because pico 8 isn't designed for that so what do they have to do they have to
00:42:57.280 throw out everything and then they rewrote it in unity and so for me i want people to be able to start in
00:43:03.599 dragon ruby prototype something quickly embed a prototype and then take that same runtime in that
00:43:10.880 same environment and take it all the way to the finish line um so i think picoad is a phenomenal prototyping tool
00:43:17.200 and uh it's it's a beautiful it's a beautiful constrained environment but i want i want to be able
00:43:24.720 to help indies and developers build sustainable income that doesn't require them to build tax offer
00:43:32.079 and uh that's important so are you opposed to tax software yeah
00:43:37.440 yeah down with that your next game is going to be how you destroy the tax software industry i swear man taxes you would think that
00:43:45.280 taxes are logical they're not they're not logical i was working on sales tax before i like
00:43:51.839 came over to um this current job with uh new relic and devrel and it was it was crazy because like you would have
00:43:57.920 different amounts based on the day because you'd have tax holidays it's like special jurisdictions like yeah and a
00:44:04.560 jurisdiction isn't hierarchical it's crazy you have you have your state
00:44:10.079 uh you have your state tax uh your federal state city and jurisdiction
00:44:15.119 can span cities and then you ask someone to deterministically tell you what the value like accountant determines to tell
00:44:21.760 you what your tax burden is if you're across two jurisdictions they're like it depends and i'm like what do you mean
00:44:28.000 it depends it depends on if you get audited or not
00:44:33.680 i'm like what does that mean i have nightmares i want to ask you
00:44:39.280 because we were talking about domain specific languages earlier and you were like i want this xml parser so i built it i
00:44:44.880 want this like web server so i built it i want to ask like what are some of the methods and like some of the domain
00:44:50.560 specific language that you built up around dragon ruby to have easy access to these things
00:44:56.560 so that's a good question so um i'm standing on the uh the shoulders of giants when it comes
00:45:02.160 to rendering all of our rendering is done through uh lib sd l2 um i don't know if you're familiar with lib
00:45:08.079 sdl uh uh it was it's a valve everything in valve
00:45:13.440 everything in steam um your your nintendo your your micro consoles you're like
00:45:18.960 those mini consoles that everyone puts out the entire world is powered by a steel
00:45:24.240 simple direct media layer and so when it came to rendering and we used lib sdo and we just
00:45:30.240 leveraged that uh when it comes to file access we use fizz fs which is a cross-platform file like
00:45:36.960 system when it came to http we use lib curl when it comes to
00:45:42.240 um there was there was a uh http and um yeah i mean we just
00:45:50.560 is there c library for this the answer is always yes uh for for like xml person we use we use
00:45:56.960 libxml for yaml or json we use you know like a json library a lightweight json parser
00:46:02.400 so uh standing on the shoulders of giants based on that and with regards to the dsl a lot of the dsl
00:46:09.280 is this single the single like environment variable that's sent into
00:46:14.720 your message into your event loop so when your event loop comes in you're given this
00:46:20.160 effectively a module or class and from there you can access all of these um os specific out of process level
00:46:26.880 communication stuff so our dsl is actually very data oriented so um very very few use of classes it's
00:46:34.160 all arrays arrays hashes uh tuples and var and serializable data structures and
00:46:40.880 so the simplicity of that saying like this thing except that accepts the hash with these properties
00:46:46.960 and if you don't provide them we don't worry about rendering it so if you want to render a sprite you you have this entry level object you
00:46:52.960 do outputs dot sprites and you give it a hash and the hash has x y with height and path wow and that's
00:46:59.520 our dsl and um and that's kind of how we did it
00:47:04.800 it's very very data oriented and everything is serializable persistable to disk
00:47:10.240 um the benefit of that is that when you have an exception i can dump that entire environment to your uh to your uh to your system
00:47:18.480 and you've got it available and you can see exactly what went wrong in a stack trace um
00:47:24.559 but that's that's how we approach the dsl that's really interesting because it
00:47:29.920 because when i think about it you talked about it being serializable i assume that also has to do with like saving the
00:47:35.119 environment yes because that's a big part of games it's like exceeding the player's current status and the decision tree that they
00:47:40.960 followed yep that was correct um the other interesting aspect of it is that this is something that we're
00:47:46.079 we're stealing from closure um again like learning from the languages that have done things right is that
00:47:51.599 we're working on a persisted hash and the persistent hash allows you to
00:47:57.359 um not only store the current serializable state of the hash but also historically everything that happened in
00:48:03.040 that hash so now when an exception occurs i
00:48:08.559 don't get the current state i get everything leading up to that exception so i can rewind the the point in time in
00:48:17.040 a game and watch it do the exception then rewind again
00:48:22.240 so um yeah how does this persistent hashtag huh
00:48:28.960 how does that balance out on the memory side of things so the the beautiful thing is that there was a white paper that was written
00:48:35.200 um in 20 20 2005 and then and then additionally
00:48:42.319 additionally updated around 2012 2015 and this
00:48:48.800 this data structure is in the internal the internal aspects of the data structure actually make it just as
00:48:55.839 performant we can store 14 million value key values and versions in this hash and
00:49:01.520 under like 20 megabytes of of data and there's a precedence already set git does this right git does this with
00:49:08.800 text and when you save a when you when you need a property you're not copying the entire file it's just a it's just a
00:49:15.359 it's just a local it's the local changes so we've effectively just done that but
00:49:20.640 for hashes wow that is really good that makes sense so you're not storing the entire hash
00:49:26.319 you're storing the changes that have occurred into it well that's nice fuzzy drumming just
00:49:32.000 goes um so like with your corporate
00:49:37.520 applications uh i'm sure you have to like record telemetry um did they go to this page did they go to that page
00:49:43.599 et cetera et cetera right you have your log statements and stuff like that well think about the persisted hash if
00:49:49.280 my entire app state is stored in the hash i can retroactively
00:49:55.599 get any metrics i need because i already have the entire history of how that app has
00:50:02.880 transformed over a period over a given session so there's no telemetry the telemetry is the actual
00:50:08.000 app state i just have to serialize that and send it to the server
00:50:15.680 you can see that you can also see that being a little hard to search
00:50:20.880 oh you can search get you do a good bicep and you visualize
00:50:26.880 the hash data structures at any point in time right so you you
00:50:32.559 you reset you reset your commit history all the way back to the beginning and then you just look at your commits
00:50:38.160 okay what are you this is my head exploding right now i'm just like you you just look at the source code right
00:50:43.839 you check out a commit and you look at the state and then you check out the next command and look at the state
00:50:50.319 wow right yeah i i think so i want to say yes but i don't even know
00:50:55.599 i don't even know if you're wrong
00:51:01.119 it would be just as good you know yeah and so multiplayer becomes interesting
00:51:06.960 too because now you don't have to run your uh a dedicated server that
00:51:12.800 that invokes the game logic because your multiplayer ends up being commoditized all you're doing is making sure the same
00:51:19.440 state makes it to all the clients in the right order that's it that's
00:51:26.640 that's so cool and you're just sending changes to all of them that's it
00:51:31.760 packet loss back loss can happen but because it's because the change history as far as the
00:51:37.520 serialization mechanism is um is effectively you can you can get a packet loss and
00:51:44.319 then when the next request comes in to push down history the client can say i need history from this point forward
00:51:50.559 because it never got it right and this is happening at 60 for for a
00:51:55.920 multiplayer game you're looking at 10 hertz so it's happening 10 times a second this is what lag is right
00:52:01.280 but at 10 times a second the packets that are lost you know do and do eventually end up
00:52:06.960 getting caught up the only the only other additional aspect to getting the centralized commoditized
00:52:12.160 multiplayer server is the idea of which happened first and there's another white
00:52:17.920 paper it's called lamport's uh logical clock algorithm and it's based off of distributed systems uh
00:52:25.040 where where he explains how you determine the the point in time where two
00:52:31.440 distributed systems created in action was a before or after at the same time so with the addition of
00:52:36.880 the logical clock in the game state you've got this you've got the mechanisms needed
00:52:42.000 for uh for your clients to resolve merge conflicts so if you think about a merged conflict
00:52:47.200 you've got two states that are different well we resolve merge conflicts in git all the time
00:52:52.319 in a game merge conflicts are well defined they're discrete in that you know that if you got a block by chun li and a
00:53:00.079 and a fireball coming in from ryu and they all both happen at the same time you can resolve that merge conflict
00:53:05.760 deterministically given given the context of your of your game logic
00:53:11.520 so it's effectively source control for a hash with merge conflict resolution being
00:53:17.119 done intelligently by each client and by doing that you don't need a server you have a commoditized instance
00:53:23.280 of the server i i just want to pivot real quick obviously with you breaking this down
00:53:29.359 it's still like so technical and it's like you're diving really deep into all these different concepts and you have to have
00:53:34.480 this deep understanding of so many things does it do your parents just think you
00:53:40.800 play video games and just my parents my parents uh uh do you know that the uh there was
00:53:48.480 that one like meme going around where uh they're in the you're like in a plane and there's someone having a heart
00:53:54.000 attack and then the parent looks over it's like oh you know you would have been able to help this person with a heart attack
00:53:59.440 yes yes yes i get that i connect with that on such a present level where like yeah so for me
00:54:06.559 uh it's oh you're game dev yeah my my dad is from iran and my mom
00:54:13.520 is from mexico and i'm like oh no when satya when sati became ceo
00:54:18.720 every every south asian male screamed at the top of their lungs because you know that every parent said why
00:54:25.599 aren't you the ceo why don't you ceo why aren't you're not you're you're not you're not a doctor you're not a doctor why aren't you yeah
00:54:33.599 it is so yeah when i when i just got when i went to code
00:54:38.640 school last year and now when i got this job my the first thing my dad goes me will your business card
00:54:43.839 say engineer on it i'm like yeah and he goes okay my son my son the engineer
00:54:50.000 i have to show you my business card
00:54:57.760 cause it's gonna make you laugh all right what does it say
00:55:05.040 try pulling it oh the code right may or may not work
00:55:12.000 the code i write may or may not work that is what my business card says
00:55:17.200 that is so funny i like it a lot that's fun my dad continually refers to what i do as my podcast
00:55:27.920 my mom this is the funniest thing i have my parents over and i'm like oh yeah i'm running it okay so i had a bunch of ghosts in my yard don't ask me why i had
00:55:34.240 three guys in my yard it's a long story anyway so my parents are over to come visit the goats and i've got a stream running so i can show chat all the goats
00:55:40.319 and everything right and i'm like yeah i'm running a stream right now so like i'm just gonna say be right back to them and then i'll come
00:55:45.599 hang out with y'all and have lunch so i'm going and i'm having lunch and i was like oh what are you doing and i'm like i'm streaming it on twitch and
00:55:50.960 she's like i have a twitch subscription and i'm like you have a twitch subscription and she's like yeah i get
00:55:56.000 it for free with amazon and i'm like oh do you like watch things on twitch
00:56:01.440 and she's like no i don't do very often but i have the subscription if i want to and i'm like oh oh she's thinking of the
00:56:08.240 twitch prime subscription and she thinks that's the exact same thing as like a subscription to netflix that gets her
00:56:19.680 but like i just want to say like my mom was technical enough to be like i know that i've got a twitch
00:56:24.799 subscription from amazon and like savvy enough to know that she had the deal yeah she's like i'm i'm up with the
00:56:31.280 times no big deal so like another another aspect uh to
00:56:36.799 that question that thread is really important to me is this idea of um
00:56:42.319 of art and creative creative careers and you know society
00:56:49.040 i'm lucky that i love coding and i'm lucky that society saw coding as productive enough to where
00:56:56.240 they where i could be gainfully employed um and you know as historically societally if
00:57:02.720 someone said i wanted to be a magician their parents would say
00:57:07.760 don't do it you're crazy you'll never make the money doing it but if you think about it every second
00:57:14.480 of our leisure time is used consuming art books
00:57:20.160 music um plays uh videos games
00:57:26.640 we spend every second of of of what we consider free time consuming
00:57:32.720 the thing that we're discouraging our the next generation to to uh
00:57:38.720 to pursue and it's just so it's so it's so backwards you know what it makes me
00:57:44.640 think of my anger towards capitalism we're going to get
00:57:49.680 no so if we need to cut this we can cut this but like here's what i kind of think about it as
00:57:55.280 human beings we want to express ourselves and art is the way that we express ourselves it's innate
00:58:00.720 we have a passion a drive that's why in our our off time i'm trying to learn the ukulele and
00:58:06.000 failing it's why i live streamed before i was paid for it it's why people take sabbaticals is so they can go
00:58:12.319 create things because we enjoy that we enjoy creating and expressing it and because we enjoy doing that and
00:58:18.720 we're willing to do it for free people are like well if you enjoy doing it and doing it for free then i won't
00:58:24.400 pay you very much for doing it right right and that's where
00:58:30.400 that's where like the taking advantage happens right like the reason we pay people to do things is to get
00:58:36.160 them to do things that they don't want to do yeah no and i and it's it's
00:58:43.200 it's um it sucks and like one of the aspects of uh why you know i took all the effort of
00:58:50.880 creating this engine in this community is to is to uh help people
00:58:58.160 bootstrap even the smallest thing it's like you're not gonna make a million dollars the first day
00:59:03.200 but if you can make 50 a month on this thing that took you a little bit of time to create you have your internet
00:59:09.280 connection paid for you for the rest of your life like and it's these likes and
00:59:14.559 the thing is is that we have developers have the power we have uh the we we are the liter
00:59:21.440 uh i kind of think of it as a literacy back in the day when when literacy wasn't prevalent those that
00:59:26.720 could read and write were in the upper echelon right
00:59:32.640 when it comes to when it comes to development we have the literacy of this day and age
00:59:38.559 it's why the top companies you know in the united states are run by people that can code
00:59:44.480 is because they have that level of literacy that they can uh they can leverage and um we just got
00:59:50.799 to take advantage of it and i'm actually not against open source but the way i run dragon ruby is that it's
00:59:56.559 i call it greysource actually one of the discord members thought of this idea and it's called grey source and that parts of it are
01:00:02.240 open source parts of it are proprietary and uh we have no free version of dragon ruby you pay
01:00:08.319 if you're gainfully employed you are going to pay for this product um but we have stipulations that say if you make under 2 000 2000 a month you'll
01:00:15.200 get it for free if you're a teacher you get it for free if you're under 18 you get it for free if you're a parent that wants to teach their kid
01:00:21.280 how to code you get it for free but if you are gainfully employed you are paying for this
01:00:26.960 and if you are again if you want the pro features like the you know embedded web server or like the c extensions
01:00:32.640 you're going to pay for it i mean we're the top five percent earners in the entire world you're paying for this
01:00:38.160 you're you're paying for this thing and um it's it was a lot for people to uh you
01:00:43.599 know kind of come to grasp for and they say well these other things are free and open source is free and i tell them
01:00:49.119 it's not sustainable people burn out you know you've got open source maintainers that are barely making
01:00:54.319 anything off of their like sponsorships and um you know they're required to deal with
01:01:00.319 all these demands and i'm not doing that right and i wouldn't want you to do that i think there's some connection there
01:01:05.520 between like being a creative person and knowing your like value and how much work you put in to
01:01:11.440 put into something it's like how many times did i've been asked like the things that you two have said it's
01:01:16.720 like hits my soul because it's like i've been doing like theater productions and stand-up comedy for so long for like
01:01:22.079 free just because i love it and now that i can get paid to like do comedy or things
01:01:28.079 like that it's just now i understand my value and how much time and effort i put into it so it's like of course i'm gonna
01:01:33.839 tell people like no i want to be paid for this because yeah you know how many hours i might be only
01:01:39.040 performing for five minutes 10 minutes 15 minutes but the amount of hours and work
01:01:44.400 that has gone to this point where i could like for dragon ruby to be here and be presentable and to have
01:01:51.359 you know to even have the standard and professional versions it's like how many hours it took to get there yeah
01:01:57.359 and uh it's tricky with software devs because we expect those things for free we're like oh there's all this open
01:02:02.559 source and there's all this other stuff and um it's not sustainable and the other the other interesting aspect is
01:02:08.400 like you're using this to potentially build a product to sell and even if you're not even if it's just
01:02:15.280 a hobby like i think our subscription right now uh is like 40 bucks a year like 42 dollars a year
01:02:23.039 um i mean i've spent more on drawing material like drawing materials every year and i'm not
01:02:29.599 even that i'm not even that good i don't do it professionally it's just a hobby door dash alone last night was
01:02:42.079 it's not like a professional thing it's like i mean we spend money on hobbies all the time like i've got i've got soldering irons and stuff for
01:02:48.799 keyboards that i've spent you know i don't even talk about how much i spend on keyboards it's not a professional thing i don't
01:02:54.720 sell them but it's a hobby that i spent money on and so it's okay to spend money on hobbies
01:02:59.920 um but uh but yeah it's it's it's a difficult conversation to have and um the the premise is usually is
01:03:08.400 like you're this is this is our idea this division this is
01:03:14.079 why you're paying and it as that buried in he's like if you don't agree with this stuff then then you know
01:03:21.280 don't don't pay we don't want you part of this community because there's this idea that you know putting
01:03:27.520 that gate is important it's important especially for an early
01:03:32.960 product having that foundation yeah absolutely i think i don't know
01:03:39.280 this is really cool i i i just started messing with unity and i have a stream tonight
01:03:45.200 and i'm hanging out with a friend of mine who's a game developer and i just decided to do unity because that
01:03:52.400 was the only thing i knew of like this opens up so many worlds like so many things in my mind as having a ruby background
01:03:59.520 and i never even heard about this so yeah this is really cool you're gonna uh
01:04:05.359 whatever game you're building we have a sample up for it well i don't know i was uh moving a just
01:04:12.480 a pre-rendered person across the screen last week so that's pretty we we have a we have a sample we have
01:04:18.640 the sample app that shows you how to move a person animate the sprites and then slash a sword to break to break a square
01:04:24.559 oh should i just change the stream tonight to dragon root okay all right play around with it yeah yeah play
01:04:31.039 around with the man you go to fiddle.dragonbury.org we actually have um a tutorial that shows you how to make
01:04:36.319 a shooter and you can just like follow the steps live and code it and uh see uh
01:04:42.640 build a shooter like in in uh in the in the browser what is that site again
01:04:52.839 fiddle.dragonruby.org so there's a so one of the sample apps i built was a
01:04:58.160 uh was like the 3d uh traveling through space or space at light speed and it shows the
01:05:05.280 progression of how i was able to make that if you like hit next all the way to the end you can see
01:05:10.480 what the final scene looks like and you can see how i how i built that
01:05:15.920 but it's a live environment that you can that you can manipulate code in and then the tutorials will walk you through the basic apis
01:05:21.440 oh what this is wild this is the ruby runtime
01:05:32.640 alone i want to thank you so much for joining us this has been an incredible conversation i loved it
01:05:37.839 where can people find you um so i'm on twitter at amir razan and uh i'm hanging out on
01:05:44.640 the discord uh if you go to discord.dragonread.org i'm there most of the time unless i'm
01:05:50.319 sex faulting um but those would be probably the two two primary places and then as far as the website dragonruby.org
01:05:56.559 um is where you can find information on our um our small business offering for like
01:06:02.079 building native line of business applications and then our game engine offering which allows you to
01:06:08.160 build video games cross-platform and like i said if you can't afford a
01:06:13.680 license just email me i'll i'll hook you up no questions asked all right
01:06:21.200 thank you all so much for joining us this is the end of ruby galaxy version 0.3 so
01:06:28.240 next month we're going to come back on the last thursday of every single month and we're going to be doing some papers
01:06:33.920 and stuff like that if you want to be part of ruby galaxy you want to speak here you can go to pay-per-call dot io slash
01:06:40.880 ruby galaxy or rubygalaxy.org to be a part of the next version we'll be announcing
01:06:46.480 people who are attending um either a week or two weeks beforehand thank you all for joining us
01:06:52.160 thank you so much thank you amir this has been amazing glad you enjoyed it hope it was a good
01:06:58.839 conversation
Explore all talks recorded at Ruby Galaxy v0.3
+1