Týdenní poznámky #111: Kamarádi z Afriky

Utekl zase nějaký ten týden (5.11. — 11.11.) 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, a členy 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 konec týdne a já jsem přitom nestihl nic udělat.

Praha večer

Drtivou většinu týdne jsem trávil tím, že jsem se věnoval kamarádům z Afriky, kteří do Prahy přijeli na Ubuntu Summit. Jeden večer jsme zařídili večeři, další večer jsme jim udělali zážitkovou prohlídku noční Prahy. Spousta organizačních věcí, někdo si zapomněl doma nabíječku a kupoval jsem rychle nějakou v Alze, někdo potřeboval invalidní vozík, spousta přesunů, apod., takže velká divočina. Měl jsem mít přes týden i nějaké schůzky, ale (aby organizace všeho výše nebyla moc jednoduchá), různě se přesouvaly nebo rušily.

Kámoši z Afriky

Muheue zůstal ještě o den déle, tak jsme mu udělali i denní prohlídku Prahy a protože vyšlo krásně počasí, bylo to fakt super. Můj kamarád, který prohlídky dělal, to měl dost vymakané a já sám jsem někdy čuměl, co pěkného v tom Starém Městě nebo na Malé Straně vlastně je a co vůbec neznám. Můj osobní highlight byli Maltézští rytíři a jejich areál. Máme spoustu nádherných zážitků a fotek a dojemných, dobrodružných i vtipných situací. Já osobně z toho mám i velký spánkový deficit. Ale myslím, že se to celé moc pěkně vydařilo.

Na Vítkově

Spojování databází

Chtěl jsem vytvořit nějaký mechanismus, který mě upozorní, kdybych náhodou přepisoval data ve stejném sloupci ve stejné tabulce. Dovedu si představit, že jak vytvářím paralelní SQLite databáze a pak je po paralelizaci spojuji, tak by mohla vzniknout nepříjemná chyba z nepozornosti, kterou bych pak hledal hodně dlouho.

Nakonec jsem se rozhodl vůbec nepoužít .insert_all() nebo .upsert_all() z sqlite-utils, ani nepsat nějaké šílené SQL, se kterým bych zápasil celý den. Prostě jsem to napsal v Pythonu. Řádek po řádku kontroluje, co se přesně děje a řádky sloučí, nebo vyhodí chybu, pokud nastane situace, kdy bych měl přijít o nějaká data. Výkonnostně to, zdá se, nepředstavuje žádný problém a navíc mohu všechny situace transparentně logovat i testovat a nemusím se spoléhat na to, že jsem správně pochopil nějaký složitý SQL konstrukt, a to ještě v SQLite dialektu.

Hned mi to našlo chybu. Zapisoval jsem do tabulky s lidmi, kdy se registrovali na Discord. Potom jsem tam ale zapisoval znova, pokud jejich registrace na Memberful byla dřív. Spíš než že by mě to omezovalo, přišlo mi, že to nemám vlastně dělat. Že motám dvě věci dohromady a je to spíš code smell. Přepracoval jsem tedy tuto část kódu a v tabulce jsou nyní dva různé sloupce s různou sémantikou a používají se v různých případech.

Slučování databází teď podle mě funguje dobře a bezpečně. Jediné, co neumím, je smazat věc. Kdyby jeden skript nastavil nějakou hodnotu v záznamu v tabulce, tak další skript ji nemůže přepsat NULL hodnotou. Slučování totiž nedokáže rozeznat, zda je tento NULL záměrný, nebo je to důsledek toho, že se prostě slučuje databáze, ve které nejel skript, který by danou hodnotu naplnil. Snad to nebude ničemu vadit, aktuálně to nikde nepotřebuji.

Posílání mailů

Zjistil jsem, že maily se neposílají správně, protože se informace o jejich poslání ukládá do souboru a slučování souborů po paralelizaci funguje tak, že soubory stejného jména se nepřepisují, nikdy se soubor neaktualizuje a neuloží se nová informace co CircleCI keše, což by mělo zajistit perzistenci.

Přepracoval jsem, jak se slučují soubory. Porovnávají se a když jsou stejné, tak se tiše nic nestane, ale když jsou jiné, tak to selže s chybou. Zjistil jsem, že porovnávání souborů je přímo v Pythonu: filecmp. Počkám, až bude pondělí, jestli to selže, a dodělám potom nějaký seznam souborů, u kterých očekávám, že se budou přepisovat. To by mělo být dost funkční i defenzivní (mělo by mě to chránit před tichým přepisováním souborů, které přepisuji nechtěně).

Přeskakování dlouhých skriptů

Někdy programuji skript, který ale závisí na datech z nějakého velice dlouho trvajícího skriptu. Potřebuji to spouštět a ladit několikrát za sebou, ale nechci, aby se mi při tom lokálně stahovala stále tatáž data z toho dlouho trvajícího skriptu, která budou třeba jen o pět minut aktuálnější.

Vytvořil jsem tedy potvrzení. Pokud je nastavena určitá environment variable, dlouhý skript se mě interaktivně zeptá, jestli má spláchnout svou tabulku a stahovat, nebo to přeskočit a nechat data jak už je mám. Díky envvar a confirm v clicku to bylo hotové raz dva. Přesně takhle jsem si to představoval, když jsem chtěl mít ty věci založené na clicku. Každý skript teď může mít snadno nějaké svoje parametry, je to flexibilní a je v tom pořádek. Environment variable si lokálně nastavuji přes direnv.

