Rozhovor s Milanem Šulcem o Contributte a Open Source

před 4 lety od Honza Černý  

Asi každý z nás občas použije komponentu třetí strany ve své aplikaci. Hledat tu správnou můžete na Google nebo třeba portále componette.org. A možná jste už někdy použili komponentu z rodiny Contributte. Za vznikem obou projektů stojí Milan Šulc aka f3l1× a tohle je rozhovor s ním.

Ahoj Milane, pro ty, kteří tě neznají. Mohl by ses malinko představit? Já na tebe prásknu, že jsi členem Nette Core týmu, programuješ a staráš se o komponentový portál componette.org a jsi hlavním koordinátorem Contributte balíčků. Zapomněl jsem něco důležitého zmínit?

Ahoj Honzo. To jsi zmínil moje open source aktivity, jinak ještě klasicky programuju za peníze. :) Máme menší firmu, kde analyzujeme síťový provoz a píšeme různé nástroje pro provisioning. Také programuji nějaké interní nástroje pro Tlapnet, resp. ISP Allianci, obecně poskytovatele internetu a služeb okolo.

To takhle jak čtu, tak se divím, že máš čas na tolik open source aktivit. Máš nějaký denní harmonogram, kde si ten čas najdeš, nebo máš možnost na open source pracovat v rámci své práce?

Sám se někdy divím. Řekl bych, že největší podíl na tom má Terka, moje žena, která se stará prakticky o všechno, kromě kódování. Bez ní by to určitě nešlo, za což moc děkuju. Někdy mě i vyhání, že jsem dlouho nebyl na žádné IT akci. Harmonogram vyloženě nemám. Snažím se samozřejmě vždy všechno správně plánovat, aby byli všichni spokojení. Tím, že dělám i sám na sebe, tak si můžu spoustu věcí nastavit podle sebe, nabrat si toho méně/více. Osobně zastávám názor, že reputaci má člověk jenom jednu, takže dělám všechno pro to, aby byla co nejlepší. Pokud možno.

Téměř většina mých opensource aktivit, třeba i 80 %, je přímo použita v naší firmě nebo v nějaké jiné. Nejvíce je toho nejspíš v Tlapnetu, tam je celá kolébka Contributte balíčků. Každý balíček jde do produkce nebo už dávno běží. Za to Tlapnetu patří velký dík, bez nich by to nešlo. Obzvlášť Pavel Míča, který odpovídá za vývoj, má v tomto velmi dobrý nadhled. Vše spolu konzultujeme a ladíme, aby se nám to dobře používalo. A ono se ukazuje, že když se to dobře používá nám, tak i ostatním.

Jak jsi ve firmě dokázal prosadit, že některé komponenty, co si tam píšete, tak vydáte jako open source balíčky?

Čoveče, dobrá otázka. U nás ve firmě to bylo snadné. Jsme tam tři. Dva core vývojáři a jeden člověk co řeší všechno, kromě core kódění. Oba jsme si prošli řadou firem, jsme celkem aktivní v IT komunitě. Používáme řadu open source nástrojů, takže chceme také přispět. Pozorujeme, že spousta vývojářů se už dnes dívá, jak firmy přistupují k open source, obecně jak moc mají aktivní GitHub. Tak doufáme, že se nám to někdy otelí a budeme též zajímaví pro ně. V NX1 aktivně nehledáme nové lidi, protože na to nemáme čas a zároveň nechceme využívat HR, samotné nás ty věčné nabídky a uhánění štvalo. Suma sumárum ti tedy moc možností nezbývá. V Tlapnetu Pavel vždycky říkal, my to potřebujeme, nakódit se to musí. Kde to bude publikované, to je implementační detail. Třeba nám někdo pošle PR a pak přijde profit. Kód se stejně musí napsat a přidat k němu, v první fázi, README je otázka par minut. Alespoň nás to donutí ty věci dokumentovat. Na začátku jsem pár balíčků udělal ve volném čase. Nějaké se udělali v rámci Tlapnetu, třeba Apitte. Dali jsme tomu čas a profit přišel. Najednou nám to začalo dávat smysl víc a víc.

A už jsi od začátku mířil s Contributte tak vysoko? Dnes je tam skoro stovka komponent a přes desítku vývojářů. Máš nějako plány do budoucna kam by si chtěl s touhle skupinkou jít?

