Týdenní poznámky #43: Paní z HR, kurýr z Dáme jídlo, MkDocs a nová úvodní stránka

Utekl další týden (22.3. — 26.3.) 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 klub podporovatelů, 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
Fotka od Honzy Kahánka

Twitter: Paní z HR, kurýr z Dáme jídlo

Ač se snažím blokovat si sociální sítě, tento týden jsem se dost pohyboval na Twitteru. Začalo to tím, že mě někdo upozornil na diskuzi pod statusem Paní z HR. Protože to bylo velice relevantní téma k tomu, co dělám, prošel jsem celou diskuzi pod tím a trochu tam zaúřadoval s odpověďmi. Snad jsem to moc nepřehnal. Každopádně mi přijde, že se díky tomu o JG dovědělo zase pár lidí mimo moji bublinu, což vždy potěší. Přijde mi totiž, že se mi moc nedaří prorazit bublinu a statusy na sociálních sítích už masíruji pouze přesvědčené fanoušky, popřípadě otravuji ty, které JG nezajímá. Sítě jsou ale můj hlavní marketingový kanál, takže je v mém zájmu, aby zasahovali lidi víc a víc i mimo bublinu. Nechci zase nějak spamovat, doufám, že v diskuzi u @PaniZHR jsem psal přínosné věci.

Další smršť přišla potom, co se mi ve čtvrtek večer stala neuvěřitelná příhoda s kurýrem Dáme jídlo. Během dne jsem poslal fakturu další firmě, která se rozhodla stát se členem klubu JG, takže jsme si s manželkou řekli, že se večer rozšoupnem a večeři si necháme dovézt :D Naštvalo mě ale, že jsem si nemohl objednat z restaurace, do které jsem při hezkém počasí schopen dojít i pěšky, takže jsem Dáme jídlo na Twitteru trochu vyhejtil. Objednali jsme jinde, přijel kurýr, přebírám jídlo. A on pak říká: „Nemáte náhodou takový ten web, guru… junior? Já se teď učím Swift, no vy tam doporučujete ten Python, tak se na něj možná taky podívám… Uvažuju o tom vašem klubu, co jste spustil, ale ještě tam nejsem…“ No stál jsem tam před ním v teplákách a zíral jsem a jen jsem opakoval nějaké hloupé věty jako že to je fakt náhoda a byl jsem úplně vedle :D Nenapadlo mě vůbec nic rozumného. Vzít si na něj kontakt. Popřát mu, ať se mu daří. Dát mu samolepku, když už ho tam mám fyzicky. Ne, prostě jsem tam jen stál jak trubka a čuměl na něj :D Takže pokud toto, drahý kurýre, čteš, omlouvám se, že jsem tam stál jak trubka, ale věz, že mi to udělalo hroznou radost. Pokud se mi ozveš, něco spolu vymyslíme, taková náhoda se nemůže nechat jen tak :)

Tweetnul jsem o tom a k dnešnímu dni to má asi 250 lajků, což je snad nejvíc v mém životě, nevím :D Bublá mi to tam v notifikacích už druhý den, followují mě lidi, už jen čekám, kdy mi někdo napíše, že jsem si to celé vymyslel a jen doplní „a pak jsi zavřel dveře a celá tramvaj ti zatleskala“. Každopádně mě potěšilo, že nejsem sám, kdo v takové chvíli jen zírá a neví.