Drobná vylepšení klubu, bota a webu

  • Smazal jsem v klubu roli, která umožňovala organizovat Discord akce. Dal jsem toto oprávnění všem, aby si každý mohl konat co chce a kdy chce a mohl na to efektivně upozornit ostatní. Nevím, proč jsem to neudělal už dávno, asi mě to prostě nenapadlo. Teď mě to napadlo, protože Dan si chtěl naplánovat několik událostí, na kterých dělá něco jako „open office hours“ pro zájemce o CoreSkill.
  • Upravoval jsem textace některých automatických zpráv v klubu, aby je lidi lépe pochopili a bylo jasnější, co se děje a proč. Je zajímavé, jak lidi mohou dost zápasit s Discordem i s mými vlastními tipy a mým botem. Ale nedovím se to. Třeba prostě akorát na nic nekliknou. A když se Dan asertivně zeptal, proč někdo neklikl, odpověď byla „zaškrtala jsem několikrát, ale nevím, co to má dělat“. Asi bych se měl lidí víc ptát. Jenže mě to moc nejde, no.
  • Opravil jsem několik drobných chyb v kódu, které asi nestojí za větší rozbor.
  • Do grafu s typy členství jsem přidal speciální barvičku pro lidi se stipendiem. Když už jsem si s tím hrál, poladil jsem barvičky i v jiných grafech. Chtěl jsem začít programovat měření toho, jak lidi čtou onboarding tipy, abych měl data a mohl se nějak rozhodovat, co s tím dál. Ale zasekl jsem se na tom, že nevím, co chci vlastně měřit. Kolik lidí má rozečtených kolik tipů? Jak dlouhý je interval mezi tipy? Na kolikátém tipu je kolik lidí? Jak má vypadat ten graf, co chci vlastně vytvořit? Nevymyslel jsem to zatím.

Další poznámky

  • Akce s Ataccamou má ještě volná místa, takže kdo chcete zkusit na pohovor nanečisto, zaregistrujte se! Online nebo osobně v Praze v jejich kancelářích. Nemusíte být ani junioři.
  • Přečetl jsem důkladně a následně pochválil na Twitteru článek Deníku N o lidech, kteří se rekvalifikují do IT. Je to celé vlákno s recenzí.
  • Dokončili jsme příspěvek jedné juniorky do open source Pyvce! Super!
  • Odpovídání v klubu, maily, a tak dále. Povedlo se mi na chvíli dokonce dosáhnout inbox zero :) Většinu CVček jsem nedokázal projít, ale naštěstí se tam rozpovídali jiní lidi. Jedno CV zapadlo a nedostalo žádné komentáře a já stále odsunuji, že se na něj kouknu, tak jsem zkusil jen napsat do kanálu, zda by na něj někdo nemrknul. Uvidím, jaký to bude mít efekt :)
  • Domlouval jsem další přednášky do klubu.
  • Připomenul jsem se advokátce s jednou věcí, co potřebujeme řešit pro Pyvec.
  • Na GitHub Sponsors mě začal sponzorovat Indeed Engineering! Velké překvapení. Předpokládám, že to je nějaká akce v rámci tohoto fondu. Fakt by mě zajímalo, jak se to stalo a co vlastně z mojich věcí, co mám na GitHubu, považují za přínosné :) Indeed je docela známý agregátor pracovních nabídek, takže je i trochu v mojem segmentu.
  • Přemýšlel jsem, jestli už úplně nezrušit Patreon a nepřesměrovat 3 lidi, kteří mi tam přispívají, na jiný způsob (třeba přímé posílání na účet, na které dost lidí přešlo), ale nakonec jsem se rozhodl, že je s tím nebudu otravovat a nechám to být.
  • Díky projektu Jakuba Zelenky Mimo agendu jsem objevil BeyondWords, věc, která má nějak pěkně zabalené strojové čtení od Microsoftu. Je to asi nejlepší čtení, které pro češtinu existuje a není to tady ani nijak pekelně drahé. Uvažoval jsem, že by se tím daly nechat načíst kapitoly v příručce. Dalo by se to i publikovat jako podcast, nebo tak něco.
  • Se ženou jsme spolu 12 let. Nebyl zatím čas to oslavit. Nejlepší by bylo, kdybychom mohli třeba den v kuse spát :D
  • Hrál jsem si s Duplo traktorem a Duplo ovcemi. Dítě už dokáže samo sjet menší skluzavku.
  • Dostal jsem účet zdarma u CDN77.com (děkuji!) a mám tedy docela cool CDNku! Teď jen vymyslet, co s ní udělám :D Už ale v mailu vidím super rozbor od Libora s radami, který je přímo na míru na moje use cases, tak se těším, až se na to podívám.
  • Během 7 dní od 5.11. do 11.11. jsem nenaměřil žádnou sportovní aktivitu. Mohl bych napsat, že jsem se celkem hýbal 0 hodin a zdolal při tom 0 kilometrů, ale to je blbost, protože jsem toho nachodil a na sdílených kolech najezdil fakt dost. Ta sdílená kola začínám používat čím dál víc, jsou fakt super. Když na Žižkově teda jsou, protože v některé časy tady na kopci není ani jedno.
  • Aktuální finanční výsledky, návštěvnost a další čísla k JG mám přímo na webu. Nabídky práce pro juniory teď inzerují: Processand, Red Hat

Co plánuji

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

  1. Zvládnout uvítání mentorů v Mews (večerní akce v klubu, kde budu mluvit a prezentovat i já).
  2. Vyřešit poslední nefunkčnosti týkající se CI buildu.

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:

Není to vše, co jsem přečetl, slyšel nebo viděl, ale jen zlomek, který mě zaujal. K vygenerování tohoto seznamu jsem použil vlastní knihovnu pocket-recommendations. Věci, které jsem sdílel v den psaní minulých poznámek, se opakují i v těch dalších a je to záměr, ne chyba.