Možná to bude znít divně, ale já vždycky chtěl něco dokázat. Bylo jedno co nebo kde, ale zkrátka něco. Abych si mohl říct, tohle jsem vybudoval. Aby na mě mohl být někdo pyšný. To mám asi po tátovi. A jelikož neumím nic jiného než programovat, jakože lautr nic, tak jsem se snažil v programování. Omezil jsem skoro všechno, abych měl co nejvíce času na programování. Práce je mým koníčkem, takže když připočteš, že Terka (manželka), řeší všechno ostatní, mám kolem 10–12h denně na to pracovat, vzdělávat, nebo si jen tak kódit. V Nette se před spousty lety naskytla možnost něco udělat. Lidi byli takový zapšklí, pesimističtí, všechno hejtovali. Když jsem přišel s prvním nápadem na Componette, tak reakce nebyly pozitivní. Ba naopak. Docela mě to zklamalo. Chtěl jsem se na to vykašlat, ale naštval jsem se a udělal to podle sebe. Nikoho jsem se neptal. Prostě jsem to udělal.

Ani potom nebyla reakce nějak optimistická, ale Componette bylo zkrátka lepší než původní Addons portal. Už jen z toho důvodu, že je plně autonomní. Proč o tom mluvím. U Contributte myšlenka byla stejná. Nelíbil se mi balíček Kdyby/Console, takže jsem udělal Contributte/Console. Nikoho jsem se neptal. A tak to vlastně pokračovalo dál a dál. Tvořil jsem si ty věci podle sebe. Nikdy jsem si nemyslel, že Contributte bude takové, jako je nyní. Neříkám, že jsem o tom nesnil, ale víš jak, snít se může o všem. Contributte teď vnímám jako obří projekt. Fakt obří, který se neustále vyvíjí a transformuje. Poučen z nezdaru ostatních jsem věděl, že to nemůžu dělat sám. Takže jsem postupně začal přemýšlet, jak zapojit další lidi. Ba co víc, jak je nadchnout, aby jenom nepřevedli balíčky pod Contributte a pak na to nehodili bobky. Pořád nevím, jestli se mi to daří, nebo ne.

Čím je více balíčků a lidí v organizaci, tak člověk musí řešit věci co sám neřešil. Codestyle, psaní testů, dokumentaci, volbu CI, komplexitu kódu, web, komunikaci, úkoly atd. Všechno tohle se musí držet jednotně. A to žere hrozně moc času. Neříkám, že mě to nebaví, ale od psaní kódů pro radost, jsem najednou někde jinde. A ten čas a práce není už vůbec vidět. Nějaká automatizace deploymentu u webu, která mi ušetří i hodiny. Všimne si jí někdo? Nope.

Budoucnost vidím v nějaké stabilizaci. Bližšímu propojení s Nette. Např. jako má Nuxt a Vue. Nuxt je nadstavbou nad Vue, abys nemusel řešit věčně dokola opakující se věci. Když má něco přijít do Vue, tak o tom v Nuxtu vědí a konzultují to. Aby to bylo co nejvíce příjemné, řeší DX (developer experience, pozn.). Také bych rád navázal větší spolupráci s firmami. Rozsah feature u Nette je celkem daný, tam nemůžeme čekat, že se třeba přijde feature v podobě přihlášení do Facebooku nebo nějaká práce s cronem. Tam vidím smysl Contributte. Postavit solidní základnu rozšíření, abys byl schopen postavit téměř jakýkoli projekt, nemusel jsi řešit tyhle omáčky, ale jenom svůj business. No a pochopitelně jsou i další nápady, ale to bych nechtěl prozrazovat. Ať se můžeš na něco těšit.

Máš nějaké top 3 favority z Contributte?

Top 3 favority nemám heleď. Nedokážu to nějak určit. Contributte jako takové se skláda i z vícero organizací. Například Apitte pro jednoduchou a snadnou tvorbu API a Nettrine pro integraci Doctrine ekosystému. Bylo pro nás zajímavější to takto rozdělit, protože Composer nemá dobrou podporu pro monorepa. Musí se to řešit obezličkami a to nemám úplně rád. Přemýšlíme ale nad tím, že bychom z Apitte udělali zase jeden balíček, protože nejčastější použití je mít plnou sadu. To jsem na začátku nevěděl. Pořád je kam jít dál.

Kde bereš různé nápady? Vím že si i dost hraješ s Javou, Node.js nebo javascriptovými frameworky. Jsou pro tebe tyhle komunity inspirací? Dokážeš tyhle různé ekosystémy porovnat? Co se ti třeba líbí na světě JavaScriptu?

Na začátku bylo nápadů plno. Tady jsem viděl něco, řekl jsem si, že to naimplementuju lépe. Znáš to, naivní mlaďák. Jsem celkem systematik, na všechno mám TODO listy. Můj idea list má asi 150 položek, nechávám to uzrát. Někdy už mě PHP štvalo, tak jsem pokukoval jinde. V NX1 děláme s Javou, tu jsem měl i na škole. Front-end píšeme v NW.js, podobná technologie jako Electron, takže JavaScript a Node.js. Jsem za to hrozně rád, že jsme tohle zvolili. Klientům se to líbí, nám se v tom dobře píše. Zvolili jsme Vue.js na UI a to se ukázala jako velmi dobrá volba. Díky tomu, jak dlouho už to děláme, tak jsem získal vhled a troufl si na školení pod Akademií 42. To byla dobrá zkušenost.

