Týdenní poznámky: Dokončování kurzu o vytváření scraperů pomocí AI

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 (24. 7. až 11. 8.), tak nastal čas se opět ohlédnout a utřídit si myšlenky.

Poznámky
Fotil Markus Spiske

Minule to bylo trochu depresivní a asi pět lidí mi pak nezávisle na sobě řeklo, že si mám odpočinout. Tak odpočívám.

Pracoval jsem na věcech pro Apify, ty dva týdny, tak jak jsem si to naplánoval. Sem tam jsem nakoukl na věci okolo junior.guru, ale nezabrušoval jsem příliš. Ve jménu odpočívání jsem si to takhle dovolil a zdá se mi, že svět se zatím nezbořil.

Taky mi dost pomohlo, že jsem se zase začal víc hýbat. Procházky, projížďky, běhání. Lepší nálada přišla skoro sama. A pomohlo i to, že jsem byl pár dní doma sám, zatímco žena a dcera byly u babičky, tak jsem měl čas se flákat a uspořádat si myšlenky.

Co přesně bude dál, to uvidím, ale odpočívání se mi líbí, takže to vidím nějak takto:

  • Apify za červenec a srpen mám dneškem hotové.
  • Na junior.guru budu teď dělat, co bude potřeba.
  • Jinak ale budu zbytek srpna odpočívat a věnovat se sobě a rodině.
  • Od září asi zařadím do programu víc Apify (50% místo 25%).
  • Od října zařadím do programu mimino.

Práce pro Apify

Povedlo se mi dokončit nový kurz o vytváření scraperů pomocí AI. Dopsal jsem poslední lekci a teď už to čeká jen na review a pak asi nějaké poslední čtení a publikaci, aby to bylo veřejné.

Samotná tvorba kurzu mě nakonec hodně naučila a pomohla mi namočit vlastní nos víc do AI. To jsem začal víc využívat i při samotném psaní, viz moje vlákno na toto téma na Mastodonu.

Kvůli kurzu jsem si zaplatil Cursor, protože na něm kurz staví, ale neplánuju ho používat dál a v kalendáři mi svítí upomínka, kdy mám jít jeho předplatné zrušit.

Online workshop s Eliškou na téma impostor syndrom

V úterý jsme měli v klubu akci s Eliškou Čejpovou. Bylo to super! Interaktivní, moc užitečné, a zábavné. Sám jsem si z toho odnesl něco jako tohle, ale asi by se to dalo ještě trochu propracovat:

I build junior.guru, a community and resources for upskilling juniors in tech. I have years of experience in software engineering, community work, product development, presenting, and writing. In my spare time I play with video editing in DaVinci Resolve. I value transparency, correctness, and fairness, which makes my business efforts harder, but I think it's worth it.

Lidem, kteří přišli, se akce moc líbila. Technické potíže se nekonaly a nezastavil nás ani výpadek služeb Vodafone nebo fakt, že Eliška se připojovala z Helsinek, kde mají hodinový posun. Nakonec jsme losovali lístky na DevFest.cz a nějaká slevička šla i do newsletteru. Záznam máme, takže kdo si to chcete dát, jděte do klubu a pusťte si to.

Práce na junior.guru

  • Publikoval jsem nový rozhovor: Tři roky učení. Pak přišla práce, na kterou jsem nesplňovala jediný požadavek, říká Pavla Beránková
  • Připravil jsem newsletter za červenec, vložil do něj slevový kód na DevFest.cz od Elišky, a poslal to.
  • Prošel jsem emaily související s junior.guru a na většinu odpověděl.
  • Přidal jsem nový profil do seznamu kandidátů: eggtray#405
  • Přidal jsem odkaz na nahrávku klubové akce s Eliškou: junior.guru#1694
  • Změnil jsem e-mail, který se posílá lidem odcházejícím z klubu. Často mi lidi píšou, že členství ruší, protože nestíhají klub číst. Do e-mailu jim píšu, aby se přihlásili k newsletteru, protože je v něm jednou za měsíc shrnutí toho, co se v klubu děje, a jsou tam prokliky přímo na ty diskuze, takže to nemusejí stíhat sledovat. Je to i jeden z důvodů, proč jsem ten newsletter chtěl vůbec posílat.

To jsou ty podstatné věci.

Pak jsem si v různých volných chvilkách hrál s AI a zkoušel, co všechno to umí a s čím vším mi to dokáže pomoci. O tom jsou ty následující odstavce, ale všechno jsou to nepodstatné kraviny.

