WEBVTT

00:00.000 --> 00:12.680
Okay, we'll start another one.

00:12.680 --> 00:19.680
We have talked about Ray, done by Ray.

00:19.680 --> 00:21.080
So the stage is here.

00:30.000 --> 00:58.800
So let's start, okay, okay, so good afternoon, welcome everybody.

00:58.800 --> 01:06.600
My name is Ramon Santamalia, Ray, I'm the creator of this small graphics library, Ray

01:06.600 --> 01:07.600
Lip.

01:07.600 --> 01:13.440
Today, I'm going to talk about how it's been, has been my experience, my 12 years experience

01:13.440 --> 01:21.600
working in this library and what have been the main challenges as a solo developer.

01:21.600 --> 01:27.720
So let's start, but before I start, I would like to ask who in the audience knows what

01:27.720 --> 01:28.720
is Ray Lip?

01:28.720 --> 01:29.720
Could you raise your head?

01:29.720 --> 01:39.080
Wow, so nice, what a real, well, for the ones that do not know about this library, I'm going

01:39.080 --> 01:43.440
to start with a brief introduction, what is Ray Lip?

01:43.440 --> 01:52.800
Well, Ray Lip is a graphics library that I created for education and one moment in my life

01:52.800 --> 01:58.200
12 years ago, I had to teach video games programming to artist students with no previous

01:58.200 --> 02:06.320
programming knowledge, yeah, it was a quite difficult task, so I decided to create, to create

02:06.320 --> 02:16.520
a very simple and easy to use a library that was quite enjoyable to use, to put things

02:16.520 --> 02:22.480
on the screen, to put graphics on the screen, well, in the 12 years, the library has

02:22.560 --> 02:29.480
grown a lot, well, actually, grow, not that a lot, but has been ported to many platforms

02:29.480 --> 02:33.280
and has received bindings for many language.

02:33.280 --> 02:39.440
At the moment, Ray Lip can work in many, many platforms, as you can see, and also it has

02:39.440 --> 02:45.440
been ported to, I think, more than 50 or 60 programming languages.

02:45.440 --> 02:53.160
Still, I think that in that as a logon, the key word is enjoy, because it was designed

02:53.160 --> 03:01.080
to be enjoyable to use, and I think that's the key factor of the library.

03:01.080 --> 03:02.080
What can I do with Ray Lip?

03:02.080 --> 03:03.080
What can we do with Ray Lip?

03:03.080 --> 03:11.320
Well, he's a small demo, actually, this presentation has been made in Ray Lip, everything

03:11.320 --> 03:19.160
you can see, it did be made in Ray Lip, Ray Lip is a small code in Ray Lip, actually it's

03:19.160 --> 03:27.040
a functional code in Ray Lip, it has been also made in Ray Lip, with just about 10 or 12

03:27.040 --> 03:33.520
lines of code, you go to a basic window with some text, which is on it, also you can do

03:33.520 --> 03:42.520
to the here, with about 100 lines, you can implement a bunny mark, this is a typical test

03:42.520 --> 03:50.200
to test performance, totally, in Ray Lip internally uses a batching system to draw many, many

03:50.200 --> 03:59.640
many sprites in a very performant way, also it can do 3D, again, with just about 80, 90 lines

03:59.640 --> 04:09.600
of code, you get a full 3D application, you can do shaders, it is a Julia set implemented

04:09.600 --> 04:17.280
with a shader, here you can load the shader, control all the parts, and yeah, it's

04:17.280 --> 04:29.320
actually a functional Julia set running in shader, and ledly Ray Lip also has been used in

04:29.360 --> 04:39.360
some companies for embedded system, it's a company that has recently used Ray Lip to create

04:39.360 --> 04:49.120
all the UI for their autonomous driving devices, they have a device, that you can buy,

04:49.120 --> 04:55.280
all the UI has been made with Ray Lip in the light, latest version of the Komai UI, the

04:55.280 --> 05:11.400
open pilot, open software, yeah that's what you can do with Ray Lip, maybe you are wondering

05:11.400 --> 05:17.960
what happened in 12 years, well actually many, many things happen in 12 years, as I said,

