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