Týdenní poznámky: Robot v testovacím provozu, monetizace příručky

Utekl další týden (18.5. — 22.5.) a tak stejně jako minule sepisuji, co jsem dělal a co zajímavého jsem se naučil. Především se snažím rozvíjet junior.guru. Nemám šéfa, kterému bych reportoval každý svůj krok, ale mám podporovatele, a ty by mohlo zajímat, jestli se neflákám. Taky je to způsob, jak se sám doma nezbláznit a nepropadat pocitu, že je zase pátek a já jsem přitom nestihl nic udělat. Poznámky vycházejí až v sobotu, protože v pátek večer spadl GitHub.

Poznámky
Fotka od Honzy Kahánka

Během karantény jsme doma dělali nějaký ten úklid a postupně jsme nastřádali velkou hromadu věcí, kterých bychom se rádi zbavili. O víkendu jsem je nafotil a dal na Nevyhazujto. Většinou se mi vyplácí tam dát vše najednou, protože to pokliká jeden člověk a pak si pro většinu věcí přijde. To se ovšem nyní nestalo a tak chodili lidé vždy každý pro jednu věc. Poznamenalo to z hlediska produktivity první polovinu týdne, kdy jsem každou chvíli musel číst zprávy od zájemců, domlouvat se, chodit ke dveřím. UX webu i mobilní aplikace Nevyhazujto bohužel naráží na své limity především při komunikaci s více lidmi. (Ne, napíšu to jinak: JE TO PEKLO!) Jinak ovšem službu doporučuji, je mi líto nepotřebné věci s nízkou hodnotou vyhazovat, a toto je (běžně) poměrně nenáročný způsob, jak je předat dál. Zvlášť když sedím celý den doma a lidé si pro ně mohou přijít kdykoliv.

Prezentace pro PyLadies

Petr Viktorin mě poprosil o prezentaci pro brněnský kurz PyLadies. Ten se kvůli koronaviru přesunul do online lekcí a v pondělí měli předposlední. Mnoho účastnic se ptalo co dál a jak si sehnat práci, tak mi Petr napsal, jestli bych se nepřipojil přes Jitsi a neudělal pětiminutovou prezentaci.

V prezentaci jsem spíše přeskočil stránku o učení, protože tu mají PyLadies za sebou, a snažil se dát důraz na stránku o praxi. U stránky s nabídkami práce jsem zmínil, že na jejím vylepšení teď aktivně pracuji, a také jsem zmínil příručku pro juniory, kterou mám rozepsanou. Na tu se mě potom ještě dále ptaly. Chtěly vědět, kdy ji vydám a jak se o tom dozví. Odpověď, "ze sociálních sítí" jim nepřišla dost dobrá, tak se někdo zeptal, jestli o tom dám vědět i v JG newsletteru. Řekl jsem, že jo, a pak jsem zjistil, že mám 9 nových odběratelů :D

Update: Video z prezentace je nyní dostupné na YouTube.

Příručka pro juniory

Příručku pro juniory o tom, jak sehnat první práci, jsem psal z kraje tohoto roku, zhruba dva až tři měsíce. Je tam všechno, strategie na trhu, taktika na pohovoru, všelijaké tipy. Cílem bylo nejen sesbírat užitečné informace a juniorům pomoct v jejich snažení, ale také na stránky dostat víc těch, kteří si zrovna hledají práci. JG totiž navštěvují dvě docela rozdílné skupiny lidí:

  1. Začátečníci, kteří se chtějí naučit programovat,
  2. junioři, kteří už něco umí a chtějí si najít práci.

První skupina je funnel pro tu druhou, kterou už jsem schopný monetizovat. Jenže než někdo přejde z 1 do 2, může to trvat i roky. Chtěl jsem tedy vytvořit něco, co by na JG dostalo víc lidí konkrétně z druhé skupiny.

Potom se ale rozjela pandemie a já se přeorientoval na nabídky práce samotné. Přišlo mi, že vydání příručky v době koronaviru by naprosto zaniklo a že by mohl rychle zastarat i obsah. Teď už by ji vydat šlo, ale já se zasekl v nabídkách práce a v přemýšlení, jak příručku správně monetizovat. Zvlášť když jsem viděl, že Emma Bostian vydělala dost peněz prodejem PDF.