Začalo to tím, že jsem upgradoval Ruff. Jeho nová verze ale má jinou množinu základních pravidel, takže mi to rozbilo build na několika projektech, včetně junior.guru. Využil jsem to jako věc, na které si můžu odzkoušet, co všechno umí Claude Code v cloudu, tzn. claude.ai/code.

A umí toho dost! Dal jsem mu za úkol vytvářet postupně PR, které budou řešit jednotlivá pravidla a které bude otvírat sériově, aby nedocházelo k merge konfliktům:

#1689, #1690, #1698, #1699, #1700, #1701, #1702, #1703, #1704, #1705, #1706, #1707, #1708, #1709, #1710, #1711, #1712, #1713, #1714, #1715, #1716, #1717

Tímhle způsobem jsem to celé vyřešil, ačkoliv jsem pracoval pro Apify, nebo jsem ani neseděl u počítače.

Občas jsem ho pošťouchnul, třeba z mobilní appky, při jízdě v tramvaji. Koukal jsem na PR a mergoval je přes GitHub appku v mobilu.

Někdy jsem se docela i něco přiučil o tom, jak se dá psát Python kód, protože se tam zapletla i nějaká pyupgrade pravidla.

Podobným způsobem jsem řešil, když něco na junior.guru spadlo. Prostě jsem to předhodil Claudovi a případně ho pošťouchl správným směrem:

  • junior.guru#1719 – Point PyCon SK link at 2024.pycon.sk (fix nightly check-links failure)
  • junior.guru#1718 – Make datazurnal RSS fetch resilient to transient errors
  • junior.guru#1691 – Assert top_members_limit in tests that computed it without asserting
  • chick#170 – Fix ruff 0.16 CI failures; compute thread weekday in Europe/Prague

Jednu opravu jsem upatlal lokálně a nasolil přímo do hlavní větve, takže pro ni nemám PR.

Claude Code versus OpenAI Codex

Výše uvedené dalo Claudovi docela zabrat, takže mu došel dech a musel jsem čekat, až budu moci opět pokračovat. Jenže se mi čekat nechtělo. Vyšší tarif byl drahý, tak jsem šel zaplatit za OpenAI, že to vyzkouším. Klidně i jen na měsíc. A zrovna ten jeden měsíc mi dali v nějaké akci za 0 Kč, takže paráda.

Hledal jsem, kde to má cloudovou verzi, ale nešlo to vůbec najít. Už jsem myslel, že neexistuje, když jsem se někudy proklikal na chatgpt.com/codex/cloud. Ale tam jsem zjistil, že ta věc neumí ani sama od sebe vytvořit PR! Ani jeden! Musím kliknout na tlačítko. A další PR to vytvořilo úplně špatně. Neohrabané a naprosto nepoužitelné. Už jsem byl pěkně zmlsaný z Clauda, který všechno umí sám.

Vyzkoušel jsem ale Codex lokálně v Zedu a tam se mi to docela líbilo. Aniž bych se snažil, sám si rozjíždí subagenty, a taky mi přijde, že je trochu lepší na editaci Markdownu. Stále ho zkouším, takže to teď mám rozdělené takto:

  • Když mám jakoukoliv náhodnou otázku na AI chat, jdu do Claude.
  • Když potřebuji generovat obrázek, třeba vizualizaci ledničky v kuchyni, jdu do ChatGPT, protože Claude neumí obrázky.
  • Když se dá něco nakódit z cloudu, typicky nějaká oprava na open source projektu, udělám to z cloudového kontejneru Claude Code. Zadám práci a nechám ho běžet, vytvářet issue, PR, atd.
  • Když se chci s něčím piplat a záleží mi na tom, kódím to lokálně v Zedu a aktuálně mám nastaveného jako primárního pomocníka agenta od OpenAI.

S touto kombinací jsem zatím na limity nenarazil.

Osobní projekty

Protože i tenhle blog je open source a má svůj GitHub repozitář, ve volném čase jsem nechal AI vylepšovat moji šablonu na týdenní poznámky. Refactoroval jsem to celé a přidal souhrn toho, co jsem za období týdenních poznámek dělal na GitHubu. Tyhle změny jsem nedělal přes PR, takže z toho je skoro 100 commitů přímo do hlavní větve honzajavorek.cz. Změny, zdá se, fungují, protože jsem to teď spustil a základ tohoto článku mi to založilo hezky.

Pak mi přišel mail, že mi spadl noční build na mém hobby projektu film2trello. Předhodil jsem to Claudovi, aby přidal nějaké ošetření výjimek a opakování HTTP požadavků: film2trello#301

Když už jsem to měl otevřené, nechal jsem ho upgradovat Ruff i na film2trello, takže následovala smršť PR pro jednotlivá pravidla:

