Interview with Milan Šulc about Contributte and Open Source

4 years ago by Honza Černý translated by Depka  

Probably each of us occasionally uses a third-party component in our application. You can search for the right one on Google or on the componette.org portal. And if you use Nette there's a big chance you used a Contributte family component before. Both Componette and Contributte 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 little? I can tell on you for our readers that you're a member of the Nette Core team, developer and maintainer of the componette.org portal and the main coordinator of Contributte packages. Did I forget to mention something important?

Hi Jan. You mentioned my open source activities, I'm still programming for money also. :) We have a small business where we analyze network traffic and write various provisioning tools. I also program some internal tools for Tlapnet(ISP Alliance) and generally for providers of Internet and services.

Reading all of this I'm surprised that you have time for so many open source activities. Do you have a daily schedule so you can find that time or do you have the opportunity to work on open source as part of your daily job?

Sometimes I wonder myself. I would say that Tereza, my wife, who cares about everything except coding, has the biggest share. Without her, it almost certainly would not work, for which I thank her very much. There are times when she even forces me to go out because I haven't been to any IT event for a long time. I wouldn't say that I have a timetable or some predefined schedule. Of course, I always try to plan everything correctly so that everyone is happy. The fact that I'm working on my own let's me set up a lot of things in a way that's OK for me and I can decide how much work I can take on my shoulders. Personally, I like to think that a man has only one reputation, so I do my best to have it as good as I can.

Almost all of my open source activities, could be even as much as 80%, are used directly in our or many other companies. Most of it is probably in Tlapnet, which is the cradle of Contributte packages. Every package goes into production or it's there for a long time. I must thank Tlapnet, because without them this couldn't have been possible. Special thanks goes to Pavel Míča, who is responsible for development and keeps always a good track of everything. We consult and debug everything together so that we can use it with ease. And it turns out that when it's easy to use for us, so is for others.

How did you manage to push some of the components you wrote in your job as an open source packages?

Man, good question. In our company it was easy. There are three of us. Two core developers and one person who solves everything except core code. We both went through a number of companies and we are quite active in the IT community. We use a number of open source tools, so we also want to contribute. We have observed that many developers are already looking at how companies tackle open source and whether they're active on GitHub or not. So we hope that one day we will be interesting for them also. At NX1 we are not actively looking for new people, because we do not have time for it and at the same time we do not want to use HR.

In Tlapnet, Pavel has always said “We need it and it has to be coded”. Where it will be published is only the matter implementation. Maybe someone sends us a PR and then the profit comes. Someone has to code it anyway and adding a README is a matter of minutes. At least it will make us document these things. At the beginning I did some packages in my free time. Some were done within Tlapnet, like Apitte. We gave it time and suddenly it started to make more and more sense to us.

Have you been aiming this high with Contributte since the beginning? Today there are nearly a hundred components and over a dozen of developers. Do you have any plans for the future where you want to go with this group?

It may sound weird, but I always wanted to do something. I didn't know what or where, but just something. So one day I could say, I built this and someone can be proud of me. I got this from my dad I guess. And because programming is the only thing that I can do I went with it. I've dropped almost everything so I can have as much time as possible to program. Work is my hobby, and since Terka (my wife) solves everything else, I can work, educate myself, or just code 10–12 hours a day. Many years ago, there was an opportunity to do something with Nette. The people were so scruffy, pessimistic and they were just hating everything. When I came up with the first idea for Componette, the reactions were not positive. Quite the contrary. I was quite disappointed. I wanted to give up, but then I got mad and did it myself. I didn't ask anybody. I just did it.

Even after that, the reactions were not very optimistic, but Componette was just better than the original Addons portal. Just because it is fully autonomous. Why I'm talking about it? The idea with Contributte was the same. I didn't like the Kdyby/Console package, so I did Contributte/Console. I didn't ask anybody and it went on and on. I made those packages just like I wanted them. I never thought Contributte would be as big as it is now. I'm not saying I haven't dreamed about it, but you know, you can dream of everything. Contributte is now a giant project. A really gigantic project that is constantly evolving. From the failures of others I've learned that I can't do this alone. So I've started to think how could I bring more people in. Or better, how to encourage them so they just don't bring their packages under Contributte and leave them. I still don't know if I'm really succeeding with it.

With more and more packages and people in the organisation there are many new problems that I need to solve that weren't here before. Codestyle, writing tests, documentation, choose CI, complexity of code, web, communication, tasks etc. All of this must be kept in a unified way and that takes a lot of time. I'm not saying that I'm not enjoying it, but suddenly I'm in a completely different position considering that I have started with writing code for joy. And on top of that all of this work is kind of invisible. Like, does anyone recognize some deployment automation which will spare me hours of work ? Nope.

