Týdenní poznámky: Jsem na TikToku, uběhl jsem půlmaraton a mega vylepšuju stránku s inzeráty

Jak se mi daří v jednom člověku provozovat a rozvíjet junior.guru? Od posledních poznámek už utekl nějaký ten týden (20. 9. až 4. 10.), tak nastal čas se opět ohlédnout a utřídit si myšlenky.

Poznámky
Fotil Markus Spiske

Minulý pátek jsme jeli na prodloužený víkend do Blanska, takže jsem neměl kdy poznámky napsat. Dnes se to taky nějak nestíhá, ale už je toho i po dvou týdnech tolik, že to napsat prostě musím.

V Blansku bylo krásně. Navštívili jsme kamarády, zašli jsme na rybářský den a ulovili pstruha, zaběhl jsem si tam s nimi Půlmaraton Moravským Krasem (ofiko čas 01:47:48), no a celkově to bylo pěkné a pohodové a fajn.

PMK

Po Blansku jsme doma zase bojovali s rýmama, takže školkový a pracovní rytmus byl poměrně chaotický. Přesto celkem produktivní.

Moje první krátké video

Zkusil jsem natočit první „krátké video“. Na sociální sítě už se dnes nepíše, na sítě se točí. Můžu lamentovat, nebo se přizpůsobit. Výhodou je, že video na výšku je univerzální formát. Natočím ho jednou a nahraju na YT, TT, LI, IG, FB… je to jedno. Jestli to budu dělat pravidelně, to netuším. Tohle je jen pokus o posouvání sama sebe do nové doby, pokus o marketing, pokus překonat komfortní zónu.

Nebylo těžké to udělat. Bylo těžké začít. To jsem prokrastinoval snad měsíc nebo dva. Stále mi jedou dotazníky a chtělo to ještě nahnat pár respondentů, tak jsem to využil. Mohl jsem udělat jen fotku a textový status, ale lákalo mě zkusit si na tom to video. Největší problém byl mít na to náladu a klid. Když jsem jednoho dne konečně doma osiřel, nebylo už výmluv. Teď nebo nikdy.

Natočené to bylo hned. Žádný scénář. Natočil jsem pár drobných úseků videa, pár blbin co mě napadlo. Pak jsem je naházel v DaVinci Resolve za sebe a přidal text „junior.guru“. Něco jsem použil, něco zahodil. Hotovo. Nic z toho všeho vlastně nebylo těžké nad rámec „dělám to poprvé, takže nevím kde jsou jaká tlačítka, ale příště už vědět budu“.

Na TikToku

Nakonec největší drbačka byla s nahráváním na sítě. Když už jsem měl „reel“, tak jsem chtěl vidět, jak funguje i na sítích, které běžně nepoužívám - jelikož doteď jsem žádný „reel“ neměl. Takže jsem si udělal účet na TikToku, nebo obnovil „firemní“ Instagram, oboje zatím pouze pro účel nahrání tohoto videa. Sleduju, jaký to má efekt, a co budu nebo nebudu dál dlouhodobě používat se rozhodnu později. Určitě ale nebudu každé video nahrávát na YT, TT, LI, IG, i FB. Vyberu si jen ty sítě, které pro mně mají nějaký smysl.

Asi bych to ale musel dělat pravidelně, aby to šlo nějak vyhodnotit. Čísla jsou na většině sítí slabá. Nejhorší jsou asi FB skupiny. Nejlépe vychází LinkedIn, kde s tím mám skoro 4.000 impresí, ale taky tam mám už největší vybudované publikum.

Pro srovnání, tamtéž jsem v neděli publikoval nekonečný textový žblept o ničem (resp. o tom, jak mě tam spamují prodavači všeho možného), a ten má 4.500 impresí. Jiná věc má 11.600 impresí. Během EuroPythonu jsem sepsal úplně náhodný status s nějakým hlubokým lidským příběhem o tom, jak jsem nedokázal ukončit Vim, ke kterému jsem dal selfíčko (protože jsem nechtěl fotit účastnice workshopu bez svolení) a ten má 8.400 impresí. Takže video neudělalo žádnou mega díru do světa, algoritmus má rád leccos, dost náhodně.