To, že se něco takového stalo, je fakt haluz a samozřejmě mě těší, že to, o co se snažím, má až takto viditelné výsledky. Možná bych reálný dopad JG pociťoval víc, kdyby nebyla pandemie a já chodil na programátorské srazy a tam potkával lidi, kteří se díky JG dostali k programování, ale takto si je mohu jen představovat. Nemám vůbec tušení, kde všude se to používá. Jen náhodou se dovím o tom, že si o JG říkají třeba na VŠB. Nebo objednávám u právničky obchodní podmínky a ona mi řekne „Aha, to jste vy s tím junior.guru? O tom jsem už slyšela!“ :D Takové věci mi rozhodně dělají radost a dávají mi ohromnou motivaci pokračovat v tom, co dělám. Sice mě to zároveň děsí, protože jsem jen týpek v teplákách objednávající si pelmeně a ne celebrita, ale asi to prostě souvisí s tím, že JG spojuji se svým ksichtem. Jednak je to one-man show a přiznat, že jsem za tím jen já, je určitý druh transparentnosti, jednak mám nějaké předchozí komunitní zásluhy a JG se díky nim mohlo svézt na mém existujícím osobním brandu. Akorát mám teď dojem, že JG už asi veškeré mé předchozí zásluhy trumflo, je slavné samo o sobě a naopak teď můj osobní brand živí. Tak či tak, dokud mě nebudou lidi zdravit u pisoáru v hospodě, asi to pro dobro projektu a své kariéry přežiju.

Že bude tweet tak úspěšný jsem netušil a osobně mi vrtá hlavou, proč to na lidi tak funguje. Mám z toho ale radost, objevila mě díky němu i spousta nových lidí a třeba se povědomí o JG ještě rozšíří.

PoC s MkDocs

Rozhodl jsem se, že zkusím, zda by šlo postupně portovat JG z Frozen-Flask na MkDocs. Důvody jsou udržovatelnost, možnost aby přispívali i ostatní, atd. Frozen-Flask jsem vybral proto, že jsem jej znal z projektů pro Python komunitu. Tam jsme se k němu zase dostali tak, že jsme původně měli dynamické Flask appky a chtěli je předělat na statické weby. Do začátku to bylo v pohodě, zastával jsem hodně přístup, že udělám vše tím nejpřímějším možným způsobem, takže je doteď veškerý obsah JG prostě v HTML. Zjistil jsem, že mi dává maximální flexibilitu a i texty v něm jdou psát dostatečně rychle. Kdybych začal s Markdownem, každou chvíli bych řešil, že doprostřed textu potřebuji dát nějaký box s něčím a kdo ví co.

No ale teď už jsem ve fázi, kdy fáze prototypování je nejspíš za mnou a především po pivotu byznys modelu už si dovedu představit, jaké řešení by stačilo na všechny moje potřeby, před pivotem, po něm, i do budoucna. A věřím v této chvíli po prvotním průzkumu tomu, že kdyby JG bylo na MkDocs, zvládlo by to vše, co potřebuji a zároveň by to byl mnohem jednodušší a přehlednější projekt. Což o to, já se v něm vyznám, ale kdybych chtěl, aby do toho začali přispívat i jiní, to by už bylo horší.

Jenže jak to portovat? Jsem velkým zastáncem continuous delivery, takže rozhodně ne tak, že si to začnu někde plácat bokem, tam to budu připravovat půl roku a pak udělám VELKÉ PŘEPNUTÍ z verze na Flasku na verzi na MkDocs. Jen si to představím a hned bych vyjmenoval 10 důvodů, proč je to špatně, proč bych to nikdy nedokončil, proč by se mi zpomalil veškerý vývoj… Ne ne. Musí to umět existovat zároveň! Takže jsem tento týden vynalézal způsob, jak MkDocs nastavit a zakomponovat do projektu tak, aby dokázalo generovat stránky, které přepíšou stránky vygenerované Flaskem. Potom jsem si dal za úkol jednu z méně významných stránek postupně překlopit do MkDocs. Vyřešil jsem postupně všechny problémy a výsledkem je tato stránka. Negeneruje ji Flask, ale MkDocs. Je v designu webu, je odkazy propojená se zbytkem. Akorát mi chybí CSS obsahu, to musím ještě vymyslet, jak udělám. Potom tuto stránku přejmenuju z /test/ na /privacy/ a tu původní odeberu z Flasku. Srovnání zdrojáku stránky, aby bylo jasnější, proč to dělám: před, po. Důležité zdroje:

