Interview with Milan Šulc about Contributte and Open Source

4 years ago by Honza Černý  

Almost all of us sometimes use a third-party component in our applications. You can search for the right one on Google or on the portal componette.org. And you might have already used a component from the Contributte family. Both projects were created by Milan Šulc, aka f3l1×, and this is an interview with him.

Hi Milan, for those who don't know you, could you introduce yourself a bit? I'll mention that you're a member of the Nette Core team, you program and take care of the component portal componette.org, and you're the main coordinator of Contributte packages. Did I forget something important?

Hi Honza. You've mentioned my open source activities, otherwise, I also program for money. :) We have a small company where we analyze network traffic and write various provisioning tools. I also program some internal tools for Tlapnet, or ISP Alliance in general, internet service providers, and related services.

Reading this, I'm surprised you have time for so many open source activities. Do you have a daily schedule where you find the time, or can you work on open source within your job?

Sometimes I'm surprised myself. I'd say the biggest factor is Terka, my wife, who takes care of practically everything except coding. Without her, it definitely wouldn't be possible, for which I'm very grateful. Sometimes she even pushes me to go to some IT event. I don't have a strict schedule. I always try to plan everything correctly to keep everyone happy. Since I work for myself, I can adjust many things according to my needs, take on more or less work. Personally, I believe that a person's reputation is unique, so I do everything to make it as good as possible, if possible.

Almost all my open source activities, maybe even 80%, are directly used in our company or some other. Most of it is probably in Tlapnet, where the whole Contributte package family started. Every package goes into production or has been running for a long time. Tlapnet deserves a big thank you for that, especially Pavel Míča, who is responsible for development and has a very good overview in this regard. We consult and fine-tune everything together to make it easy to use. And it turns out that if it works well for us, it works well for others too.

How did you manage to get your company to release some of the components you write there as open source packages?

Good question. It was easy in our company. There are three of us. Two core developers and one person who handles everything except core coding. Both of us have gone through a number of companies and are quite active in the IT community. We use a number of open source tools, so we want to contribute as well. We notice that many developers today look at how companies approach open source, generally how active their GitHub is. So we hope it will make us interesting to them someday. At NX1, we are not actively looking for new people because we don't have time for it, and we also don't want to use HR; those constant offers and chasing annoyed us. So you don't have many options left.

In Tlapnet, Pavel always said, we need it, it has to be coded. Where it will be published is an implementation detail. Maybe someone will send us a PR, and then there will be profit. The code has to be written anyway, and adding a README in the first phase takes a few minutes. At least it forces us to document things. At the beginning, I made a few packages in my free time. Some were made within Tlapnet, like Apitte. We gave it time, and profit came. Suddenly it started making more and more sense to us.

Did you aim so high with Contributte from the beginning? Today there are almost a hundred components and over ten developers. Do you have any plans for the future, where you would like to take this group?

It might sound strange, but I've always wanted to achieve something. It didn't matter what or where, but just something. So I could say, I built this. So someone could be proud of me. I probably got that from my dad. And since I don't know how to do anything other than programming, like nothing at all, I tried my best in programming. I gave up almost everything to have as much time as possible for programming. Work is my hobby, so when you add that Terka (my wife) handles everything else, I have about 10–12 hours a day to work, educate myself, or just code. Years ago, an opportunity arose in Nette to do something. People were kind of grumpy, pessimistic, hated everything. When I came up with the first idea for Componette, the reactions were not positive. Quite the opposite. It disappointed me a lot. I wanted to give it up, but I got angry and did it my way. I didn't ask anyone. I just did it.

Even then, the reactions weren't very optimistic, but Componette was simply better than the original Addons portal. Just because it's fully autonomous. Why am I talking about this? With Contributte, the idea was the same. I didn't like the Kdyby/Console package, so I made Contributte/Console. I didn't ask anyone. And it went on and on like that. I created things my way. I never thought Contributte would be what it is now. I'm not saying I didn't dream about it, but you know, you can dream about anything. I see Contributte now as a huge project. Really huge, constantly evolving and transforming. Learning from others' failures, I knew I couldn't do it alone. So I gradually started thinking about how to involve other people. Moreover, how to inspire them, so they wouldn't just transfer packages to Contributte and then leave it. I still don't know if I'm succeeding or not.

The more packages and people in the organization, the more things you have to deal with that you didn't handle alone. Codestyle, writing tests, documentation, choosing CI, code complexity, web, communication, tasks, etc. All this has to be kept uniform. And it takes a lot of time. I'm not saying I don't enjoy it, but from writing code for fun, I'm suddenly somewhere else. And that time and work are no longer visible. Some deployment automation on the web that saves me hours. Does anyone notice? Nope.

I see the future in some stabilization. Closer integration with Nette. For example, like Nuxt and Vue. Nuxt is built on top of Vue so you don't have to deal with the same repetitive tasks. When something is coming to Vue, they know about it in Nuxt and consult it. To make it as pleasant as possible, they focus on DX (developer experience). I would also like to establish closer cooperation with companies. The scope of features in Nette is quite fixed, we can't expect features like Facebook login or some cron work to come. I see the sense of Contributte there. To build a solid foundation of extensions so you can build almost any project without having to deal with these extras, just your business. And of course, there are other ideas, but I wouldn't want to reveal them. So you have something to look forward to.

Do you have any top 3 favorites from Contributte?

I don't have top 3 favorites. I can't really determine that. Contributte as a whole consists of several organizations. For example, Apitte for simple and easy API creation and Nettrine for integrating the Doctrine ecosystem. It was more interesting for us to divide it this way because Composer doesn't have good support for monorepos. It has to be handled with workarounds, and I don't like that. However, we are considering making Apitte one package again because the most common use is to have the full set. I didn't know that at the beginning. There's always room to go further.

Where do you get different ideas from? I know you play around with Java, Node.js, and JavaScript frameworks. Are these communities an inspiration for you? Can you compare these different ecosystems? What do you like about the JavaScript world?

At the beginning, there were plenty of ideas. I saw something somewhere and thought I would implement it better. You know, naive youngster. I'm quite systematic; I have TO-DO lists for everything. My idea list has about 150 items; I let it mature. Sometimes PHP annoyed me, so I looked elsewhere. At NX1, we work with Java, which I had at school. We write the front-end in NW.js, a technology similar to Electron, so JavaScript and Node.js. I'm very glad we chose this. Clients like it, we like writing in it. We chose Vue.js for the UI, and it turned out to be a very good choice. Because we've been doing this for so long, I've gained insight and dared to train under Academy 42. That was a good experience.

My big leap in JavaScript came from befriending the guys from ZEIT. Thanks to them, I understood the enormous importance of TypeScript, the drive to achieve goals, and the concept of lambdas. I mean how it works internally, so implementing ZEIT PHP runtime was much easier. From the JavaScript community, I mainly take away the drive to get things out as soon as possible. It also has a dark side, everyone knows that. There is generally a lot of hype around JavaScript, and it's completely normal for a small library to get more stars in one day than all Contributte packages combined. That bothers me a bit. 🙂

Lately, I've been trying to follow the Laravel community. Laravel is viewed quite skeptically in the Czech Republic. Maybe it's

not the showcase of design patterns, but the way the community presents itself is great. It completely got me, and I'd like to do the same. Everything revolves around the author Taylor Otwell, who can sell it perfectly, in a good way. Today, when we want to write something in Nette, we choose Nette + Contributte, of course. If we want a reactive front-end, we need something like Webpack. But how to get it into Nette? Jirka Pudil wrote something, but do I know it, maybe you, and who else? And when the project is finished, where do we deploy it? In the Laravel world, there's Laravel Forge or the new Laravel Vapor. That's something we're missing. Not everyone wants to deploy an application using k8s or via FTP to Wedos. It needs something in three clicks, and voila.

We can write it, nothing stops us. But there it's part of the whole platform. Everyone pulls together. I like that. I see a lot of potential there.

You mentioned GitHub stars. But they don't feed you. You recently activated a donate program on GitHub. Do you want to achieve something specific with it, a budget for a few hours of open-source development paid by donors? Or is it just a gesture that someone can support you in developing open-source packages?

Sure. I wanted to pave the way for receiving money without invoicing it. Occasionally, someone contacts me, and I'd like to work on that. I'd like to be able to allocate more time to Contributte and other projects that make life easier for me and hopefully others. I wouldn't have to rush and have more space to focus. I would love it if some money started flowing through GitHub donations so I could make it happen. I believe everyone will benefit from it. Especially in the Planette organization, I've been trying to prepare sample projects over the last year that are ready to take and build on. It saves a lot of time. Developers get an up-to-date stack with the latest features in PHP and Nette/Contributte for free.

Contributte currently has a few companies involved in its operation, for which I'm very grateful.

There are a lot of repositories. Are you thinking about any promotion, maybe here on the blog? It seems to me that many people, even those who have been working with the Nette Framework for a long time, don't know about these possibilities. Many things are already solved today, just buried somewhere. And assuming everyone knows and will find it is a big mistake. In my opinion, it's also an interesting opportunity for beginners who enjoy writing to help promote new libraries and dev stacks.

I'm already working on some promotion. Recently, two articles came out, one about contributte/eet and another about Nettrine. More should come in time.

That's great, and I'm looking forward to more introductory articles. I want to try Contributte/reCaptcha soon, so if it goes well, I'll try to write something about it. And with that, I'd like to thank you for the comprehensive interview. I wish you luck in spreading awareness about Contributte and other projects. It's incredible what you can manage 😉

Thanks too. I'll be happy if we can come up with something together again. Whether in Contributte, Planette, Academy42, or elsewhere. I believe great things await us.

You can find more about Contributte packages on contributte.org

You can support Milan on github.com/f3l1x