Nejvíc mě LinkedIn pobavil, když mi chtěl strašně pomoci s tím, abych k videu doplnil titulky. Vymyslel u toho nějaký jazyk, za který by se nejspíš nestyděl ani Tolkien 😂 viz screenshoty.

Rozklikávací pracovní inzeráty

Většinu času během těch dvou týdnů jsem dělal inkrementální vylepšení stránky s pracovními inzeráty. Hlavním úkolem bylo udělat inzeráty interaktivně rozklikávací, místo aby vedly přímo na původní URL. Po rozkliknutí jsem chtěl lidem zobrazit prokliky do klubu a užitečné odkazy na vyhledání firmy, např. na Atmoskopu. Nebudu zastírat, že pracovní portál na CC mi byl velkou inspirací.

Technicky to nebylo příliš obtížné, ale hodně jsem ladil vzhled a stále s ním nebyl spokojený. Vzalo si to několik iterací a po pár prvních dnech jsem měl už skoro pocit, že jsem na tom nějaký moc zaseknutý. Ale dotáhl jsem to!

Rozklikávací inzerát

Pokud má inzerát v klubu nějaké reakce nebo komentáře, je to naznačeno ikonkama. A inzeráty s víc (pozitivníma) reakcema nebo komentářema se řadí ve výpisu výš. Členové klubu tak mohou přímo ovlivňovat řazení inzerátů na webu a pomáhat ostatním najít dobré věci.

Lišta na pracovních inzerátech

Pak jsem ještě přidal „reklamu“ na to, že pokud chtějí lidi dostávat info o nových nabídkách v reálném čase, mají se přidat do klubu:

Upoutávka na klub

Tahle jezdící lišta je maximum toho, co jsem ochotný udělat, abych lidi někam nahnal a něco jim prodal. Je to už zcela na hranici toho, co je mi příjemné, ale všichni mi říkají, že jsem moc hodný a naivní atd., když nechci lidi na webu štvát zbytečnýma nesmyslama, tak to pro jednou zkuším i takhle drsnějc! A stejně si myslím, že pro členy klubu je ten odkaz pořád i užitečný, nasměruje totiž přímo do kanálu s pracovními inzeráty.

Chybové nahrávání loga firmy na Discord

Inzeráty se propisují na Discord a nahrávají se tam i loga firem. Všiml jsem si ale, že u některých firem chybí. Když jsem to zkoumal, je to nejspíš prostě bug Discordu. Někdy se nahrání obrázku nepovede, ale API nevrátí chybu. Obrázek se tváří, jako že tam je, nicméně je rozbitý a v prohlížeči se nezobrazí. Když jsem to zkoumal víc, tak ty obrázky měly 0 bajtů. A to na logo firmy není teda moc bajtů.

Protože mě to štvalo, dopsal jsem kód, který se po nahrání inzerátu podívá zase na Discord, najde nahranou zprávu, najde u ní obrázek, udělá HTTP HEAD požadavek na ten obrázek a pokud zjistí, že to má nula bajtů, tak zprávu smaže a zkusí inzerát nahrát znova. Taková blbost, ale kolik to dalo práce!

Štítky podle technologií

Nemožnost filtrovat nebo hledat podle technologií je zásadní nedostatek pracovních inzerátů na junior.guru. Teda byl. Už to jde.

Před časem jsem si na to napsal knihovnu beak, kde jsem udělal jednoduchý nástřel v regulárních výrazech. Ale nebyl jsem si jistý, zda to bude dost robustní. Tak jsem zvažoval i generativní AI, nebo NPL.

AI by to zvládlo, ale za cenu vendor lock-inu, velkého množství spálené elektřiny, a probrnďěných peněz. A dle mých pokusů to ani nefungovalo příliš spolehlivě, byť by šlo samozřejmě asi ještě doladit prompt a tak.

Kamarádi mi radili s NLP, včetně PoC, jak by to mohlo vypadat pro češtinu. Nakonec jsem však usoudil, že i tohle je kanón na vrabce. Nechám si to do budoucna jako možné vylepšení, ale na MVP je to na mě zbytečně složité.

Vykašlal jsem se nakonec i na to, abych knihovnu beak verzoval a releasoval. Prostě jsem ji nainstaloval jako Git závislost a šup, přidal jsem pár řádků kódu a už se detekovaly technologie a tagy byly v systému. Není to bez chyb, ale v zásadě to asi funguje a teď už to můžu jen ladit.