V rámci tohoto Proof of Concept jsem použil plugin do MkDocs mkdocs-simple-hooks, ale zjistil jsem, že je v něm nějaká chyba. Reportoval jsem ji tedy a když autor souhlasil, že má výtka dává smysl a můžu poslat Pull Request, poslal jsem opravu. Myslel jsem, že to bude oprava na dva řádky, ale nakonec jsem s tím celkem bojoval. Naučil jsem se při tom něco o Python importech. Zajímavostí budiž, že požadavek na 100 % coverage testů na projektu odhalil, že část kódu projektu se po mých změnách stane mrtvým kódem a může být smazán. Pochybuju, že bych si toho bez coverage všiml já nebo autor. Nejsem coverage fanatik, ale tohle bylo fajn! Autor se chce na PR podívat o víkendu, ale já ho netlačím, protože jsem si knihovnu nainstaloval z gitu ze svého repozitáře a takto ji mohu používat, dokud to nemergne.

„Nová“ úvodní stránka JG

Začátek týdne jsem celý strávil tím, že jsem navrhoval novou úvodní stránku a novou stránku pro klub. Popsal jsem a pokreslil u toho asi 20 papírů a ladil jsem to do posledního detailu. Bylo to nádherné, krásné, dokonalé.

Jenže vytvořit to by znamenalo udělat na JG podstatné změny. Hotové by to bylo minimálně až za několik týdnů. A to už jsem slevil z toho, že nejdřív celý web portuju na MkDocs a předělám celé CSS :D

No, jak asi tušíte, nerealizoval jsem to. Když jsem byl na svém dlouhém běhu, došlo mi, že to nejpodstatnější, co chci dokázat, je dostat víc lidí do klubu, který na úvodní stránce nebyl skoro vůbec přítomný, ač je to teď to hlavní, co mi generuje příjem. Začal jsem přemýšlet nad tím, jestli nejde existující úvodní stránku zprasit tak, aby prostě jen lépe řešila ten konkrétní problém, a úplně novou že bych udělal později.

Když jsem si to v hlavě rozložil, zjistil jsem, že by to bylo jednoduché. Hlavičku stačí nahradit tím menu, které je na všech ostatních stránkách. Na žluté části stačí přepsat text na něco, co vede na klub. Texty jsem měl už vymyšlené a vyladěné pro novou homepage, akorát bych je napsal do té existující a přejmenoval tlačítko. Sekce o nabídkách práce? Ty mi teď nevydělávají skoro nic. Když tam měsíc ta sekce nebude, stane se něco? Ne. Šup s ní zatím pryč. Sekce s odkazem na newsletter. Vydělává něco? Ne. Šup s ní zatím pryč. Pak stačilo sekci s kuřatama přebarvit z bílé na černou, trochu doladit texty a odkazy na příručku a bylo to. Jsem zvědav, jestli teď fakt víc lidí objeví klub.

Jsem s novou homepage spokojen? Ani za nic. Nejradši bych to celé spláchl do záchodu a udělal tu novou, voňavou. Řeší ten problém, který měla ta předchozí? Je v tomto směru lepší? Je, mnohem. Byla hotová za dvě hodiny práce? Byla. A je to CSS kód, který jsem psal ještě předtím, než jsem začal dělat věci v BEM, takže babrat se v tom byla fakt prasárna. Ale i tak to bylo rychle. Úkol splněn. Předělávání úvodní stránky se odkládá, tohle teď bude stačit. A trvalo jen pár týdnů, než jsem přišel na to, jak to udělat za dvě hodiny :D

Nahrávání zvuku na macOS