#330, #331, #332, #333, #334, #335

Při čekání na zastávce jsem to nechal Clauda přehodit z Poetry na uv. Pak jsme upgradovali verzi Pythonu, a tak dále…

#302, #321, #322, #324, #327

Mám na repozitáři zapnutý CodeRabbit, který dělá review pod každým PR. Když Claude začal přehazovat vidlema soubory ze složky do složky, aby v projektu mohlo být uv v základní konfiguraci, tak se do toho CodeRabbit trochu zamotal a udělal omylem review celého projektu.

No a to mi nevadilo, protože tam byly moc hezké postřehy! Ale nechtěl jsem to řešit hned. Takže jsem Clauda poprosil, aby ty věci vzal a vytvořil z nich issues na potom:

#303, #304, #305, #306, #307, #308, #310, #311, #312, #313, #314, #315, #316, #318, #319

Pár jsem mu jich teda později ještě předhodil k vyřešení, když byla nuda:

  • #336 – Rename help() to get_help_text() and annotate sanitize() return (oprava #317)
  • #337 – Deduplicate duration labels before posting to Trello (oprava #309)
  • #338 – Consolidate the Anubis anti-bot selector in one helper (oprava #320)

A kromě toho všeho jsem se ve volných chvílích otřel i o další dva své hobby projekty:

  • fiobank#77 – Make base_url and request_timeout configurable instance attributes (oprava #76)
  • fiobank#79 – Make the HTTP client pluggable via transports (připraveno, ale neměl jsem čas se tomu více věnovat)
  • kino#76 – Zase Ruff
  • kino#79 – Scrape full Kino Aero program into the calendar (protože teď bydlím fakt blízko Kina Aero a zajímá mě vše, co tam dávají)

Na fiobank jsem vydal novou verzi, v5.0.0. Je v ní nějaký předchozí refactoring z nedávné doby, tak jsem chtěl vědět, jestli to lidem funguje. Nikdo se zatím neozval, takže buď to funguje, nebo to nikdo (ještě) nepoužívá.

To je všechno. Víc jsem toho nestihl 😂

Další

  • V jeden horký letní den jsme byli se ženou v kině na skvělém filmu o horkém letním dni, Do the Right Thing. Když jsem byl sám doma, pustil jsem si Mezi námi děvčaty, což bylo lepší než jsem čekal, a Nouvelle Vague klasiku À bout de souffle, ve které začínal Belmondo. To se mi líbilo fakt moc, ale chce to asi o Nové vlně něco vědět, aby si to člověk užil naplno. Chtěl jsem jít do Aera na Naslepo, ale bohužel jsem neměl lístek předem a bylo tam absolutně narváno, takže jsem se nevlezl a šel jsem domů.
  • Měli jsme v blízké rodině dva vážné úrazy, které oba skončily v nemocnici. V jednom případě už to snad bude docela v pohodě, v druhém je to horší, no uvidíme.
  • Užili jsme si prima akci s širší rodinou a hned den potom ještě oslavu narozenin dcery.
  • O víkendu jsem si šel zaběhat a zkusil jsem u toho natočit pár záběrů, které by mohly mít potenciál, že z nich pak jen tak pro radost sestříhám „krátký film“. Mám z toho radost a jsem zvědav, kdy si na to najdu čas a co z toho nakonec vytvořím. Žádný speciální záměr s tím nemám, cílem je pouze hrát si a zkoušet.
  • Byl jsem po dlouhé době na obědě s kamarádem Jakubem. Stavil jsem se za městem u kamaráda Toma a dali jsme při pátku nějaké to pivko a popovídali o světě. Zajel jsem na druhý konec tramvaje číslo 9, abych se vykoupal v rybníku u Motola a potkal tam kámoše Mílu. Neměl moc času, ale i tak jsem byl rád, že jsme se viděli a prohodili pár slov.
  • Na bytě se dodělávaly podlahy, kuchyň, exteriérové dveře, konečně máme lednici, a je to k neuvěření, ale po nekonečně dlouhé době nám dodavatel dokonce doručil skříňku s umyvadlem do koupelny! To byla zhruba poslední věc silně ovlivňující kvalitu našeho života. Všechny dodělávky ještě neskončily, ale už se to chýlí.
  • E-maily, klubový Discord, Pyvec Slack, zprávy na LinkedIn. 35 upgradů závislostí na všech projektech. Volal jsem si s lidmi z Apify, abychom domluvili podobu spolupráce od září dál.

Plánuji

  1. Na junior.guru budu dělat, co bude potřeba.
  2. Zbytek srpna budu odpočívat a věnovat se sobě a rodině.

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: