Okay, we'll start another one.
We have talked about Ray, done by Ray.
So the stage is here.
So let's start, okay, okay, so good afternoon, welcome everybody.
My name is Ramon Santamalia, Ray, I'm the creator of this small graphics library, Ray
Lip.
Today, I'm going to talk about how it's been, has been my experience, my 12 years experience
working in this library and what have been the main challenges as a solo developer.
So let's start, but before I start, I would like to ask who in the audience knows what
is Ray Lip?
Could you raise your head?
Wow, so nice, what a real, well, for the ones that do not know about this library, I'm going
to start with a brief introduction, what is Ray Lip?
Well, Ray Lip is a graphics library that I created for education and one moment in my life
12 years ago, I had to teach video games programming to artist students with no previous
programming knowledge, yeah, it was a quite difficult task, so I decided to create, to create
a very simple and easy to use a library that was quite enjoyable to use, to put things
on the screen, to put graphics on the screen, well, in the 12 years, the library has
grown a lot, well, actually, grow, not that a lot, but has been ported to many platforms
and has received bindings for many language.
At the moment, Ray Lip can work in many, many platforms, as you can see, and also it has
been ported to, I think, more than 50 or 60 programming languages.
Still, I think that in that as a logon, the key word is enjoy, because it was designed
to be enjoyable to use, and I think that's the key factor of the library.
What can I do with Ray Lip?
What can we do with Ray Lip?
Well, he's a small demo, actually, this presentation has been made in Ray Lip, everything
you can see, it did be made in Ray Lip, Ray Lip is a small code in Ray Lip, actually it's
a functional code in Ray Lip, it has been also made in Ray Lip, with just about 10 or 12
lines of code, you go to a basic window with some text, which is on it, also you can do
to the here, with about 100 lines, you can implement a bunny mark, this is a typical test
to test performance, totally, in Ray Lip internally uses a batching system to draw many, many
many sprites in a very performant way, also it can do 3D, again, with just about 80, 90 lines
of code, you get a full 3D application, you can do shaders, it is a Julia set implemented
with a shader, here you can load the shader, control all the parts, and yeah, it's
actually a functional Julia set running in shader, and ledly Ray Lip also has been used in
some companies for embedded system, it's a company that has recently used Ray Lip to create
all the UI for their autonomous driving devices, they have a device, that you can buy,
all the UI has been made with Ray Lip in the light, latest version of the Komai UI, the
open pilot, open software, yeah that's what you can do with Ray Lip, maybe you are wondering
what happened in 12 years, well actually many, many things happen in 12 years, as I said,
library start as a weekend project, it was a small library for my students to teach them
video games programming or graphics programming, but yeah, along the years has many things
had happened, it's a small timeline with all the events that I have been recording, along
the years of things that happened, everything has happened, asking for some library in
Kronos group forums, releasing versions, keep working on the library, keep working on secondary
library, it's start doing some talks, participating in global game jumps, so, yeah, creating
additional libraries in 217, enjoying the handmade network, that is an network that for
handmade software, and it actually was a boost for the library, so, because many more people
so about it, so, keep working in the library, at some point I start working on separate tools,
a support tools for the library, I could talk a bit more about that later, and then by, yeah,
that's it, by 2018, I got a Google open source peer award, and actually it was a big boost
for the library, because since that moment, many people start noticing it and knowing about the
existence of railing, so, keep working on it, year after year, I have not been working full time
during most of the years, but for some months I've been working full time, also by 2020, I received
an epic mega-gram, and again, the library become more popular, by 2020, I quit my job at the
moment, and decided to work full time for some time in the library, so, in the following, we
engaged, many things happens, and other Google open source, no, peer bonus award, keep developing tools,
keep giving talks, keep developing tools, some more tools, some more tools, some different versions
of different tools, and support libraries, well, I will talk a bit more about that later, but, yeah,
I keep working in the library very, very actively, and in the last year, actually, I was doing a
lot of talks around developing, supporting, yeah, and that's important, and recently, but,
meet last year, I received an NL at Fund, actually, I don't know if they are in the audience,
but I want to thank you them, because for the first time in 12 years, I was able to work full time
paid on the library, and it was a real boost for it, because I could manage my time better,
I'm plan new feature and improvements for the library, and since then, I've been working full time,
developing, oh, yeah, also in by the end of last year, a puffer AI, that it's a reinforced learning
company that uses really to set up training environments to train, age, age, and that play video games,
has been a sponsoring the library, it's the first kind of corporate sponsor I had ever,
and, yeah, and also, like AI, became the second corporate sponsor in 12 years, and yeah,
and that has been everything that has happened, many, many things happened, I know that it went very fast,
but actually, it was quite an adventure, 12 years, so. So, now, let's talk about what happened
for me, the main challenges, working in the library as a solid developer, as a solid maintainer,
I define those challenges, the three amps for me that were maintenance itself, it's a big
library, there is a lot of things to do all the time, issues, it supports many platforms, so maintenance itself
is a really hard work motivation, because it's quite difficult to stay motivated all the time
along 12 years, so, well, it was difficult, so I will explain what I might techniques,
so they motivated, and money, okay, I might have done money, so I need to open some software.
So, let's start with maintenance, that's a question that I would, I would have liked to ask
me myself when I just started this weekend project, however I'm willing to work on my project,
because I actually, it's a thing, I think it's a question that everybody should ask themselves
when working in an open software project, because depending on the answer to that question,
you can't plan for the future way better, because if you know that you are working in a project
for five years, ten years, 12 years, probably you will take some decisions from the beginning,
some better decisions from the beginning, but it's difficult to ask that question,
it's not common to ask that question, so considering that you probably, or probably not many people
ask that question when it's starting an open software project, my recommendation,
keep it simple, keep it simple, it's something that work really, really, really well with
really, along the years, when I just started the library, the library was intended for
the youngest students, and I decided to keep it as much simple as possible, and yeah, and it
worked, what does it mean to keep it simple? Well, in the case of Riley lip, it means simple and clear
code ways, the code base, it's relatively small, so it's about 50,000 miles of code that
really be self, then there are some support libraries that they are usually single file header
only libraries, that are way bigger than 30,000 lines, but Riley lip itself, it's only 30,000
lines of code. I try to minimize API additions, at the moment Riley has 600 functions, approximately
first version is start only with 80, 80 functions, so it has grown a lot in the years, it's
difficult to keep a project simple along the years, because sooner or later you start adding features,
other functionality, and it's very easy to go out of control, so be careful, Riley has a very
simple build system, I don't like build systems, so I try to keep things super simple to build,
I tend to work usually with a single C file, very long C file, but I like to only have one file,
and be able to build everything in the command line with just one line, so that's something that
I also apply to Riley, because back in the past working in some companies, there were always
problems with the build systems, super complicated build systems, so I try to keep it simple in
that in that words, and finally something that really helped Riley has been automation, at some point
Riley can start supporting many platforms, and yeah, it was, and many architecture,
some kind of continuous integration, because you know the level of system was extremely helpful,
but also some super tools that I've been creating along the years to help.
About maintenance, that's actually the structure of the library with all the files involved,
actually, you've got the links to the different files here, but that's the core library, that's
Riley library, and that's just the architecture, maybe it's not that clear how it maps to code,
but that's it, actually it really, there are seven C files, some bigger, some smaller,
just 30,000 lines of code all together, so it's quite portable, self-contained,
it has no external dependencies, so you can build the library in a single static library,
actually just recommend it to be used that way, and you can link it with your executable for the
back-and-platform you like, and yeah, that's it, you got the library.
Okay, about automation, well, as I commented, continuous integration continuous delivery system was
really helpful, another point about Riley is that learning how to use the library is based on
examples, Riley has a very big collection of examples, has at the moment it has about 200 examples,
and at some point it became quite difficult to manage that collection of examples, because every time
any example was added to the library, it was not that easy to add the example dot c file,
it required to be out in several build systems, it required testing, it required to follow
conventions, so actually it required modifying about, I think it was 27, 28, separate files in different
places, I created a tool to do that automatically, it's just an example of some
manager that allows to add, remove, modify, rename, examples, build examples in a very easy way,
and then another point it's a bindings, at some point I noticed that many people was creating
bindings for Riley to many, many languages, actually there is even people that are creating new
languages, and as a test, they bind Riley for the new language, so it has many, many bindings,
even some languages like Oding or Zik include Riley as a part of the standard packages available
for users of the language, well for that reason I also created a support tool at some moment
to simplify binding's creation, in what way? Well, RL parser just parses all the Riley
header and generates a semantic file with a function name, number of parameters type of parameters,
it can be exported into TXT, JSON, XML, multiple formats to simplify the bindings generation,
the automation, automation of binding generation for the user creating a maintaining bindings.
About motivation, a question, how long can motivation last? Well, it's difficult to stay
motivated all the time, especially with an open source project, but my recommendation is that
your primary source of motivation for a project must be that you enjoy genuinely what you do.
I think that's the most important thing, when you stop enjoying what you do, even you can try
many things or try to get money or whatever, it's difficult to stay motivated.
Say that, there have been some elements that have kept me motivated more or less along the years.
First, users, users, I created Riley for my students and as soon as I start using it in my classes,
I start receiving a lot of feedback from them, they tell me, oh, I like that, I don't like that,
better do that in that way. Well, they start giving me a lot of feedback, but also they start showcasing
many amazing projects created by them. I think that's very motivating, or at least for me,
that was very motivating and was one of the reasons to keep working on the library.
Another source of motivation for me, were a site projects. When you keep working in a project
for so long, at some point, it feels kind of repetitive and just reviewing bugs, fixing issues,
it's not that motivating. For me, it's way more motivating, creating new things,
having new ideas and creating new libraries. So I decided to, as I got that base library,
I decided to start creating tools using the library, and it was motivating to create the tools,
and I was also growing an ecosystem around Riley. Well, another source of motivation,
are recognitions. When you receive some award, some recognition, or some people ask you for an
interview, or participating in some podcasts, or go to some event, that's really motivating,
and that also helped me to stay motivated while working on the library. And finally,
I think it's also important for motivation, self-care. In my case, it helped me to have
no-screen hobbies, to have some hobbies that I wish I knew right now, that are not related
to working on a screen, and are more related to doing kind of hand work. For example,
about the site projects, the Riley ecosystem, well, here is Riley, but around the years,
I created all those support libraries for UIs, for PNG management, for initialization files,
and all those tools to do many, many things. I like to investigate different fields,
and while creating those tools, I had the opportunity to investigate about many, many different fields,
sound generator, textur packaging, UI generation, well, text editors, the timeline creator
that it's what you have seen in a previous slide. So, I created a bunch of tools and
support libraries, most of them free and open source, but some of them also commercial, I'm private.
About self-care, those are some of my hobbies, I play guitar, I really enjoy playing guitar,
I like cooking, and lately I've got a new hobby that it's a good work and restoring things,
well, here I restore a bunch of hammers that I got at home, so if that's what I did last summer,
it was really refreshing and gave me motivated to work later on on computer again.
Finally, let's talk about the third challenge that has been morning.
That's a question that I asked myself many times while working in Riley, how long could I keep working
in Riley's course for many, many years, it has been very, very difficult.
There has been moments that I've been working full-time, that has been getting some contract work
or working at the university teaching to get some money to then allow me to work for some
months full-time again on Riley, but it has been very difficult to keep doing that without a secure
source of income along the time. My experience as a solid developer, it's extremely, extremely
difficult to make money with open software, that's my experience. I imagine that maybe if you are
a corporate or a big foundation, it would be easier to get funds, but as a solid developer,
it's really difficult. What were my sources of money? Well, first it was donations. I'm getting
donations from people around the world in several platforms. It's not enough to live from that,
obviously. Along the time, I got some grants and lately I got those NNF funds that really
helped me for the first time in 12 years to be able to work in the project full-time with a kind of
salary and also some corporate sponsors that also for the first time in 12 years, I managed to get
two corporate sponsors in the last four months or so, that it was also very, very nice. And then
I also try to sell tools and services, but it's very difficult on the amount of money that I got
from that was really, really low to live from that. But even managing to get some money, even
managing to get some funds for your project, I think that's a solid developer, there are some
other challenges. First, the uncertainty, how long will donation last? Maybe one month you receive
a lot of money or enough money to live and another month you do not receive a send. So,
one minute. Okay, well, the little entity, how you manage to receive that money if you are
not a foundation or a corporate, like a salary, a stability, you cannot plan for a future and
all those concerns make you ask you if I should be able to find a rule of job. So, some point to
remember, just to earn simplicity, I think it's key for long-term maintenance. I recommend
showing your project and build a community, I think it helped me a lot, so it's a recommendation.
Money could be a bonus, but it should not be a goal, because it's really difficult to get money.
And the most important point for me is that you should enjoy genuinely what you do. So, that
would be the take-out ways from this talk. And, yep, that would be everything. Thank you very much.