Za můj velký posun v JavaScriptu považuju spřátelení s kluky z firmy ZEIT. Díky nim jsem pochopil obrovský význam TypeScriptu, tahu na branku a vlastně i konceptu lambd. Tím myslím jak to funguje interně, takže pak naimplementovat ZEIT PHP runtime bylo o dost snazší. Z JavaScript komunity si odnáším hlavně ten tah na branku. Co nejdříve věci vypustit. Má to i temnou stránku, to každý ví. Kolem JavaScriptu je obecně velký hype a je úplně normální, že za den má nějaká mini knihovna více hvězdiček než všechny Contributte balíky dohromady. To mě trochu trápí. 🙂

Snažím se v poslední době sledovat Laravel komunitu. Na Laravel se v ČR kouká dost přes prsty. Možná, že to není výstavní skříň návrhových vzorů, ale to, jak se ta komunita prezentuje, je super. Úplně mě to dostalo a chtěl bych to dělat také. Vše se pochopitelně točí okolo autora Taylora Otwella, který to dokáže skvěle prodat. V tom dobrém smyslu. Dneska když chceme v Nette něco napsat, tak sáhneme po Nette + Contributte, pochopitelně. Pokud chceme reaktivní frontend, tak potřebujeme třeba Webpack. Ale jak ho do Nette dostat? Jirka Pudil něco napsal, ale vím to já, možná ty a kdo dál? A když už je projekt hotový, tak kam ho deployneme? V Laravel světě je Laravel Forge nebo akční novinka Laravel Vapor. To je něco, co nám chybí. Ne každý si chce deploynout aplikaci pomocí k8s nebo přes FTP na Wedos. Chce to něco na 3 kliknutí a voila.

Můžeme si to napsat, nic nám nebrání. Ale tam je to součástí celé platformy. Všichni táhnou za jeden provaz. To se mi líbí. Tam vidím velký prostor.

Zmínil jsi hvězdičky na GitHubu. Ty ale člověka neuživí. Nedávno jsi aktivoval donate program na GitHubu. Chtěl bys tím něco konkrétního získat, rozpočet na několik hodin opensource vývoje, co by platili donators? Nebo to je jen takové možné gesto, že tě někdo může podpořit ve vývoji opensource balíčků?

Tak určitě. Chtěl jsem prošlapat cestu, jak přijímat peníze. Bez toho, aniž bych je fakturoval. Občas se někdo ozve a na tom bych chtěl zapracovat. Líbilo by se mi, kdybych si mohl vyčlenit více času na Contributte a další projekty, které mě a doufám, že i ostatním zpříjemňují život. Nemusel bych se tak hnát a měl víc prostoru se soustředit. Moc bych si přál, aby přes GitHub donations začal proudit nějaký objem peněz, abych to mohl uskutečnit. Věřím, že na tom budou profitovat všichni. Zejména v Planette organizaci jsem se v posledním roce snažil připravit ukázkové projekty, které stačí vzít a stavět na nich. To ušetří kvanta času. Defacto zadarmo vývojáři dostanou up-to-date stack s posledními výstřelky v PHP a Nette/Contributte.

Contributte už má aktuálně pár navázaných firem, které se svým způsobem podílejí na chodu. Za což jim velmi děkuji.

Těch repozitářů je tam celá řada. Přemýšlíš o nějaké propagaci, třeba tady na blogu? Přijde mi, že spousta lidí, i ti kteří s Nette Framework pracují déle, o těchto možnostech inspirace neví. Dnes je spousta věcí již vyřešená, jen je to někde zapadlé. A počítat s tím, že to je všem jasné a najdou si to, je obrovská chyba. Dle mě i celkem zajímavá příležitost pro nováčky, které baví psát, aby pomohli nové knihovny a devstacky propagovat.

Už na nějaké propagaci pracuji. Nedávno vyšly dva články, jeden o contributte/eet a pak o Nettrine. Časem by měly přijít další.

Tak to je super a moc se těším na další představovací články, sám si chci brzo zkusit Contributte/reCaptcha tak pokud to půjde dobře, zkusím k tomu něco napsat. A tím bych ti poděkoval za vyčerpávající rozhovor. Držím palce s rozšiřováním povědomí o Contributte a dalších projektech. Je až neuvěřitelné, co vše lze stíhat 😉

Taky díky. Budu rád, když spolu zase něco vymyslíme. Ať v Contributte, Planette, Akademii42 nebo jinde. Věřím, že nás čekají velké věci.

Více o Contributte balíčcích najdete na contributte.org

Podpořit Milana můžete na github.com/f3l1×