05:17.960 --> 05:26.200
library start as a weekend project, it was a small library for my students to teach them

05:26.200 --> 05:32.360
video games programming or graphics programming, but yeah, along the years has many things

05:32.360 --> 05:40.880
had happened, it's a small timeline with all the events that I have been recording, along

05:40.880 --> 05:46.760
the years of things that happened, everything has happened, asking for some library in

05:46.840 --> 05:54.840
Kronos group forums, releasing versions, keep working on the library, keep working on secondary

05:54.840 --> 06:06.560
library, it's start doing some talks, participating in global game jumps, so, yeah, creating

06:06.640 --> 06:15.200
additional libraries in 217, enjoying the handmade network, that is an network that for

06:15.200 --> 06:21.440
handmade software, and it actually was a boost for the library, so, because many more people

06:21.440 --> 06:30.480
so about it, so, keep working in the library, at some point I start working on separate tools,

06:30.560 --> 06:36.000
a support tools for the library, I could talk a bit more about that later, and then by, yeah,

06:36.000 --> 06:46.640
that's it, by 2018, I got a Google open source peer award, and actually it was a big boost

06:46.640 --> 06:52.800
for the library, because since that moment, many people start noticing it and knowing about the

06:52.880 --> 07:03.680
existence of railing, so, keep working on it, year after year, I have not been working full time

07:03.680 --> 07:11.520
during most of the years, but for some months I've been working full time, also by 2020, I received

07:11.520 --> 07:22.720
an epic mega-gram, and again, the library become more popular, by 2020, I quit my job at the

07:22.720 --> 07:27.440
moment, and decided to work full time for some time in the library, so, in the following, we

07:27.440 --> 07:36.480
engaged, many things happens, and other Google open source, no, peer bonus award, keep developing tools,

07:36.480 --> 07:43.760
keep giving talks, keep developing tools, some more tools, some more tools, some different versions

07:43.760 --> 07:50.640
of different tools, and support libraries, well, I will talk a bit more about that later, but, yeah,

07:50.640 --> 07:56.080
I keep working in the library very, very actively, and in the last year, actually, I was doing a

07:56.080 --> 08:06.400
lot of talks around developing, supporting, yeah, and that's important, and recently, but,

08:06.400 --> 08:15.840
meet last year, I received an NL at Fund, actually, I don't know if they are in the audience,

08:15.840 --> 08:22.960
but I want to thank you them, because for the first time in 12 years, I was able to work full time

08:22.960 --> 08:31.680
paid on the library, and it was a real boost for it, because I could manage my time better,

08:31.680 --> 08:38.640
I'm plan new feature and improvements for the library, and since then, I've been working full time,

08:38.800 --> 08:49.200
developing, oh, yeah, also in by the end of last year, a puffer AI, that it's a reinforced learning

08:49.760 --> 08:57.760
company that uses really to set up training environments to train, age, age, and that play video games,

08:59.600 --> 09:06.320
has been a sponsoring the library, it's the first kind of corporate sponsor I had ever,

09:06.960 --> 09:17.920
and, yeah, and also, like AI, became the second corporate sponsor in 12 years, and yeah,

09:17.920 --> 09:25.120
and that has been everything that has happened, many, many things happened, I know that it went very fast,

09:25.120 --> 09:40.320
but actually, it was quite an adventure, 12 years, so. So, now, let's talk about what happened

09:40.320 --> 09:47.200
for me, the main challenges, working in the library as a solid developer, as a solid maintainer,

09:48.080 --> 09:58.800
I define those challenges, the three amps for me that were maintenance itself, it's a big

09:58.800 --> 10:04.880
library, there is a lot of things to do all the time, issues, it supports many platforms, so maintenance itself

10:04.880 --> 10:14.240
is a really hard work motivation, because it's quite difficult to stay motivated all the time

10:14.240 --> 10:22.800
along 12 years, so, well, it was difficult, so I will explain what I might techniques,

10:22.800 --> 10:30.800
so they motivated, and money, okay, I might have done money, so I need to open some software.

10:30.800 --> 10:39.040
So, let's start with maintenance, that's a question that I would, I would have liked to ask

10:39.040 --> 10:44.000
me myself when I just started this weekend project, however I'm willing to work on my project,

10:44.400 --> 10:49.360
because I actually, it's a thing, I think it's a question that everybody should ask themselves

10:49.360 --> 10:53.760
when working in an open software project, because depending on the answer to that question,

10:53.760 --> 11:00.640
you can't plan for the future way better, because if you know that you are working in a project

11:00.640 --> 11:07.120
for five years, ten years, 12 years, probably you will take some decisions from the beginning,

11:07.120 --> 11:12.480
some better decisions from the beginning, but it's difficult to ask that question,

11:12.800 --> 11:19.120
it's not common to ask that question, so considering that you probably, or probably not many people

11:19.120 --> 11:23.200
ask that question when it's starting an open software project, my recommendation,

11:23.840 --> 11:29.360
keep it simple, keep it simple, it's something that work really, really, really well with

11:29.360 --> 11:35.680
really, along the years, when I just started the library, the library was intended for

11:35.680 --> 11:42.080
the youngest students, and I decided to keep it as much simple as possible, and yeah, and it

11:42.080 --> 11:50.480
worked, what does it mean to keep it simple? Well, in the case of Riley lip, it means simple and clear

11:50.480 --> 11:57.680
code ways, the code base, it's relatively small, so it's about 50,000 miles of code that

11:57.680 --> 12:01.680
really be self, then there are some support libraries that they are usually single file header

12:01.680 --> 12:09.360
only libraries, that are way bigger than 30,000 lines, but Riley lip itself, it's only 30,000

12:09.360 --> 12:17.840
lines of code. I try to minimize API additions, at the moment Riley has 600 functions, approximately

12:18.880 --> 12:25.600
first version is start only with 80, 80 functions, so it has grown a lot in the years, it's

12:25.600 --> 12:31.520
difficult to keep a project simple along the years, because sooner or later you start adding features,

12:31.680 --> 12:41.520
other functionality, and it's very easy to go out of control, so be careful, Riley has a very

12:41.520 --> 12:50.880
simple build system, I don't like build systems, so I try to keep things super simple to build,

12:50.880 --> 13:00.160
I tend to work usually with a single C file, very long C file, but I like to only have one file,

13:00.160 --> 13:05.760
and be able to build everything in the command line with just one line, so that's something that

13:05.760 --> 13:12.320
I also apply to Riley, because back in the past working in some companies, there were always

13:12.320 --> 13:18.480
problems with the build systems, super complicated build systems, so I try to keep it simple in

13:18.480 --> 13:26.160
that in that words, and finally something that really helped Riley has been automation, at some point

13:26.640 --> 13:33.520
Riley can start supporting many platforms, and yeah, it was, and many architecture,

13:34.640 --> 13:39.040
some kind of continuous integration, because you know the level of system was extremely helpful,

13:39.040 --> 13:44.080
but also some super tools that I've been creating along the years to help.

13:46.400 --> 13:54.160
About maintenance, that's actually the structure of the library with all the files involved,

13:54.160 --> 14:02.800
actually, you've got the links to the different files here, but that's the core library, that's

14:02.800 --> 14:09.200
Riley library, and that's just the architecture, maybe it's not that clear how it maps to code,

14:09.200 --> 14:17.600
but that's it, actually it really, there are seven C files, some bigger, some smaller,

14:18.560 --> 14:24.880
just 30,000 lines of code all together, so it's quite portable, self-contained,

14:24.880 --> 14:30.960
it has no external dependencies, so you can build the library in a single static library,

14:30.960 --> 14:36.320
actually just recommend it to be used that way, and you can link it with your executable for the

14:36.320 --> 14:41.440
back-and-platform you like, and yeah, that's it, you got the library.

14:41.840 --> 14:48.960
Okay, about automation, well, as I commented, continuous integration continuous delivery system was

14:48.960 --> 14:56.640
really helpful, another point about Riley is that learning how to use the library is based on

14:56.640 --> 15:03.200
examples, Riley has a very big collection of examples, has at the moment it has about 200 examples,