Kvůli nahrávání klubových přednášek jsem řešil problém, kdy přes OBS nelze ve výchozím stavu nahrávat audio z jiných aplikací:

  1. OBS doporučuje iShowU Audio Capture, ale tento program už neexistuje.
  2. V diskuzích někdo zmiňoval Loopback. Ten je placený, ale lze zdarma vyzkoušet. Nainstaloval jsem jej, brew install loopback --cask. Využívá kernel extension, takže jsem kvůli tomu musel asi desetkrát zadávat heslo, restartovat počítač a něco nastavovat v super security módu, aby to vůbec jelo. Ale jelo to, funguje. A pracuje se s tím krásně, vyladěné GUI! Ale 2700 Kč (a pak časem 1400 Kč za upgrade na novou verzi) je celkem pálka, když mě neživí podcasty apod., ale chci jen občas nahrát záznam obrazovky pro těch pět lidí, co v době přednášky neměli čas.
  3. Člen klubu mi doporučil Soundflower, což je open source. Má to zajímavý příběh, lze to nainstalovat přes brew install soundflower --cask, ale já to na M1 vůbec nenainstaluju. Na GitHubu projektu je i přímo napsáno, že to na Apple Silicon nefunguje, ale zřejmě to nefunguje ani obecně na novějších macOS a není to už vyvíjeno.
  4. Přes AlternativeTo jsem našel další podobné aplikace a našel jsem tak BlackHole. To je open source a funguje a je to boží!

Takže můžu přes OBS nahrávat přednášky, hurá. To abych teď naplánoval nějakou další :)

Landing pages PoC

Napadlo mě, že bych mohl vytvořit landing pages podle určitých klíčových slov, abych odchytal lidi z vyhledávačů na věci jako „recenze na PyLadies“ nebo „vyplatí se bootcamp“ a tak. Vytvořil bych stránky, které na tato spojení nějak cílí a tam by bylo napsáno, že přesně takové věci se řeší u nás v klubu a třeba i čísla („PyLadies někdo zmínil už 42krát“) nebo i nějaké anonymizované útržky, ukázky reálných diskuzí. Je to jen nápad a zatím jsem si jen zkusil vytvořit skript, který projde zprávy na Discordu a je schopen je vytřídit podle toho, jestli zmiňují nějaké klíčové slovo. Jestli to bude dál nějak použitelné, to uvidím. Snad to není nějaká black hat SEO technika, nevyznám se v tom :)

Daňové přiznání

Divili jste se, že DPFO nepodávám datovkou apod., ale chci jej doručovat poštou na papíře. Některé argumenty si můžete projít na mém Twitteru, ale pojďme tomu dát ještě šanci.

Řekněme, že papíry mám od daňaře vyplněné v PDF a už jsem jej nechtěl dále otravovat. Tedy nechci po něm žádat, aby to podal za mě, nebo aby mi generoval nějaká další XML. Jsem ale ochotný jít a ručně z papírů čísla přepsat do formulářů online. Začněme něčím jednoduchým, třeba VZP. Přihlásím se a tam toto:

VZP web

To je jistě perfektní, pokud o DPFO nic nevím a nemám už v ruce vyplněný přehled, ale pokud jej mám, tak tato políčka se nejmenují jako nic, co je na tom papíře.

VZP PDF

Takže abych je vyplnil, musel bych pochopit, co přesně do nich patří, nemohu to jen 1:1 opsat. V praxi to znamená, že bych si daňaře platil zbytečně, protože kvůli neochotě chápat ten formulář a rozumět těm políčkům jsem si jej najal. Tak smůla, třeba za rok. Zkusím daně nebo sociálku. Je rok bankovní identity, třeba to půjde! Datovku nemám, takže mohu využít MojeID nebo banku. Jenže MojeID jsem stále ještě neaktivoval, jelikož to vyžadovalo jít na poštu. Pokud ale mám jít na poštu, to už tam rovnou mohu poslat ty papíry. Dobrá, zkusím banku. Jediná z mých bank, která umí tu novou identitu, je AirBank.