Po prezentaci pro PyLadies jsem viděl, jak velký zájem by o něco takového byl ze strany juniorů, a moje nejistota jak věc monetizovat ještě vzrostla. Proto jsem se rozhodl, že začnu dělat mentální cvičení, která mě z tohoto zaseknutí s příručkou dostanou a pomalu rozhýbou věci. Prošel jsem kontakty a vybral jsem mezi nimi několik lidí, u nichž mám pocit, že mají aspoň trochu byznysového ducha. Překvapivě to nebylo zas až tak moc lidí! Moje sociální bublina je plná dobrosrdečných geeků. Není divu, že se pak nemám ten byznys od koho naučit. Nicméně jsem někoho našel a poprosil jsem je o radu, o názor, jak bych měl příručku monetizovat. Někdo odepsal, někdo ne, konverzace průběžně pořád vedu a byť se mi už rodí nějaké východisko, nenapíšu ho sem ještě. Co si myslíte vy, mí milí čtenáři? Máte s něčím z následujícího zkušenosti? Napište mi! Možnosti jsou:

E-kniha

Text přesázet z HTML stránky do PDF nebo podobného formátu, využít nějaké platformy ala Leanpub, a vydat to jako e-knihu. Vytvořit kolem toho marketingové vlny, upoutávky, recenze, předobjednávky. Monetizuje se přímo cílovka, junioři zaplatí za něco, co fakt chtějí, zájem bude asi velký. Můj text je ovšem prošpikován odkazy a formáty e-knih mi pro toto přijdou těžkopádné. Musel bych text vysázet do knihy, odkazy, obrázky, je to něco jiného než na webu, práce navíc. Nevím, jak dobře se dá obsah aktualizovat. Obsah se zasekne v čase v době vydání. Je to výhoda, jelikož se nemusím cítit blbě když jej neaktualizuji, nebo nevýhoda, protože si po čase lidé knihu přestanou kupovat? Mám v intervalech připravovat další vydání? S knihou budu také muset řešit prodej koncovým zákazníkům a pirátění. Text knihy bude potřeba oddělit do tajného repozitáře nebo se spoléhat na to, že lidé kupují sestavenou verzi knihy připravenou ke čtení a pirátění prostě neřešit. Kolik si ale takto mohu vydělat? Budou navíc příjmy dlouhodobé nebo se jednorázově nakumulují kolem hajpu s vydáním knihy?

Tajná stránka

Příručka je v HTML a je plnou součástí webu, ovšem za nějakým heslem a přistoupit k ní může jen člověk, který zaplatil za heslo. Nemusel bych řešit věci ohledně knihy, ale zase bych musel řešit zabezpečení a přistupování k obsahu. Text by navíc nemohl být v Open Source repozitáři, podobné problémy s pirátěním jako u knihy. Řeší to akorát formát a nezaseknutí obsahu v čase do momentu vydání.

Loga firem

Mít text jako nedílnou součást JG a přístupný volně jak na webu, tak jako zdroják na GitHubu. Přečíst si ho může úplně každý, junioři jej dostanou naservírovaný na zlatém podnose a za nic neplatí, pokud mi nepřispějou někde na Patreonu. Nahoře na stránce jsou loga firem. Firmy osobně oslovuji, platí za tuto reklamu na základě vysoké návštěvnosti. Platí částku za měsíc. I kdyby tam byly čtyři loga za 3000/měs, je to hned 12000 Kč stabilního příjmu a režie jsou čtyři faktury. S firmami jsem ještě nemluvil a nevím, jestli by byly ochotné (zvlášť teď) něco takového platit. Může to být inzerce, např. logo firmy, která provozuje bootcamp, ale většinou by to bylo budování značky vůči budoucím vývojářům. Kolik firem u nás do něčeho takového investuje?

Třídění inzerátů

Kdo četl minulé týdenní poznámky, tak určitě nemůže dospat nedočkavostí, jak to dopadlo s tříděním inzerátů. Dopadlo to tak, že jsem ověřil, že detekce sekcí a složité parsování struktury inzerátu není potřeba. Občas se stane, že se nějaká informace vyhodnotí špatně, protože se vyhodnocuje bez kontextu, ale s tím si musí třídění poradit tak jako tak. Vypadá to, že oproti očekáváním se to neděje vůbec často a na globální výsledky to nemá praktický vliv.

Lexer jsem ale nechal zapojený, protože inzeráty normalizované do sekcí a odrážek v obyčejné textové podobě se mi četly mnohem lépe, než v hrubém HTML :D Využívám tedy s radostí lexer na kontrolu algoritmů v administraci. Zatím je to tedy jako bych si koupil Lamborghini a pak s ním vozil seno. Lexer bych mohl odstranit a inzeráty zobrazovat čitelněji i bez hromady mad scientist kódu, jenž bych jinak musel do budoucna udržovat, ale třeba se ještě bude hodit. Uvažuji už o krok napřed a pro některé věci, jako třeba detekce technologií, které inzerát prezentuje jako vyžadované, by se možná bez znalosti kontextu už dělaly špatně. Ale uvidím. Přinejhorším prostě ten kód smažu později, až mě to nebude tolik mrzet.

Během tohoto týdne jsem pokračoval v práci na sémantické analýze inzerátů a během pátku už došel do stavu, se kterým jsem byl celkem spokojený. Práce na analýze zahrnovala vždy projít ručně 300-400 nabídek práce, okopírovat z nich zajímavé věty do testů, potom pouštět testy a ladit analýzu tak dlouho, dokud testy neprojdou, následně pustit analýzu nad reálnými daty, a… vrátit se do bodu jedna. Toto celé opakovat tak dlouho, dokud se mi nelíbí, co z analýzy leze. Bylo to trochu na hlavu a překvapivě hodně časově náročné. V půlce týdne už jsem z toho začínal blbnout. Bál jsem se, že kopu další tunel a pálím čas. Dal jsem si tedy termín, že do konce týdne budou prostě stahované pracovní nabídky živě na webu, ať už budou jakékoliv. Že to prostě musím nějak vymyslet.

To mě (konečně!) donutilo zefektivnit práci a vymyslet, jak spoustu věcí zatím neřešit. Během pátku jsem měl inzeráty ohodnocené a seřazené podle vlastního JG ranku (vážený součet), jenž jsem stihl i trochu poladit k lepším výsledkům (vylepšený™️ vážený součet). Nemám zatím vyřešené společné zobrazení inzerátů z JG samotného spolu se stahovanými nabídkami, tak jsem to zatím obešel a vytvořil prostě seznam zvlášť. Taky zatím nevím, co se tam bude objevovat, tak jsem napsal, že je to v testovacím provozu.

A je to. A je to tam!

No. Během pátku jsem s hrůzou pozoroval, jak můj super vyladěný JG rank hodnotí jednotlivé nabídky s vysokou korelací k tomu, jestli se v názvu nabídky nachází slovo "junior" nebo ne. Mohl jsem si to celé ušetřit a zobrazit prostě jen nabídky se slovem junior v názvu? Mohl! Měsíc jsem něco programoval zbytečně. Je moje současné řešení lepší? Je. Objektivně, je. JG rank umí ztrestat nabídky, které jsou označeny jako "junior", pokud obsahují vysoké nároky. A mám radost i z každé nabídky, která není v titulku označena jako juniorní, ale ve skutečnosti je, a JG rank ji najde.

Jenže jsem to celé mohl programovat až jako další krok. Už dávno mohly být na JG nabídky odjinud, vyfiltrované na slovo "junior". Nebylo by to dokonalé, ale bylo by to good enough. Mohl bych pracovat i na jiných věcech, vydat příručku, prozkoumávat dál různé cesty s byznys modelem, inzeráty bych vylepšoval inkrementálně, každý den bych mohl mít radost z drobných výher a chlubit se jimi. Takto jsem se zavřel na měsíc do kamenolomu.

Poučení: Termín mi někdy může pomoct vyhrabat se z hnoje. Programování je kryptonit pro rozjíždění projektu. Jak začnu programovat, tak mi to sežere veškerý čas. Programuju totiž rád a jsem schopen programovat i jen proto, aby se programovalo. Místo abych přemýšlel, jak to udělat bez programování nebo s minimálním programováním (což už se mi několikrát úspěšně povedlo!), tak se hlava přepne do režimu, ve kterém je na vše jen jedno řešení: více kódu.

Další poznámky

  • Jeden mentorovací videohovor.
  • Pokračoval brainstorming s jedním mentorem o tom, jak ideálně prezentovat české mentory na JG.
  • S Danem jsme brainstormovali nad tím, jestli by na JG mohla být databáze juniorů (směrem k zaměstnavatelům nebo mentorům) a jak by to šlo udělat. Napadlo mě to už dřív, ale až když jsem psal druhému člověku, že něco nejde, tak mě napadlo, jak to udělat :)
  • Kamarádka vydala článek, kterému jsem dříve dělal review, a protože je super, tak jsem s ním otapetoval internety.
  • Opravil jsem vytváření unikátních ID pro stahované inzeráty. Nyní se počítá s tím, že když stahuji inzerát pro více měst, data se rozkopírují do více totožných inzerátů. Před opravou tato situace vyhodila chybu, vytvořilo se duplicitní ID.
  • Adel Popelková mi poslala tip na slevu, kterou mají na RealPython. Přidal jsem ji hned do seznamu slev souvisejících s covidem-19.
  • Hned v pondělí jsem napsal rychlý článek o tom, jak z Pythonu notifikuji sám sebe, když něco dlouho běží a pak to skončí.
  • Po vydání článku jsem se opět rozčiloval nad tím, že se na FB a Twitteru nenačítá náhledový obrázek z mého blogu. Při debugování problému na FB jsem si ale všiml, že mi radí, abych přidal tagy og:image:width a og:image:height. Zkusil jsem to. Jestli to pomohlo zjistím až budu sdílet tento článek. Update: Opravdu to pomohlo!
  • Pavel mě už nějaký pátek sponzoruje přes GitHub Sponsors, a to částkou, která znamená, že by měl mít odkaz v seznamu sponzorů na JG. Všiml jsem si, že ten odkaz ještě nemáme dořešený, tak jsem do něj šťouchnul, a uzavřeli jsme to.
  • Taky jsem dostal nápad, jak víc propojit juniory a Python komunitu. Možná je to úplná blbost, ale rozjel jsem o ní na Pyvec Slacku vlákno:

Nápad: Když se někdo učí programovat, v druhé fázi potřebuje nějaký praktický projekt. Málokdo má schopnost si nějaký sám vymyslet. Zároveň je těžké najít mentora nebo Open Source projekt, který je beginner-friendly. My zároveň máme v komunitě pár projektů, hlavně asi webů, kde je hodně malých úkolů. Takové se občas snažíme řešit na sprintech apod. Možná by šlo ale na GitHubu "olabelovat" ty nejvíc beginner friendly a nabídnout je k rozebrání začátečníkům s tím, že je komunita zkusí nějak "odmentorovat" k výsledku? Většina začátečníků, kteří jdou přes JG se učí Python. Je to asi hlavně o maintainerech jednotlivých těch věcí a muselo by se to trochu připravit, ale vyhlídka by mohla být, že ti lidi u toho třeba i zůstanou, zapojí se v komunitě, maintainer na to nebude časem sám, atd. Co si o tom myslíte? Reálné, nereálné?

  • Udělal jsem review na dva kamarádovy rozepsané články a jedno další review na rozepsaný článek od kamarádky.
  • Zjistil jsem, že nějaké HR systémy (asi?) exportují hromady nekvalitních inzerátů na LinkedIn a já je potom stahuji a hodnotím. Inzeráty mají useknutý text nebo i rozbité kódování. Naprogramoval jsem tedy vyhazování těchto nesmyslů. Vyzkoušeno za vás: Inzerát, který má pod 600 znaků je v 95 % smetí. Inzerát, který obsahuje víc jak 20 otazníků, má špatné kódování.
  • Po upgradu instant.page si Firefox myslel, že JG vytváří pop-up okna. Eh. Takže jsem zase downgradoval a založil issue.
  • Vyšel článek o rozhovoru, který jsme vedli spolu s klukama z Engeto. Juchů! Příští týden s ním otapetuju internety.

P.S.: Těší mě, že moje týdenní poznámky inspirují další lidi, aby psali týdenní poznámky :)