15:03.200 --> 15:10.400
and at some point it became quite difficult to manage that collection of examples, because every time

15:10.480 --> 15:16.960
any example was added to the library, it was not that easy to add the example dot c file,

15:16.960 --> 15:21.440
it required to be out in several build systems, it required testing, it required to follow

15:22.640 --> 15:32.240
conventions, so actually it required modifying about, I think it was 27, 28, separate files in different

15:32.240 --> 15:37.920
places, I created a tool to do that automatically, it's just an example of some

15:37.920 --> 15:44.560
manager that allows to add, remove, modify, rename, examples, build examples in a very easy way,

15:44.560 --> 15:50.000
and then another point it's a bindings, at some point I noticed that many people was creating

15:50.000 --> 15:54.800
bindings for Riley to many, many languages, actually there is even people that are creating new

15:54.800 --> 16:02.880
languages, and as a test, they bind Riley for the new language, so it has many, many bindings,

16:02.880 --> 16:10.720
even some languages like Oding or Zik include Riley as a part of the standard packages available

16:10.720 --> 16:17.360
for users of the language, well for that reason I also created a support tool at some moment

16:17.360 --> 16:24.720
to simplify binding's creation, in what way? Well, RL parser just parses all the Riley

16:24.720 --> 16:30.560
header and generates a semantic file with a function name, number of parameters type of parameters,

16:30.560 --> 16:38.240
it can be exported into TXT, JSON, XML, multiple formats to simplify the bindings generation,

16:38.240 --> 16:43.680
the automation, automation of binding generation for the user creating a maintaining bindings.

16:45.760 --> 16:54.800
About motivation, a question, how long can motivation last? Well, it's difficult to stay

16:54.800 --> 17:01.680
motivated all the time, especially with an open source project, but my recommendation is that

17:03.680 --> 17:10.080
your primary source of motivation for a project must be that you enjoy genuinely what you do.

17:10.080 --> 17:16.320
I think that's the most important thing, when you stop enjoying what you do, even you can try

17:16.320 --> 17:23.040
many things or try to get money or whatever, it's difficult to stay motivated.

17:24.000 --> 17:32.560
Say that, there have been some elements that have kept me motivated more or less along the years.

17:35.120 --> 17:43.520
First, users, users, I created Riley for my students and as soon as I start using it in my classes,

17:43.520 --> 17:49.280
I start receiving a lot of feedback from them, they tell me, oh, I like that, I don't like that,

17:49.280 --> 17:56.320
better do that in that way. Well, they start giving me a lot of feedback, but also they start showcasing

17:56.320 --> 18:03.920
many amazing projects created by them. I think that's very motivating, or at least for me,

18:03.920 --> 18:10.080
that was very motivating and was one of the reasons to keep working on the library.

18:10.080 --> 18:15.920
Another source of motivation for me, were a site projects. When you keep working in a project

18:15.920 --> 18:23.680
for so long, at some point, it feels kind of repetitive and just reviewing bugs, fixing issues,

18:23.680 --> 18:27.680
it's not that motivating. For me, it's way more motivating, creating new things,

18:28.880 --> 18:36.000
having new ideas and creating new libraries. So I decided to, as I got that base library,

18:36.000 --> 18:42.000
I decided to start creating tools using the library, and it was motivating to create the tools,

18:42.000 --> 18:48.480
and I was also growing an ecosystem around Riley. Well, another source of motivation,

18:48.480 --> 18:56.720
are recognitions. When you receive some award, some recognition, or some people ask you for an

18:56.720 --> 19:04.000
interview, or participating in some podcasts, or go to some event, that's really motivating,

19:04.000 --> 19:11.200
and that also helped me to stay motivated while working on the library. And finally,

19:11.200 --> 19:18.240
I think it's also important for motivation, self-care. In my case, it helped me to have

19:18.240 --> 19:23.600
no-screen hobbies, to have some hobbies that I wish I knew right now, that are not related

19:23.600 --> 19:31.200
to working on a screen, and are more related to doing kind of hand work. For example,

19:31.200 --> 19:38.160
about the site projects, the Riley ecosystem, well, here is Riley, but around the years,