Airbank

No, takže taky nic. Nedostanu se ani na daňový portál, ani na ČSSZ. A toto je přesně ten důvod, proč při DPFO ty věci tisknu na papír a posílám poštou. Nenarážím při tom na žádné problémy. Nicméně celé toto cvičení má aspoň jeden pozitivní dopad, zjistil jsem, že mohu příště daňaře požádat, aby to všechno podal mým jménem. Tím pádem bych mohl příště delegovat i toto a nemusel o DPFO už napsat jediný tweet v životě.

Další poznámky

  • Po tom, co jsem minulý týden zjistil, že existuje SPF, přidal jsem jej i na svou osobní doménu a doménu manželky.
  • Měl jsem videohovor s Inuits, kteří měli zájem stát se členy klubu. Dohodli jsme se a faktura už je na cestě :) Bylo fajn zjistit, že jedna z účastnic hovoru JG už delší dobu sleduje na LinkedIn a fandí mi :)
  • Pozavíral jsem ty issues na GitHubu JG, které jsem kdysi vytvořil sám jako vlastní poznámky a nápady. Všechno kolem JG si třídím v Trellu, takže je zbytečné to mít ještě jinde. Issues nechám jen jako způsob, jak mi mohou lidé zaslat nápad nebo nahlásit chybu, pokud GitHub je zrovna ten způsob, který jim vyhovuje nejvíc.
  • Volal jsem si s jednou vzdělávací agenturou a brainstormovali jsme nad tím, jak můžeme spolupracovat bez toho, aby byla narušena nezávislost JG. Vymysleli jsme minimálně tři věci a už se těším, až něco z toho uvedeme do pohybu. Na mě ale bude podobné věci zkusit domluvit i s dalšími, právě proto, aby to bylo vyvážené a nikdo si nemyslel, že je JG „cinknuté“, že doporučuje hlavně kurzy toho a toho.
  • Během 7 dní od 20.3. do 26.3. jsem naběhal 28 km, při procházkách nachodil 5 km. Celkem jsem se hýbal 5 hodin a zdolal při tom 33 kilometrů. Zaběhl jsem přitom svůj nejdelší běh v životě, přes 20 km. Tolik jsem naposledy uběhl v roce 2008. Nejsem fanouškem promazávání starých článků, které jsem vyplodil jako nezkušený mladý kluk, jsem archivář. Takže vzhledem k tomu, že blog existuje od roku 2007, jsou tady ty staré běhy pěkně zdokumentované: Půlmaraton. Skoro!, Dvakrát měř, jednou řež. Vyjde půlmaraton na třetí pokus? Třetí pokus nikdy nenastal, odjel jsem na Erasmus, začaly mě bolet kolena, do formy jsem se už nikdy nevrátil. Až teď, juchů! Každopádně moje schopnost uběhnout 20 km nijak neovlivnila mou neschopnost bez velkého přesvědčování se ujít prvních 20 cm z předsíně ven před dveře :)

Co plánuji

Tři věci, které bych chtěl zvládnout udělat příště:

  1. Přestěhovat se o pár ulic vedle.
  2. Naplánovat další přednášku.
  3. Vymyslet co s CSS na MkDocs nebo dokončit PoC těch landing pages.

Bonus: Najít toho kurýra?! Bonus číslo dva: Uprosit konečně kamaráda, aby prošel ty slovenské citace yablka, co jsem přidal na JG, a opravil mi v nich chyby.

A co vy?

Pokud byste čistě náhodou měli dojem, že jste oproti mě za uplynulý týden vůbec nic nestihli, tak mám pro vás skvělou zprávu! V klidu se na ten dojem můžete vykašlat. Není zač!

Co mě zaujalo

Když si něco přečtu nebo poslechnu a líbí se mi to, sdílím to na Pocketu. Od posledních poznámek jsem sdílel toto:

Vygenerováno pomocí pocket-recommendations.