Díky všem 22 lidem, kteří zahlasovali v mé sranda anketě na Mastodonu.

Technologie

Zjišťování adres

Začalo to nevinně. Úkol zněl „přidat regiony na Slovensku“. Věc se má tak, že lokace nabídek práce se všelijak zpracovává, urovnává, a pak ještě nějak i prezentuje, aby to v rámci junior.guru dávalo největší smysl.

Například Kladno se zobrazí jako „Kladno, Praha“, Chrudim třeba jako „Chrudim, Pardubice“ a něco v Berlíně zase jako „Berlín, Německo“. Záměrně nepoužívám kraje, ale krajská města, apod. Je za tím nějaká logika, ale tu se mi tady teď nechce vysvětlovat. Každopádně doteď se Slovensko bralo jako zahraničí, což byl trochu trapas. Chtěl jsem ho zahrnout do stejné logiky, jakou mám u Česka.

Myslel jsem si, že přidám pár řádků kódu (dokonce pár řádků jednoho Python slovníku!), ale dopadlo to jako vždycky. Ta detekce lokací, to vám byl takový bordel, že jsem se na to nemohl vůbec dívat. A zjistil jsem, že Mapy.cz mají už nové API, a že by bylo o dost lepší použít to, než co jsem používal doteď. Stačil by mi totiž jen tenhle nový geocoding. Vše bylo srozumitelné, tak jsem se pustil do práce.

Jenže nakonec to byla práce na celý den, spousta ladění, spousta detailů, hraničních případů, ošetřování prapodivností. Hodně mi pomohlo online demo, kde jsem mohl rovnou testovat různé dotazy.

No mám to hotové, starý kód jsem smazal a tenhle je krásný, voňavý, asynchronní, kešuje se, jede na novém API, řeší všechno možné, umí Slovensko… Akorát jsem si všiml, že se mi to na webu blbě zobrazuje a mám tam teď adresy jako „Praha, Praha“ apod. 🤦‍♂️ Ale to opravím jindy, no.

Košice

Web Components

Skoro jsem si už říkal, že bych to filtrování pracovních nabídek mohl přepsat do nějaké komponenty nebo co, ať z toho nevyrostou JavaScriptové špagety, ale nechtělo se mi učit žádný framework, protože mě odrazují všechny ty build stepy a chybějící progressive enhancement a nespolupráce se staticky na serveru vygenerovaným HTML, apod.

Tak jsem mrknul na Web Components, jestli to náhodou není lepší. Nějak jsem se dostal až sem a tam jsem to v půlce stránky vzdal. Je to všechno hrozně složité.

Vůbec nevím, proč bych to celé měl dělat, a vůbec nevím, o čem to tam vlastně melou. Asi to není technologie pro začátečníky jako jsem já, ale pro lidi, co už vše umí z Reactu. Ale ti to asi nepotřebují? Nevím. Mám teď lepší věci na práci asi.

Jestli existuje něco, čemu řeknu: vem si tady ten element z existujícího DOMu, a ten teď spolu rozpohybujem podle tady těch pravidel, a když se stane tohle, tak udělej tamto, tak mi dejte vědět. Něco, v čem těchto 150 řádků bude méně řádků a bude to vypadat elegantněji. Něco, co se aktivuje nějak dodatečně, takže mi to umožní něco na té stránce vypsat i pokud se JavaScript nedonačte kvůli mojí chybě v kódu, nebo tomu, že ve vlak jede v tunelu (tzn. nestačí noscript).

Skoro se mi zdá, že jsem něco zahlédl ve Svelte, ale už úplně vidím, jak chci použít 1 % toho frameworku na jednom místě celého webu a musím kvůli tomu předělat celý svůj frontend a učit se hromadu věcí. Zatím si nechám svoje DOM špagetky.

Firmy a schůzky

Zkusím jen ve stručnosti:

  • Připomněl jsem se Spořce.
  • S Red Hatem jsme to dotáhli až k prodloužení a faktuře, juchů!
  • Praha Coding School bude chtít sponzorovat, ale až od určitého data v budoucnosti. Do té doby jim dám aspoň slevový kupón a oni budou doporučovat klub studentům.