I can see the future in some sort of stabilization. Closer connection to Nette. To have something like Nuxt and Vue is having. Nuxt is a framework on top of Vue so you don't need to solve some things over and over again and when something new comes to Vue, people at Nuxt are already aware of it and they're consulting it in advance. So in the end it's easier to use for developers and they are actively contributing to DX(developer experience). I would also like to work closely with other companies. Scope of features in Nette is final. We can't anticipate features like “Sign with Facebook” or advanced work with cron there. So that's where I see the potential of Contributte. To build a solid foundation of extensions so one can build almost any project out of it, be spared of reinventing the wheel every time and focus purely on business. And of course I have lots of other ideas but I won't tell them now so you have something to look forward to.

Do you have any top 3 favorites from Contributte?

Well, I don't, I just can't decide. Contributte consists of more organisations. For example Apitte which was done for easy creation of API and Nettrine for easier integration of Doctrine ecosystem. It made more sense to split it like this, because Composer doesn't have a good support for monorepos. It requires certain hacks and I don't like this approach. We're now consindering to squash Apitte back into one package because having installed all Apitte packages is the most common scenario. I didn't knew that at the beginning. There's always something fix or do better.

Where do you get your ideas? I know that you tinker a lot with Java, Node.js or javascript frameworks. Do these communities inspire you? Can you compare these different ecosystems? What do you like about the JavaScript world?

In had many ideas in the beginning. I saw something and I thought I can implement it better. You know, naive youngster. I'm quite systematic, I have TODO sheets for everything. My idea list has about 150 items and I'm letting it mature. Sometimes I was fed up with PHP, so I looked elsewhere. In NX1 we work with Java, which I had at school. We write front-end in NW.js, which is similar to Electron, so JavaScript and Node.js. I'm so glad we chose this. Clients like it, we like to write in it. We chose Vue.js on UI and it turned out to be a very good choice. Thanks to the fact the we're doing this for a longer period of time, I got insight and dared to train under Academy 42. That was a good experience.

I consider befriending ZEIT guys as a big shift forward with JavaScript for me. Thanks to them, I understood the enormous importance of TypeScript, how to finish things and use the lambda concept. I mean, how it works internally, so implementing the ZEIT PHP runtime was much easier. From the JavaScript community I mainly take the approach to finish things. Drop things as soon as possible. It also has a dark side, everyone knows. Around JavaScript is generally a big hype and it is quite normal for a mini library to have more stars per day than all Contributte packages combined. That bothers me a little. 🙂

I've been trying to follow the Laravel community lately. Laravel is in the Czech Republic overlooked. Maybe it's not a showcase of design patterns, but the way the community presents itself is great. It totally got me and I want to do it too. Of course, everything revolves around the author Taylor Otwell, who can just sell it. In the good sense. Today when we want to write something in Nette, we reach for Nette + Contributte, of course. If we want a reactive frontend, we need a Webpack. But how to get him to Nette? Jirka Pudil wrote something, but I know it, maybe you and who else? And when the project is finished, where do we deploy it? In the Laravel world, there is the Laravel Forge or brand new Laravel Vapor. This is something we miss a lot. Not everyone wants to deploy an application using k8s or via FTP to Wedos. We need something that will let us to it in 3 clicks and voila.

We can write it down, nothing prevents us. But in Laravel it is a part of the whole platform. Everyone pulls together. I like it. I see a lot of space to improve there.

You mentioned the stars on GitHub. But they do not feed a man. You recently activated a donate program on GitHub. Would you like to get a budget for several hours of open source development that the donators will pay for? Or is it just a gesture that someone can support you in developing opensource packages?

Sure. I wanted to pioneer the way to receive money without invoicing people. Sometimes someone gets in touch and I want to work with that. I would like to spend more time on Contributte and other projects which are getting mine and I hope also other people lifes easier. I wouldn't have to hurry so much and had more room to concentrate. I would like to see some money flowing through GitHub donations so I can realize it. I believe everyone will profit from it. Especially in Planette organization, I have been trying to prepare demo projects that you can just take and start to build on top of it. This saves a lot of time. Free developers will get an up-to-date stack with the latest features in PHP and Nette/Contributte.

Contributte already has a couple of linked companies that are involved in its way. For which I thank them very much.

There are many repositories in Contributte. Are you thinking of some kind of promotion, like here on the blog? It seems to me that many people, even those who have worked with the Nette Framework for a long time, are not aware of these possibilities. Today a lot of things have been solved, but it's somehow hidden. And counting that everyone will find it themselves is a huge mistake. In my opinion, it's a quite interesting opportunity for novices who enjoy writing to help promote new libraries and devstacks.

I'm already working on some promotion. Recently two articles have been published, one on contributte/eet and other on Nettrine. More articles are on it's way.

That's great and I'm looking forward to see more introductory articles, I want to try Contributte/reCaptcha soon so if I can, I'll try to write something about it. And I would like to thank you for an exhausting conversation. I keep my fingers crossed so the awareness of Contributte and other projects will grow. It is almost unbelievable what can can be done in a limited time frame;-)

Thanks as well. I will be glad if we come up with something again. Whether in Contributte, Planette, Academy42 or elsewhere. I believe there are great things ahead of us.

More on Contributte packages can be found on contributte.org

You can support Milan on github.com/f3l1×