19:38.160 --> 19:45.520
I created all those support libraries for UIs, for PNG management, for initialization files,

19:45.520 --> 19:52.560
and all those tools to do many, many things. I like to investigate different fields,

19:52.560 --> 19:57.440
and while creating those tools, I had the opportunity to investigate about many, many different fields,

19:58.400 --> 20:09.360
sound generator, textur packaging, UI generation, well, text editors, the timeline creator

20:09.360 --> 20:15.760
that it's what you have seen in a previous slide. So, I created a bunch of tools and

20:15.760 --> 20:21.520
support libraries, most of them free and open source, but some of them also commercial, I'm private.

20:22.480 --> 20:28.320
About self-care, those are some of my hobbies, I play guitar, I really enjoy playing guitar,

20:28.320 --> 20:36.480
I like cooking, and lately I've got a new hobby that it's a good work and restoring things,

20:37.200 --> 20:45.200
well, here I restore a bunch of hammers that I got at home, so if that's what I did last summer,

20:45.280 --> 20:52.160
it was really refreshing and gave me motivated to work later on on computer again.

20:54.400 --> 20:58.880
Finally, let's talk about the third challenge that has been morning.

21:02.480 --> 21:08.320
That's a question that I asked myself many times while working in Riley, how long could I keep working

21:09.280 --> 21:13.200
in Riley's course for many, many years, it has been very, very difficult.

21:14.400 --> 21:20.800
There has been moments that I've been working full-time, that has been getting some contract work

21:20.800 --> 21:26.000
or working at the university teaching to get some money to then allow me to work for some

21:26.000 --> 21:34.240
months full-time again on Riley, but it has been very difficult to keep doing that without a secure

21:34.320 --> 21:46.160
source of income along the time. My experience as a solid developer, it's extremely, extremely

21:46.160 --> 21:55.440
difficult to make money with open software, that's my experience. I imagine that maybe if you are

21:55.440 --> 22:03.840
a corporate or a big foundation, it would be easier to get funds, but as a solid developer,

22:03.840 --> 22:13.280
it's really difficult. What were my sources of money? Well, first it was donations. I'm getting

22:13.280 --> 22:22.240
donations from people around the world in several platforms. It's not enough to live from that,

22:22.720 --> 22:32.400
obviously. Along the time, I got some grants and lately I got those NNF funds that really

22:32.400 --> 22:39.280
helped me for the first time in 12 years to be able to work in the project full-time with a kind of

22:39.280 --> 22:46.560
salary and also some corporate sponsors that also for the first time in 12 years, I managed to get

22:46.640 --> 22:54.560
two corporate sponsors in the last four months or so, that it was also very, very nice. And then

22:55.920 --> 23:04.400
I also try to sell tools and services, but it's very difficult on the amount of money that I got

23:04.400 --> 23:15.440
from that was really, really low to live from that. But even managing to get some money, even

23:15.440 --> 23:21.440
managing to get some funds for your project, I think that's a solid developer, there are some

23:21.440 --> 23:29.440
other challenges. First, the uncertainty, how long will donation last? Maybe one month you receive

23:29.440 --> 23:35.040
a lot of money or enough money to live and another month you do not receive a send. So,

23:35.360 --> 23:48.400
one minute. Okay, well, the little entity, how you manage to receive that money if you are

23:48.400 --> 23:54.800
not a foundation or a corporate, like a salary, a stability, you cannot plan for a future and

23:54.800 --> 24:02.720
all those concerns make you ask you if I should be able to find a rule of job. So, some point to

24:02.720 --> 24:09.840
remember, just to earn simplicity, I think it's key for long-term maintenance. I recommend

24:09.840 --> 24:15.520
showing your project and build a community, I think it helped me a lot, so it's a recommendation.

24:16.480 --> 24:20.800
Money could be a bonus, but it should not be a goal, because it's really difficult to get money.

24:21.360 --> 24:28.240
And the most important point for me is that you should enjoy genuinely what you do. So, that

24:28.240 --> 24:38.240
would be the take-out ways from this talk. And, yep, that would be everything. Thank you very much.