Schůzky:

  • Volal jsem si s Lucií Lenértovou o naší spolupráci a obsahu, který by mohla dělat pro klub.
  • Byl jsem na obedě s kamarádem.
  • Volali jsme si s Terkou. Řešili jsme rozbíhání její komunity pro tvůrce textů a moji prodejní stránku klubu. Procházeli jsme předběžně výsledky dotazníků.
  • S Patrikem jsme řešili, s čím vším by mi mohl pomoci při přípravách přednášek v klubu. Vypadá to, že by mi mohl pomoci se vším, co běžně prokrastinuji. Těším se na to! Prosincovou přednášku zkusíme naplánovat už společně.
  • Schůze výboru Pyvce. Zápis tradičně zde. Jen tady u toho ještě zmíním, že Mia na blog sepsala prima report ze sprintu a vykopla prvotní verzi pravidel chování na akcích podporovaných Pyvcem.

Další

  • Něco blblo s meetup.com a padaly mi kvůli tomu buildy jak na junior.guru, tak na python.cz. Pokusil jsem se to opravit a vydal novou verzi teemup.
  • Upgradoval jsem konečně junior.guru na Python 3.12. Rozhodl jsem se odstranit z kódu datetime.utcnow(), který bude v dalších verzích Pythonu odebraný. A při té příležitosti jsem odebral i arrow, protože už prakticky vše, na co jsem to používal, jde udělat nativně v Pythonu, jednoduše. Možná to šlo i předtím, možná ne, každopádně až teď jsem byl už dost moudrý ohledně používání naive a timezone-aware datetimes v Pythonu na to, abych věděl jak na to. No a samozřejmě z toho byla zase práce na hodiny, protože to bylo na víc místech, než jsem myslel, našel jsem nějaké podivnosti v kódu, a tak.
  • Díky kadeřníkovi jsem objevil hudební skupinu Bert & Friends: „Členové kapely o sobě tvrdí, že se vrátili v čase z roku 2050 a přicházejí svými písněmi zachránit hudební scénu.“ Pusťte si Plody moří.
  • Koukal jsem na statistiky návštěvnosti a zjistil, že na junior.guru chodí lidi z nějakého nástroje JobHunter. Zajímavé!
  • Lukášovi se hodilo posunout přednášku o Kubernetes, tak jsme ji posunuli. Po hovoru s Lucií Lenértovou jsem zároveň finalizoval veřejné akce pro TDČ a zaregistroval je do jejich programu, dal k sobě na web, a naplánoval jsem pro ně live streamy na YouTube. Fuška! Já budu mít Q&A a Dan Srb bude mít super přednášku o CVčkách.
  • Díky diskuzi na LinkedIn jsem objevil způsob, jak nejspíš půjde scrapovat LinkedIn v reálném čase tak, abych juniorům mohl dělat automatické reviews LinkedIn profilů, stejně jako to dělám u GitHub profilů! Jmenuje se to Scrapin.
  • Prošel jsem si poznámky v Obsidianu a pročistil vše kolem pracovních inzerátů na junior.guru a i další oblasti.
  • Pokračoval jsem v kinu, ale když už jsem to měl skoro hotové, narazil jsem zase na problém. Na rozdíl od těch předešlých, kdy jsme ve filozofických debatách řešili, jak má co fungovat, nebo se zjistilo, že jsem akorát nečetl dokumentaci, v tomto případě jsem postupoval přesně podle dokumentace a přesně tak to nefunguje. Což je bug! A už se opravuje.
  • E-maily, klubový Discord, Pyvec Slack, zprávy na LinkedIn. Dal jsem si tu práci a prošel jsem i super staré „povídací“ maily, kde mi lidé psali nějaký hluboký lidský příběh na pět odstavců. Udělil jsem jedno stipendium.
  • Za 15 dní jsem naběhal 48 km, při procházkách nachodil 11 km, ujel na kole 4 km. Celkem jsem se hýbal 9 h a zdolal při tom 63 km. Detaily na Strava, jediné sociální síti, kde si napsání statusu musíte zasloužit.

Plánuji

  1. Pracovat týden pro Apify.
  2. Když už budu v tom Apify, mohl bych zkusit dokončit kino a třeba i do nějakého kina zajít.

Zaujalo mě

Když na něco narazím a líbí se mi to, sdílím to na Mastodonu. Od posledních poznámek jsem sdílel: